moneta-sdk-php/docs/notifications.md

10 KiB
Raw Permalink Blame History

Обработка http-уведомлений от Монеты

Документация Монеты


Минимальный ответ на платежное уведомление (PayURL)

Минимальный ответ в документации

Чтобы сгенерировать минимальный ответ для платежного уведомления от Монеты, требуется создать объект MonetaSDK и передать номер заказа. В результате для Монеты будет предоставлен минимальный ответ SUCCESS и на стороне платежной системы статус операции будет изменен на "Выполнена"

include_once('vendor/autoload.php');

$orderId = $_POST['MNT_TRANSACTION_ID'];
$mSdk = new Moneta\MonetaSdk($orderId);
$mSdk->responseToPaymentNotification();

Ответ с передачей номенклатуры (PayURL)

Ответ с передачей номенклатуры в документации (раздел "Передача номенклатуры через ответ скрипта Pay URL")

Чтобы передать номенклатуру в ответе на платежное уведомление, нужно создать объект MonetaSdkReceipt и заполнить переменные объекта:

  1. items* --- переменная товаров, тип array.
    В примере ниже показан максимальный и минимальный набор передаваемых параметров товара. Подробное о параметрах и их значениях можно прочитать в документации раздел "Передача номенклатуры через ответ скрипта Pay URL".

Обратите внимание, что значения vat отличаются от того, что написано в документации:
none - без НДС
vat0 - НДС по ставке 0%
vat10 - НДС чека по ставке 10%
vat110 - НДС чека по расчетной ставке 10/110
vat20 - НДС чека по ставке 20%
vat120 - НДС чека по расчетной ставке 20/120
vat5 - 5%
vat15 - по расчётной ставке 5%
vat7 - 7%
vat17 - по расчётной ставке 7

  1. customer* --- переменная плательщика, тип array.
    Используется для отправки чека. Параметр email --- обязательный

  2. delivery --- переменная доставки, тип float. Если есть доставка, то указать ее стоимость.

    Параметры, отмеченные *, являются обязательными. Их нужно передать при создании объекта MonetaSDKReceipt.

После этого создайте объект MonetaSDK, передав номер заказа и сумму. Затем вызовите метод responseToPaymentNotification, передайте в него ранее созданный объект MonetaSdkReceipt. В результате система Монета получит ответ в формате XML, статус операции изменится на "Выполнена", а в кассовый сервис kassa.payanyway будет передана номенклатура для печати чеков.

include_once('vendor/autoload.php');

$mSdkReceipt = new Moneta\MonetaSdkReceipt();

// "Тестовый товар №1" ——— максимальный набор параметров товара
// "Тестовый товар №2" ——— минимальный набор параметров товара
$mSdkReceipt->items = [
    [
        'name' => 'Тестовый товар №1',
        'price' => 123.45,
        'quantity' => 1,
        'measure' => 'шт',
        "paymentMethod" => "full_payment",
        "paymentObject" => "commodity",
        'vat' => 'none',
        'agentInfo' => [
            'type' => 'payment_agent',
        ],
        'supplierInfo' => [
            'name' => 'Поставщик 1',
            'inn' => '1234567890',
            'phones' => [
                '79995558844',
                '79998855221'
            ]
        ]
    ],
    [
        'name' => 'Тестовый товар №2',
        'price' => 999,
        'quantity' => 2,
    ]
];

$mSdkReceipt->customer = [
    'email' => 'com@moneta.ru', 
    'phone' => '74956465848'
];

$mSdkReceipt->delivery = 456.78;

$orderId = $_POST['MNT_TRANSACTION_ID'];
$mSdk = new Moneta\MonetaSdk($orderId);
$mSdk->responseToPaymentNotification($mSdkReceipt);

Ответ на проверочный запрос с передачей номенклатуры (CheckURL)

Ответ на проверочный запрос с передачей номенклатуры (раздел "Ответ на проверочный запрос (check url - уведомление)")

Если вы используете кассу БПА ПА (Payanyway) и в настройках счёта указан CheckURL, вам нужно ответить на проверочный запрос, передав номенклатуру. Ответ нужно предоставить до оплаты. Если система магазина не ответит на запрос, пользователь не сможет перейти к оплате. Чтобы передать номенклатуру в ответе, создайте объект MonetaSdkReceipt и заполните его переменные:

  1. items* --- переменная товаров, тип array.
    В примере ниже показан максимальный и минимальный набор передаваемых параметров товара. Подробное о параметрах и их значениях можно прочитать в документации в разделе "Ответ на проверочный запрос (check url - уведомление)".

  2. customer* --- переменная плательщика, тип array.
    Используется для отправки чека. Параметр email --- обязательный

  3. delivery --- переменная доставки, тип float. Если есть доставка, то указать ее стоимость.

    * --- обязательная переменная, её нужно заполнить.

После заполнения переменных создайте объект MonetaSDK, передав номер заказа и сумму. Затем вызовите метод responseToCheckRequest, передав в него ранее созданный объект MonetaSdkReceipt. В результате система Монета получит ответ в формате JSON, и пользователь сможет перейти на страницу оплаты.

include_once('vendor/autoload.php');

$mSdkReceipt = new Moneta\MonetaSdkReceipt();
$mSdkReceipt->items = [
    [
        'name' => 'Тестовый товар №1',
        'price' => 123.45,
        'quantity' => 1,
        'measure' => 'шт',
        "paymentMethod" => "full_payment",
        "paymentObject" => "commodity",
        'vat' => 'none',
        'agentInfo' => [
            'payingAgent' => [
                'operation' => 'Наименование операции банковского платежного агента',
                'phones' => [
                    '79995558844',
                    '79998855221'
                ]
            ],
            'supplierInfo' => [
                'name' => 'Поставщик 1',
                'inn' => '1346',
                'phones' => [
                    '79995558844',
                    '79998855221'
                ]
            ]
        ]
    ],
    [
        'name' => 'Тестовый товар2',
        'price' => 999,
        'quantity' => 2,
    ]
];

$mSdkReceipt->customer = [
    'name' => 'Иванов Иван Иванович',
    'inn' => '1234567890',
    'email' => 'com@moneta.ru',
    'phone' => '75556664477'
];

$mSdkReceipt->additionalCheckProp = 'Дополнительный реквизит чека';

$mSdkReceipt->additionalUserProps = [
    'name' => 'Доп. реквизиты пользователя',
    'value' => 'Значение',
];

$mSdkReceipt->delivery = 456.78;

$orderId = $_POST['MNT_TRANSACTION_ID'];
$amount = $_POST['MNT_AMOUNT'];
$mSdk = new Moneta\MonetaSdk($orderId, $amount);
$mSdk->responseToCheckRequest($mSdkReceipt);

Если вы передаете номенклатуру в ответе на проверочный запрос, то на платежное уведомление можно отдать минимальный ответ в виде SUCCESS (Пример).


Документация SDK