Безопасный параметр в PHP-контроллере Codeigniter?

Я пытаюсь создать сценарий обратного вызова для платежей в биткойнах Coinbase. Ниже приведена функция моего платежного контроллера:

function callback($secret = NULL) {
    if ($secret == 'testSECRETkey') {

    //If order is "completed", please proceed.

    $data = json_decode(file_get_contents('php://input'), TRUE);

    $status = $data['order']['status'];
    $userid = '507';

    if (($status === 'completed')) {
        $this->db->query( 'update users set user_money=user_money+15, user_credits=user_credits+5 WHERE users_id=' . $userid );
    }
}

Как включить special parameter, поэтому, когда я запрашиваю URL: www.example.com/payments/callback, чтобы добавить специальный ключ и, если он недействителен, отказать в доступе к скрипту. Пример:

www.example.com/payments/callback?secret=testSECRETkey

К сожалению, это не работает так, как я хочу. Это не вступает в силу. Что с ним не так?


person MobEn    schedule 15.09.2014    source источник


Ответы (1)


Для доступа к параметру key вы будете использовать метод get класса Input https://ellislab.com/codeigniter/user-guide/libraries/input.html

$this->input->get('key');

function callback()
{
    $key = $this->input->get('key');
    if( ! $this->is_valid_key($key)) {
       // do something here and return
       return;
    }

    //If order is "completed", please proceed.

    $data = json_decode(file_get_contents('php://input'), TRUE);

    $status = $data['order']['status'];
    $userid = '507';

    if (($status === 'completed')) {
        $this->db->query( 'update users set user_money=user_money+15, user_credits=user_credits+5 WHERE users_id=' . $userid );
    }
}

Создайте новый метод для проверки ключа

function is_valid_key($key) {
    // logic to check key
    $valid = true;
    if($valid) {
        return true;
    }
    else {
       return false;
    }
}
person user20232359723568423357842364    schedule 15.09.2014
comment
Я сделал это и использую так: http://www.example.com/payments/callback?key=true но это вообще не работает. Я имею в виду, что это не влияет на это. - person MobEn; 15.09.2014
comment
что происходит, когда вы print_r($this->input->get());? - person user20232359723568423357842364; 16.09.2014
comment
Убедитесь, что у вас разрешен GET в application/config/config.php - - $config['allow_get_array'] = TRUE; - person user20232359723568423357842364; 16.09.2014