Передача дополнительных сведений об оплатах для их учёта на стороне веб-сервиса

Введение

В некоторых случаях при проведении платежей может быть актуально передавать не только обязательные и рекомендуемые со стороны провайдера параметры, но и те сведения, которые могут быть полезны в дальнейшем на стороне мерчанта (с привязкой к конкретным платежам и их статусам). Для таких ситуаций в структуре Payment Page API предусмотрены параметры, позволяющие передавать различные сведения в запросах и получать эти сведения вместе с другой информацией в составе итоговых оповещений.

Notice: При работе с Gate API можно использовать аналогичные возможности.

Передача сведений о бронировании товаров и услуг

Общая информация

С помощью параметра booking_info можно фиксировать сведения о бронировании, связанном с оплатой, и получать эти сведения в оповещениях от платёжной платформы. В отличие от используемых в отдельных индустриях «длинных записей» (подробнее) эта возможность может применяться более широко (например, для указания сведений о бронировании билетов на концерт) и гибко, без ограничений на категорию мерчанта (согласно коду Merchant Category Code, MCC). Вместе с тем, использование этой возможности не обеспечивает тех преимуществ, которые могут быть доступны при работе с «длинными записями», и при наличии вопросов о работе с этими возможностями можно обращаться к курирующему менеджеру ecommpay.

Параметр booking_info может использоваться практически для всех целевых действий с прямым использованием платёжных карт и с использованием методов Apple Pay, Click to Pay и Google Pay: в частности, для проведения оплат, блокировки средств, регистрации нерегулярных повторяемых оплат и проверки платёжных инструментов.

С помощью параметра booking_info можно фиксировать в запросах сведения о бронировании товаров и услуг. Эта возможность доступна при проведении платежей с прямым использованием платёжных карт и с использованием методов Apple Pay, Click to Pay и Google Pay.

Внимание: В целях повышения качества обработки платежей и соблюдения отраслевых стандартов с 15 января 2026 года для определённых видов бизнеса становится обязательной передача параметра booking_info с информацией о датах начала и окончания бронируемой услуги (в параметрах start_date и end_date) для каждой инициируемой карточной оплаты. Это относится к мерчантам с кодами категорий 3000–3999, 4411, 4511, 4722, 5962, 6513, 7011, 7012, 7512, 7519 и 7922.

Пример использования

В качестве примера можно рассмотреть ситуацию, когда мерчанту, ведущему бизнес в сфере музыкальных фестивалей, актуально обеспечить:

  • сбор и обработку информации о бронированиях билетов на фестивали;
  • оперативный доступ своих сотрудников к актуальной информации такого рода по каждому пользователю.

Для этого настраивается следующая схема работы:

  1. В каждом запросе на открытие Payment Page со стороны веб-сервиса мерчанта передаются сведения о бронировании в параметре booking_info. В значении этого параметра указывается строка, полученная в результате кодирования JSON-объекта алгоритмом Base64.

    Исходный JSON-объект может включать в себя следующую информацию.

    • Массив bookers с информацией о лицах, для которых бронируется услуга. Каждый элемент такого массива содержит:
      • first_name — имя получателя услуги, указанное при бронировании;
      • last_name — фамилия получателя услуги, указанная при бронировании;
      • email— адрес электронной почты, указанный при бронировании.
    • Массив items с информацией об отдельных услугах, которые входят в состав бронирования. Каждый элемент такого массива содержит:
      • description — описание отдельной услуги в рамках бронирования;
      • start_date — дата начала действия отдельной услуги;
      • end_date — дата окончания действия отдельной услуги.
    • А также следующие параметры:
      • start_date — дата начала действия забронированной услуги;
      • end_date — дата окончания действия забронированной услуги;
      • description — произвольное описание бронирования;
      • total — итоговая стоимость бронирования;
      • pax — количество лиц, для которых бронируется услуга;
      • reference — указатель забронированной услуги, в качестве которого могут выступать URL, название или код услуги в сервисе мерчанта;
      • id — идентификатор бронирования, уникальный в рамках сервиса мерчанта.
      Notice: Стоит учитывать, что в параметрах start_date и end_date исходного JSON-объекта должны передаваться даты начала и окончания забронированной услуги в целом, а в параметрах start_date и end_date массива items — даты начала и окончания отдельных её составляющих.
      Внимание: В параметрах total и pax следует передавать численное значение выше 0.
  2. По результатам выполнения соответствующей операции информация из параметра booking_info передаётся к веб-сервису мерчанта в итоговом оповещении и становится доступной для просмотра в карточке платежа интерфейса Dashboard.
  3. На стороне веб-сервиса обеспечивается необходимая обработка получаемой информации вместе с другой информацией о выполняемых операциях.

