Skip to content
msp3CloudPayments
Приём оплаты через CloudPayments для MiniShop3: счёт, шесть уведомлений, одно- и двухстадийная схема
  • MODX 3
  • PHP 8.2
  • miniShop3
  1. Компоненты
  2. msp3CloudPayments
  3. Интеграция и сценарии

Интеграция msp3CloudPayments ​

Шаги установки: Быстрый старт.

Запросы к CloudPayments ​

ДействиеЗапросКогда
Создать счётPOST /orders/createОформление заказа. Покупатель уходит на ссылку из ответа
Узнать статусv2/payments/findКнопка синхронизации во вкладке. Без Public ID и API Secret запрос в API не уходит: ответ success со списком попыток и полем note
Списать холдpayments/confirmПосле блокировки. Затем заказ отмечается оплаченным
Отменить холдpayments/voidДо списания
Вернуть деньгиpayments/refundНужен TransactionId из уведомления Pay
Отменить неоплаченный счётorders/cancelПо номеру счёта. Webhook не ждёт

В запросах логин это Public ID, пароль это API Secret.

Обычный способ создаёт счёт без подтверждения. Двухстадийный способ передаёт RequireConfirmation=true.

Уведомления ​

CloudPayments шлёт форму в UTF-8. Подпись в заголовке X-Content-HMAC: Base64 от HMAC-SHA256 сырого тела. Ключ: properties способа, затем msp3cloudpayments_api_secret, затем mspcloudpayments_api_secret. Проверку подписи выключить нельзя. Неверная подпись отвечает кодом 13.

ТипURL
Paywebhook.php?event=pay
Checkwebhook.php?event=check
Failwebhook.php?event=fail
Confirmwebhook.php?event=confirm
Refundwebhook.php?event=refund
Cancelwebhook.php?event=cancel

Полный адрес: https://ваш-домен.ru/assets/components/msp3cloudpayments/webhook.php?event=pay. JSON-маршрут ядра MiniShop3 не подходит.

Check статус заказа не меняет. Он ищет попытку по ms3_ref и сверяет поле Amount с суммой этой попытки, не с cost заказа.

Ответ CheckЗначение
{"code":0}Сумма совпала, попытка найдена
10Попытка не найдена. Пустое тело Check тоже отвечает 10
12Сумма в уведомлении не совпала с суммой попытки
13Неверная подпись

Адрес webhook открывайте по HTTPS без редиректа 301. Иначе CloudPayments может не доставить тело запроса. Из‑за редиректа пакет не формирует JSON с кодом 13.

Неизвестный тип в ?event= не меняет попытку. Пакет вызывает событие msp3CloudPaymentsOnProviderEvent и отвечает {"code":0}.

СобытиеПопытка оплаты
pay и статус Completedpaid
pay и статус Authorizedauthorized
confirmpaid
failfailed
cancelcancelled
refundrefunded

Как проходит оплата ​

Номер попытки ms3_ref имеет вид {id заказа}-{8 hex}. Тот же номер пакет кладёт в JsonData. В счёте InvoiceId это поле num заказа MiniShop3, не id.

Для возврата в данных попытки нужен TransactionId из уведомления Pay.

Вкладка заказа ​

Запросы вкладки идут в assets/components/msp3cloudpayments/connector.php с параметром action:

actionНазначение
mgr/getlistСписок попыток
mgr/refundВозврат
mgr/cancelОтмена холда или неоплаченного счёта
mgr/captureСписание холда
mgr/syncСтатус у CloudPayments

Плагин msp3cloudpayments_bootstrap на событиях OnMODXInit и msOnManagerCustomCssJs подключает автозагрузку и вкладку заказа в менеджере.

После Pay со статусом Authorized заказ ещё не оплачен. Спишите холд (payments/confirm) или дождитесь Confirm. Оба пути отмечают оплату.

Вкладка не вызывает payments/refund, пока попытка ждёт оплату или деньги только заблокированы. Сначала нужно уведомление или списание.

Отмена холда: payments/void. Неоплаченный счёт: orders/cancel по номеру счёта CloudPayments.

Чек 54-ФЗ ​

Включите msp3cloudpayments_payment_receipt. Тогда вместе со счётом уходит чек. В данных счёта это блок CloudPayments.CustomerReceipt внутри JsonData. В адресе заказа нужен email или телефон.

Строку чека можно поправить событием msp3CloudPaymentsOnPrepareReceiptItem.

Система налогообложения: 0-5. НДС по умолчанию none. Признак способа расчёта по умолчанию 4. Предмет товара 1, предмет доставки 4.

Переход со старого mspCloudPayments ​

При первой установке резолвер копирует непустые mspcloudpayments_public_id, api_secret, currency, success_url, fail_url, json_data_extra, debug в ключи msp3cloudpayments_*, если новые пусты. При обновлении пакета копирование не повторяется. Старый способ не удаляется. Выключите его и пропишите шесть новых адресов уведомлений.