ДеньгиOnline

2017-07-29 03:29:06

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

Протокол проверки статуса платежа используется для получения информации об операции зачисления средств.

Рекомендуется предоставлять Пользователю товар или услугу только после получения удовлетворительного результата данной проверки.

Проверка проходит по идентификаторам платежа в Системе и на стороне Проекта. Но если передаются оба параметра, то выборка будет осуществлена по идентификатору Системы , т.к. он имеет больший приоритет.

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

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

Параметры запроса для проверки статуса платежа:

Параметр Описание параметра Формат параметра
Обязательность
параметра
payment Идентификатор платежа в Системе (соответствует полученному при оповещении о проведении платежа paymentid) string(256)

Да

При передаче обоих параметров значение payment является приоритетным

order

Идентификатор платежа на стороне Проекта (соответствует передаваемому при выставлении счета order_id)

string(256)
X-DOL-Project Идентификатор Проекта в Системе.

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

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

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

Признаком успешности выполнения запроса к Системе служит получение Проектом ответа с HTTP Status 200. 

В случае неудачного обращения Проекту будет отдан HTTP Status, отличный от 200, а в качестве тела сообщения будет выведено текстовое описание ошибки, возникшей в процессе работы. Полный перечень HTTP-статусов, возможных к получению в ответе со стороны Системы, доступен здесь.

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

Параметр Описание параметра Формат параметра
id Идентификатор платежа в Системе string(256)
amount_rub Сумма платежа в рублях РФ decimal(10.2)  разделитель - точка
status Цифровой статус платежа (список статусов приведен ниже) integer
status_description Расшифровка цифрового статуса платежа string
order Идентификатор платежа на стороне Проекта, переданный при инициализации счета со стороны Проекта string (30)
nick  Идентификатор пользователя на стороне Проекта, переданный при инициализации счета со стороны Проекта string (256)
date_payment Дата и время совершения платежа, в формате YYYY-mm-ddTHH:ii:ss+Z

string, YYYY-mm-ddTHH:ii:ss+Z

paymode  Идентификатор платежной системы, через которую был произведен платеж (см. таблицу mode_type) int(10)
currency_project Валюта выставления счета, переданная со стороны Проекта при инициализации платежа

string

ISO 4217, alfa-3

amount_project Сумма платежа, переданная со стороны Проекта при инициализации платежа, в валюте currency_project decimal(10.2) разделитель - точка
currency_paymode

Валюта платежного метода, в которой пользователь фактически произвел платеж

string

ISO 4217, alfa-3

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

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