{"name":"Prodamus","vendor":"Prodamus","industry":"finance","summary":"API платёжной страницы Prodamus позволяет создавать ссылки на разовую и рекуррентную оплату, принимать платежи во встроенном виджете, получать серверные уведомления и управлять подписками. REST-методы также дают доступ к способам оплаты, фискальным чекам и списаниям по сохранённой карте.","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya","coverage":{"included":["Разовая оплата: подписанная платёжная ссылка и переход на форму","Серверное подтверждение оплаты по webhook с проверкой `Sign`","Встраивание платёжного виджета и обработка `postMessage`","Создание и управление подпиской","Списание по сохранённой карте","Получение ссылок на фискальные чеки","Получение настроенных для домена способов оплаты"],"excluded":["Передача кодов маркировки: `POST /rest/mark/addMarks/`","Проверка секретного ключа: `POST /rest/validateSecretKey/`","Полный справочник кодов методов и групп оплаты","Полный набор тестовых карт и тест-кейсов","Оформление возвратов"]},"scenarios":[{"id":"prinyat-razovuyu-oplatu-po-ssylke","title":"Принять разовую оплату по ссылке","summary":"Подходит, когда нужно создать заказ на сервере, отправить покупателя на страницу Prodamus и выдать товар только после подтверждённой оплаты.","steps":["Возьми секретный ключ в настройках платёжной страницы. Если интеграция создаётся для сервиса, запроси у поддержки `sys`.","Собери заказ и подпиши все поля, кроме `signature`, алгоритмом HMAC SHA-256.","Выполни `GET /?do=link` с `products`, `signature` и, если нужен индивидуальный webhook, с `sys` и `urlNotification`.","Передай покупателю URL из текстового ответа. Для немедленного перехода передай в том же запросе `do=pay`; endpoint также принимает POST.","Прими `POST {urlNotification}`, проверь заголовок `Sign` и считай заказ оплаченным только при `payment_status=success`."],"code":"<?php\nrequire_once __DIR__ . '/Hmac.php';\n\n$linkToForm = 'https://demo.payform.ru/';\n$secretKey = '2y2aw4oknnke80bp1a8fniwuuq7tdkwmmuq7vwi4nzbr8z1182ftbn6p8mhw3bhz';\n\n$data = [\n  'order_id' => 'TEST-1001',\n  'customer_phone' => '+79998887755',\n  'customer_email' => 'test@example.com',\n  'products' => [\n    [\n      'name' => 'Обучающие материалы',\n      'price' => '2000',\n      'quantity' => '1',\n    ],\n  ],\n  'do' => 'link',\n  'urlReturn' => 'https://merchant.ru/return',\n  'urlSuccess' => 'https://merchant.ru/success',\n  'urlNotification' => 'https://merchant.ru/api/prodamus/webhook',\n  'sys' => 'your_sys_code',\n];\n\n$data['signature'] = Hmac::create($data, $secretKey);\n$link = sprintf('%s?%s', $linkToForm, http_build_query($data));\necho $link;","language":"php","methods":["{urlNotification}","GET /?do=link"]},{"id":"nadezhno-obrabotat-webhook-ob-oplate","title":"Надёжно обработать webhook об оплате","summary":"Webhook — рекомендуемый источник окончательного статуса. Сценарий заканчивается проверенной подписью, идемпотентно обновлённым заказом и ответом `HTTP 200`.","steps":["Подготовь публичный HTTPS endpoint и передай его как `urlNotification` вместе с `sys` в `GET /?do=link`.","Прими `POST {urlNotification}` и извлеки подпись из заголовка `Sign`.","Проверь `Sign` методом `Hmac::verify` на исходных полях тела и секретном ключе платёжной страницы.","При неверной подписи верни код, отличный от 200, и прекрати обработку.","При `payment_status=success` выполни бизнес-операцию идемпотентно; после успешной обработки верни `HTTP 200`."],"code":"<?php\nrequire_once __DIR__ . '/Hmac.php';\n\n$secret_key = 'ваш_секретный_ключ';\n$headers = apache_request_headers();\n\ntry {\n    if ( empty($_POST) ) {\n        throw new Exception('$_POST is empty');\n    }\n    elseif ( empty($headers['Sign']) ) {\n        throw new Exception('signature not found');\n    }\n    elseif ( !Hmac::verify($_POST, $secret_key, $headers['Sign']) ) {\n        throw new Exception('signature incorrect');\n    }\n\n    http_response_code(200);\n    echo 'success';\n}\ncatch (Exception $e) {\n    http_response_code($e->getCode() ? $e->getCode() : 400);\n    printf('error: %s', $e->getMessage());\n}","language":"php","methods":["{urlNotification}","GET /?do=link"]},{"id":"prinyat-oplatu-vo-vstroennom-vidzhete","title":"Принять оплату во встроенном виджете","summary":"Используй, когда покупатель должен остаться на сайте. Клиентский статус можно показать через `postMessage`, но окончательное подтверждение всё равно приходит по webhook.","steps":["Подключи `https://widget.prodamus.ru/src/init.js` и `https://widget.prodamus.ru/src/init.css` в `<head>`.","Назначь кнопке уникальный ID.","Вызови `payformInit` с доменом без `https://` и передай `order_sum` либо `products`.","Обработай `window.addEventListener(\"message\")` для статусов `close`, `waiting`, `error`, `success`.","Прими `POST {urlNotification}` и подтверди оплату на сервере."],"code":"<script defer src=\"https://widget.prodamus.ru/src/init.js\"></script>\n<link rel=\"stylesheet\" href=\"https://widget.prodamus.ru/src/init.css\">\n\n<script>\n  // если у вас несколько кнопок, то для каждой из кнопок нужно продублировать код ниже, со своим уникальным идентификатором кнопки.\n  // UNIQ_IDButton -  техническое название кнопки (должно быть уникальным)\n  // UNIQ_ID - уникальный идентификатор кнопки, который\n  const UNIQ_IDButton = document.querySelector(\"#UNIQ_ID\")\n  // например, если у Вашей кнопки UNIQ_ID это englishCourse, то вместо UNIQ_IDButton следует написать englishCourseButton\n  // UNIQ_IDButton - название вашей кнопки\n  UNIQ_IDButton?.addEventListener(\"click\", () => {\n      payformInit(\"XXX.payform.ru\", { // где, XXX.payform.ru - ссылка на вашу пейформу, без указания https://\n          order_sum: 100, // Стоимость заказа в валюте заказа\n          currency: \"rub\", // Валюта заказа. Не обязательный параметр (можно просто удалить всю строчку)\n      })\n  })\n</script>","language":"html","methods":["{urlNotification}","payformInit"]},{"id":"sozdat-i-ostanovit-podpisku","title":"Создать и остановить подписку","summary":"Подходит для регулярных списаний, которыми управляет Prodamus. Подписку сначала создают в личном кабинете, затем покупатель подтверждает первый платёж.","steps":["Создай подписку в личном кабинете Prodamus и возьми её ID в разделе «Настройки» → «Подписки».","Выполни `GET /?do=link` с `subscription`, `signature` и данными клиента. При переданном `subscription` поле `products` игнорируется.","Отправь ссылку покупателю и прими `POST {urlNotification}`; первый платёж имеет `payment_init=manual`, автоматическое списание — `payment_init=auto`.","Чтобы остановить подписку, выполни `POST /rest/setActivity/` с `subscription`, идентификатором клиента и `active_manager=0` либо `active_user=0`."],"code":"const { HmacHelper, flattenForm } = require(\"./hmac\");\n\nconst LINK_TO_FORM = \"<ссылка_на_страницу_оплаты>\";\nconst SECRET_KEY = \"<секретный_ключ>\";\n\nconst data = {\n  do: \"link\",\n  // Идентификатор подписки из раздела «Рекуррент и клубы». Если он передан,\n  // products не учитывается: состав и цена берутся из настроек подписки.\n  subscription: \"12345\",\n  customer_phone: \"+79998887755\",\n  customer_email: \"test@example.com\",\n  // Дата первого списания в формате ГГГГ-ММ-ДД ЧЧ:ММ.\n  subscription_date_start: \"2026-08-01 12:00\",\n  // Демо-период в днях: столько подписка действует до первого списания.\n  subscription_demo_period: \"7\",\n  // Максимальное количество автоплатежей.\n  subscription_limit_autopayments: \"12\",\n  sys: \"your_sys_code\",\n  urlReturn: \"https://merchant.ru/return\",\n  urlSuccess: \"https://merchant.ru/success\",\n  urlNotification: \"https://merchant.ru/api/prodamus/webhook\",\n};\n\nconst params = new URLSearchParams(flattenForm(data));\nparams.append(\"signature\", HmacHelper.create(data, SECRET_KEY));\n\nconst requestUrl = `${LINK_TO_FORM}?${params}`;\nconsole.log(requestUrl);\n\nfetch(requestUrl)\n  .then((response) => response.text())\n  .then((paymentLink) => console.log(paymentLink));","language":"javascript","methods":["{urlNotification}","POST /rest/setActivity/","GET /?do=link"]},{"id":"spisat-dengi-po-sohranennoy-karte","title":"Списать деньги по сохранённой карте","summary":"Это управляемые вашей системой повторные списания, а не подписка Prodamus. Сначала нужна небольшая реальная оплата, после которой webhook вернёт `binding_id`.","steps":["Согласуй с поддержкой `sys` и получи отдельный секретный ключ для оплаты по связке.","Выполни `GET /?do=link` без `demo_mode`, передав стабильный `client_id` длиной до 32 символов, `sys`, `customer_email`, корзину и подпись ключом платёжной страницы.","После успешной первой оплаты прими `POST {urlNotification}` и сохрани пару `client_id` + `binding_id`.","Выполни `POST /rest/payment/do/` с этой парой, корзиной, `sys` и подписью отдельным ключом связки. Параметр `do` не передавай.","Ответ `{\"success\":true}` означает только успешную инициацию; окончательный результат возьми из webhook с `payment_init=api`."],"code":"const { HmacHelper, flattenForm } = require('./hmac/hmac');\n\nconst data = {\n  products: [{\n    name: 'Доступ к обучающим материалам',\n    price: '50',\n    quantity: '1',\n  }],\n  client_id: 'customer-4815',\n  binding_id: 'TOKEN_FROM_WEBHOOK',\n  customer_email: 'customer@example.com',\n  customer_phone: '+79998887755',\n  urlNotification: 'https://example.com/prodamus/webhook',\n  sys: 'your_system',\n};\n\nconst body = new URLSearchParams(flattenForm(data));\nbody.append(\n  'signature',\n  HmacHelper.create(data, process.env.PRODAMUS_BINDING_SECRET_KEY),\n);\n\nconst response = await fetch(\n  'https://YOUR_DOMAIN.payform.ru/rest/payment/do/',\n  {\n    method: 'POST',\n    headers: { 'content-type': 'application/x-www-form-urlencoded;charset=UTF-8' },\n    body,\n  },\n);\nconst result = await response.json();\nif (!response.ok || result.success !== true) {\n  throw new Error(result.error ?? `HTTP ${response.status}`);\n}","language":"javascript","methods":["{urlNotification}","GET /?do=link","POST /rest/payment/do/"]},{"id":"poluchit-fiskalnye-cheki-zakaza","title":"Получить фискальные чеки заказа","summary":"Используй после оплаты, чтобы получить ссылки на чеки прихода, возврата или коррекции у оператора фискальных данных.","steps":["Возьми секретный ключ платёжной страницы.","Рассчитай `<token> = base64_encode(<timestamp> . md5(<SECRET_KEY>))`.","Выполни `GET /rest/receipt/getReceipts` с `order_id`, заголовками `Timestamp` и `Authorization: Bearer <token>`.","Обработай массив чеков; пустой массив означает, что доступных чеков нет."],"code":"<?php\n\n$domain = 'example.payform.ru';\n$secretKey = 'секретный_ключ_домена';\n$timestamp = (string) time();\n$token = base64_encode($timestamp . md5($secretKey));\n\n$ch = curl_init(\"https://{$domain}/rest/receipt/getReceipts?order_id=99990091\");\ncurl_setopt_array($ch, [\n    CURLOPT_HTTPGET => true,\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => [\n        \"Timestamp: {$timestamp}\",\n        \"Authorization: Bearer {$token}\",\n        'Accept: application/json',\n    ],\n]);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);","language":"php","methods":["GET /rest/receipt/getReceipts"]}],"baseUrls":[{"label":"Платёжная страница и REST API","url":"https://<subdomain>.payform.ru"},{"label":"Скрипт виджета","url":"https://widget.prodamus.ru/src/init.js"},{"label":"Стили виджета","url":"https://widget.prodamus.ru/src/init.css"},{"label":"Отдельного тестового URL в изученных страницах не указано","url":"demo_mode=1"}],"auth":{"type":"other","description":"Секретный ключ доступен в настройках платёжной страницы в блоке «Секретный ключ». Для создания платёжных ссылок, управления подписками и вызова `GET или POST /rest/payment/do/` данные запроса без поля `signature` рекурсивно приводят к строкам, сортируют по ключам, преобразуют в JSON, экранируют `/` и подписывают HMAC SHA-256. Готовые реализации `Hmac.php`, `hmac.js`, `prodamus_hmac.py`, `HmacHelper.cs`, `HmacHelper.java` и `hmac.go` опубликованы на страницах документации.\n\nВходящий webhook подписан в заголовке `Sign`; подпись проверяется тем же секретным ключом платёжной страницы. Для оплаты по связке поддержка выдаёт отдельный ключ, привязанный к `sys`; ключ платёжной страницы используют только для первого платежа.\n\nДля `GET /rest/receipt/getReceipts` и `GET /rest/payment-methods/getList` передаются заголовки `Timestamp` и `Authorization: Bearer <token>`, где `<token> = base64_encode(<timestamp> . md5(<SECRET_KEY>))`.","example":""},"methods":[{"id":"{urlNotification}","title":"Получить webhook об оплате","httpMethod":"POST","path":"{urlNotification}","description":"Prodamus отправляет итоговый статус платежа методом POST. При успешной обработке endpoint должен вернуть `HTTP 200`.","params":[{"name":"Sign","in":"header","type":"string","required":true,"description":"HMAC-подпись входящего тела"},{"name":"date","in":"body","type":"string","required":true,"description":"Дата платежа"},{"name":"order_id","in":"body","type":"number","required":true,"description":"ID заказа в Prodamus"},{"name":"order_num","in":"body","type":"string","required":true,"description":"Номер заказа на стороне магазина; может быть пустым"},{"name":"sum","in":"body","type":"string","required":true,"description":"Сумма заказа"},{"name":"currency","in":"body","type":"string","required":true,"description":"rub, usd или eur"},{"name":"attempt","in":"body","type":"string","required":true,"description":"Номер попытки доставки"},{"name":"products","in":"body","type":"array","required":true,"description":"Корзина товаров"},{"name":"products[i].name","in":"body","type":"string","required":true,"description":"Наименование товара"},{"name":"products[i].price","in":"body","type":"number","required":true,"description":"Цена за единицу"},{"name":"products[i].quantity","in":"body","type":"integer","required":true,"description":"Количество"},{"name":"payment_status","in":"body","type":"string","required":true,"description":"success, order_canceled или order_denied"},{"name":"payment_status_description","in":"body","type":"string","required":true,"description":"Расшифровка статуса"},{"name":"payment_init","in":"body","type":"string","required":true,"description":"api, auto или manual"}],"requestExample":"","responseExample":"","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/webhook-ob-oplate"},{"id":"payformInit","title":"Открыть платёжный виджет","httpMethod":"POST","path":"payformInit","description":"Первый аргумент — домен платёжной страницы без `https://`; второй — параметры заказа. Передаётся `order_sum` либо `products`.","params":[{"name":"xxx.payform.ru","in":"body","type":"string","required":true,"description":"Домен платёжной страницы без https://"},{"name":"order_sum","in":"body","type":"number","required":false,"description":"Обязателен, если нет products"},{"name":"products","in":"body","type":"array","required":false,"description":"Обязателен, если нет order_sum"},{"name":"products[i].name","in":"body","type":"string","required":true,"description":"Наименование товара"},{"name":"products[i].price","in":"body","type":"number","required":true,"description":"Цена за единицу"},{"name":"products[i].quantity","in":"body","type":"integer","required":true,"description":"Количество"},{"name":"products[i].sku","in":"body","type":"string","required":false,"description":"ID товара в вашей системе"},{"name":"sys","in":"body","type":"string","required":false,"description":"Код интеграции от поддержки"},{"name":"urlNotification","in":"body","type":"string","required":false,"description":"URL webhook; учитывается вместе с sys"}],"requestExample":"","responseExample":"","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/integraciya-platezhnogo-vidzheta#пример-вызова-виджета"},{"id":"POST /rest/setActivity/","title":"Активировать или деактивировать подписку","httpMethod":"POST","path":"/rest/setActivity/","description":"Менеджер может активировать и деактивировать подписку; пользователь может только деактивировать её.","params":[{"name":"signature","in":"body","type":"string","required":true,"description":"Подпись запроса"},{"name":"subscription","in":"body","type":"integer","required":true,"description":"ID подписки в Prodamus"},{"name":"customer_phone","in":"body","type":"string","required":false,"description":"Идентификатор клиента в формате +79999999999"},{"name":"customer_email","in":"body","type":"string","required":false,"description":"Идентификатор клиента по email"},{"name":"profile","in":"body","type":"integer","required":false,"description":"ID профиля клиента"},{"name":"tg_user_id","in":"body","type":"integer","required":false,"description":"ID клиента Telegram"},{"name":"vk_user_id","in":"body","type":"integer","required":false,"description":"ID клиента ВКонтакте"},{"name":"active_manager","in":"body","type":"boolean","required":false,"description":"0 — отписан, 1 — подписан менеджером"},{"name":"active_user","in":"body","type":"boolean","required":false,"description":"Для пользователя доступно только значение 0"}],"requestExample":"","responseExample":"success","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-upravlenie-podpiskami#post-/rest/setactivity/"},{"id":"POST /rest/setSubscriptionDiscount/","title":"Установить скидку на следующие списания","httpMethod":"POST","path":"/rest/setSubscriptionDiscount/","description":"Устанавливает скидку на ограниченное или неограниченное количество будущих платежей.","params":[{"name":"signature","in":"body","type":"string","required":true,"description":"Подпись запроса"},{"name":"subscription","in":"body","type":"integer","required":true,"description":"ID подписки в Prodamus"},{"name":"discount_value","in":"body","type":"number","required":true,"description":"Скидка с точностью до двух знаков после точки"},{"name":"num","in":"body","type":"integer","required":false,"description":"Число оплат со скидкой; по умолчанию 0, без ограничения"},{"name":"customer_phone","in":"body","type":"string","required":false,"description":"Один из идентификаторов клиента"},{"name":"customer_email","in":"body","type":"string","required":false,"description":"Один из идентификаторов клиента"}],"requestExample":"","responseExample":"","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-upravlenie-podpiskami#post-/rest/setsubscriptiondiscount/"},{"id":"GET /rest/receipt/getReceipts","title":"Получить фискальные чеки","httpMethod":"GET","path":"/rest/receipt/getReceipts","description":"Возвращает ссылки на доступные чеки оплаченного заказа. Служебные чеки, включая чеки маркапа и агентского вознаграждения, не возвращаются.","params":[{"name":"Authorization","in":"header","type":"string","required":true,"description":"Bearer <token>"},{"name":"Timestamp","in":"header","type":"string","required":true,"description":"Unix timestamp, использованный в токене"},{"name":"order_id","in":"query","type":"integer","required":true,"description":"Номер заказа в Prodamus"},{"name":"is_demo","in":"query","type":"boolean","required":false,"description":"Запрос для демо-режима платёжной страницы"}],"requestExample":"","responseExample":"[\n  {\n    \"name\": \"Чек прихода\",\n    \"link\": \"https://lk.platformaofd.ru/web/noauth/cheque?fn=7384440900816510&fp=914366710&i=215624\",\n    \"sum\": \"1.00\"\n  }\n]","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-fiskalnyy-cheki#get-/rest/receipt/getreceipts"},{"id":"GET /rest/payment-methods/getList","title":"Получить способы оплаты домена","httpMethod":"GET","path":"/rest/payment-methods/getList","description":"Возвращает все настроенные способы оплаты без фильтрации по активности. Состояние находится в `is_active` и `is_acquiring_active`.","params":[{"name":"Authorization","in":"header","type":"string","required":true,"description":"Bearer <token>; префикс чувствителен к регистру"},{"name":"Timestamp","in":"header","type":"string","required":true,"description":"Непустая строка, участвующая в подписи"}],"requestExample":"curl --request GET 'https://example.payform.ru/rest/payment-methods/getList' \\\n  --header 'Timestamp: 1735689600' \\\n  --header 'Authorization: Bearer TOKEN' \\\n  --header 'Accept: application/json'","responseExample":"","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-standartnoe#get-/rest/payment-methods/getlist"},{"id":"GET /?do=link","title":"Создать платёжную ссылку","httpMethod":"GET","path":"/?do=link","description":"Endpoint возвращает ссылку при `do=link` или сразу открывает форму при `do=pay`. Запрос также можно отправить методом POST с телом `application/x-www-form-urlencoded` или `multipart/form-data`.\n\nПример ответа при `do=link`:","params":[{"name":"do","in":"query","type":"string","required":true,"description":"link — вернуть ссылку; pay — перейти к оплате"},{"name":"products","in":"query","type":"array","required":false,"description":"Корзина; без неё клиент заполняет товар на странице"},{"name":"products[i].name","in":"query","type":"string","required":true,"description":"Наименование переданной позиции"},{"name":"products[i].price","in":"query","type":"number","required":true,"description":"Цена за единицу переданной позиции"},{"name":"products[i].quantity","in":"query","type":"integer","required":true,"description":"Количество переданной позиции"},{"name":"order_sum","in":"query","type":"number","required":false,"description":"Сумма заказа; при do=link без products становится ценой базового товара"},{"name":"order_id","in":"query","type":"string","required":false,"description":"Номер заказа в вашей системе"},{"name":"customer_phone","in":"query","type":"string","required":false,"description":"Телефон клиента"},{"name":"customer_email","in":"query","type":"string","required":false,"description":"Email клиента"},{"name":"sys","in":"query","type":"string","required":false,"description":"Код интеграции от поддержки; обязателен для интеграции сервиса"},{"name":"urlNotification","in":"query","type":"string","required":false,"description":"URL webhook; учитывается вместе с sys"},{"name":"urlReturn","in":"query","type":"string","required":false,"description":"URL возврата без оплаты"},{"name":"urlSuccess","in":"query","type":"string","required":false,"description":"URL возврата после успешной оплаты"},{"name":"subscription","in":"query","type":"integer","required":false,"description":"ID подписки; если он передан, products игнорируется"},{"name":"demo_mode","in":"query","type":"integer","required":false,"description":"Значение 1 включает демо-режим для платежа"},{"name":"callbackType","in":"query","type":"string","required":false,"description":"Значение json запрашивает webhook в JSON"},{"name":"signature","in":"query","type":"string","required":true,"description":"HMAC SHA-256 подпись запроса"}],"requestExample":"https://payform.ru/h9brIKu/","responseExample":"","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/sozdanie-platezhnoy-ssylki#запрос-на-создание-ссылки-/-переход-к-оплате"},{"id":"setSubscriptionPaymentDate","title":"Перенести дату следующего платежа","httpMethod":"POST","path":"setSubscriptionPaymentDate","description":"Метод с путём `/rest/setSubscriptionPaymentDate/` переносит дату только вперёд относительно уже рассчитанной даты следующего платежа. HTTP-метод в заголовке официальной страницы не указан.","params":[{"name":"signature","in":"body","type":"string","required":true,"description":"Подпись запроса"},{"name":"subscription","in":"body","type":"integer","required":true,"description":"ID подписки в Prodamus"},{"name":"date","in":"body","type":"string","required":true,"description":"Дата в формате гггг-мм-дд чч:мм"},{"name":"auth_type","in":"body","type":"string","required":true,"description":"tg_user_id, vk_user_id, profile, customer_phone или customer_email"},{"name":"customer_phone","in":"body","type":"string","required":false,"description":"Обязателен при auth_type=customer_phone"},{"name":"customer_email","in":"body","type":"string","required":false,"description":"Обязателен при auth_type=customer_email"}],"requestExample":"","responseExample":"","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-upravlenie-podpiskami#/rest/setsubscriptionpaymentdate/"},{"id":"POST /rest/payment/do/","title":"Списать деньги по сохранённой карте","httpMethod":"POST","path":"/rest/payment/do/","description":"Инициирует платёж по паре `client_id` + `binding_id`. Документация допускает GET или POST; здесь указан POST, использованный в официальных примерах. Запрос подписывается отдельным ключом, который поддержка привязала к `sys`; параметр `do` не передаётся.","params":[{"name":"products","in":"body","type":"array","required":true,"description":"Корзина списания"},{"name":"products[i].name","in":"body","type":"string","required":true,"description":"Наименование позиции"},{"name":"products[i].price","in":"body","type":"string","required":true,"description":"Цена позиции"},{"name":"products[i].quantity","in":"body","type":"string","required":true,"description":"Количество"},{"name":"client_id","in":"body","type":"string","required":true,"description":"Стабильный ID покупателя, до 32 символов"},{"name":"binding_id","in":"body","type":"string","required":true,"description":"Токен карты из webhook первого платежа"},{"name":"customer_email","in":"body","type":"string","required":true,"description":"Email покупателя"},{"name":"customer_phone","in":"body","type":"string","required":false,"description":"Телефон покупателя"},{"name":"urlNotification","in":"body","type":"string","required":false,"description":"HTTPS URL webhook"},{"name":"sys","in":"body","type":"string","required":true,"description":"Согласованный с поддержкой код интеграции"},{"name":"signature","in":"body","type":"string","required":true,"description":"HMAC SHA-256 подпись отдельным ключом связки"}],"requestExample":"","responseExample":"{\"success\":true}","docsUrl":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/oplata-po-svyazke-cherez-api#шаг-2.-инициируйте-автоплатёж"}],"codeExamples":[],"errors":[{"code":"400","description":"signature not found in request — подпись метода управления подпиской отсутствует или невалидна"},{"code":"401","description":"Authorization failed — подпись неверна или секретный ключ не настроен"},{"code":"405","description":"Wrong request method — использован неподдерживаемый HTTP-метод"}],"limits":"","gotchas":["`urlSuccess` и клиентские редиректы не подтверждают поступление денег. Выдавай товар или доступ только после проверенного webhook с `payment_status=success`.","Подпись запроса считается без поля `signature`; значения приводятся к строкам, ключи сортируются рекурсивно, JSON подписывается HMAC SHA-256 после экранирования `/`.","Документация webhook называет базовым форматом `application/x-www-form-urlencoded`, а тестовый чек-лист ожидает `multipart/form-data`; для `callbackType=json` приходит `application/json`. Приёмник должен разбирать фактически выбранный формат до проверки `Sign`.","Повторная доставка webhook допустима: поле `attempt` может увеличиваться. Обработчик должен быть идемпотентным и отвечать `HTTP 200` только после успешной обработки.","При `subscription` корзина `products` игнорируется. После деактивации подписки от лица пользователя повторная активация невозможна; нужно оформить подписку заново.","Оплата по связке не поддерживает тестовый режим. Для первого платежа нужен ключ страницы, для `/rest/payment/do/` — отдельный ключ от поддержки, привязанный к `sys`.","Синхронный `{\"success\":true}` от `/rest/payment/do/` подтверждает только инициацию. Итог проверяется по webhook с `payment_init=api`.","Для `GET /rest/payment-methods/getList` `Timestamp` может быть любой непустой строкой: сервер не проверяет формат или актуальность, срок запроса не ограничен и защиты от повторного воспроизведения нет.","Тело ответа платёжной формы всегда в UTF-8, но `Content-Type` объявляет `charset=WINDOWS-1251`; это отдельно отмечено в примерах C#.","Статусы `postMessage` гарантированно доступны для карт РФ, СБП и Сбербанк-онлайн. Для других способов оплаты используй webhook.","Если `available_payment_methods` отфильтровал все способы, параметр игнорируется и показывается полный список; если пустой результат дал `available_payment_method_groups`, форма показывает ошибку об отсутствии методов.","В демо-платежах защитное изменение подписи применяется только когда боевой режим формы отключил менеджер Prodamus; пользовательский демо-режим в настройках страницы на подпись не влияет."],"slug":"prodamus","version":1,"updatedAt":"2026-10-12T15:48:55.321Z","sources":[{"title":"Техническая документация","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"Создание платёжной ссылки","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/sozdanie-platezhnoy-ssylki","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"Webhook об оплате","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/webhook-ob-oplate","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"Интеграция платёжного виджета","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/integraciya-platezhnogo-vidzheta","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"Создание ссылки с автоплатежом","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/sozdanie-ssylki-s-avtoplatezhom","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"API управления подписками","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-upravlenie-podpiskami","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"Оплата по связке","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/oplata-po-svyazke-cherez-api","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"API фискальных чеков","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-fiskalnyy-cheki","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"API стандартное","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-standartnoe","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"API маркировки товаров","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/rest-api/api-markirovka-tovarov","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"Тестирование интеграции","url":"https://help.prodamus.ru/payform/tekhnicheskaya-dokumentaciya/testirovanie-integracii","kind":"research","addedAt":"2026-10-12T15:46:01.565Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-12T15:46:01.565Z"}],"logoUrl":null}