Подключение

Указывать параметр booking_info в запросах и получать передаваемые в нём сведения в оповещениях (при использовании типовой структуры оповещений) можно без согласований и каких-либо дополнительных действий. Эти возможности доступны по умолчанию.

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

Формат данных

Параметр booking_info может включаться в запросы на открытие Payment Page в виде строки, полученной в результате кодирования с применением алгоритма Base64 JSON-объекта booking_info с необходимыми параметрами бронирования.

Параметр Описание

bookers
array

Массив с информацией о лицах, для которых бронируется услуга 1

first_name
string

Имя получателя услуги, указанное при бронировании 1-11

last_name
string

Фамилия получателя услуги, указанная при бронировании 1-21

email
string

Адрес электронной почты, указанный при бронировании 1-31

items
array

Массив с информацией об отдельных услугах, которые входят в состав бронирования 2

description
string

Описание отдельной услуги в рамках бронирования 2-12

start_date
string

Дата начала действия отдельной услуги, в формате ДД-ММ-ГГГГ 2-22

end_date
string

Дата окончания действия отдельной услуги, в формате ДД-ММ-ГГГГ 2-32

start_date
string

Дата начала действия забронированной услуги, в формате ДД-ММ-ГГГГ 3

end_date
string

Дата окончания действия забронированной услуги, в формате ДД-ММ-ГГГГ 4

description
string

Произвольное описание бронирования 5

total
integer

Итоговая стоимость бронирования. Указываемое значение должно быть выше 0 6

pax
integer

Количество лиц, для которых осуществлено бронирование. Указываемое значение должно быть выше 0 7

reference
string

Указатель забронированной услуги, в качестве которого могут выступать URL, название или код услуги в сервисе мерчанта 8

id
string

