ДеньгиOnline

2017-01-16 19:48:05

Проверка статуса платежа

На основании данной проверки выясняется, можно ли предоставить пользователю купленный им товар/услугу. 

Протокол получения информации о конкретном платеже используется для получения информации об операции по идентификатору платежа на стороне ДеньгиOnline/Проекта. Если передаются оба параметра, то выборка будет осуществлена по идентификатору ДеньгиOnline, т.к. он имеет больший приоритет.

Проект отсылает запрос в виде json-массива методом POST обработчику Системы по адресу https://www.onlinedengi.ru/api/dol/payment/get/. Параметры, которые Проект должен передать Системе, перечислены в таблице ниже.

Параметры запроса

Параметр Описание параметра Формат параметра
Обязательность
параметра
payment Идентификатор платежа в системе Деньги Online (соответствует paymentid). string (256) Обязательно указать хотя бы один параметр. При передаче обоих параметров при обработке запроса используется значение payment
order Идентификатор платежа на стороне Проекта (соответствует order_id). string (256)
X-DOL-Project Идентификатор Проекта в Системе. 

Внимание! Значение параметра должно передаваться в заголовке , а не в теле запроса.
integer Обязательный
X-DOL-Sign
Контрольная подпись запроса.
Формируется по алгоритму HMAC-SHA1 от полного тела запроса. В качестве ключа для формирования запроса используется секретное слово проекта, оговоренное сторонами и используемое для формирования хэш-кода при запросе на проведение платежа со стороны Деньги Online в Проект. 

Внимание! Значение параметра должно передаваться в заголовке , а не в теле запроса.
hex Обязательный

Ответ на запрос

Признаком успешности выполнения запроса к Системе служит получение HTTP Status 200. В этом случае Система присылает ответ в формате JSON, содержащий следующие тэги:

  • id — идентификатор платежа в системе Деньги Online;
  • amount_rub — сумма платежа в рублях РФ;
  • status — цифровой статус платежа по классификатору Деньги Online (список статусов приведен ниже);
  • status_description — расшифровка цифрового статуса платежа;
  • order — идентификатор платежа на стороне Проекта, переданный при инициализации счета со стороны Проекта;
  • nick — идентификатор пользователя на стороне Проекта, переданный при инициализации счета со стороны Проекта;
  • date_payment — дата и время совершения платежа, в формате YYYY-mm-ddTHH:ii:ss+Z;
  • paymode — идентификатор платежной системы, через которую был произведен платеж, по классификатору Деньги Online;
  • currency_project — валюта выставления счета, переданная со стороны Проекта при инициализации платежа, 3-х буквенный код валюты в соответствии со стандартом ISO 4217;
  • amount_project — сумма платежа, переданная со стороны Проекта при инициализации платежа, в валюте, переданной Проектом;
  • currency_paymode — валюта платежного метода, в которой пользователь фактически произвел платеж, 3-х буквенный код валюты в соответствии со стандартом ISO 4217.

В случае неудачного обращения проекту будет отдан HTTP Status, отличный от 200, в качестве тела сообщения будет выведено текстовое описание ошибки, возникшей в процессе работы.

Полный перечень HTTP-статусов, возможных к получению в ответе со стороны Системы, доступен здесь.

Перечень статусов платежа по классификатору Деньги Online 

Цифровой статус платежа Расшифровка цифрового статуса платежа Описание статуса Окончательный ли статус?
0, 1, 16 In progress Зарегистрирован счёт, пользователь прошёл на страницу ПС Статус не окончательный, рекомендуем проверить статус платежа после получения нотификации
3, 4, 6, 10, 12, 13 Warning Возникла проблема при взаимодействии ДОЛ-Проект, требуется обращение к техническим специалистам ДеньгиOnline Статус не окончательный.
Рекомендуем подождать повторного уведомления по данному платежу на ваш callback, проверить статус платежа, если статус не изменился: обратиться на support@dengionline.com с указанием id платежа в системе ДеньгиOnline (значение параметра paymentid)
9 Success Платеж успешен

