ДеньгиOnline

2017-01-16 19:48:03

Проверка идентификатора пользователя или заказа

Для осуществления проверки Система отсылает Проекту запрос методом POST на URL проверки идентификатора или заказа пользователя, указанный в Технических настройках проекта в Личном кабинете.

Проверка осуществляется для того, чтобы удостовериться, что счёт и последующий платёж могут быть корректно обработаны на стороне Проекта.

Если проверка идентификатора завершилась ошибкой при попытке выставлении счёта, счёт выставлен не будет, а Пользователь будет перенаправлен на страницу неуспешно выставленного счёта (result_url_fail) на стороне Проекта. В случае, если в настройках Проекта в системе ДеньгиОнлайн данная страница не указана, Пользователь попадёт на страницу неуспешного выставленного счета на стороне ДеньгиОнлайн. На данную страницу, в обоих случаях, методом GET автоматически отправляется параметр err_msg[] со значением "Такого персонажа не существует".

Параметры запроса подтверждения идентификатора пользователя или заказа

Параметр Описание параметра Формат параметра Обязателен ли параметр?
userid Идентификатор аккаунта (равен значению параметра nickname в запросе на выставление счёта). string (256) Обязательный
userid_extra Дополнительные сведения, необходимые для совершения платежа или сбора статистики на стороне Проекта (равен значению параметра nick_extra в запросе на выставление счёт). string (500) Необязательный
key

Контрольная подпись запроса. Формируется как хэш по алгоритму md5 от конкатенации следующих параметров:

  • 0,
  • значение параметра userid,
  • 0,
  • секретный ключ проекта.
md5(0userid0секрет проекта) Обязательный
amount Проверка check запроса. Принимает только нулевое значение (amount = 0). 0 Обязательный
paymentid Проверка check запроса. Принимает только нулевое значение (amount = 0). 0 Обязательный
orderid Идентификатор платежа в учётной системе Проекта (равен значению параметра order_id из запроса на выставление счёта, если передан в запросе). string(30) Необязательный

Ответ на запрос подтверждения существования идентификатора пользователя или заказа 

На каждый запрос Системы от Проекта должен приходить ответ в формате XML и кодировке UTF-8.

Список параметров ответа на запрос подтверждения существования идентификатора пользователя или заказа

Параметр Описание параметра Формат параметра Обязателен ли параметр?
code

Код ответа на запрос.

YES— идентификатор существует. NO— идентификатор не существует.

YES/NO

регистрозависимый

Обязательный
comment Расшифровка кода ответа на запрос.
Примеры текста:
  • не прошла валидация по параметру userid;
  • не прошла валидация по параметру orderid;
  • не прошла валидация по параметру key.
string (400) нет

Пример ответа на запрос проверки идентификатора пользователя или заказа

<?xml version="1.0" encoding="UTF-8"?>
<result> 
	<code>YES</code> 
</result>

Пример минимального обработчика запросов Системы при проверке идентификатора пользователя или заказа

//Генерация ответа
function sendResponse($status, $message = ''){
    $response = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
    $response .= '<result>'."\n";
        $response .= '<code>'.$status.'</code>'."\n";
    $response .= '<comment>'.$message.'</comment>'."\n";
    $response .= '</result>';
    die($response);
}
 
//Проверка существования идентификатора пользователя или заказа
function checkUser($userID){
    $sql = "SELECT login FROM users WHERE usr_id = ".intval($userID);
    $query = mysql_query($sql);
    if(mysql_error()){
        return FALSE;
    }
    if(mysql_num_rows($query) == 0){
    return FALSE;
    }
    return TRUE;
}
 
$secretKey = 'IT\'S_A_PROJECT_SECRET_WORD';
$projectHash = md5($_POST['amount'].$_POST['userid'].$_POST['paymentid'].$secretKey);
if($projectHash != $_POST['key']){
    sendResponse('NO', 'Контрольная подпись запроса неверна.');
}
if(floatval($_POST['amount']) == 0 && intval($_POST['paymentid']) == 0){
    //Запрос на проверку идентификатора пользователя или заказа
    if(checkUser($_POST['userid'])){
        sendResponse('YES', 'Идентификатор существует');
    }
    else{
        sendResponse('NO', 'Идентификатор не найден');
    }
}