ДеньгиOnline

2017-07-29 03:29:04

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

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

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

Проекту необходимы:

  • URL проверки идентификатора или заказа пользователя (указать в Технических настройках в Личном кабинете);
  • Обработчик, способный принять и распознать параметры запроса от Системы и ответить так, как того ожидает Система.

Если проверка идентификатора после выставления счёта завершилась с ошибкой, то счёт выставлен не будет, а пользователь переадресуется на страницу ошибки платежа, указанную проектом с помощью параметра return_url_fail или в Технических настройках (если страница не указана - используется аналогичная на стороне Системы). На страницу ошибки платежа методом GET автоматически отправляется параметр err_msg[] со значением «Такого персонажа не существует»

Параметры запроса от Системы в Проект

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

Для передачи параметров запроса используются следующие правила:

  • метод передачи - POST;
  • формат - XML;
  • кодировка - UTF-8.
Параметр
Описание параметра
Формат параметра
Обязательность параметра
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 в запросе на выставление счёта) varchar(64) Нет

Параметры ответа Проекта

На запрос Системы от Проекта должен приходить ответ.  

Для передачи параметров запроса используются следующие правила:

  • метод передачи - POST;
  • формат - 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', 'Идентификатор не найден');
	} 
}