Статус окончательный.

Действий не требуется

24 Success test Успешный тестовый платеж. Не учитывается при расчёте балансов
5, 7 Fail Платеж неуспешен. Денежные средства возвращены клиенту

Статус окончательный.

Платеж неуспешен, не рекомендуем предоставлять услугу клиенту

14 Cancel Платеж отменен
22, 25 Hold Захолдированный платеж

Статус неокончательный.

В зависимости от действий проекта (либо, в случае отсутствия действий, истечения периода холдирования), платеж может перейти в статус «Проведен» либо «Отказ»

 

Пример ответа в случае успешной обработки запроса:

Status Code: 200 OK
Cache-Control: private, must-revalidate
Connection: keep-alive
Content-Type: application/json
Date: Mon, 11 Feb 2013 09:28:47 GMT
Expires: -1
Pragma: no-cache
Server: nginx
Transfer-Encoding: chunked
X-Powered-By: PHP/5.3.3-7+squeeze14

[
{
"id": 123456789,
"amount_rub": "250.00",
"status": 9,
"status_description": "Success",
"order": "87654",
"nick": "87654",
"date_payment": "2013-02-06T00:08:44+04:00",
"paymode": 2,
"currency_project": "RUB",
"amount_project": "250.00",
"currency_paymode": "RUB"
}
]

 

Пример ответа в случае ошибки обработки запроса:

Status Code: 401 Unauthorized
Cache-Control: private, must-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Mon, 11 Feb 2013 09:32:24 GMT
Expires: -1
Pragma: no-cache
Server: nginx
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.3-7+squeeze14

Unauthorized

Status Code: 400 Bad Request
Cache-Control: private, must-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Mon, 11 Feb 2013 09:33:18 GMT
Expires: -1
Pragma: no-cache
Server: nginx
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.3-7+squeeze14

Bad Request

 

Пример реализации запроса на языке PHP

class DolClient 
{ 
protected $project; 
protected $key; 
protected $url; 
public function __construct($project, $key, $url)
 { $this->project = $project; $this->key = $key; $this->url = $url; } 
public function request($data) 
{ 
if (is_string($data)) 
{ $post_data = $data; } 
else { $post_data = json_encode($data); } 
$headers = array( 
'X-DOL-Project: '. $this->project, 
'X-DOL-Sign: '. hash_hmac('sha1', $post_data, $this->key), 
); 
$sh = curl_init(); 
curl_setopt($sh, CURLOPT_URL, $this->url); 
curl_setopt($sh, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($sh, CURLOPT_TIMEOUT, 60); 
curl_setopt($sh, CURLOPT_RETURNTRANSFER, TRUE ); 
curl_setopt($sh, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($sh, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($sh, CURLOPT_POST, TRUE ); 
curl_setopt($sh, CURLOPT_POSTFIELDS, $post_data); 
curl_setopt($sh, CURLOPT_HTTPHEADER, $headers); 
$response = curl_exec($sh); 
$curl_errno = curl_errno($sh); 
$curl_error = curl_error($sh); 
$http_code = curl_getinfo($sh, CURLINFO_HTTP_CODE); 
curl_close($sh); if ($curl_errno > 0) 
{ throw new Exception($curl_error, $curl_errno); }
if ($http_code != 200) 
{ throw new Exception($response, $http_code); }
var_dump($response); 
return json_decode($response); 
} 
} 
class DolPayment 
{ 
protected $client; public function __construct($project, $key) 
{ $this->client = new DolClient($project, $key, 'https://www.onlinedengi.ru/api/dol/payment/get/');
} 
public function findByOrder($order) 
{ return $this->client->request(array('order' => $order)); }
 public function findByPayment($dol_id) 
{ return $this->client->request(array('payment' => $dol_id)); } 
}