Klarna
статья о работе с платёжным методом Klarna, который позволяет проводить платежи с использованием банковских переводов в разных валютах в отдельных европейских странах и для которого в платформе Ecommpay поддерживаются оплаты в одну и две стадии и возвраты
Обзор
статья о работе с платёжным методом Klarna, который позволяет проводить платежи с использованием банковских переводов в разных валютах в отдельных европейских странах и для которого в платформе Ecommpay поддерживаются оплаты в одну и две стадии и возвраты
Введение
Klarna — метод, позволяющий проводить платежи с использованием электронных кошельков в разных валютах в отдельных европейских странах. Для этого метода в платёжной платформе Ecommpay поддерживаются оплаты в одну и две стадии и возвраты.
В этой статье представлена информация о работе с методом Klarna: обзорный раздел с общими сведениями и последующие разделы с информацией о действиях, необходимых со стороны мерчанта для решения разных задач.
Характеристика
| Тип платёжного метода | платежи с использованием электронных кошельков |
|---|---|
| Платёжные инструменты | электронные кошельки |
| Регионы использования | AT, AU, BE, CA, CH, CZ, DE, DK, ES, FI, FR, GB, GR, HU, IE, IT, MX, NL, NO, NZ, PL, PT, RO, SE, SK, US |
| Валюты платежей | EUR, AUD , CAD, CHF, CZK, DKK, GBP, HUF, MXN, NOK, PLN, NZD, RON, SEK, USD |
| Конвертация валют | – |
| Разовые оплаты | + |
| Повторяемые оплаты | – |
| Полные возвраты | + |
| Частичные возвраты | + |
| Выплаты | – |
| Опротестования | + (через клиентский портал Klarna, подробнее) |
| Особенности |
|
| Организация и стоимость подключения | по согласованию с курирующим менеджером Ecommpay |
Схема работы
В проведении отдельного платежа с использованием метода Klarna задействуются веб-сервис мерчанта, один из интерфейсов и платёжная платформа Ecommpay, а также технические средства сервиса Klarna.
Основные операции
Для проведения платежей и выполнения операций с использованием метода Klarna могут применяться различные интерфейсы платёжной платформы. Так, оплаты могут проводиться через Payment Page, Gate и Dashboard (с применением платёжных ссылок), а возвраты — через Gate и Dashboard. При этом, независимо от используемых интерфейсов, для этого метода характерны следующие свойства и ограничения.
При работе с методом Klarna, независимо от используемых интерфейсов, актуальны следующие свойства и ограничения.
| Суммы (в поддерживаемых валютах) ¹ | Время ² | |||
|---|---|---|---|---|
| минимум | максимум | базовое | предельное | |
| Оплаты | * | * | – | – |
| Возвраты | – | – | – | – |
- Максимальные ограничения сумм зависят от банков.
- Базовое и предельное время определяются следующим образом:
- Базовое время — среднее расчётное время проведения платежа от момента его инициирования на стороне платёжной платформы до момента отправки инициатору оповещения о результате. Это время определяется для условий штатной работы всех технических средств и каналов связи, а также типичных действий со стороны пользователя (там, где они необходимы). Базовое время рекомендуется использовать для реагирования на отсутствие оповещений о результате платежа и выполнения опроса состояния платежа (подробнее).
- Предельное время — максимально допустимое время проведения платежа от момента его инициирования на стороне платёжной платформы до момента отправки инициатору оповещения о результате. Если платёж не был проведён или отклонён за это время, он автоматически переводится в статус
decline. Для индивидуальной настройки предельного времени следует обращаться к специалистам технической поддержки Ecommpay.
Сценарии использования
Проведение оплат с использованием метода Klarna осуществляется с перенаправлением пользователей к сервису Klarna, выполнение возвратов — с заявкой со стороны пользователя и уведомлением со стороны веб-сервиса.
Сценарии выполнения операций через основные интерфейсы платёжной платформы соответствуют представленным на схемах. При использовании дополнительных возможностей (таких как платёжные ссылки) сценарии выполнения операций методом Klarna соответствуют специфике этих возможностей.
Оплаты через Payment Page
Общая информация
Для проведения оплаты через Payment Page с использованием метода Klarna со стороны веб-сервиса в общем случае необходимо отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL Ecommpay и принять оповещение о результате. При этом в случае с оплатой в две стадии позднее может быть необходимым подтвердить списание заблокированных средств (подробнее). При работе с методом поддерживаются четыре способа оплаты: Pay in N (3 or 4) parts, Pay in 30 Days, Pay in Full, Financing. Полная схема проведения оплаты в одну стадию выглядит следующим образом.
- Пользователь на стороне веб-сервиса инициирует оплату.
- От веб-сервиса на заданный URL Ecommpay передаётся запрос на проведение оплаты через Payment Page.
- Запрос на проведение оплаты поступает в платёжную платформу.
- В платёжной платформе выполняется приём запроса, с проверкой наличия обязательных параметров и корректной подписи.
- Осуществляется подготовка Payment Page согласно настройкам проекта и параметрам вызова.
- Пользователю отображается платёжная форма.
- Пользователь выбирает для оплаты метод Klarna.
- Запрос на проведение оплаты с использованием метода Klarna поступает в платёжную платформу.
- В платёжной платформе обеспечиваются обработка полученного запроса и его отправка в сервис Klarna.
- На стороне сервиса Klarna выполняется обработка запроса на оплату.
- От сервиса Klarna к платёжной платформе передаются данные для перенаправления пользователя к сервису Klarna.
- Данные для перенаправления пользователя передаются к Payment Page.
- Пользователь перенаправляется к сервису Klarna.
- Пользователь выполняет необходимые действия для оплаты.
- На стороне сервиса Klarna выполняется обработка оплаты.
- Информация о результате оплаты отображается пользователю в сервисе Klarna.
- Пользователь перенаправляется к Payment Page.
- От сервиса Klarna к платёжной платформе направляется информация о результате оплаты.
- От платёжной платформы к веб-сервису направляется оповещение о результате оплаты.
- От платёжной платформы к Payment Page направляется информация о результате оплаты.
- Информация о результате оплаты отображается пользователю на Payment Page.
В случае с оплатой в две стадии схема блокировки средств через Payment Page с использованием метода Klarna идентична представленной схеме оплаты в одну стадию, с той разницей, что вместо незамедлительного списания средств инициируется и выполняется их предварительная блокировка.
Информация о форматах запросов и оповещений, используемых для проведения оплат методом Klarna через Payment Page, приведена далее в этом разделе; общая информация о работе с Payment Page API — в отдельной статье Организация взаимодействия.
Формат запросов
При формировании запросов на открытие платёжной формы с применением метода Klarna необходимо учитывать следующее:
- Должен использоваться базовый минимум параметров, обязательный для любого платежа:
project_id— идентификатор проекта, полученный от Ecommpay при интеграции;payment_id— идентификатор платежа, уникальный в рамках проекта;payment_currency— код валюты платежа в формате ISO-4217 alpha-3;payment_amount— сумма платежа в дробных единицах валюты;customer_id— идентификатор пользователя в рамках проекта.
- Должен использоваться базовый минимум параметров:
project_id,payment_id,payment_currency,payment_amount,customer_id. - Для указания варианта проведения оплаты, отличного от заданного по умолчанию для используемого проекта, необходимо указывать параметр
operation_typeсо значениемsale(для незамедлительного списания средств при оплате в одну стадию) илиauth(для предварительной блокировки средств при оплате в две стадии). - Должна указываться информация о пользователе через следующие параметры:
identify_doc_number— идентификатор документа, удостоверяющего личность пользователя, формат зависит от страны регистрации пользователя:- Швеция — Personal Identity Number вида
YYYYMMDD-SSSS - Норвегия — National Identity Number вида
DDMMYYIIIKK - Италия— Fiscal Code вида
LLLLLLYYMMDDSSSC - Финляндия— Personal Identity Code вида
DDMMYYCZZZQ - Испания— National Identity Document вида
SSSSSSSSA - Дания— Personal Identification Number вида
DDMMYY-SSSS - США— Social Secutity Number, состоит из 9 цифр
- Швеция — Personal Identity Number вида
identify_doc_issue_country— код страны, в которой выпущен документ, удостоверяющий личность пользователя, в формате ISO 3166-1 alpha-2.customer_account_info— информация об учётной записи пользователя на стороне веб-сервиса в виде строки, полученной в результате кодирования исходного JSON-объекта с применением алгоритма Base64. Этот объект должен включать в себя следующие объекты и параметры:account— объект со сведениями об учётной записи пользователя на стороне веб-сервиса мерчанта:date— дата создания учётной записи пользователя на стороне веб-сервиса в форматеДД-ММ-ГГГГloyalty_level— индикатор уровня пользователя в программе лояльности веб-сервиса мерчанта, (параметр можно не указывать, если в объектaccountвключается объектpurchase_history):01— высокий02— средний03— низкий
purchase_history— массив объектов со сведениями о предыдущих заказах пользователя (параметр можно не указывать, если в объектaccountвключается объектloyalty_level):number_of_purchases— количество оформленных заказов за последние 12 месяцевnumber_of_paid_purchases— количество оплаченных заказов за последние 12 месяцевtotal_amount— общая сумма, на которую были сформированы заказы за последние 12 месяцев, в дробных единицах валюты, указанной в параметреcurrencyэтого же объектаcurrency— код валюты для указанной суммы в формате ISO-4217 alpha-3payment_method— указатель типа используемого платёжного инструмента, который может принимать одно из следующих значений:01— платёжная карта той платёжной системы, через которую инициируется проведение платежа,02— счёт с возможностью прямого списания средств,03— мобильный кошелёк,04— платёжная карта другой платёжной системы,999— иной инструмент.first_purchase_at— дата и время первой покупки пользователя в веб-сервисе в форматеДД-ММ-ГГГГчч:ммlast_purchase_at— дата и время последней покупки пользователя в веб-сервисе в форматеДД-ММ-ГГГГчч:мм
purchase_data— информация о товарных позициях оплачиваемого заказа, представляет собой строку, полученную в результате кодирования исходного JSON-объекта с применением алгоритма Base64, и включает в себя массив объектовpositionsс различными сведениями из числа допустимых:positions— массив, содержащий информацию о товарных позициях, относящихся с оплате, должен содержать хотя бы один объект, включающий в себя следующие параметры (для каждой позиции товаров или услуг):type— указатель типа оплачиваемой позиции, который может принимать одно из следующих значений, определяющих состав необходимых параметров для указания в объектеpositions:discount— скидка или промокод (на какие-либо товары или услуги),flight— авиаперелёт,car— аренда автомобиля,bus— поездка на автобусе,ferry— паромная переправа,train— поездка на поезде,hotel— проживание в отеле,voucher— ваучер или подарочный сертификат,insurance— страхование,event— посещение мероприятия (например, концерта или выставки),subscription— товар или услуга по подписке с регулярными списаниями (например, доступ к просмотру фильмов в онлайн-кинотеатре на месяц),ondemand— товар или услуга по подписке с нерегулярными списаниями (например, просмотр фильма в онлайн-кинотеатре),marketplace— товар или услуга на торговой площадке,product— товар иной категории,service— услуга иной категории,other— иной вид сервиса, оказываемого пользователю.name— название позиции.quantity— количество товаров или услуг в рамках позиции.amount_total— итоговая стоимость товаров или услуг в рамках позиции, в дробных единицах валюты платежа или в виде дефиса (-) для позиций с типомdiscount.Для типов
product,service,discountиotherдостаточно указания параметровtype,name,quantityиamount_total.
- Обязательность следующих параметров для указания в массиве
positionsзависит от типа позиции.Рис. 5. Для типа flight departure— объект, содержащий информацию о вылете:airport— трёхбуквенный код, присвоенный аэропорту вылета Международной ассоциацией воздушного транспорта (IATA).date— дата вылета в форматеДД-ММ-ГГГГ.country— код страны в адресе места вылета в формате ISO 3166-1 alpha-2.
arrival— объект, содержащий информацию о прибытии:airport— трёхбуквенный код, присвоенный аэропорту прибытия Международной ассоциацией воздушного транспорта (ИАТА).country— код страны в адресе места прибытия в формате ISO 3166-1 alpha-2.
passengers— массив объектов со сведениями о пассажирах:first_name— имя пассажира.last_name— фамилия пассажира.
Рис. 6. Для типа car departure— объект, содержащий информацию об отправлении:city— название города в адресе места отправления.country— код страны в адресе места отправления в формате ISO 3166-1 alpha-2.
arrival— объект, содержащий информацию о прибытии:city— название города в адресе места прибытия.country— код страны в адресе места прибытия в формате ISO 3166-1 alpha-2.
passengers— массив объектов со сведениями о пассажирах:first_name— имя пассажира.last_name— фамилия пассажира.
Рис. 7. Для типов bus, train, ferry departure— объект, содержащий информацию об отправлении:date— дата отправления в форматеДД-ММ-ГГГГ.city— название города в адресе места отправления.country— код страны в адресе места отправления в формате ISO 3166-1 alpha-2.
arrival— объект, содержащий информацию о прибытии:city— название города в адресе места прибытия.country— код страны в адресе места прибытия в формате ISO 3166-1 alpha-2.
passengers— массив объектов со сведениями о пассажирах:first_name— имя пассажира.last_name— фамилия пассажира.
Рис. 8. Для типа hotel hotel_name— название объекта размещения (например, отеля или хостела).start_date— дата начала оказания услуги (например, дата въезда в отель) в форматеДД-ММ-ГГГГend_date— дата окончания услуги (например, дата выезда из отеля) в форматеДД-ММ-ГГГГ.city— название города в адресе объекта размещения.country— код страны в адресе объекта размещения в формате ISO 3166-1 alpha-2.guests— массив объектов со сведениями о постояльцах:first_name— имя постояльца.last_name— фамилия постояльца.
Рис. 9. Для типа voucher start_date— дата начала действия ваучера или сертификата в форматеДД-ММ-ГГГГ.company— название организации, предоставляющей ваучер или сертификат.
Рис. 10. Для типа event event_type— тип мероприятия, возможные значения:CONCERT— концерт,FESTIVAL— фестиваль,TOUR— экскурсия или тур,IN_PERSON_EDUCATION— образовательное мероприятие в очном формате,DIGITAL_EDUCATION— образовательное мероприятие в формате онлайн,SPORT— спортивное мероприятие,CONFERENCE— конференция,EXPO— выставка.start_date— дата начала мероприятия в форматеДД-ММ-ГГГГ.end_date— дата окончания мероприятия в форматеДД-ММ-ГГГГ.country— код страны в адресе места проведения мероприятия в формате ISO 3166-1 alpha-2.
Рис. 11. subscription billing_plans— массив объектов со сведениями о подписке:start_date— дата начала списаний в форматеДД-ММ-ГГГГ, начиная со следующего дня от даты проведения платежа.interval— указатель базового периода списаний, который может принимать одно из следующих значений:DAY— день.WEEK— неделя.MONTH— месяц.YEAR— год.
frequency— множитель для кратного увеличения базового периода списаний
Рис. 12. ondemand interval— указатель ориентировочного базового периода списаний, который может принимать одно из следующих значений:DAY— день.WEEK— неделя.MONTH— месяц.YEAR— год.
frequency— множитель для кратного увеличения ориентировочного базового периода списаний.
Рис. 13. Для типа marketplace seller— объект со сведениями о продавце на торговой площадке:name— имя или название продавца на торговой площадке.city— название города местонахождения продавца.country— код страны местонахождения продавца в формате ISO 3166-1 alpha-2.registation— дата регистрации продавца на торговой площадке в форматеДД-ММ-ГГГГ.
product_category— указатель категории товара или услуги, который может принимать одно из допустимых значений:ACCESSORIES— аксессуарыAPPLIANCES— бытовая техникаAPPS_AND_GAMES— приложения и игрыARTS_CRAFTS_AND_SEWING— товары для рукоделия и творчестваAUTOMOTIVE— товары для автомобилейBEAUTY— товары для ухода за собойBABY— товары для детейBABY_CLOTHING— одежда для детейBAGS_AND_PURSES— сумки и кошелькиBOOKS— книги и другие печатные изданияCDS_AND_VINYL— компакт-диски, виниловые пластинки и другие физические носители с аудиозаписямиCELL_PHONES_AND_ACCESSORIES— мобильные телефоны и аксессуары для нихCOLLECTIBLES_AND_FINE_ARTS— предметы искусства и коллекционированияDIGITAL_MUSIC— музыкальные записи в электронном форматеELECTRONICS— электронные устройстваGROCERY_AND_GOURMET_FOOD— продукты питания и деликатесыHANDMADE— изделия ручной работыHEALTH_AND_PERSONAL_CARE— товары для здоровья и личной гигиеныHOME_AND_KITCHEN— товары для дома и кухниINDUSTRIAL_AND_SCIENTIFIC— промышленное и научное оборудованиеLUGGAGE_AND_TRAVEL_GEAR— чемоданы, дорожные аксессуары и другие товары для путешествийMAGAZINE_SUBSCRIPTIONS— подписки на печатные или цифровые периодические изданияMEN_CLOTHING— мужская одеждаMUSICAL_INSTRUMENTS— музыкальные инструментыOFFICE_PRODUCTS— офисные товарыPATIO_LAWN_AND_GARDEN— товары для сада и дачиPET_SUPPLIES— товары для животныхSHOES— обувьSOFTWARE— программное обеспечениеSPORTS_AND_OUTDOORS— товары для спорта и активного отдыхаTOOLS_AND_HOME_IMPROVEMENT— строительные инструменты и товары для ремонтаTOYS_AND_GAMES— игрушки и игрыVIDEO_GAMES— видеоигрыWOMEN_CLOTHING— женская одежда
additional_info— строковый объект с дополнительными сведениями, которые могут быть актуальны для проведения платежа в отдельных случаях:integration_metadata, object — объект со сведениями о том, как технически был инициирован платёж:originators, array of objects — массив объектов со сведениями о компонентах, использованных для инициирования платежа (на стороне веб-сервиса мерчанта; вплоть до шести объектов):name, string — название пользовательского сервиса, с помощью которого был инициирован платёж, в виде прописных (заглавных) букв, цифр и нижних подчёркиваний (_) вместо пробелов (например,COSMO_GAMES_STORE)module_name, string — название технического модуля, с помощью которого был инициирован платёж, напримерcosmoshopPluginmodule_version, string — номер версии технического модуля, с помощью которого был инициирован платёж, например2.1session_reference, string — идентификатор операции или сеанса работы в рамках веб-сервиса в виде универсального уникального идентификатора версии 7 (UUIDv7) в соответствии со стандартом RFC 9562, например018b163d-0b83-7ba0-b837-da575d0ff824
-
Для соответствия пользовательского интерфейса требованиям сервиса Klarna рекомендуется указывать код языка отображения платёжной формы в параметре
language_codeи код региона в адресе проживания пользователя в параметреregion_code. Код языка должен указываться в соответствии с кодом региона и следующими правилами соответствия.Рис. 14. Перечень допустимых языков для разных регионов Код региона Допустимые языки ATde,enAUenBEnl,fr,enCAen,frCHen,de,fr,itCZcs,enDEde,enDKda,enESes,enFIfi,sv,enFRfr,enGBenGRel,enHUhu,enIEenITit,enNLnl,enNOnb,nn,enNZenPLpl,enPTpt,enROro,enSEsv,enSKsk,enUSenЕсли в запросе не указывается код языка или указывается код, не соответствующий представленным правилам, платёжная форма отображается с использованием английского языка для основных элементов формы и возможным использованием основного национального языка для специфических элементов сервиса Klarna, что может вести к снижению конверсии.
- Для предварительного выбора метода Klarna необходимо указывать код этого метода в параметре
force_payment_method—klarna. - Дополнительно могут использоваться любые другие параметры из числа доступных для работы с Payment Page (подробнее).
- После указания всех целевых параметров необходимо составлять подпись (подробнее).
Таким образом, корректный запрос на открытие платёжной формы с применением метода Klarna должен содержать идентификатор проекта, базовые сведения о платеже (идентификатор, сумму и код валюты), информацию о пользователе и товарных позициях, а также подпись.
{
"project_id": 12345,
"payment_amount": 663800,
"payment_currency": "EUR",
"payment_id": "ORDER-20260309-0001",
"payment_description": "Order with 2 computers, 2 flight tickets and 1 event reservation",
"customer_id": "cust-9001001",
"customer_first_name": "John",
"customer_last_name": "Smith",
"customer_phone": "+31612345678",
"customer_street": "Herengracht",
"building_address": "101",
"customer_state": "NH",
"customer_email": "john@example.com",
"customer_city": "Amsterdam",
"region_code": "NL",
"language_code": "nl",
"customer_zip": "1015BG",
"customer_day_of_birth": "15-04-1985",
"identify_doc_number": "19850415-1234",
"doc_issue_country": "NL",
"customer_account_info": "eyJkYXRlIjoiMTAtMDItMjAyMSIsImNoYW5nZV9kYXRlIjoiMDiOnsibG95YWx0eV9sZXZlbCI6IkhJR0giLCJhdXRoX3RpbWUiOiIwOS0wMy0yMDI2MTA6MTUiLCJhdXRoX21ldGhvZCI6IlBBU1NXT1JEIn19",
"purchase_data": "eyJkYXRlIjoiMTAtMDItMjAyMSIsImNoYW5nZV9kYXRlIjoiMDEtMDMtMjAgiLCJhdXRoX3RpbWUiOiIwOS0wMy0yMDI2MTA6MTUiLCJhdXRoX21ldGhvZCI6IlBBU1NXT1JEIn18",
"additional_info":{
"integration_metadata":{
"originators":[{
"moduleName":"cosmoshopPlugin",
"moduleVersion":"2.1",
"name":"COSMO_GAMES_STORE",
"session_reference":"018b163d-0b83-7ba0-b837-da575d0ff824"
}]
}
}
}
{
"project_id": 12345,
"payment_amount": 663800,
"payment_currency": "EUR",
"payment_id": "ORDER-20260309-0001",
"payment_description": "Order with 2 computers, 2 flight tickets and 1 event reservation",
"customer_id": "cust-9001001",
"customer_first_name": "John",
"customer_last_name": "Smith",
"customer_phone": "+31612345678",
"customer_street": "Herengracht",
"building_address": "101",
"customer_state": "NH",
"customer_email": "john@example.com",
"customer_city": "Amsterdam",
"region_code": "NL",
"language_code": "nl",
"customer_zip": "1015BG",
"customer_day_of_birth": "15-04-1985",
"identify_doc_number": "19850415-1234",
"doc_issue_country": "NL",
"customer_account_info": "eyJkYXRlIjoiMTAtMDItMjAyMSIsImNoYW5nZV9kYXRlIjoiMDiOnsibG95YWx0eV9sZXZlbCI6IkhJR0giLCJhdXRoX3RpbWUiOiIwOS0wMy0yMDI2MTA6MTUiLCJhdXRoX21ldGhvZCI6IlBBU1NXT1JEIn19",
"purchase_data": "eyJkYXRlIjoiMTAtMDItMjAyMSIsImNoYW5nZV9kYXRlIjoiMDEtMDMtMjAgiLCJhdXRoX3RpbWUiOiIwOS0wMy0yMDI2MTA6MTUiLCJhdXRoX21ldGhvZCI6IlBBU1NXT1JEIn18",
"additional_info":{
"integration_metadata":{
"originators":[{
"moduleName":"cosmoshopPlugin",
"moduleVersion":"2.1",
"name":"COSMO_GAMES_STORE",
"session_reference":"018b163d-0b83-7ba0-b837-da575d0ff824"
}]
}
}
}
Расширенный перечень допустимых параметров
В данном разделе представлен расширенный список параметров для указания в запросах на оплату. Обязательные параметры представлены в разделе Формат запросов.
| Параметр | Описание |
|---|---|
|
|
Строковый объект с дополнительными сведениями, которые могут быть актуальны для проведения платежа в отдельных случаях. Этот объект может включать в себя различные сведения из числа допустимых.
"integration_metadata":{ "originators":[{ "moduleName":"cosmoshopPlugin", "moduleVersion":"2.1", "name":"COSMO_GAMES_STORE", "session_reference":"018b163d-0b83-7ba0-b837-da575d0ff824" }] }, "klarna_network_session_token":"453", "klarna_network_data": {\"content\":{\"customer_account_info\":[{\"unique_account_identifier\":\"test@gmail.com\",\"account_registration_date\":\"2017-02-13T10:49:20Z\",\"account_last_modified\":\"2019-03-13T11:45:27Z\"}]},\"content_type\":\"application/vnd.klarna.internal.emd-v2+json\"}" |
|
|
Информация о доставке товара или услуги пользователю Представляет собой строку,полученную в результате кодирования исходного JSON-объекта с применением алгоритма Base64. Этот объект может включать в себя различные сведения из числа допустимых.
"customer_shipping": [ { "first_name": "John", "last_name": "Smith", "email": "john@example.com", "phone": "+31612345678", "address": "Herengracht 101", "address2": "Herengracht 101, apt 1", "postal": "1015BG", "city": "Amsterdam", "region_code": "NH", "country": "NL", "type": "TO_DOOR", "type_attributes": [ "TRACKED", "SIGNATURE_REQUIRED" ], "carrier": "PostNL", "shipping_reference": "SHIP-COMPUTER-1" }, { "first_name": "Jane", "last_name": "Smith", "email": "jane@example.com", "phone": "+31698765432", "address": "Keizersgracht 250", "address2": "Keizersgracht 250, office reception", "postal": "1016EV", "city": "Amsterdam", "region_code": "NH", "country": "NL", "type": "TO_DOOR", "type_attributes": [ "TRACKED", "EXPRESS" ], "carrier": "DHL", "shipping_reference": "SHIP-COMPUTER-2" } ]
|
|
|
Информация об учётной записи пользователя на стороне веб-сервиса и о его контактных данных пользователя. Представляет собой строку, полученную в результате кодирования исходного JSON-объекта с применением алгоритма Base64.Этот объект может включать в себя объект
|
|
|
Информация о товарных позициях оплачиваемого заказа. Представляет собой строку, полученную в результате кодирования исходного JSON-объекта с применением алгоритма Base64, и включает в себя массив объектов В состав массива Общие сведения о каждой позиции (применимые для любых позиций и достаточные для позиций с типами
Частные сведения об услугах перевозки (для позиций с типами
Частные сведения о проживании (для позиций с указателем типа
Частные сведения о ваучере или подарочном сертификате (для позиций с типом
Частные сведения об услуге страхования (для позиций с типом
Частные сведения о мероприятии (для позиций с типом
Частные сведения об услуге с нерегулярными списаниями (для позиций с указателем типа
Частные сведения об услуге с регулярными списаниями (для позиций с типом
Частные сведения о товаре или услуге на торговой площадке (для позиций с типом
|
|
|
Код страны, в которой выпущен документ, удостоверяющий личность пользователя. Указывается в формате ISO 3166-1 alpha-2. Пример: |
Формат оповещений
Для оповещений о результатах оплат с применением метода Klarna используется типовой формат, описание которого представлено в разделе Работа с оповещениями.
В следующем примере оповещение свидетельствует о том, что в рамках проекта 442 была проведена оплата в размере 10,00 EUR.
{
"project_id": 442,
"payment": {
"id": "EP696e-3aea",
"type": "purchase",
"status": "success",
"date": "2022-10-07T19:28:58+0000",
"method": "Klarna",
"sum": {
"amount": 1000,
"currency": "EUR"
},
"description": ""
},
"customer": {
"id": "12345"
},
"operation": {
"id": 33,
"type": "sale",
"status": "success",
"date": "2022-10-07T19:28:58+0000",
"created_date": "2022-10-07T19:28:14+0000",
"request_id": "a8ea69fdc5a83a2622-00000001",
"sum_initial": {
"amount": 1000,
"currency": "EUR"
},
"sum_converted": {
"amount": 1000,
"currency": "EUR"
},
"code": "0",
"message": "Success",
"provider": {
"id": 18052,
"payment_id": "1665170919576",
"auth_code": ""
}
},
"signature": "h14kSk782IZEgezTRpbZVe/54KGgd7mA=="
}
В следующем примере оповещение свидетельствует об отклонённой оплате.
{
"project_id": 442,
"payment": {
"id": "EP1d27-e7ee",
"type": "purchase",
"status": "decline",
"date": "2022-10-10T09:28:33+0000",
"method": "Klarna",
"sum": {
"amount": 1500000,
"currency": "EUR"
},
"description": ""
},
"customer": {
"id": "12345"
},
"operation": {
"id": 38,
"type": "sale",
"status": "decline",
"date": "2022-10-10T09:28:33+0000",
"created_date": "2022-10-10T09:28:19+0000",
"request_id": "f56812a9270c19c04-00000001",
"sum_initial": {
"amount": 1500000,
"currency": "EUR"
},
"sum_converted": {
"amount": 1500000,
"currency": "EUR"
},
"code": "20000",
"message": "General decline",
"provider": {
"id": 18052,
"payment_id": "",
"auth_code": ""
}
},
"signature": "ZS90VEL4x5avOhc4MG85STSog=="
}
Дополнительные материалы
Для организации работы с разовыми оплатами через Payment Page также могут быть полезны следующие материалы:
- Быстрый старт — инструкция по оперативной организации приёма платежей через Payment Page, с использованием SDK и примеров исходного кода.
- Организация взаимодействия — статья о том, как строится работа с платёжной платформой через Payment Page и как можно организовывать эту работу со стороны веб-сервиса в различных случаях.
- Работа с подписью к данным — статья о порядке создания и проверки подписи, используемой в программных запросах, ответах и оповещениях для обеспечения защищённого обмена данными при взаимодействии с платёжной платформой.
- Проведение платежей — статьи о типах платежей, которые можно проводить через платформу, схемах их проведения и допустимых операциях и статусах.
- Проведение оплат — статья о порядке проведения через Payment Page разовых одностадийных оплат с незамедлительными списаниями.
- Блокировка средств — статья о порядке выполнения через Payment Page предварительных блокировок средств в рамках разовых двухстадийных оплат с последующими списаниями.
- Работа с информацией об операциях — статья о статусах и служебных кодах, которые используются в платформе, чтобы фиксировать состояние операций и причины их отклонения.
Оплаты через Gate
Общая информация
Для проведения оплаты через Gate с использованием метода Klarna со стороны веб-сервиса необходимо:
- Отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL Ecommpay.
- Принять промежуточное оповещение от платёжной платформы и осуществить перенаправление пользователя к сервису Klarna.
- Принять итоговое оповещение от платёжной платформы.
Полная схема проведения оплаты выглядит следующим образом.
- Пользователь на стороне веб-сервиса инициирует оплату с использованием метода Klarna.
- От веб-сервиса на заданный URL Ecommpay передаётся запрос на проведение оплаты через Gate.
- Запрос на проведение оплаты поступает в платёжную платформу Ecommpay.
- В платёжной платформе обеспечивается приём запроса с проверкой наличия обязательных параметров и корректной подписи.
- От платёжной платформы к веб-сервису направляется ответ с информацией о получении запроса и его корректности (подробнее).
- В платёжной платформе обеспечиваются дальнейшая обработка запроса (с проверкой согласованности параметров) и его отправка в сервис Klarna.
- На стороне сервиса Klarna выполняется обработка запроса на оплату.
- От сервиса Klarna к платёжной платформе передаются данные для перенаправления пользователя к сервису Klarna.
- От платёжной платформы к веб-сервису направляется оповещение с данными для перенаправления пользователя к сервису Klarna.
- Пользователь перенаправляется к сервису Klarna.
- Пользователь выполняет необходимые действия для оплаты.
- На стороне сервиса Klarna выполняется обработка оплаты.
- Пользователю отображается информация о результате оплаты.
- Пользователь перенаправляется к веб-сервису.
- От сервиса Klarna к платёжной платформе направляется информация о результате оплаты.
- От платёжной платформы к веб-сервису направляется оповещение о результате оплаты.
- На стороне веб-сервиса обеспечивается информирование пользователя о результате оплаты.
Информация о форматах запросов и оповещений, используемых для проведения оплат методом Klarna через Gate, приведена далее в этом разделе; общая информация о работе с Gate API — в отдельной статье Организация взаимодействия.
Формат запросов на проведение оплат
При работе с запросами на оплаты с применением метода Klarna необходимо учитывать следующее:
- Для инициирования каждой оплаты должен использоваться отдельный POST-запрос к одной из следующих конечных точек:
/v2/payment/klarna/saleдля проведения оплаты в одну стадию,/v2/payment/klarna/authдля проведения оплаты в две стадии.
- В каждом запросе должны использоваться следующие объекты и параметры:
general— объект, содержащий основные идентификационные сведения запроса:project_id— идентификатор проекта, полученный от Ecommpay при интеграции;,payment_id— идентификатор платежа, уникальный в рамках проекта;,signature— подпись запроса, составленная после указания всех целевых параметров (подробнее — в разделе Работа с подписью к данным); (подробнее),
payment— объект, содержащий сведения о платеже:amount— сумма платежа;,currency— код валюты платежа в формате ISO-4217 alpha-3;,
customer— объект, содержащий сведения о пользователе:id— идентификатор пользователя, уникальный в рамках проекта;,ip_address— IP-адрес пользователя, актуальный для инициируемого платежаidentify— объект, содержащий сведения о документе, удостоверяющем личность пользователя:doc_number— идентификатор документа, удостоверяющего личность пользователя, формат зависит от страны регистрации пользователя:- Швеция — Personal Identity Number вида
YYYYMMDD-SSSS - Норвегия — National Identity Number вида
DDMMYYIIIKK - Италия— Fiscal Code вида
LLLLLLYYMMDDSSSC - Финляндия— Personal Identity Code вида
DDMMYYCZZZQ - Испания— National Identity Document вида
SSSSSSSSA - Дания— Personal Identification Number вида
DDMMYY-SSSS - США— Social Secutity Number, состоит из 9 цифр
- Швеция — Personal Identity Number вида
doc_issue_country— код страны, в которой выпущен документ, удостоверяющий личность пользователя, указывается в формате ISO 3166-1 alpha-2.
account— объект с информацией об учётной записи пользователя на стороне веб-сервиса:date— дата создания учётной записи пользователя на стороне веб-сервиса в форматеДД-ММ-ГГГГloyalty_level— индикатор уровня пользователя в программе лояльности веб-сервиса мерчанта, (параметр можно не указывать, если в объектaccountвключается объектpurchase_history):01— высокий02— средний03— низкий
purchase_history— массив объектов со сведениями о предыдущих заказах пользователя (параметр можно не указывать, если в объектaccountвключается объектloyalty_level):number_of_purchases— количество оформленных заказов за последние 12 месяцевnumber_of_paid_purchases— количество оплаченных заказов за последние 12 месяцевtotal_amount— ообщая сумма, на которую были сформированы заказы за последние 12 месяцев, в дробных единицах валюты, указанной в параметреcurrencyэтого же объектаcurrency— код валюты для указанной суммы в формате ISO-4217 alpha-3payment_method— указатель типа используемого платёжного инструмента, который может принимать одно из следующих значений: допустимые значения:01— платёжная карта той платёжной системы, через которую инициируется проведение платежа,02— счёт с возможностью прямого списания средств,03— мобильный кошелёк,04— платёжная карта другой платёжной системы;999— иной инструмент.first_purchase_at— дата и время первой покупки пользователя в веб-сервисе в форматеДД-ММ-ГГГГчч:ммlast_purchase_at— дата и время последней покупки пользователя в веб-сервисе в форматеДД-ММ-ГГГГчч:мм
purchase_data— массив с информацией о товарных позициях оплачиваемого заказа с различными сведениями из числа допустимых:positions— массив, содержащий информацию о товарных позициях, относящихся с оплате, должен содержать хотя бы один объект, включающий в себя следующие параметры (для каждой позиции товаров или услуг):type— указатель типа оплачиваемой позиции, который может принимать одно из следующих значений, определяющих состав необходимых параметров для указания в объектеpositions:discount— скидка или промокод (на какие-либо товары или услуги),flight— авиаперелёт,car— аренда автомобиля,bus— поездка на автобусе,ferry— паромная переправа,train— поездка на поезде,hotel— проживание в отеле,voucher— ваучер или подарочный сертификат,insurance— страхование,event— посещение мероприятия (например, концерта или выставки),subscription— товар или услуга по подписке с регулярными списаниями (например, доступ к просмотру фильмов в онлайн-кинотеатре на месяц),ondemand— товар или услуга по подписке с нерегулярными списаниями (например, просмотр фильма в онлайн-кинотеатре),marketplace— товар или услуга на торговой площадке,product— товар иной категории,service— услуга иной категории,other— иной вид сервиса, оказываемого пользователю.name— название позиции.quantity— количество товаров или услуг в рамках позиции.amount_total— итоговая стоимость товаров или услуг в рамках позиции, в дробных единицах валюты платежа или в виде дефиса (-) для позиций с типомdiscount.Для типов
product,service,discountиotherдостаточно указания параметровtype,name,quantityиamount_total.
-
Обязательность следующих параметров для указания в массиве
positionsзависит от типа позиции.Рис. 28. Для типа flight departure— объект, содержащий информацию о вылете:airport— трёхбуквенный код, присвоенный аэропорту вылета Международной ассоциацией воздушного транспорта (ИАТА).date— дата вылета в форматеДД-ММ-ГГГГ.country— код страны в адресе места вылета в формате ISO 3166-1 alpha-2.
arrival— объект, содержащий информацию о прибытии:airport— трёхбуквенный код, присвоенный аэропорту прибытия Международной ассоциацией воздушного транспорта (ИАТА).country— код страны в адресе места прибытия в формате ISO 3166-1 alpha-2.
passengers— массив объектов со сведениями о пассажирах:first_name— имя пассажира.last_name— фамилия пассажира.
Рис. 29. Для типа car departure— объект, содержащий информацию об отправлении:city— название города в адресе места отправления.country— код страны в адресе места отправления в формате ISO 3166-1 alpha-2.
arrival— объект, содержащий информацию о прибытии:city— название города в адресе места прибытия.country— код страны в адресе места прибытия в формате ISO 3166-1 alpha-2.
passengers— массив объектов со сведениями о пассажирах:first_name— имя пассажира.last_name— фамилия пассажира.
Рис. 30. Для типов bus, train, ferry departure— объект, содержащий информацию об отправлении:date— дата отправления в форматеДД-ММ-ГГГГ.city— название города в адресе места отправления.country— код страны в адресе места отправления в формате ISO 3166-1 alpha-2.
arrival— объект, содержащий информацию о прибытии:city— название города в адресе места прибытия.country— код страны в адресе места прибытия в формате ISO 3166-1 alpha-2.
passengers— массив объектов со сведениями о пассажирах:first_name— имя пассажира.last_name— фамилия пассажира.
Рис. 31. Для типа hotel hotel_name— название объекта размещения (например, отеля или хостела).start_date— дата начала оказания услуги (например, дата въезда в отель) в форматеДД-ММ-ГГГГend_date— дата окончания услуги (например, дата выезда из отеля) в форматеДД-ММ-ГГГГ.city— название города в адресе объекта размещения.country— код страны в адресе объекта размещения в формате ISO 3166-1 alpha-2.guests— массив объектов со сведениями о постояльцах:first_name— имя постояльца.last_name— фамилия постояльца.
Рис. 32. Для типа voucher start_date— дата начала действия ваучера или сертификата в форматеДД-ММ-ГГГГ.company— название организации, предоставляющей ваучер или сертификат.
Рис. 33. Для типа event event_type— тип мероприятия, возможные значения:CONCERT— концерт,FESTIVAL— фестиваль,TOUR— экскурсия или тур,IN_PERSON_EDUCATION— образовательное мероприятие в очном формате,DIGITAL_EDUCATION— образовательное мероприятие в формате онлайн,SPORT— спортивное мероприятие,CONFERENCE— конференция,EXPO— выставка.start_date— дата начала мероприятия в форматеДД-ММ-ГГГГ.end_date— дата окончания мероприятия в форматеДД-ММ-ГГГГ.country— код страны в адресе места проведения мероприятия в формате ISO 3166-1 alpha-2.
Рис. 34. subscription billing_plans— массив объектов со сведениями о подписке:start_date— дата начала списаний в форматеДД-ММ-ГГГГ, начиная со следующего дня от даты проведения платежа.interval— указатель базового периода списаний, который может принимать одно из следующих значений:DAY— день.WEEK— неделя.MONTH— месяц.YEAR— год.
frequency— множитель для кратного увеличения базового периода списаний
Рис. 35. ondemand interval— указатель ориентировочного базового периода списаний, который может принимать одно из следующих значений:DAY— день.WEEK— неделя.MONTH— месяц.YEAR— год.
frequency— множитель для кратного увеличения ориентировочного базового периода списаний.
Рис. 36. Для типа marketplace seller— объект со сведениями о продавце на торговой площадке:name— имя или название продавца на торговой площадке.city— название города местонахождения продавца.country— код страны местонахождения продавца в формате ISO 3166-1 alpha-2.registation— дата регистрации продавца на торговой площадке в форматеДД-ММ-ГГГГ.
product_category— указатель категории товара или услуги, который может принимать одно из допустимых значений:ACCESSORIES— аксессуарыAPPLIANCES— бытовая техникаAPPS_AND_GAMES— приложения и игрыARTS_CRAFTS_AND_SEWING— товары для рукоделия и творчестваAUTOMOTIVE— товары для автомобилейBEAUTY— товары для ухода за собойBABY— товары для детейBABY_CLOTHING— одежда для детейBAGS_AND_PURSES— сумки и кошелькиBOOKS— книги и другие печатные изданияCDS_AND_VINYL— компакт-диски, виниловые пластинки и другие физические носители с аудиозаписямиCELL_PHONES_AND_ACCESSORIES— мобильные телефоны и аксессуары для нихCOLLECTIBLES_AND_FINE_ARTS— предметы искусства и коллекционированияDIGITAL_MUSIC— музыкальные записи в электронном форматеELECTRONICS— электронные устройстваGROCERY_AND_GOURMET_FOOD— продукты питания и деликатесыHANDMADE— изделия ручной работыHEALTH_AND_PERSONAL_CARE— товары для здоровья и личной гигиеныHOME_AND_KITCHEN— товары для дома и кухниINDUSTRIAL_AND_SCIENTIFIC— промышленное и научное оборудованиеLUGGAGE_AND_TRAVEL_GEAR— чемоданы, дорожные аксессуары и другие товары для путешествийMAGAZINE_SUBSCRIPTIONS— подписки на печатные или цифровые периодические изданияMEN_CLOTHING— мужская одеждаMUSICAL_INSTRUMENTS— музыкальные инструментыOFFICE_PRODUCTS— офисные товарыPATIO_LAWN_AND_GARDEN— товары для сада и дачиPET_SUPPLIES— товары для животныхSHOES— обувьSOFTWARE— программное обеспечениеSPORTS_AND_OUTDOORS— товары для спорта и активного отдыхаTOOLS_AND_HOME_IMPROVEMENT— строительные инструменты и товары для ремонтаTOYS_AND_GAMES— игрушки и игрыVIDEO_GAMES— видеоигрыWOMEN_CLOTHING— женская одежда
additional— объект с дополнительными сведениями, которые могут быть актуальны для проведения платежа в отдельных случаях:integration_metadata, object — объект со сведениями о том, как технически был инициирован платёж:originators, array of objects — массив объектов со сведениями о компонентах, использованных для инициирования платежа (на стороне веб-сервиса мерчанта; вплоть до шести объектов):name, string — название пользовательского сервиса, с помощью которого был инициирован платёж, в виде прописных (заглавных) букв, цифр и нижних подчёркиваний (_) вместо пробелов (например,COSMO_GAMES_STORE)module_name, string — название технического модуля, с помощью которого был инициирован платёж, напримерcosmoshopPluginmodule_version, string — номер версии технического модуля, с помощью которого был инициирован платёж, например2.1session_reference, string — идентификатор операции или сеанса работы в рамках веб-сервиса в виде универсального уникального идентификатора версии 7 (UUIDv7) в соответствии со стандартом RFC 9562, например018b163d-0b83-7ba0-b837-da575d0ff824
- Для соответствия пользовательского интерфейса требованиям сервиса Klarna рекомендуется указывать код страны в адресе проживания пользователя в параметре
countryобъектаcustomer. Если в запросе не указывается код языка или указывается код одной из стран, которые не поддерживаются официально, элементы интерфейса сервиса Klarna могут отображаться на английском языке, что может вести к снижению конверсии. - Дополнительно могут использоваться любые другие параметры из числа указанных в спецификации.
Таким образом, корректный запрос на оплату в одну стадию с применением метода Klarna должен содержать идентификатор проекта, базовые сведения о платеже (идентификатор, сумму и код валюты), идентификатор и IP-адрес пользователя, информацию о товарных позициях и подпись.
{
"general": {
"project_id": 123456,
"payment_id": "PMT123456-789",
"signature": "<signature>",
},
"payment": {
"amount": 10000,
"currency": EUR,
"description": "Order ORD123456-789",
},
"customer": {
"id": "cust-9001001",
"first_name": "John",
"last_name": "Smith",
"phone": "31612345678",
"street": "Herengracht",
"address": "101",
"state": "NH",
"email": "john@example.com",
"city": "Amsterdam",
"country": "NL",
"zip": "1015BG",
"day_of_birth": "15-04-1985",
"ip_address": "1.0.0.4",
"identify": {
"doc_number": "19850415-1234",
"doc_issue_country": "SE",
},
"account": {
"date": "10-02-2021",
"change_date": "01-03-2026",
"loyalty_level": "01",
"auth_time": "09-03-202610:15",
"auth_method": "021",
"purchase_history": [
{
"number_of_purchases": 18,
"number_of_paid_purchases": 17,
"number_of_disputed_purchases": 1,
"total_amount": 845900,
"currency": "EUR",
"payment_method": "01",
"first_purchase_at": "14-03-202309:40",
"last_purchase_at": "01-03-202620:25",
}
],
"device_purchase_history": [
{
"number_of_purchases": 18,
"number_of_paid_purchases": 17,
"number_of_disputed_purchases": 1,
"total_amount": 845900,
"currency": "EUR",
"payment_method": "01",
"first_purchase_at": "14-03-202309:40",
"last_purchase_at": "01-03-202620:25",
}
],
},
"shipping_extended": [
{
"first_name": "John",
"last_name": "Smith",
"email": "john@example.com",
"phone": "31612345678",
"address": "Herengracht 101",
"address2": "Herengracht 101",
"postal": "1015BG",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"type": "011",
"type_attributes": ["08", "01"],
"carrier": "PostNL",
"shipping_reference": "SHIP-COMPUTER-1",
},
{
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@example.com",
"phone": "31698765432",
"address": "Keizersgracht 250",
"address2": "Keizersgracht 250",
"postal": "1016EV",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"type": "011",
"type_attributes": ["08", "07", "02"],
"carrier": "DHL",
"shipping_reference": "SHIP-COMPUTER-2",
},
],
},
"return_url": {
"return": "https://example.com/echo/success",
},
"purchase_data": {
"positions": [
{
"type": "product",
"name": "ExampleName",
"quantity": 1,
"amount_total": 189900,
"tax_total": 32958,
"amount": 189900,
"product_url": "https://merchant.example.com",
"product_image": "https://merchant.example.com",
"product_reference": "SKU-LEN-X1G12",
"item_reference": "ITEM-001",
"shipping_reference": "SHIP-001",
},
{
"type": "service",
"name": "Extended Warranty 2 Years",
"quantity": 1,
"amount_total": 19900,
"tax_total": 3458,
"amount": 19900,
"product_url": "https://merchant.example.com",
"product_image": "https://merchant.example.com",
"product_reference": "SVC-WARRANTY-2Y",
"item_reference": "ITEM-002",
"shipping_reference": "SHIP-001",
},
{
"type": "discount",
"name": "Summer Sale 10%",
"quantity": 1,
"amount_total": 20990,
"tax_total": 3643,
"amount": 20990,
"item_reference": "ITEM-003",
},
{
"type": "other",
"name": "some",
"quantity": 1,
"amount_total": 20990,
"tax_total": 3643,
"amount": 20990,
"item_reference": "ITEM-003",
},
{
"type": "flight",
"name": "Amsterdam → Stockholm",
"quantity": 2,
"amount_total": 45000,
"tax_total": 7820,
"amount": 22500,
"item_reference": "ITEM-004",
"booking_reference": "KL-20260601-AMS-ARN",
"departure": {"airport": "AMS", "date": "01-06-2026", "city": "Amsterdam", "country": "NL"},
"arrival": {"airport": "ARN", "city": "Stockholm", "country": "SE"},
"airline": "KL",
"price": 22500,
"currency": "EUR",
"class": "ECONOMY",
"passengers": [
{"first_name": "John", "last_name": "Smith"}
],
"insurances": [{"company": "AXA", "insurance_type": "CANCELATION", "amount": 2500, "currency": "EUR"}],
"affiliate": "ExamplePartner BV",
},
{
"type": "car",
"name": "7 days rental",
"quantity": 1,
"amount_total": 35000,
"tax_total": 6079,
"amount": 35000,
"item_reference": "ITEM-005",
"departure": {
"address": "Schiphol Airport",
"address2": "Terminal 3",
"postal": "1118CP",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"date": "15-06-2026",
},
"arrival": {
"address": "Arlanda Airport",
"address2": "Terminal 5",
"postal": "19060",
"city": "Stockholm",
"region_code": "AB",
"country": "SE",
},
"car_rental_company": "Hertz",
"price": 35000,
"currency": "EUR",
"class": "ECONOMY",
"passengers": [{"first_name": "John", "last_name": "Smith"}],
"insurances": [{"company": "Allianz", "insurance_type": "LOSS_DAMAGE_WAIVER", "amount": 1500, "currency": "EUR"}],
"affiliate": "example.com",
},
{
"type": "bus",
"name": "Amsterdam → Brussels Express",
"quantity": 1,
"amount_total": 2500,
"tax_total": 434,
"amount": 2500,
"item_reference": "ITEM-006",
"departure": {
"date": "15-06-2026",
"location": "Amsterdam",
"address": "Orlyplein",
"address2": "1",
"postal": "1043DP",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
},
"arrival": {
"address": "Rue du Progrès",
"address2": "80",
"postal": "1210",
"city": "Brussels",
"region_code": "BRU",
"country": "BE",
},
"bus_company": "FlixBus",
"price": 2500,
"currency": "EUR",
"class": "ECONOMY",
"passengers": [{"first_name": "John", "last_name": "Smith"}],
"insurances": [{"company": "AXA", "insurance_type": "CANCELATION", "amount": 500, "currency": "EUR"}],
"affiliate": "example.eu",
},
{
"type": "train",
"name": "Amsterdam → Newcastle Ferry",
"quantity": 2,
"amount_total": 18000,
"tax_total": 3127,
"amount": 9000,
"item_reference": "ITEM-007",
"departure": {
"date": "20-06-2026",
"location": "IJmuiden",
"address": "Sluisplein",
"address2": "33",
"postal": "1975AG",
"city": "IJmuiden",
"region_code": "NH",
"country": "NL",
},
"arrival": {
"address": "Royal Quays",
"address2": "Coble Dene",
"postal": "NE29 6EA",
"city": "Newcastle",
"region_code": "ENG",
"country": "GB",
},
"train_company": "DFDS",
"price": 9000,
"currency": "EUR",
"class": "PREMIUM_ECONOMY",
"passengers": [
{"first_name": "John", "last_name": "Smith"},
{"first_name": "Jane", "last_name": "Smith"},
],
"insurances": [
{"company": "Allianz", "insurance_type": "CANCELATION", "amount": 1000, "currency": "EUR"}
],
"affiliate": "example.eu",
},
{
"type": "ferry",
"name": "Amsterdam → Newcastle Ferry",
"quantity": 2,
"amount_total": 18000,
"tax_total": 3127,
"amount": 9000,
"item_reference": "ITEM-007",
"departure": {
"date": "20-06-2026",
"location": "IJmuiden Ferry",
"address": "Sluisplein",
"address2": "33",
"postal": "1975AG",
"city": "IJmuiden",
"region_code": "NH",
"country": "NL",
},
"arrival": {
"address": "Royal Quays, Coble Dene",
"address2": "Royal Quays, Coble Dene",
"postal": "NE29 6EA",
"city": "Newcastle",
"region_code": "ENG",
"country": "GB",
},
"ferry_line": "DFDS",
"price": 9000,
"currency": "EUR",
"class": "PREMIUM_ECONOMY",
"passengers": [
{"first_name": "John", "last_name": "Smith"},
],
"insurances": [
{"company": "Allianz", "insurance_type": "CANCELATION", "amount": 1000, "currency": "EUR"}
],
"affiliate": "example.eu",
},
{
"type": "hotel",
"name": "Hotel 1",
"quantity": 1,
"amount_total": 75000,
"tax_total": 13025,
"amount": 75000,
"item_reference": "ITEM-008",
"hotel_name": "Hotel",
"start_date": "01-06-2026",
"end_date": "04-06-2026",
"address": "Nes",
"address2": "49",
"postal": "1012KD",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"lodging_type": "ROOM",
"rooms": 1,
"price": 25000,
"currency": "EUR",
"guests": [{"first_name": "John", "last_name": "Smith"}, {"first_name": "Jane", "last_name": "Smith"}],
"host": {
"host_reference": "HOST-0042",
"type": "HOTEL",
"country": "NL",
"registration_date": "12-01-2015",
"reservations": 312,
},
"insurances": [
{"company": "Europ", "insurance_type": "CANCELATION", "amount": 3000, "currency": "EUR"}
],
"affiliate": "example.com",
},
{
"type": "voucher",
"name": "Gift Card",
"quantity": 1,
"amount_total": 5000,
"tax_total": 869,
"amount": 5000,
"item_reference": "ITEM-009",
"start_date": "01-06-2026",
"end_date": "01-06-2027",
"voucher_type": "GIFT_CARD",
"company": "example.com",
"affiliate": "example.nl",
},
{
"type": "insurance",
"name": "Travel",
"quantity": 1,
"amount_total": 4500,
"tax_total": 782,
"item_reference": "ITEM-010",
"company": "AXA",
"insurance_type": "MEDICAL",
"amount": 4500,
"currency": "EUR",
},
{
"type": "event",
"name": "Dance Event",
"quantity": 2,
"amount_total": 15000,
"tax_total": 2607,
"amount": 7500,
"item_reference": "ITEM-011",
"company": "ID&T",
"event_type": "FESTIVAL",
"start_date": "14-10-2026",
"end_date": "18-10-2026",
"venue_name": "Example Dome",
"access_controlled": True,
"address": "De Passage 100",
"address2": "De Passage 100",
"postal": "1101AX",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"insurances": [{"company": "AXA", "insurance_type": "CANCELATION", "amount": 1500, "currency": "EUR"}],
"affiliate": "example.nl",
},
{
"type": "marketplace",
"name": "Jacket",
"quantity": 1,
"amount_total": 12500,
"tax_total": 2172,
"amount": 12500,
"product_url": "https://marketplace.example.com",
"product_image": "https://marketplace.example.com",
"product_reference": "SKU-VLJ-001",
"item_reference": "ITEM-014",
"shipping_reference": "SHIP-002",
"seller": {
"reference": "SELLER-7890",
"name": "BV",
"address": "263",
"address2": "123",
"postal": "1016GV",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"registration": "15-03-2019",
"registration_updated": "10-01-2025",
"last_login": "16-04-2026",
"rating": "HIGH",
},
"product_category": "WOMEN_CLOTHING",
"line_item_references": ["ITEM-014"],
"shipping_references": ["SHIP-002"],
"number_of_transactions": 145,
"volume_of_transactions": 1875000,
},
]
},
"additional": {
"integration_metadata": {
"originators": [
"moduleName":"cosmoshopPlugin",
"moduleVersion":"2.1",
"name":"COSMO_GAMES_STORE",
"session_reference":"018b163d-0b83-7ba0-b837-da575d0ff824"
]
}
}
}
{
"general": {
"project_id": 123456,
"payment_id": "PMT123456-789",
"signature": "<signature>",
},
"payment": {
"amount": 10000,
"currency": EUR,
"description": "Order ORD123456-789",
},
"customer": {
"id": "cust-9001001",
"first_name": "John",
"last_name": "Smith",
"phone": "31612345678",
"street": "Herengracht",
"address": "101",
"state": "NH",
"email": "john@example.com",
"city": "Amsterdam",
"country": "NL",
"zip": "1015BG",
"day_of_birth": "15-04-1985",
"ip_address": "1.0.0.4",
"identify": {
"doc_number": "19850415-1234",
"doc_issue_country": "SE",
},
"account": {
"date": "10-02-2021",
"change_date": "01-03-2026",
"loyalty_level": "01",
"auth_time": "09-03-202610:15",
"auth_method": "021",
"purchase_history": [
{
"number_of_purchases": 18,
"number_of_paid_purchases": 17,
"number_of_disputed_purchases": 1,
"total_amount": 845900,
"currency": "EUR",
"payment_method": "01",
"first_purchase_at": "14-03-202309:40",
"last_purchase_at": "01-03-202620:25",
}
],
"device_purchase_history": [
{
"number_of_purchases": 18,
"number_of_paid_purchases": 17,
"number_of_disputed_purchases": 1,
"total_amount": 845900,
"currency": "EUR",
"payment_method": "01",
"first_purchase_at": "14-03-202309:40",
"last_purchase_at": "01-03-202620:25",
}
],
},
"shipping_extended": [
{
"first_name": "John",
"last_name": "Smith",
"email": "john@example.com",
"phone": "31612345678",
"address": "Herengracht 101",
"address2": "Herengracht 101",
"postal": "1015BG",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"type": "011",
"type_attributes": ["08", "01"],
"carrier": "PostNL",
"shipping_reference": "SHIP-COMPUTER-1",
},
{
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@example.com",
"phone": "31698765432",
"address": "Keizersgracht 250",
"address2": "Keizersgracht 250",
"postal": "1016EV",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"type": "011",
"type_attributes": ["08", "07", "02"],
"carrier": "DHL",
"shipping_reference": "SHIP-COMPUTER-2",
},
],
},
"return_url": {
"return": "https://example.com/echo/success",
},
"purchase_data": {
"positions": [
{
"type": "product",
"name": "ExampleName",
"quantity": 1,
"amount_total": 189900,
"tax_total": 32958,
"amount": 189900,
"product_url": "https://merchant.example.com",
"product_image": "https://merchant.example.com",
"product_reference": "SKU-LEN-X1G12",
"item_reference": "ITEM-001",
"shipping_reference": "SHIP-001",
},
{
"type": "service",
"name": "Extended Warranty 2 Years",
"quantity": 1,
"amount_total": 19900,
"tax_total": 3458,
"amount": 19900,
"product_url": "https://merchant.example.com",
"product_image": "https://merchant.example.com",
"product_reference": "SVC-WARRANTY-2Y",
"item_reference": "ITEM-002",
"shipping_reference": "SHIP-001",
},
{
"type": "discount",
"name": "Summer Sale 10%",
"quantity": 1,
"amount_total": 20990,
"tax_total": 3643,
"amount": 20990,
"item_reference": "ITEM-003",
},
{
"type": "other",
"name": "some",
"quantity": 1,
"amount_total": 20990,
"tax_total": 3643,
"amount": 20990,
"item_reference": "ITEM-003",
},
{
"type": "flight",
"name": "Amsterdam → Stockholm",
"quantity": 2,
"amount_total": 45000,
"tax_total": 7820,
"amount": 22500,
"item_reference": "ITEM-004",
"booking_reference": "KL-20260601-AMS-ARN",
"departure": {"airport": "AMS", "date": "01-06-2026", "city": "Amsterdam", "country": "NL"},
"arrival": {"airport": "ARN", "city": "Stockholm", "country": "SE"},
"airline": "KL",
"price": 22500,
"currency": "EUR",
"class": "ECONOMY",
"passengers": [
{"first_name": "John", "last_name": "Smith"}
],
"insurances": [{"company": "AXA", "insurance_type": "CANCELATION", "amount": 2500, "currency": "EUR"}],
"affiliate": "ExamplePartner BV",
},
{
"type": "car",
"name": "7 days rental",
"quantity": 1,
"amount_total": 35000,
"tax_total": 6079,
"amount": 35000,
"item_reference": "ITEM-005",
"departure": {
"address": "Schiphol Airport",
"address2": "Terminal 3",
"postal": "1118CP",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"date": "15-06-2026",
},
"arrival": {
"address": "Arlanda Airport",
"address2": "Terminal 5",
"postal": "19060",
"city": "Stockholm",
"region_code": "AB",
"country": "SE",
},
"car_rental_company": "Hertz",
"price": 35000,
"currency": "EUR",
"class": "ECONOMY",
"passengers": [{"first_name": "John", "last_name": "Smith"}],
"insurances": [{"company": "Allianz", "insurance_type": "LOSS_DAMAGE_WAIVER", "amount": 1500, "currency": "EUR"}],
"affiliate": "example.com",
},
{
"type": "bus",
"name": "Amsterdam → Brussels Express",
"quantity": 1,
"amount_total": 2500,
"tax_total": 434,
"amount": 2500,
"item_reference": "ITEM-006",
"departure": {
"date": "15-06-2026",
"location": "Amsterdam",
"address": "Orlyplein",
"address2": "1",
"postal": "1043DP",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
},
"arrival": {
"address": "Rue du Progrès",
"address2": "80",
"postal": "1210",
"city": "Brussels",
"region_code": "BRU",
"country": "BE",
},
"bus_company": "FlixBus",
"price": 2500,
"currency": "EUR",
"class": "ECONOMY",
"passengers": [{"first_name": "John", "last_name": "Smith"}],
"insurances": [{"company": "AXA", "insurance_type": "CANCELATION", "amount": 500, "currency": "EUR"}],
"affiliate": "example.eu",
},
{
"type": "train",
"name": "Amsterdam → Newcastle Ferry",
"quantity": 2,
"amount_total": 18000,
"tax_total": 3127,
"amount": 9000,
"item_reference": "ITEM-007",
"departure": {
"date": "20-06-2026",
"location": "IJmuiden",
"address": "Sluisplein",
"address2": "33",
"postal": "1975AG",
"city": "IJmuiden",
"region_code": "NH",
"country": "NL",
},
"arrival": {
"address": "Royal Quays",
"address2": "Coble Dene",
"postal": "NE29 6EA",
"city": "Newcastle",
"region_code": "ENG",
"country": "GB",
},
"train_company": "DFDS",
"price": 9000,
"currency": "EUR",
"class": "PREMIUM_ECONOMY",
"passengers": [
{"first_name": "John", "last_name": "Smith"},
{"first_name": "Jane", "last_name": "Smith"},
],
"insurances": [
{"company": "Allianz", "insurance_type": "CANCELATION", "amount": 1000, "currency": "EUR"}
],
"affiliate": "example.eu",
},
{
"type": "ferry",
"name": "Amsterdam → Newcastle Ferry",
"quantity": 2,
"amount_total": 18000,
"tax_total": 3127,
"amount": 9000,
"item_reference": "ITEM-007",
"departure": {
"date": "20-06-2026",
"location": "IJmuiden Ferry",
"address": "Sluisplein",
"address2": "33",
"postal": "1975AG",
"city": "IJmuiden",
"region_code": "NH",
"country": "NL",
},
"arrival": {
"address": "Royal Quays, Coble Dene",
"address2": "Royal Quays, Coble Dene",
"postal": "NE29 6EA",
"city": "Newcastle",
"region_code": "ENG",
"country": "GB",
},
"ferry_line": "DFDS",
"price": 9000,
"currency": "EUR",
"class": "PREMIUM_ECONOMY",
"passengers": [
{"first_name": "John", "last_name": "Smith"},
],
"insurances": [
{"company": "Allianz", "insurance_type": "CANCELATION", "amount": 1000, "currency": "EUR"}
],
"affiliate": "example.eu",
},
{
"type": "hotel",
"name": "Hotel 1",
"quantity": 1,
"amount_total": 75000,
"tax_total": 13025,
"amount": 75000,
"item_reference": "ITEM-008",
"hotel_name": "Hotel",
"start_date": "01-06-2026",
"end_date": "04-06-2026",
"address": "Nes",
"address2": "49",
"postal": "1012KD",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"lodging_type": "ROOM",
"rooms": 1,
"price": 25000,
"currency": "EUR",
"guests": [{"first_name": "John", "last_name": "Smith"}, {"first_name": "Jane", "last_name": "Smith"}],
"host": {
"host_reference": "HOST-0042",
"type": "HOTEL",
"country": "NL",
"registration_date": "12-01-2015",
"reservations": 312,
},
"insurances": [
{"company": "Europ", "insurance_type": "CANCELATION", "amount": 3000, "currency": "EUR"}
],
"affiliate": "example.com",
},
{
"type": "voucher",
"name": "Gift Card",
"quantity": 1,
"amount_total": 5000,
"tax_total": 869,
"amount": 5000,
"item_reference": "ITEM-009",
"start_date": "01-06-2026",
"end_date": "01-06-2027",
"voucher_type": "GIFT_CARD",
"company": "example.com",
"affiliate": "example.nl",
},
{
"type": "insurance",
"name": "Travel",
"quantity": 1,
"amount_total": 4500,
"tax_total": 782,
"item_reference": "ITEM-010",
"company": "AXA",
"insurance_type": "MEDICAL",
"amount": 4500,
"currency": "EUR",
},
{
"type": "event",
"name": "Dance Event",
"quantity": 2,
"amount_total": 15000,
"tax_total": 2607,
"amount": 7500,
"item_reference": "ITEM-011",
"company": "ID&T",
"event_type": "FESTIVAL",
"start_date": "14-10-2026",
"end_date": "18-10-2026",
"venue_name": "Example Dome",
"access_controlled": True,
"address": "De Passage 100",
"address2": "De Passage 100",
"postal": "1101AX",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"insurances": [{"company": "AXA", "insurance_type": "CANCELATION", "amount": 1500, "currency": "EUR"}],
"affiliate": "example.nl",
},
{
"type": "subscription",
"name": "Adobe Creative",
"quantity": 1,
"amount_total": 5999,
"tax_total": 1042,
"amount": 5999,
"item_reference": "ITEM-012",
"subscription_reference": "ADOBE-CC-MONTHLY",
"free_trial": "INACTIVE",
"billing_plans": [
{"amount": 5999, "currency": "EUR", "start_date": "01-06-2026", "interval": "MONTH", "frequency": 1}
],
},
{
"type": "ondemand",
"name": "Cloud Storage",
"quantity": 1,
"amount_total": 1500,
"tax_total": 261,
"amount": 1500,
"item_reference": "ITEM-013",
"amount_average": 1200,
"amount_min": 500,
"amount_max": 3000,
"currency": "EUR",
"interval": "MONTH",
"frequency": 1,
},
{
"type": "marketplace",
"name": "Jacket",
"quantity": 1,
"amount_total": 12500,
"tax_total": 2172,
"amount": 12500,
"product_url": "https://marketplace.example.com",
"product_image": "https://marketplace.example.com",
"product_reference": "SKU-VLJ-001",
"item_reference": "ITEM-014",
"shipping_reference": "SHIP-002",
"seller": {
"reference": "SELLER-7890",
"name": "BV",
"address": "263",
"address2": "123",
"postal": "1016GV",
"city": "Amsterdam",
"region_code": "NH",
"country": "NL",
"registration": "15-03-2019",
"registration_updated": "10-01-2025",
"last_login": "16-04-2026",
"rating": "HIGH",
},
"product_category": "WOMEN_CLOTHING",
"line_item_references": ["ITEM-014"],
"shipping_references": ["SHIP-002"],
"number_of_transactions": 145,
"volume_of_transactions": 1875000,
},
]
},
"additional": {
"integration_metadata": {
"originators": [
"moduleName":"cosmoshopPlugin",
"moduleVersion":"2.1",
"name":"COSMO_GAMES_STORE",
"session_reference":"018b163d-0b83-7ba0-b837-da575d0ff824"
]
}
}
}
Формат запросов на списание заблокированных средств
При работе с запросами на блокировку средств с применением метода Klarna (независимо от способа взаимодействия) необходимо учитывать следующее:
- Для списания средств по каждой оплате должен использоваться отдельный POST-запрос к конечной точке
/v2/payment/klarna/capture. - В каждом запросе должны использоваться следующие объекты и параметры:
general— объект, содержащий основные идентификационные сведения запроса:project_id— идентификатор проекта, полученный от Ecommpay при интеграции;,payment_id— идентификатор платежа, уникальный в рамках проекта;,signature— подпись запроса, составленная после указания всех целевых параметров (подробнее — в разделе Работа с подписью к данным); (подробнее),
payment— объект, содержащий сведения о платеже:amount— сумма платежа;,currency— код валюты платежа в формате ISO-4217 alpha-3;,
- Дополнительно могут использоваться любые другие параметры из числа указанных в спецификации.
Таким образом, корректный запрос на списание средств с применением метода Klarna должен содержать идентификатор проекта, базовые сведения о платеже (идентификатор, сумму и код валюты), дополнительную информацию (по необходимости) и подпись.
{
"general": {
"project_id": 210,
"payment_id": "test_payment",
"signature": "PJkV8ej\/UG0Di8hTng6JvC7vQsaC6ta/9MTO8yJA=="
},
"payment": {
"amount": 1000,
"currency": "EUR"
}
{
"general": {
"project_id": 210,
"payment_id": "test_payment",
"signature": "PJkV8ej\/UG0Di8hTng6JvC7vQsaC6ta/9MTO8yJA=="
},
"payment": {
"amount": 1000,
"currency": "EUR"
}
Формат запросов на отмену блокировки средств
При работе с запросами на отмену блокировки средств с применением метода Klarna необходимо учитывать следующее:
- Для инициирования каждой отмены блокировки средств должен использоваться отдельный POST-запрос к конечной точке
/v2/payment/klarna/cancel. - В каждом запросе должны использоваться следующие объекты и параметры:
general— объект, содержащий основные идентификационные сведения запроса:project_id— идентификатор проекта, полученный от Ecommpay при интеграции;,payment_id— идентификатор платежа, уникальный в рамках проекта;,signature— подпись запроса, составленная после указания всех целевых параметров (подробнее — в разделе Работа с подписью к данным); (подробнее),
- Дополнительно могут использоваться любые другие параметры из числа указанных в спецификации.
Таким образом, корректный запрос на отмену блокировки средств с применением метода Klarna должен содержать идентификаторы проекта и платежа, а также подпись.
{
"general": {
"project_id": 210,
"payment_id": "test_payment",
"signature": "PJkV8ej\/UG0Di8hTng6JvC7pTv+AWoXW\/9MTO8yJA=="
}
}
{
"general": {
"project_id": 210,
"payment_id": "test_payment",
"signature": "PJkV8ej\/UG0Di8hTng6JvC7pTv+AWoXW\/9MTO8yJA=="
}
}
Формат данных для перенаправления пользователей
Для перенаправления пользователей от веб-сервиса мерчанта к сервису Klarna при проведении каждого платежа с использованием метода Klarna необходимо принять промежуточное оповещение от платёжной платформы и использовать информацию из него, включённую в объект redirect_data. Для перенаправления пользователя может использоваться SDK Klarna (подробнее) или ссылка из оповещения. Формат таких оповещений является типовым (подробнее), при этом в состав объекта redirect_data включаются следующие объекты и параметры:
body— объект с данными для отправки в теле запроса, включает в себя параметрpayment_request_idс данными для использования SDK Klarna при перенаправлении пользователя;method— параметр с указанием HTTP-метода отправки запроса (GETилиPOST);url— параметр со ссылкой для перенаправления.
"redirect_data": { "body": { "payment_request_id": "krn:payment:eu1:request:e6bab34f" }, "method": "GET", "url": "https://pay.examople.com/eu/requests/92ba6a6b" },
Формат оповещений
Для итоговых оповещений об оплатах с применением метода Klarna используется типовой формат, описание которого представлено в разделе Работа с оповещениями.
В следующем примере оповещение свидетельствует о том, что в рамках проекта 442 была проведена оплата в размере 10,00 EUR.
{
"project_id": 442,
"payment": {
"id": "EP696e-3aea",
"type": "purchase",
"status": "success",
"date": "2022-10-07T19:28:58+0000",
"method": "Klarna",
"sum": {
"amount": 1000,
"currency": "EUR"
},
"description": ""
},
"customer": {
"id": "12345"
},
"operation": {
"id": 33,
"type": "sale",
"status": "success",
"date": "2022-10-07T19:28:58+0000",
"created_date": "2022-10-07T19:28:14+0000",
"request_id": "a8ea69fdc5a83a2622-00000001",
"sum_initial": {
"amount": 1000,
"currency": "EUR"
},
"sum_converted": {
"amount": 1000,
"currency": "EUR"
},
"code": "0",
"message": "Success",
"provider": {
"id": 18052,
"payment_id": "1665170919576",
"auth_code": ""
}
},
"signature": "h14kSk782IZEgezTRpbZVe/54KGgd7mA=="
}
В следующем примере оповещение свидетельствует об отклонённой оплате.
{
"project_id": 442,
"payment": {
"id": "EP1d27-e7ee",
"type": "purchase",
"status": "decline",
"date": "2022-10-10T09:28:33+0000",
"method": "Klarna",
"sum": {
"amount": 1500000,
"currency": "EUR"
},
"description": ""
},
"customer": {
"id": "12345"
},
"operation": {
"id": 38,
"type": "sale",
"status": "decline",
"date": "2022-10-10T09:28:33+0000",
"created_date": "2022-10-10T09:28:19+0000",
"request_id": "f56812a9270c19c04-00000001",
"sum_initial": {
"amount": 1500000,
"currency": "EUR"
},
"sum_converted": {
"amount": 1500000,
"currency": "EUR"
},
"code": "20000",
"message": "General decline",
"provider": {
"id": 18052,
"payment_id": "",
"auth_code": ""
}
},
"signature": "ZS90VEL4x5avOhc4MG85STSog=="
}
Дополнительные материалы
Для организации работы с разовыми оплатами через Gate также могут быть полезны следующие материалы:
- Быстрый старт — инструкция по оперативной организации приёма платежей через Gate, с использованием примеров исходного кода на PHP и Go.
- Организация взаимодействия — статья о том, как строится работа с платёжной платформой через Gate и как можно организовывать эту работу со стороны веб-сервиса, опираясь на используемые схемы и форматы взаимодействия.
- Работа с подписью к данным — статья о порядке создания и проверки подписи, используемой в программных запросах, ответах и оповещениях для обеспечения защищённого обмена данными при взаимодействии с платёжной платформой.
- Проведение платежей — статьи о типах платежей, которые можно проводить через платформу, схемах их проведения и допустимых операциях и статусах.
- Оплата в одну стадию — статья о порядке проведения через Gate разовых одностадийных оплат с незамедлительными списаниями.
- Оплата в две стадии — статья о порядке проведения через Gate разовых двухстадийных оплат с предварительными блокировками средств и последующими списаниями.
- Работа с информацией об операциях — статья о статусах и служебных кодах, которые используются в платформе, чтобы фиксировать состояние операций и причины их отклонения.
Возвраты через Gate
Общая информация
Для выполнения возврата через Gate с использованием метода Klarna со стороны веб-сервиса необходимо отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL Ecommpay и принять оповещение о результате. Полная схема выполнения возврата выглядит следующим образом.
- Пользователь инициирует возврат.
- От веб-сервиса на заданный URL Ecommpay передаётся запрос на выполнение возврата.
- Запрос на выполнение возврата поступает в платёжную платформу Ecommpay.
- В платёжной платформе выполняется приём запроса с проверкой наличия обязательных параметров и корректной подписи.
- От платёжной платформы к веб-сервису направляется ответ с информацией о получении запроса и его корректности (подробнее).
- В платёжной платформе обеспечиваются дальнейшая обработка запроса (с проверкой согласованности параметров) и его отправка в сервис Klarna.
- В сервисе Klarna выполняется обработка возврата.
- От сервиса Klarna к платёжной платформе направляется информация о результате возврата.
- От платёжной платформы к веб-сервису направляется оповещение о результате возврата.
- На стороне веб-сервиса обеспечивается информирование пользователя о результате возврата.
Информация о форматах запросов и оповещений, используемых для выполнения возвратов методом Klarna через Gate, приведена далее в этом разделе; общая информация о работе с Gate API — в отдельной статье Организация взаимодействия.
Формат запросов
При работе с запросами на возвраты с применением метода Klarna необходимо учитывать следующее:
- Для инициирования каждого возврата должен использоваться отдельный POST-запрос к конечной точке /v2/payment/refund.
- В каждом запросе должны использоваться следующие объекты и параметры:
general— объект, содержащий основные идентификационные сведения запроса:project_id— идентификатор проекта, полученный от Ecommpay при интеграции;,payment_id— идентификатор платежа, для которого необходимо выполнить возврат;,signature— подпись запроса, составленная после указания всех целевых параметров (подробнее — в разделе Работа с подписью к данным); (подробнее)),
payment— объект, содержащий сведения о возврате:description— комментарий к возврату или его описание;amount— сумма возврата в дробных единицах валюты (является обязательной при частичном возврате);,currency— код валюты возврата в формате ISO-4217 alpha-3 (является обязательным при частичном возврате);,
customer— объект, содержащий сведения о пользователе:ip_address— IP-адрес пользователя, актуальный для инициируемого возврата.
purchase_data— массив с информацией о товарных позициях заказа, возврат по которым необходимо инициировать (в случае полного возврата необходимо указать все позиции, по которым была проведена оплата или блокировка средств). Структура и формат данных для указания в параметре совпадают с описанной в разделе Оплаты через Gate.
- Дополнительно могут использоваться любые другие параметры из числа указанных в спецификации.
Таким образом, корректный запрос на возврат с применением метода Klarna должен содержать идентификаторы проекта и платежа, описание возврата, IP-адрес пользователя, информацию о товарных позициях, подпись, а также, при необходимости, код валюты и сумму возврата.
{
"general": {
"project_id": 210,
"payment_id": "test_payment",
"signature": "PJkV8ej\/UG0Di8hTng6JvipTv+AWoXW\/9MTO8yJA=="
},
"payment": {
"description": "test refund",
"amount": 1000,
"currency": "EUR"
},
"customer": {
"ip_address": "192.0.2.0"
},
"purchase_data": {
"positions": [
{
"type": "product",
"name": "Lenovo",
"quantity": 1,
"amount_total": 189900,
"tax_total": 32958,
"amount": 189900,
"product_url": "https://example.com",
"product_image": "https://example.com",
"product_reference": "SKU-LEN-X1G12",
"item_reference": "ITEM-001",
"shipping_reference": "SHIP-001",
}
]
}
{
"general": {
"project_id": 210,
"payment_id": "test_payment",
"signature": "PJkV8ej\/UG0Di8hTng6JvipTv+AWoXW\/9MTO8yJA=="
},
"payment": {
"description": "test refund",
"amount": 1000,
"currency": "EUR"
},
"customer": {
"ip_address": "192.0.2.0"
},
"purchase_data": {
"positions": [
{
"type": "product",
"name": "Lenovo",
"quantity": 1,
"amount_total": 189900,
"tax_total": 32958,
"amount": 189900,
"product_url": "https://example.com",
"product_image": "https://example.com",
"product_reference": "SKU-LEN-X1G12",
"item_reference": "ITEM-001",
"shipping_reference": "SHIP-001",
}
]
}
Формат оповещений
Для оповещений о результатах возвратов с применением метода Klarna используется типовой формат, описание которого представлено в разделе Работа с оповещениями.
В следующем примере оповещение свидетельствует о том, что в рамках проекта 442 был выполнен частичный возврат в размере 3,00 EUR.
{
"project_id": 442,
"payment": {
"id": "EP8806-91ba",
"type": "purchase",
"status": "partially refunded",
"date": "2022-10-10T13:21:33+0000",
"method": "Klarna",
"sum": {
"amount": 300,
"currency": "EUR"
},
"description": ""
},
"customer": {
"id": "12345"
},
"operation": {
"id": 46,
"type": "refund",
"status": "success",
"date": "2022-10-10T13:21:33+0000",
"created_date": "2022-10-10T13:21:23+0000",
"request_id": "b132a7883e19d0fe21b8fd1-00000001",
"sum_initial": {
"amount": 700,
"currency": "EUR"
},
"sum_converted": {
"amount": 700,
"currency": "EUR"
},
"code": "0",
"message": "Success",
"provider": {
"id": 18052,
"payment_id": "1665408090952",
"auth_code": ""
}
},
"signature": "7upYXNzrL/tQfYO0rwjvkc9LbDPkwSw=="
}
В следующем примере оповещение свидетельствует о возврате, отклонённом из-за превышения суммы оплаты.
{
"project_id": 211,
"payment": {
"id": "refund_02",
"type": "purchase",
"status": "success",
"date": "2019-02-19T14:25:25+0000",
"method": "Klarna",
"sum": {
"amount": 100000,
"currency": "EUR"
},
"description": "test_02"
},
"account": {
"number": "035209875690435"
},
"operation": {
"id": 14153000003282,
"type": "refund",
"status": "decline",
"date": "2019-02-19T14:25:25+0000",
"created_date": "2019-02-19T14:25:24+0000",
"request_id": "9d11b2ca618ec3ba0f5fa58f174",
"sum_initial": {
"amount": 100000,
"currency": "EUR"
},
"sum_converted": {
"amount": 100000,
"currency": "EUR"
},
"provider": {
"id": 1169,
"payment_id": "105887607",
"date": "2019-02-19T14:25:24+0000",
"auth_code": ""
},
"code": "3283",
"message": "Refund amount more than init amount"
},
"signature": "of8k9xerKSKpFBR4XL0Sf/7eg=="
}
Дополнительные материалы
Для организации работы с возвратами через Gate также могут быть полезны следующие материалы:
- Организация взаимодействия — статья о том, как строится работа с платёжной платформой через Gate и как можно организовывать эту работу со стороны веб-сервиса, опираясь на используемые схемы и форматы взаимодействия.
- Работа с подписью к данным — статья о порядке создания и проверки подписи, используемой в программных запросах, ответах и оповещениях для обеспечения защищённого обмена данными при взаимодействии с платёжной платформой.
- Проведение платежей — статьи о типах платежей, которые можно проводить через платформу, схемах их проведения и допустимых операциях и статусах.
- Возвраты средств после оплат — статья о порядке выполнения через Gate возвратов по проведённым ранее оплатам разных типов.
- Работа с информацией об операциях — статья о статусах и служебных кодах, которые используются в платформе, чтобы фиксировать состояние операций и причины их отклонения.
Возвраты через Dashboard
При использовании интерфейса Dashboard можно выполнять одиночные и массовые возвраты методом Klarna с единичной и пакетной отправкой запросов, называемые соответственно одиночными и массовыми.
- Для выполнения одиночного возврата необходимо выбрать целевую оплату, открыть карточку этой оплаты, указать сумму возврата, отправить запрос и убедиться в выполнении возврата.
-
Для выполнения массового возврата необходимо подготовить и загрузить файл с информацией обо всех целевых возвратах, отправить пакет запросов и убедиться в выполнении возвратов.
При этом должен использоваться файл формата CSV, структура которого соответствует требованиям, представленным в разделе Сведения о массовых платежах, а параметры возвратов — требованиям, представленным в разделе Возвраты через Gate этой статьи (за исключением пункта о подписи).
Более подробная информацияИнформация о выполнении возвратов через Dashboard представлена в отдельном разделе.
Анализ результатов проведения платежей
Для анализа информации о платежах и операциях, как в отдельности по методу Klarna, так и в совокупности с другими методами, можно использовать:
- инструментарий интерфейса Dashboard, с различными реестрами и аналитическими панелями;,
- отчёты в формате CSV, выгружаемые (как разово, так и периодически) через раздел Отчёты интерфейса Dashboard;,
- данные в формате JSON, получаемые по программным запросам через интерфейс Data API.
С вопросами по анализу информации о платежах и операциях можно обращаться к разделам документации (Dashboard и Использование Data API) и специалистам Ecommpay.