Идентификатор бронирования, уникальный в рамках сервиса мерчанта 9
Рис. 1. Пример JSON-объекта
"booking_info": {
  "start_date": "12-08-2026",
  "end_date": "14-08-2026",
  "description": "Sideris music festival full pass",
  "total": 200000,
  "pax": 2,
  "bookers": [
     {
        "first_name": "William",
        "last_name": "Herschel",
        "email": "rsfellow@mail.com"
     },
     {
        "first_name": "Caroline",
        "last_name": "Herschel",
        "email": "salariedastronomer@mail.com"
     }
  ],        
  "items":[
     {
        "description": "VIP Arrival",
        "start_date": "12-08-2026",
        "end_date": "12-08-2026"
     },
     {
        "description": "Hotel",
        "start_date": "12-08-2026",
        "end_date": "14-08-2026"
     },
     {
        "description": "Concerts",
        "start_date": "12-08-2026",
        "end_date": "14-08-2026"
     },
     {
        "description": "VIP Departure",
        "start_date": "14-08-2026",
        "end_date": "14-08-2026"
     }
  ],
  "reference": "musicfestlink",
  "id": "83"
}
Рис. 2. Пример строки
ewogICJzdGFydF9kYXRlIjogIjEyLTA4LTIwMjYiLAogICJlbmRfZGF0ZSI6ICIxNC0wOC0yMDI2IiwKICAiZGVzY3JpcHRpb24iOiAiU2lkZXJpcyBtdXNpYyBmZXN0aXZhbCBmdWxsIHBhc3MiLAogICJ0b3RhbCI6IDIwMDAwMCwKICAicGF4IjogMiwKICAiYm9va2VycyI6IFsKICAgICB7CiAgICAgICAgImZpcnN0X25hbWUiOiAiV2lsbGlhbSIsCiAgICAgICAgImxhc3RfbmFtZSI6ICJIZXJzY2hlbCIsCiAgICAgICAgImVtYWlsIjogInJzZmVsbG93QG1haWwuY29tIgogICAgIH0sCiAgICAgewogICAgICAgICJmaXJzdF9uYW1lIjogIkNhcm9saW5lIiwKICAgICAgICAibGFzdF9uYW1lIjogIkhlcnNjaGVsIiwKICAgICAgICAiZW1haWwiOiAic2FsYXJpZWRhc3Ryb25vbWVyQG1haWwuY29tIgogICAgIH0KICBdLCAgICAgICAgCiAgIml0ZW1zIjpbCiAgICAgewogICAgICAgICJkZXNjcmlwdGlvbiI6ICJWSVAgQXJyaXZhbCIsCiAgICAgICAgInN0YXJ0X2RhdGUiOiAiMTItMDgtMjAyNiIsCiAgICAgICAgImVuZF9kYXRlIjogIjEyLTA4LTIwMjYiCiAgICAgfSwKICAgICB7CiAgICAgICAgImRlc2NyaXB0aW9uIjogIkhvdGVsIiwKICAgICAgICAic3RhcnRfZGF0ZSI6ICIxMi0wOC0yMDI2IiwKICAgICAgICAiZW5kX2RhdGUiOiAiMTQtMDgtMjAyNiIKICAgICB9LAogICAgIHsKICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29uY2VydHMiLAogICAgICAgICJzdGFydF9kYXRlIjogIjEyLTA4LTIwMjYiLAogICAgICAgICJlbmRfZGF0ZSI6ICIxNC0wOC0yMDI2IgogICAgIH0sCiAgICAgewogICAgICAgICJkZXNjcmlwdGlvbiI6ICJWSVAgRGVwYXJ0dXJlIiwKICAgICAgICAic3RhcnRfZGF0ZSI6ICIxNC0wOC0yMDI2IiwKICAgICAgICAiZW5kX2RhdGUiOiAiMTQtMDgtMjAyNiIKICAgICB9CiAgXSwKICAicmVmZXJlbmNlIjogIm11c2ljZmVzdGxpbmsiLAogICJpZCI6ICI4MyIKfQ==
Рис. 3. Пример данных из итогового оповещения о результате оплаты
{
    "payment": {
        "date": "2024-01-24T06:24:45+0000",
        "method": "card",
        "id": "FESTIVAL_PASS_1781",
        "sum": {
            "amount": 0,
            "currency": "EUR"
        },
        "type": "purchase",
        "status": "refunded",
        "description": "FESTIVAL_PASS_1781"
    },
    "project_id": 111738,
    "customer": {
        "id": "musicaficionado_83"
    },
    "account": {
        "number": "551115******1822",
        "token": "7123ba1f24f16a115f3390a9",
        "type": "mastercard",
        "card_holder": "WILLIAM HERSCHEL",
        "expiry_month": "08",
        "expiry_year": "2030"
    },
    "booking info": {    // Объект с информацией о бронировании
        "start_date": "12-08-2026",
        "end_date": "14-08-2026",
        "description": "Sideris music festival full pass",
        "total": 200000,
        "pax": 2,
        "bookers": [
          {
            "first_name": "William",
            "last_name": "Herschel",
            "email": "rsfellow@mail.com"
          },
          {
            "first_name": "Caroline",
            "last_name": "Herschel",
            "email": "salariedastronomer@mail.com"
          }
        ],        
        "items": [
          {
            "description": "VIP Arrival",
            "start_date": "12-08-2026",
            "end_date": "12-08-2026"
          },
          {
            "description": "Hotel",
            "start_date": "12-08-2026",
            "end_date": "14-08-2026"
          },
          {
            "description": "Concerts",
            "start_date": "12-08-2026",
            "end_date": "14-08-2026"
          },
          {
            "description": "VIP Departure",
            "start_date": "14-08-2026",
            "end_date": "14-08-2026"
          }
        ],
        "reference": "musicfestlink",
        "id": "83"
    },
    "operation": {
        "provider": {
            "payment_id": "0010000124258736",
            "auth_code": "",
            "endpoint_id": 414,
            "id": 414
        },
        "sum_converted": {
            "amount": 200000,
            "currency": "EUR"
        },
        "code": "0",
        "message": "Success",
        "id": 55386010114429,
        "type": "refund",
        "status": "success",
        "date": "2024-01-24T06:24:45+0000",
        "sum_initial": {
            "amount": 200000
            "currency": "EUR"
        },
        "created_date": "2024-01-24T06:24:43+0000",
        "request_id": "abcaf52323381a-d988c158cc4b43046-00055387"
    }
}

