Возвраты платежей
Метод инициирует возврат успешного платежа (канал link). Передайте order_id исходной оплаты и отдельный user_data для операции возврата. После принятия запроса API вернёт refund_order_id и статус REFUND_PENDING; финальный результат придёт на notify_url проекта.
Формат запросов и подписи — в разделе Формат запросов к API.
Принцип работы
- Исходный платёж — возврат возможен по
order_idплатежа в статусе успеха (SUCCESS, код3). ID берётся из ответа создания по форме или GATE. - Инициация — подписанный запрос на
init_refundс уникальнымuser_dataвозврата (не совпадает сuser_dataплатежа). - Ответ —
refund_order_id,status9(REFUND_PENDING) иstatus_description. - Финал — колбек POST JSON на
notify_url; при необходимости опросите статус поrefund_order_idчерез Статусы платежей.
Расшифровка status и status_description для возвратов — в Статусы транзакций (REFUND, REFUND_PENDING).
Техническая информация
| Эндпоинт | https://api.1payment.com/init_refund |
| Методы | GET, POST |
| Формат ответа | JSON |
| Тип в колбеке | payment_type — см. Типы платежей (refund в уведомлениях по возврату) |
Параметры запроса
Обязательные
| Параметр | Тип | Описание |
|---|---|---|
partner_id | Integer | Ваш уникальный ID в системе 1Payment. |
project_id | Integer | Идентификатор вашего проекта. |
order_id | String | order_id исходного успешного платежа (канал link). |
user_data | String | Уникальный ID возврата на вашей стороне (отличный от user_data платежа). До 255 символов; рекомендуется UUID. |
sign | String | Контрольная подпись запроса (см. раздел «Подпись»). |
Опциональные
| Параметр | Тип | Описание |
|---|---|---|
amount | Number | Сумма частичного возврата. Доступность частичных возвратов уточняйте у менеджера 1Payment. |
Формирование подписи (sign)
Подпись: MD5, lowercase (hex). Общие правила — Формат запроса к API.
Формула:
MD5(init_refund + <параметры_без_sign_в_алфавитном_порядке_через_&> + <API_KEY>)Пример строки до хеширования:
init_refundorder_id=8p3brmb19gfg0sg8gcwhws8kgc748s87&partner_id=1234&project_id=5678&user_data=abcd1234secret_keyПри частичном возврате в подпись включается переданный amount.
Проверка подписи в документации
Проверка подписи {{method}}
Вставьте параметры запроса (JSON), API key и подпись. Виджет автоматически проверит корректность.
order_id=8p3brmb19gfg0sg8gcwhws8kgc748s87&partner_id=1234&project_id=5678&user_data=abcd1234init_refundorder_id=8p3brmb19gfg0sg8gcwhws8kgc748s87&partner_id=1234&project_id=5678&user_data=abcd123411a957524c8813f24e45a9e101f4cf5eПримеры запроса
const crypto = require('crypto');
const axios = require('axios');
async function initLinkRefund(apiKey, params) {
const sortedKeys = Object.keys(params).sort();
const queryString = sortedKeys.map((key) => `${key}=${params[key]}`).join('&');
const baseString = `init_refund${queryString}${apiKey}`;
params.sign = crypto.createHash('md5').update(baseString).digest('hex');
const response = await axios.get('https://api.1payment.com/init_refund', { params });
return response.data;
}
const apiKey = process.env.ONEPAYMENT_API_KEY;
const data = {
partner_id: 1234,
project_id: 5678,
order_id: '8p3brmb19gfg0sg8gcwhws8kgc748s87',
user_data: 'abcd1234',
};
initLinkRefund(apiKey, data).then(console.log);Ответ API
Успешный ответ (200):
{
"refund_order_id": "crf_1p3brmb19gfg0sg8gcwhws8kgc748s87",
"status": 9,
"status_description": "REFUND_PENDING",
"status_code": 0
}| Поле | Описание |
|---|---|
refund_order_id | ID возврата в 1Payment; используйте для опроса статуса и в учёте. |
status | Числовой код (9 — возврат в обработке). |
status_description | REFUND_PENDING и др. |
status_code | Код отказа при ошибке возврата (см. коды отказов). |
Ошибка запроса (400):
{
"error_code": 2
}Уведомления о статусе (колбеки)
После изменения статуса возврата сервер отправляет POST JSON на notify_url проекта.
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
payment_type | String | Да | Тип операции (см. Типы платежей). |
order_id | String | Да | Идентификатор возврата в 1Payment. |
project_id | Integer | Да | ID вашего проекта. |
status | Integer | Да | Состояние возврата (5 — REFUND, 9 — REFUND_PENDING и др.). |
status_description | String | Да | REFUND, REFUND_PENDING, FAILURE и др. |
init_time | String | Да | Время создания возврата. |
status_time | String | Да | Время получения статуса. |
merchant_price | Number | Да | Сумма исходного платежа для плательщика. |
init_price | Number | Нет | Сумма при инициации. |
user_price | Number | Да | Списание по возврату. |
user_data | String | Да | ID возврата, переданный в init_refund. |
original_order_id | String | Нет | order_id исходного платежа. |
status_code | String | Нет | Код ошибки при отказе. |
sign | String | Да | Контрольная подпись колбека. |
Важно: ваш сервер должен вернуть HTTP 200 OK. Иначе система повторяет отправку колбека раз в минуту в течение 10 минут.
Проверка подписи колбека: MD5 от всех параметров в алфавитном порядке через & + API_KEY (без префикса init_refund). Подробнее — в разделе Формат запроса к API.