API возврата платежей
Документация описывает создание возврата и запрос статуса возврата через API BPay. Для запросов используйте секретный ключ secretKey. Данный ключ получите BPay.
Сначала сформируйте JSON с параметрами запроса и закодируйте его в Base64. Значение key — SHA-256 от строки, состоящей из Base64-значения data и секретного ключа.
$data = base64_encode(json_encode($payload));
$key = hash('sha256', $data . $secretKey);
$body = [
'key' => $key,
'data' => $data,
];
Отправьте POST-запрос с JSON-телом на указанный адрес.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
uuid |
string | Да | Идентификатор исходной транзакции. |
merchantid |
string | Да | Идентификатор мерчанта. |
fullrefund |
boolean | Да | true — полный возврат; для частичного возврата укажите false. |
amount |
string / number | Да* | Сумма возврата. |
reason |
string | Да | Причина возврата. |
refund_uuid |
string | Нет | Идентификатор возврата на стороне мерчанта. Если не передан, система назначит собственный. |
dtime |
string | Да | Дата и время в формате Y-m-d H:i:s. |
* Уточните правила заполнения amount при полном возврате в настройках интеграции.
Пример формирования запроса на PHP:
$secretKey = 'YOUR_SECRET_KEY';
$payload = [
'uuid' => 'R1432947in',
'merchantid' => 'merchantId',
'fullrefund' => true,
'amount' => '40',
'reason' => 'test refund',
'refund_uuid' => 'merchant_refund_uuid', // необязательно
'dtime' => date('Y-m-d H:i:s'),
];
$data = base64_encode(json_encode($payload));
$key = hash('sha256', $data . $secretKey);
$body = json_encode(['key' => $key, 'data' => $data]);
$ch = curl_init('https://pay.bpay.md/refund');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Accept: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
curl_close($ch);
echo $response;
Успешный ответ:
{
"code": 100,
"text": "success"
}
Ответ с ошибкой:
{
"code": 30,
"text": "текст ошибки"
}
Поле text содержит текст результата. Успешная обработка API-запроса сама по себе не подтверждает окончательное зачисление средств клиенту.
Отправьте запрос на получение информации о возврате.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
uuid |
string | Да | Идентификатор исходной транзакции. |
merchantid |
string | Да | Идентификатор мерчанта. |
dtime |
string | Да | Дата и время в формате Y-m-d H:i:s. |
Пример на PHP:
$secretKey = 'YOUR_SECRET_KEY';
$payload = [
'uuid' => 'R1432947in',
'merchantid' => 'merchantId',
'dtime' => date('Y-m-d H:i:s'),
];
$data = base64_encode(json_encode($payload));
$key = hash('sha256', $data . $secretKey);
$body = json_encode(['key' => $key, 'data' => $data]);
$ch = curl_init('https://pay.bpay.md/refundStatus');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Accept: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(curl_error($ch));
}
curl_close($ch);
echo $response;
{ "code": 100, "text": "success" }
{ "code": 30, "text": "текст ошибки" }
Фактический состав ответа и значения статусов следует сверить с ответом API в вашей среде.
- Храните
secretKeyтолько на сервере. - Используйте HTTPS для всех запросов.
- Не записывайте секретный ключ в логи.
- Проверяйте ответ API перед тем, как сообщать клиенту об успешном возврате.