Перейти к содержимому

Возвраты платежей

Метод инициирует возврат успешного платежа СБП. Передайте order_id исходной оплаты и отдельный user_data для операции возврата. После принятия запроса API вернёт refund_order_id и статус REFUND_PENDING; финальный результат придёт на notify_url проекта.

Формат запросов и подписи — в разделе Формат запросов к API.

Принцип работы

  1. Исходный платёж — возврат возможен по order_id платежа в статусе успеха (SUCCESS, код 3). ID берётся из ответа создания по форме или GATE.
  2. Инициация — подписанный запрос на init_refund с уникальным user_data возврата (не совпадает с user_data платежа).
  3. Ответrefund_order_id, status 9 (REFUND_PENDING) и status_description.
  4. Финал — колбек 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_idIntegerВаш уникальный ID в системе 1Payment.
project_idIntegerИдентификатор вашего проекта.
order_idStringorder_id исходного успешного платежа СБП.
user_dataStringУникальный ID возврата на вашей стороне (отличный от user_data платежа). До 255 символов; рекомендуется UUID.
signStringКонтрольная подпись запроса (см. раздел «Подпись»).

Опциональные

ПараметрТипОписание
amountNumberСумма частичного возврата. Доступность частичных возвратов уточняйте у менеджера 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=abcd1234
Строка для MD5: init_refundorder_id=8p3brmb19gfg0sg8gcwhws8kgc748s87&partner_id=1234&project_id=5678&user_data=abcd1234
Ожидаемая подпись: 11a957524c8813f24e45a9e101f4cf5e
Подпись не совпадает

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

const crypto = require('crypto');
const axios = require('axios');

async function initSbpRefund(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',
};

initSbpRefund(apiKey, data).then(console.log);

Ответ API

Успешный ответ (200):

{
  "refund_order_id": "crf_1p3brmb19gfg0sg8gcwhws8kgc748s87",
  "status": 9,
  "status_description": "REFUND_PENDING",
  "status_code": 0
}
ПолеОписание
refund_order_idID возврата в 1Payment; используйте для опроса статуса и в учёте.
statusЧисловой код (9 — возврат в обработке).
status_descriptionREFUND_PENDING и др.
status_codeКод отказа при ошибке возврата (см. коды отказов).

Ошибка запроса (400):

{
  "error_code": 2
}

Уведомления о статусе (колбеки)

После изменения статуса возврата сервер отправляет POST JSON на notify_url проекта.

ПараметрТипОбяз.Описание
payment_typeStringДаТип операции (см. Типы платежей).
order_idStringДаИдентификатор возврата в 1Payment.
project_idIntegerДаID вашего проекта.
statusIntegerДаСостояние возврата (5REFUND, 9REFUND_PENDING и др.).
status_descriptionStringДаREFUND, REFUND_PENDING, FAILURE и др.
init_timeStringДаВремя создания возврата.
status_timeStringДаВремя получения статуса.
merchant_priceNumberДаСумма исходного платежа для плательщика.
init_priceNumberНетСумма при инициации.
user_priceNumberДаСписание по возврату.
user_dataStringДаID возврата, переданный в init_refund.
original_order_idStringНетorder_id исходного платежа.
status_codeStringНетКод ошибки при отказе.
signStringДаКонтрольная подпись колбека.

Важно: ваш сервер должен вернуть HTTP 200 OK. Иначе система повторяет отправку колбека раз в минуту в течение 10 минут.

Проверка подписи колбека: MD5 от всех параметров в алфавитном порядке через & + API_KEY (без префикса init_refund). Подробнее — в разделе Формат запроса к API.

Связанные разделы

Статья была полезна?