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

Заказ можно отменить, когда приходит уведомление invoice.order.creating на сервер магазина на создание нового заказа: для этого достаточно в ответ на запрос отправить статус 409 (Conflict).

В этом случае заказ будет помечен в системе как отмененный, пользователь увидит на экране мобильного приложения, что заказ не может быть выполнен.

Уведомление invoice.order.creating приходит на сервер в таком формате.

Пример:  

{

   "id": "evt_14EccV2eZvKYlo2C2j1B18pF",

   "object": "event",

   "created": "2015-08-09T18:31:42.201+04:00",

   "type": "invoice.order.creating",

   "data": {

     "id": "inv_14EeCA2eZvKYlo2C8nDrcXdp",

     "object": "invoice",

     "livemode": false,

     "created": "2015-08-09T18:31:42.201+04:00",

     "modified": "2015-08-09T18:33:42.201+04:00",

     "payqrNumber": "3213326680056410",

     "payqrUserId": "000000000000",

     "orderGroup": "123.456",

     "amount": 19648.44,

     "cart": [{

       "article": "5675657",

       "name": "Товар 1",

       "imageUrl": "http:/*goods.ru/item1.jpg",

       "quantity": 5,

       "amount": 19752.25

     }],

     "customer": {

       "firstName": "Иван",

       "lastName": "Иванов",

       "phone": "+79111111111",

       "email": "test@user.com"

     },

     "delivery": {

       "longitude": 55.718666,

       "latitude": 37.634119,

       "kladrId": "77000000000222600",

       "country": "Россия",

       "region": "Москва",

       "city": "Москва",

       "zip": "115093",

       "street": "Партийный пер.",

       "house": "1",

       "unit": "416 б",

       "hallway": "2",

       "floor": "4",

       "intercom": "к416к1234",

       "comment": "Пройти магазин Пионерия и повернуть направо. Охране сказать, что в PayQR",

     },

     "validityInMinutes": 129600,

     "confirmWaitingInMinutes": 4320,

     "fee": {

       "payqrCustomerCommissionPercent": 0.5,

       "payqrCustomerCommissionAmount": 100.77

     },

     "status": "invoice.order.creating"

   }

}

В заголовке header PQRSecretKey должен быть указан ключ для сервера из личного кабинета.

Проверить содержимое корзины можно в элементе data.cart. Для отмены нужно послать статус 409 и в заголовке header PQRSecretKey должен быть указан ключ магазина из личного кабинета.

Обработчик для отказа от заказа на «1С-Битрикс» (PHP) может быть реализован следующим образом.

Пример:  

<?php

$secretKeyIn = "XXX"; /* Ключ системы PayQR для этого магазина, указанный в личном кабинете */

$secretKeyOut = "YYY"; /* Ключ магазина, указанный в личном кабинете */

$event = json_decode($HTTP_RAW_POST_DATA); /* Получиаем уведомление о событии из тела пришедшего POST запроса */

if (getallheaders()["PQRSecretKey"] == $secretKeyIn && isset($event) && isset($event->object) && $event->object == "event" && isset($event->type)) /* Проверить, что запрос от сервера PayQR */

{

   header("PQRSecretKey:" . $secretKeyOut); /* Подтвердить, что ответ от магазина */

{

   header("PQRSecretKey:" . $secretKeyOut); /* Подтвердить, что ответ от магазина */

   if ($event->type == "invoice.order.creating" && CModule::IncludeModule("sale")) /* Проверяем событие на ожидание создания заказа и подключаем модули */

   {

     $invoice = $event->data; /* Объект счета на оплату Invoice */

 

     CSaleOrder::CancelOrder(intval($invoice->orderId), "Y", ""); /* Пометить заказ как отмененный в магазине */

 

     header("HTTP/1.1 409 Conflict");

   }

}

?>