Prodamus: Создать и остановить подписку

Сценарий из mcp-everything. Актуально на 2026-10-12.

Подходит для регулярных списаний, которыми управляет Prodamus. Подписку сначала создают в личном кабинете, затем покупатель подтверждает первый платёж.

  1. Создай подписку в личном кабинете Prodamus и возьми её ID в разделе «Настройки» → «Подписки».
  2. Выполни GET /?do=link с subscription, signature и данными клиента. При переданном subscription поле products игнорируется.
  3. Отправь ссылку покупателю и прими POST {urlNotification}; первый платёж имеет payment_init=manual, автоматическое списание — payment_init=auto.
  4. Чтобы остановить подписку, выполни POST /rest/setActivity/ с subscription, идентификатором клиента и active_manager=0 либо active_user=0.
const { HmacHelper, flattenForm } = require("./hmac");

const LINK_TO_FORM = "<ссылка_на_страницу_оплаты>";
const SECRET_KEY = "<секретный_ключ>";

const data = {
  do: "link",
  // Идентификатор подписки из раздела «Рекуррент и клубы». Если он передан,
  // products не учитывается: состав и цена берутся из настроек подписки.
  subscription: "12345",
  customer_phone: "+79998887755",
  customer_email: "test@example.com",
  // Дата первого списания в формате ГГГГ-ММ-ДД ЧЧ:ММ.
  subscription_date_start: "2026-08-01 12:00",
  // Демо-период в днях: столько подписка действует до первого списания.
  subscription_demo_period: "7",
  // Максимальное количество автоплатежей.
  subscription_limit_autopayments: "12",
  sys: "your_sys_code",
  urlReturn: "https://merchant.ru/return",
  urlSuccess: "https://merchant.ru/success",
  urlNotification: "https://merchant.ru/api/prodamus/webhook",
};

const params = new URLSearchParams(flattenForm(data));
params.append("signature", HmacHelper.create(data, SECRET_KEY));

const requestUrl = `${LINK_TO_FORM}?${params}`;
console.log(requestUrl);

fetch(requestUrl)
  .then((response) => response.text())
  .then((paymentLink) => console.log(paymentLink));

Базовые URL

Авторизация

Тип: Другое

Секретный ключ доступен в настройках платёжной страницы в блоке «Секретный ключ». Для создания платёжных ссылок, управления подписками и вызова GET или POST /rest/payment/do/ данные запроса без поля signature рекурсивно приводят к строкам, сортируют по ключам, преобразуют в JSON, экранируют / и подписывают HMAC SHA-256. Готовые реализации Hmac.php, hmac.js, prodamus_hmac.py, HmacHelper.cs, HmacHelper.java и hmac.go опубликованы на страницах документации.

Входящий webhook подписан в заголовке Sign; подпись проверяется тем же секретным ключом платёжной страницы. Для оплаты по связке поддержка выдаёт отдельный ключ, привязанный к sys; ключ платёжной страницы используют только для первого платежа.

Для GET /rest/receipt/getReceipts и GET /rest/payment-methods/getList передаются заголовки Timestamp и Authorization: Bearer <token>, где <token> = base64_encode(<timestamp> . md5(<SECRET_KEY>)).

Методы сценария

{urlNotification} — Получить webhook об оплате

Prodamus отправляет итоговый статус платежа методом POST. При успешной обработке endpoint должен вернуть HTTP 200.

Документация: https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/webhook-ob-oplate

Параметр Где Тип Обяз. Описание
Sign header string да HMAC-подпись входящего тела
date body string да Дата платежа
order_id body number да ID заказа в Prodamus
order_num body string да Номер заказа на стороне магазина; может быть пустым
sum body string да Сумма заказа
currency body string да rub, usd или eur
attempt body string да Номер попытки доставки
products body array да Корзина товаров
products[i].name body string да Наименование товара
products[i].price body number да Цена за единицу
products[i].quantity body integer да Количество
payment_status body string да success, order_canceled или order_denied
payment_status_description body string да Расшифровка статуса
payment_init body string да api, auto или manual

POST /rest/setActivity/ — Активировать или деактивировать подписку

Менеджер может активировать и деактивировать подписку; пользователь может только деактивировать её.

Документация: https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-upravlenie-podpiskami#post-/rest/setactivity/

Параметр Где Тип Обяз. Описание
signature body string да Подпись запроса
subscription body integer да ID подписки в Prodamus
customer_phone body string нет Идентификатор клиента в формате +79999999999
customer_email body string нет Идентификатор клиента по email
profile body integer нет ID профиля клиента
tg_user_id body integer нет ID клиента Telegram
vk_user_id body integer нет ID клиента ВКонтакте
active_manager body boolean нет 0 — отписан, 1 — подписан менеджером
active_user body boolean нет Для пользователя доступно только значение 0

Пример ответа:

success

GET /?do=link — Создать платёжную ссылку

Endpoint возвращает ссылку при do=link или сразу открывает форму при do=pay. Запрос также можно отправить методом POST с телом application/x-www-form-urlencoded или multipart/form-data.

Пример ответа при do=link:

Документация: https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/sozdanie-platezhnoy-ssylki#запрос-на-создание-ссылки-/-переход-к-оплате

Параметр Где Тип Обяз. Описание
do query string да link — вернуть ссылку; pay — перейти к оплате
products query array нет Корзина; без неё клиент заполняет товар на странице
products[i].name query string да Наименование переданной позиции
products[i].price query number да Цена за единицу переданной позиции
products[i].quantity query integer да Количество переданной позиции
order_sum query number нет Сумма заказа; при do=link без products становится ценой базового товара
order_id query string нет Номер заказа в вашей системе
customer_phone query string нет Телефон клиента
customer_email query string нет Email клиента
sys query string нет Код интеграции от поддержки; обязателен для интеграции сервиса
urlNotification query string нет URL webhook; учитывается вместе с sys
urlReturn query string нет URL возврата без оплаты
urlSuccess query string нет URL возврата после успешной оплаты
subscription query integer нет ID подписки; если он передан, products игнорируется
demo_mode query integer нет Значение 1 включает демо-режим для платежа
callbackType query string нет Значение json запрашивает webhook в JSON
signature query string да HMAC SHA-256 подпись запроса

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

https://payform.ru/h9brIKu/

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya Вся интеграция одним документом: https://mcp-everything.ru/integrations/prodamus.md