Передача произвольных сведений

Общая информация

С помощью параметра merchant_data можно фиксировать расширенные сведения о составе заказа, информацию об использовании промокодов и бонусных баллов и другие актуальные данные. При этом можно комбинировать состав таких сведений со сведениями, передаваемыми в описании платежа (в параметре payment_description) и в информации для товарного чека (в параметре receipt_data). Это позволяет получать в оповещениях всю необходимую информацию без её дублирования в различных параметрах.

Пример использования

В качестве примера можно рассмотреть ситуацию, когда мерчанту, ведущему бизнес в сфере видеоигр, актуально обеспечить:

  • сбор и обработку информации о дополнительных услугах, приобретаемых пользователями в процессе игр;
  • оперативный доступ своих сотрудников к актуальной информации такого рода по каждому пользователю.

Специалисты мерчанта обращаются с такой задачей к курирующему менеджеру ecommpay, после чегоДля этого настраивается следующая схема работы:

  1. В каждом запросе на открытие Payment Page со стороны веб-сервиса мерчанта передаётся информация о приобретаемых услугах — в виде JSON-объекта в параметре merchant_data.

    В состав строки merchant_data включаются:

    • массив items, в котором каждый элемент содержит артикул (sku), описание (description) и количество приобретаемых услуг (count);
    • параметр total_count с общим количеством приобретаемых услуг или товарных позиций;
    • параметр user_id с внутренним идентификатором пользователя.
  2. По результатам проведения каждого платежа информация из строки merchant_data передаётся к веб-сервису мерчанта в итоговом оповещении и становится доступной для просмотра в карточке платежа интерфейса Dashboard.
  3. На стороне веб-сервиса обеспечивается необходимая обработка получаемой информации вместе с другой информацией о проводимых платежах.

Подключение

Возможности применения параметра merchant_data для передачи и получения различных сведений следует согласовывать с курирующим менеджером ecommpay. После согласований специалисты ecommpay выполняют необходимые действия в платёжной платформе и уведомляют о готовности к включению расширенных сведений в оповещения и к отображению этих сведений в интерфейсе Dashboard.

Формат данных

В запросах на открытие Payment Page для проведения платежей сведения в параметре merchant_data должны передаваться в виде JSON-объекта. При этом, поскольку параметр имеет строковый тип данных (string), для передачи JSON-объекта методом POST требуется экранировать символ " (двойной штрих, U+0022) путём постановки перед ним символа \ (косой обратной черты, U+005C). Это необходимо, чтобы чётко разграничивать на уровне программного взаимодействия, какие кавычки закрывают строку, а какие относятся к содержанию JSON-объекта внутри строки. Вместе с тем, при отправке запросов методом GET экранировать содержимое JSON-объектов не обязательно (поскольку корректная интерпретация данных в таких случаях возможна и без экранирования).

В итоговых оповещениях о результатах платежей сведения из параметра merchant_data передаются в параметре data объекта merchant, с применением экранирования.

В следующих примерах содержимое параметра разбито на несколько строк для удобства чтения.

Рис. 6. Пример данных из GET-запроса на открытие Payment Page (без экранирования)
"merchant_data": "{"items":[{"sku":"GM12-CC",
        "description":"10 Copper Coins","count":1},
        {"sku":"GM12-GC","description":"Golden Coin",
        "count":2}],"total_count":3,"user_id":"122"}"
Рис. 7. Пример данных из POST-запроса на открытие Payment Page (с экранированием)
"merchant_data": "{\"items\":[{\"sku\":\"GM12-CC\",
        \"description\":\"10 Copper Coins\",\"count\":1},
        {\"sku\":\"GM12-GC\",\"description\":\"Golden Coin\",
        \"count\":2}],\"total_count\":3,\"user_id\":\"122\"}"
Рис. 8. Пример данных из итогового оповещения о результате оплаты (с экранированием)
"merchant": {
        "data": "{\"items\":[{\"sku\":\"GM12-CC\",
        \"description\":\"10 Copper Coins\",\"count\":1},
        {\"sku\":\"GM12-GC\",\"description\":\"Golden Coin\",
        \"count\":2}],\"total_count\":3,\"user_id\":\"122\"}" 
}