Skip to content
  1. Компоненты
  2. MiniShop3
  3. Интерфейс админки
  4. Настройки
  5. Оплаты

Способы оплаты ​

Откройте Extras → MiniShop3 → Настройки → Оплаты.

Для владельца магазина ​

  1. Создайте способ оплаты: название, описание, логотип, активность.
  2. Привяжите его к нужным доставкам. Без связки покупатель не сможет выбрать пару на витрине.
  3. Для оплаты «при получении» оставьте поле class пустым. Заказ просто получит выбранный payment_id.
  4. Для онлайн-оплаты установите платёжный extra из каталога (например msp3YooKassa, mspTBank, msp3Sberbank) и укажите класс обработчика в поле class, как в инструкции пакета.
  5. Проверьте редирект после оплаты: ms3_order_success_page_id и страницу «Спасибо» с msGetOrder.

Наценка в поле price:

  • 100: фиксированная сумма к заказу
  • 3%: процент от суммы

Поля оплаты ​

ПолеТипОписание
namestringНазвание способа оплаты
descriptiontextОписание для покупателя
pricestringНаценка (число или процент)
logostringПуть к изображению
positionintПорядок сортировки
activeboolАктивность
classstringPHP-класс обработчика платежа
propertiesJSONНастройки обработчика

Связь с доставкой ​

Связки правят в карточке доставки. Типичные наборы:

  • Самовывоз: наличные, карта при получении
  • Курьер: наличные, карта, онлайн
  • Почта: наложенный платёж, онлайн

Обработчики платежей ​

Встроенные обработчики ​

КлассОписание
(пусто)Без онлайн-оплаты, только фиксация способа

Создание обработчика ​

Платёжный extra реализует PaymentProviderInterface и указывает класс в карточке способа оплаты. Готовые шлюзы — в документации extras. Ниже только контракт:

php
<?php
namespace MyComponent\Payment;

use MiniShop3\Controllers\Payment\PaymentProviderInterface;
use MiniShop3\Model\msPayment;
use MiniShop3\Model\msOrder;

class MyPayment implements PaymentProviderInterface
{
    protected $modx;
    protected $payment;

    public function __construct($modx, msPayment $payment)
    {
        $this->modx = $modx;
        $this->payment = $payment;
    }

    public function send(msOrder $order): array
    {
        // Создать платёж у провайдера; return_url: ms3_order_success_page_id
        return [
            'success' => true,
            'data' => ['payment_link' => '...'],
        ];
    }

    public function receive(msOrder $order): array
    {
        // Webhook / callback провайдера
        return ['success' => true, 'message' => 'Payment received'];
    }

    public function getPaymentLink(msOrder $order): ?string
    {
        return $order->get('payment_link') ?: null;
    }

    public function getOrderHash(msOrder $order): string
    {
        return hash('sha256', $order->get('id') . $order->get('uuid'));
    }

    public function getCost(msOrder $order, msPayment $payment, float $cost): float
    {
        $price = (string)$payment->get('price');
        if (str_ends_with($price, '%')) {
            return $cost * ((float)rtrim($price, '%') / 100);
        }
        return (float)$price;
    }
}

Регистрация в поле class:

text
MyComponent\Payment\MyPayment

Секреты шлюза — в properties (JSON) карточки оплаты:

json
{
  "shop_id": "123456",
  "secret_key": "live_xxx...",
  "test_mode": false
}

В коде: $this->payment->get('properties').

Уведомления об оплате (webhook / callback) ​

В ядре MiniShop3 нет готового payment/handler.php. URL уведомлений задаёт платёжный extra (например webhook.php / callback.php в assets/components/{ns}/). Смотрите документацию конкретного шлюза (msp3YooKassa, mspTBank и т.д.).

Класс оплаты реализует send() / приём уведомления и меняет статус заказа. Ссылка на оплату в письмах и msGetOrder строится через PaymentLinkResolver.

API ​

Доставки и оплаты в черновике заказа ​

Публичные списки (без токена): GET /api/v1/delivery/list, GET /api/v1/payment/list. Отдельного GET /api/v1/order/payments нет.

Черновик:

http
GET /api/v1/order/get

В data.order лежат поля заказа, в том числе delivery_id / payment_id и address_*. Смена способа: POST /api/v1/order/add или POST /api/v1/order/set с ключами payment_id / delivery_id. Fenom-витрина может рендерить выбор через msOrder.

Стоимость оплаты ​

http
GET /api/v1/order/cost/payment?payment_id=2

Ответ:

json
{
    "success": true,
    "data": {
        "cost": 150.00
    }
}

Полный расчёт (корзина + доставка + оплата): GET /api/v1/order/cost. Карта Web API: Checkout.

На странице «спасибо» и в письмах URL оплаты формирует PaymentLinkResolver (ms3_payment_link_resolver):

  • в msGetOrder — параметр payStatus (CSV статусов);
  • в уведомлениях — настройка ms3_payment_link_statuses, если пуста — fallback на ms3_status_new;
  • ссылка не показывается для финальных статусов и статуса «оплачен».

Обработчик способа оплаты должен вернуть URL из метода оплаты (см. пример send() выше). Подробнее: msGetOrder.