Введение
Мы предполагаем, что если вы здесь, значит, вы зарегистрировались в личном кабинете, пообщались с нашим отделом продаж, определились с типом взаимодействия с нами и готовы перейти к тестированию боевых, либо тестовых параметров. Получили сертификат, токен и готовы продолжить.
Что дальше:
- Подключите свое ПО к нашей демо-зоне
- Проведите несколько тестовых платежей
- Выводите свое ПО в боевой режим
Основные понятия
Мерчант - получатель платежа. Например, в схеме подключения “Оплата поездки на виртуальную карту Лайт” мерчантом будет выступать водитель.
Рекуррентный платеж - платеж, созданный по ранее сохраненным данным банковской карты.
Поставщик услуг (Принципал, ПУ, провайдер услуг) - юридическое лицо или индивидуальный предприниматель, получающие денежные средства Плательщика за реализуемые Поставщиком Услуги, а также органы государственной власти и местного самоуправления, бюджетные учреждения, получающие денежные средства Плательщика в рамках выполнения ими функций, установленных законодательством РФ.
Общество - юридическое лицо, действующее по поручению Поставщика, являющееся посредником между Поставщиком и конечным потребителем услуги (Плательщиком).
Банк - эмитент - банк, выпускающий в обращение (эмитирующий) денежные знаки или ценные бумаги и платёжно-расчётные документы (банковские карты, чековые книжки). В нашем случае, говоря простыми словами, это банк, имеющий доступ к денежным средствам на счете клиента.
Холд (Предзаморозка, Предавторизация средств) - это предварительная блокировка средств на счете карты банка-эмитента для последующего списания. Применима в схемах оплаты поездки такси - после заказа такси средства холдируются, а после успешного совершения поездки производится списание средств.
Интернет эквайринг - технология, позволяющая принимать к оплате банковские карты, виртуальные карты и электронные кошельки.
Агрегатор - компании, предоставляющие программное обеспечение Поставщикам Услуг. Фактически, интеграция происходит в программном обеспечении Агрегатора.
Технолог - разработчик программного обеспечения, который имеет собственный процессинг и предоставляет собственную инфраструктуру клиенту.
Процессинг - это деятельность по обработке информации, используемой при совершении платёжных операций. Такую деятельность осуществляют процессинговые центры.
ОП - отдел продаж
Процесс интеграции
Общие требования:
-
Мы работаем по типу подключения
host-to-host
-
Обмениваемся сообщениями в формате
JSON
-
Protocol не ниже
TLSv1.2
-
Авторизация по протоколу BasicAuth.
Login:Password
-shopToken:secKey
Авторизационные данные передавайте в заголовках
-
Ответы будут приходить с адресов:
178.161.210.54
и94.138.149.0/24
. Проследите чтоб их пропускал ваш файрвол. -
Ориентируйтесь на время прохождения транзакции 30 - 60 секунд (от создания платежа до передачи денежных средств поставщику услуг)
Тестовые параметры:
-
Тестовый URL для магазинов, для оплаты поездок на р/с и виртуальную карту Лайт - https://demo-api2.ckassa.ru/api-shop
-
Тестовый URL для оплаты поездок на кошелек - https://demo-api2.ckassa.ru/api-merchant
Тестовые карты
Вы можете проверить сценарий оплаты банковскими картами разных типов с разными результатами:
pan (номер карты) | срок | CVV | ожидаемый результат | RC | Платёжная система | Актуальная |
---|---|---|---|---|---|---|
5479 2700 0000 0000 | 03/22 | 123 | Успех с 3ds 12345678 | 00 | MASTER CARD | Да |
4111 1111 1111 1111 | 12/24 | 123 | Успех с 3ds 12345678 | 00 | VISA | Да |
-Для получения RC=05 необходимо ввести неверный код cvc2. |
Shop name
- любой
shopToken
- 1a4c0d33-010c-4365-9c65-4c7f9bb415d5
secKey
- 6a7abaad-2147-4646-b91a-435b5d97527b
Тестовый код услуги для оплаты поездок:
Code | serviceCode | Тип услуги |
---|---|---|
17526 |
1000-13864-2 | Зачисление на р/с без комиссии |
Реквизиты для параметра properties по услуге 1000-13864-2:
- ПОЗЫВНОЙ - целое число от 1 до 9 символов
- БАЛАНС - тип сумма, от 1 до 10 символов
- ЛИЦЕВОЙ_СЧЕТ - строка от 1 до 9 символов, обязательный, ключевой
Боевые параметры
-
URL для магазинов, для оплаты поездок на р/с и виртуальную карту Лайт - https://api2.ckassa.ru/api-shop/rs/shop
-
URL для оплаты поездок на Кошелек - https://api2.ckassa.ru/api-shop/rs/merchant
-
ServCode
будет выслан письмом техническому специалисту
Теперь, чтоб перейти в боевой режим, необходимо создать боевой магазин
Для этого авторизуемся в личном кабинете
-
Находим заявку на подключение и внизу нажимаем "получить токен и ключ":
-
Откроется форма потдверждения. СМС код придет на телефон технического специалиста:
-
После ввода кода необходимо выбрать какие типы
callback
вы хотите получать: -
Появятся поля для заполнения ссылок на
callback
: -
Обратите внимание. Несмотря на то, что полей для ссылок может быть несколько, мы принимаем только одну ссылку для любых типов
callback
Мы считаем это багом и скоро его исправим.
А пока, необходимо во все поля писать одну и ту же ссылку.
-
Осталось нажать "подтвердить и вы получите нужные вам
ShopToken
иSecKey
: -
Готово! Вы, как всегда, восхитительны! Успешной вам интеграции! Побольше платежей и поменьше
error
'ов!
Платеж с 3ds
Некоторые рекуррентные платежи невозможны без данной технологии.
При этом будет сгенерировано исключение NeedPass3dsException
(смотри код 2365 в разделе Разбор ошибок), которое содержит номер платежа regPayNum
и securePageURL
(URL -
тот, на который необходимо перенаправить пользователя для прохождения 3ds методом GET)
Ислючение может быть получено на этапе создания рекуррента (описан в разделе "создание платежа"), а так же на этапе проверки статуса платежа (описан в разделе "Получение статуса платежа")
Параметр needRegCard
Используется только для рекуррентных платежей без параметра cardToken
, необходим для привязки карты к пользователю после успешно оплаты
Данный парамер определяет необходимость принудительного 3ds для платежа
Задается при Создании рекуррентного платежа
Значения для данного параметра следующие:
-
false
- включен по умолчанию
Приfalse
принудительная поддержка 3ds при платеже не будет использоваться, будет применен стандартный путь оплаты, если во время проведения платежа, у пользователя окажется высокий рейтинг или же пользователь уже платил данной картой, 3ds вызван не будет и наоборот, если пользователь имеет низкий рейтинг или же не оплачивает картой в первый раз, 3ds будет вызван -
true
Приtrue
включается принудительная поддержка 3ds при платеже, исключая высокий рейтинг пользователя, а также оплачивал данный пользователь картой в первый раз или нет, данные условия работать не будут, платеж будет всегда с 3ds. Если Вы используете схему с привязкой карты после успешного рекурреннтного платежа без параметраcardToken
, параметрneedCardReg
требуется передавать всегда
Параметр enableSMSConfirm
-
false
- включен по умолчанию -
true
Используется только для рекуррентных платежей
Данный параметр определяет включать ли поддержку 3ds
Задается при Создании платежа
При необходимости пройти 3ds, будет сгенерировано исключение: CreatePaymentException
(код 1295), либо CantDoRecurrent
(код 2360) в разделе разбор ошибок
При необходимости пройти 3ds платёж будет создан. При проверке статуса) данного платежа будет сгенерировано исключение NeedPass3dsException
(код 2365)
В параметре securePageURL
будет передана ссылка на прохождение 3дс, перенаправьте по ней клиента вызовом метода GET
Тэги для работы с 3ds в мобильном приложении
Фрагмент HTML разметки с блоком успеха
Успешная оплата
Фрагмент HTML разметки с блоком ошибки
Ошибка проведения платежа
Обратитесь в нашу поддержку support@ckassa.ru
Общая логика
При работе с 3дс приложение загружает страницы в WebView. Каждая загруженная страница парсится в html документ с помощью JSOUP. Выполняется поиск идентификаторов, которые используются для того, чтобы можно было определить что загруженная страница - последняя, больше редиректов не будет и можно закрывать WebView.
Страница успеха
Содержит html тэг с идентификатором endpoint_result
, внутри которого должен находиться тэг с идентификатором endpoint_success
.
Страница ошибки
Содержит html тэг с идентификатором endpoint_result
, внутри которого должен находиться тэг с идентификатором endpoint_error
.
-
error_title
-
error_text
На основе содержимого этих тэгов создастся исключение, которое будет позже показано пользователю в виде AlertDialog
error_title - Заголовок ошибки. Отображается как заголовок диалога. Если error_title не будет найден, по умолчанию используется текст Ошибка проведения платежа
error_text - Детальное описание (причина) ошибки. Отображается как сообщение диалога. Если error_text не будет найден, используется текст Обратитесь в нашу поддержку
Параметр shopLogin
Пример тела запроса
{
"login": "79029991515",
"shopLogin": true,
"serviceCode": "XXX-XXXXX-X",
"amount": "1000",
"comission": "40",
"properties": [
{
"name": "ПОЗЫВНОЙ",
"value": "12345"
}
]
}
Пример тела ответа
{
"sign": "SIGN",
"userToken": "USER_TOKEN",
"shopToken": "SHOP_TOKEN",
"regPayNum": "REG_PAY_NUM",
"payUrl": "ССЫЛКА НА ОПЛАТУ",
"methodType": "GET",
"payUrlImg": null
}
Данный метод служит для авторегестрации пользователя после создания платежа
Доступен для методов do/payment и do/payment-rezerv
Работает следующим образом:
- Пользователь зарегистрирован на одном из магазинов методом user/registration для этого обязательно необходимо добавлять параметр shopLogin со значением true
- Пользователь где-либо нажимает оплатить, при этом отправляется запрос на создание платежа с его логином и параметром shopLogin со значением true
-
Пользователь при создании платежа и дальнейшней оплате привязывается к новому
shopToken
, получая уже другойuserToken
userToken
Так можно, не регистрируя пользователя, создать платеж, получив его userToken
с любого другого магазина, если он был зарегистрирован на каком нибудь из магазинов ранее
Параметр fiscalType
Значение данной опции определяет нужно ли отправлять фискальный чек. Возможные значения:
а) email
- отправить фискальный чек на почту
б) none
(по умолчанию) - фискальный чек не нужен
Если значение fiscalType - email, то добавляется следующий параметр userEmail
- e-mail для отправки фискального чека
Параметр payType
Создан для того, чтоб указать тип оплаты в запросах. Возможные значения поля:
-
сard - оплата картой (установлен по умолчанию), вместе с ним обязателен параметр
cardToken
-
gPay - оплата через сервис GooglePay, с ним обязателен параметр
gpayToken
-
applePay - оплата через сервис ApplePay, с ним обязателен параметр
applePayToken
-
mirPay - оплата через сервис Mir Pay, с ним обязателен параметр
mirPayToken
-
fiscalCash - информационный платеж. Позволяет регистрировать в ФНС наличные платежи
-
sbp - оплата через сервис СБП, недоступно для метода создания платежа с бронированием суммы и при использовании параметра
holdTTL
, ответ будет содержать дополнительный параметрpayUrlImg
, в котором передаётся QR-код, зашифрованный в Base64. В параметреpayUrl
передаётся ссылка на оплату через сервис СБП. -
sberPay - оплата через SberPay, доступен для методов Магазин. Анонимный платеж, Магазин. Рекуррентный платеж и Магазин. Поездка на Р/С с ним обязателен параметр
userPhone
- телефон Клиента Сбербанка, 11 символов. Уведомления о привязке и удалении карт пока не предусмотрены
Параметр payTypeVisible
Устанавливает очередность и скрытие способов оплаты на платежной форме. Возможные значения :
-
сard
-
sbp
-
sberPay
-
mirpay
Параметр orderBestBefore
Данным параметром можно передать время истечения жизни заказа (в секундах). Время, до которого нужно оплатить заказ.
Значение параметра - абсолютная дата UTC, в секундах (сформировать абсолютную дату). Например:
По умолчанию срок жизни заказа 72 часа
-
1574934178
-
UTC Thu Nov 28 2019 09:42:58
-
PERM UTC+5 Thu Nov 28 2019 14:42:58
Параметр orderItems
Пример запроса на создание платежа с указанием пользовательской корзины
{
"serviceCode": "100-5333-1",
"amount": 4500,
"comission": 5,
"payType": "card",
"userPhone": "79504609010",
"fiscalType": "none",
"properties": [
{
"name": "Л/СЧЕТ",
"value": "9503006477"
},
{
"name": "ФИО",
"value": "Иванов Н П"
},
{
"name": "АДРЕС",
"value": "Ленина 10"
},
{
"name": "МЕСЯЦ",
"value": "05.2015"
},
{
"name": "СУММА_ПЕНИ",
"value": "10000"
}
],
"orderItems": [
{
"num": 1,
"name": "name1",
"quantity": 2,
"price": 100,
"tax": "vat0",
"methodType": "advance",
"subjectType": "job",
"nomenclatureCode": "lottery"
},
{
"num": 2,
"name": "name2",
"quantity": 5,
"price": 50,
"tax": "vat110",
"methodType": "advance",
"subjectType": "job",
"nomenclatureCode": "lottery"
}
]
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
}
orderItems - Описание предметов расчета (тег 1059 в фискальном чеке).
Параметр - public class OrderItems
Сумма товаров в корзине должна равняться сумме платежа
- Поездка с оплатой на р/с
- Магазин. Анонимный платеж
- Магазин. Рекуррентный платеж
Применим в следующих типах магазинов:
Структура данных:
"orderItems":[{"num":1,"name":"name1","quantity":2,"price":100,"tax":"vat0"},{"num":2,"name":"name2","quantity":5,"price":50,"tax":"vat110"},{...}]
Описание данных:
-
num
- номер предмета рассчета в чекеТип: целое число
В пределах одного платежа данное значение должно быть уникальным
-
name
- наименование предмета расчетаТип: строка
-
quantity
- количество предмета рассчетаТип: десятичное число
-
price
- цена за единицу в копейкахТип: целое число
-
tax
- cтавка НДСВозможные значения:
-
none
- без НДС -
vat0
- НДС по ставке 0% -
vat10
- НДС чека по ставке 10% -
vat18
- НДС чека по ставке 18% -
vat110
- НДС чека по расчетной ставке 10/110 -
vat118
- НДС чека по расчетной ставке 18/118 -
vat20
- НДС чека по ставке 20% -
vat120
- НДС чека по расчетной ставке 20/120
-
-
methodType
- признак способа расчета (табл DIC_FNS_METHODTYPE). Параметр необязательный. Если параметр не будет передан, заполняется значение по умолчанию -full_payment
.Тип: строка
Возможные значения:
-
full_prepayment
- предоплата 100%. Полная предварительная оплата до момента передачи предмета расчета. -
prepayment
- предоплата. Частичная предварительная оплата до момента передачи предмета расчета. -
advance
- аванс. -
full_payment
- полный расчет. Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета. -
partial_payment
- частичный расчет и кредит. Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит. -
credit
- передача в кредит. Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит. -
credit_payment
- оплата кредита. Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита).
-
-
subjectType
- признак предмета расчета (табл DIC_FNS_SUBJECTTYPE). Параметр необязательный. Если параметр не будет передан, заполняется значение по умолчанию -service
.Тип: строка
Возможные значения:
-
commodity
- товар. О реализуемом товаре, за исключением подакцизного товара (наименование и иные сведения, описывающие товар). -
excise
- подакцизный товар. О реализуемом подакцизном товаре (наименование и иные сведения, описывающие товар). -
job
- работа. О выполняемой работе (наименование и иные сведения, описывающие работу). -
service
- услуга.Об оказываемой услуге(наименование и иные сведения, описывающие услугу). -
gambling_betm
- ставка азартной игры.О приеме ставок при осуществлении деятельности по проведению азартных игр. -
gambling_prize
- выигрыш азартно игры.О выплате денежных средств в виде выигрыша при осуществлении деятельности по проведению азартных игр. -
lottery
- лотерейный билет. О приеме денежных средств при реализации лотерейных билетов, электронных лотерейных билетов, приеме лотерейных ставок при осуществлении деятельности по проведению лотерей. -
lottery_prize
- выигрыш лотереи. О выплате денежных средств в виде выигрыша при осуществлении деятельности по проведению лотерей. -
intellectual_activity
- предоставление результатов интеллектуальной деятельности. О предоставлении прав на использование результатов интеллектуальной деятельности или средств индивидуализации. -
payment
- платеж. Об авансе, задатке, предоплате, кредите, взносе в счет оплаты,пени,штрафе,вознаграждении, бонусе и ином аналогичном предмете расчета. -
agent_commission
- агентское вознаграждение. О вознаграждении пользователя, являющегося платежным агентом(субагентом), банковским платежным агентом (субагентом),комиссионером, поверенным или иным агентом. -
composite
- составной предмет расчета. О предмете расчета, состоящем из предметов, каждому из которых может быть присвоено значение выше перечисленных признаков. -
another
- иной предмет расчета.О предмете расчета, не относящемуся к выше перечисленным предметам расчета. -
property_right
- имущественное право. О передаче имущественных прав. -
non-operating_gain
- внереализационный доход. О внереализационном доходе. -
insurance_premium
- страховые взносы. О суммах расходов, уменьшающих сумму налога(авансовых платежей) в соответствии с пунктом 3.1 статьи 346.21 Налогового кодекса Российской Федерации. -
sales_tax
- торговый сбор. О суммах уплаченного торгового сбора. -
resort_fee
- курортный сбор. О курортном сборе.
-
nomenclatureCode
- Код товара.
Тип: строка
Параметр clientAuInfo
Пример заполнения параметра clientAuInfo
{
"ipAddress": "xxx.xxx.xxx.xxx",
"agentName": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0",
"authenticationInfo": "e2RldmljZS5icm93c2VyQWNjZXB0SGVhZGVyPXRleHQvaHRtbA0KZGV2aWNlLmJyb3dzZXJJUD05NC4xMzguMTQ5LjM0DQpicm93c2VySmF2YUVuYWJsZWQ6IGZhbHNlDQpicm93c2VyTGFuZ3VhZ2U6ICJydS1SVSINCmJyb3dzZXJDb2xvckRlcHRoOiAyNA0KYnJvd3NlclNjcmVlbkhlaWdodDogMTA4MA0KYnJvd3NlclNjcmVlbldpZHRoOiAxOTIwDQpicm93c2VyVFo6IC0zMDANCmJyb3dzZXJVc2VyQWdlbnQ6ICJNb3ppbGxhLzUuMCAoWDExOyBVYnVudHU7IExpbnV4IHg4Nl82NDsgcnY6ODAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84MC4wIn0="
}
Скрипт получения данных в браузере клиента
function getFingerprint() {
return btoa(JSON.stringify({
browserTZ: new Date().getTimezoneOffset(),
browserColorDepth: window.screen.colorDepth,
browserScreenHeight: window.screen.height,
browserScreenWidth: window.screen.width,
browserLanguage: navigator.language,
browserUserAgent: window.navigator.userAgent,
browserJavaEnabled: window.navigator.javaEnabled()
}));
}
В параметре clientAuInfo
необходимо передавать данные для корректного прохождения 3ds v2.
Применимо только для методов рекуррентного платежа: Создание платежа, поездка, Создание платежа с бронированием суммы, поездка, Создание платежа, Лайт, Создание платежа с бронированием суммы, Лайт, Создание платежа, Лайт мерчант, Создание платежа с бронированием суммы, Лайт мерчант, Cоздание рекуррентного платежа
Для метода Анонимного платежа наша форма оплаты сама соберёт необходимые данные.
Описание данных:
-
ipAddress
- IP-адрес плательщика -
agentName
- Имя приложения клиентаТип: строка
-
authenticationInfo
- Строка base64, содержит json информацию о браузере клиента согласно документацииEMVCo 3DS Spec v220 122018
Тип: строка
Достаточно передать параметры
AcceptHeader
, IP,JavaEnabled
,Language
,ColorDepth
,ScreenHeight
,ScreenWidth
,TZ
,UserAgent
-
acceptHeader
- значение заголовка HTTP Accept полученного от клиента. Необходим для реккурентов некоторых банков.
Параметр orderNote
В параметре orderNote
передаются дополнительные данные, которые будут отображаться на платёжной форме.
Доп. справочное поле для пользователя.
Применимо только для методов, когда используется форма для ввода данных карты: Создание платежа, анонимного платежа, Cоздание рекуррентного платежа с типом оплаты картой ("payType":"card"
) и без заполненного параметра cardToken
Описание:
orderNote
- тип строка, 3-50 символов, допустимые символы - латинские буквы, кириллица, знаки -+.,:;()_
В параметре также есть возможность передачи валюты. Для этого необходимо указать валюту в кодировке ISO 4217 (буквенной). На форме ввода данных карты валюта в кодировке ISO 4217 будет показа символьным эквивалентом. Передавать в параметр валюту необходимо в таком виде _RUB_
Список допустимых валют:
Буквенный код | Цифровой код | Валюта | Разменная валюта | Символ |
---|---|---|---|---|
RUB | 643 | российский рубль | копейки (1⁄100) | ₽ |
KZT | 398 | тенге, Казахстан | тиын(1⁄100) | 〒 |
USD | 840 | американский бакс | цент (1⁄100) | $ |
EUR | 978 | ойро | евроцент (1⁄100) | € |
GPB | 826 | фунт, Великобритания | пе́нни (1⁄100) | £ |
KGS | 417 | сом, Киргизия | тыйын (1⁄100) | с • |
UZS | 860 | сум, узбекский | тийин (1⁄100) | So'm |
AZN | 944 | азербайджанский манат | гяпик (1⁄100) | ₼ |
GEL | 981 | лари, Грузия | тетри (1⁄100) | ₾ |
TRY | 949 | турецкая лира | куруш (1⁄100) | ₺ |
CNY | 156 | юань | фынь (1⁄100) | ¥ |
AMD | 051 | армянский драм | лума (1⁄100) | ֏ |
Статусы платежей
Платеж - последовательная сущность. Он линейно переходит из одного статуса в другой. Если что-то пошло не так, есть альтернативный набор статусов, сигнализирующий о неуспешности оплаты.
Cтатусы c неуспешным результатом (платеж не достиг состояния "оплачен"):
-
created_error
- ошибка при создании платежа -
created
- платеж создан, но не оплачен -
rejected
- платеж отменен (если оплачивает не рекуррент, то возможен переход в статусpayed
, например, при повторном вводе данных карты) -
refunded
- оплата возвращена -
payed
- платеж оплачен. Статус присваивается когда в банк-эквайер отправлен запрос на перевод денежных средств и банк-эквайер принял этот запрос для исполнения. -
holded
- денежные средства заморожены -
processed
- - платеж оплачен и успешно проведен. Не может смениться, т.к. транзакция уже завершена. -
error
- ошибка при проведении (платеж оплачен, но при проведении платежа возникла ошибка)
Платеж оплачен и ожидает исполнения (можно оказывать услугу):
Получение статуса платежа
Пример запроса статуса платежа
{
"regPayNum":"1310958041"
}
Пример ответа
{
'errorCode':'1001',
'provisionServices':'true',
totalAmount':'100000',
'serviceCode':'serviceCode',
'providerName':'providerName',
'state':'payed',
'createdDate':'2012-10-06 03:02:01',
'error':'error',
'message':'message',
'procDate':'2015-01-05 12:14:18'
}
{ " "state":"holded", "totalAmount":2575, "createdDate":"2020-05-29 14:11:21", "providerServCode":"1000-13864-3", "providerName":"Тест ShopAPI", "errorCode":null, "error":null, "message":null, "provisionServices":false, "procDate":null }
Отправляется несколько попыток с нарастающим интервалом
Наш API позволяет отправлять повторные уведомления для одного платежа, в таких случаях ожидается успешный ответ
- Метод запроса - POST. От ckassa до вашего сервера
-
URL - https://api2.ckassa.ru/api-shop/rs/shop/check/payment/state
При оплате рекуррентом с обязательным вводом 3ds (раздел Рекуррент с 3ds ) в ответе будет получено исключение:NeedPass3dsException
(смотри код 2365 в разделе Разбор
ошибок)
Для прохождения 3ds проверки необходимо перенаправить пользователя по ссылке в параметре securePageURL
методом GET
Параметры запроса
-
regPayNum*
- номер платежа (выдается после успешного создания платежа)
Обязательные Параметры ответа:
-
state
- статус платежа (не указывается для анонимных платежей). Более подробно смотри раздел Статусы платежей -
totalAmount
- сумма платежа в копейках -
createdDate
- время создания платежа (Время должно быть в формате: yyyy-mm-dd hh:mm:ss) -
providerServCode
- уникальный код провайдера услуг -
providerName
- название провайдера услуг -
errorCode
- код ошибки, используется для локализации проблемы. (см. пункт Коды ошибок проводки платежа)
Необязательные параметры ответа:
-
error
- текст ошибки (используется для локализации проблемы, не должно выдаваться пользователю) -
message
- сообщение пользователю (ошибка, ее интерпретация, объяснение и т.п.) -
provisionServices
- флаг, была ли оказана услуга (true или false) -
procDate
- время проведения платежа (некоторые платежи могут проводиться с задержкой по времени до нескольких минут) Время должно быть в формате: yyyy-mm-dd hh:mm:ss
Уведомление об оплате
Пример ответа
{
"regPayNum":"1310958041",
"property": {
"IMEI": "86964005166061",
"ЛИТР": "4"
},
"rrn": "315659894693",
"irn": "f631e778-fs4d-dc19-sdc6-251e02666345",
"approvalCode": "123456789",
"cardPan": "411111*****1111",
"amount":"100000",
"state": "PAYED",
"result": {
"code": "0",
"message": "null",
"details": "null"
},
"created": "20-06-2023 17:56:36"
}
- Метод запроса - POST. От ckassa до вашего сервера.
-
URL: ваш
{cb url}
. Например:https://site.ru/pay/ckassa
По умолчанию отправляются только успешные платежи
При неуспешном создании платежа уведомление не отправляется
Ckassa отправляет POST запросы с нарастающим интервалом
Ожидается ответ https - статусом 200
Также можно выбрать тип callback full3
для отправки дополнительных параметров описанных ниже (Обратите внимание, что при данном типе будет также отправляться callback при успешной регистрации карты).
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | Статус платежа. Подробнее тип String "^[0-9]{6,20}$";} |
amount |
+ | Ссумма платежа в копейках тип String |
state |
+ | Статус платежа. Подробнее |
result |
+ | Результат Подробнее:
|
property/map |
- | Список реквизитов, формат {"IMEI": "86964005166061", "ЛИТР": "4"}
|
rrn |
- | Merchant bank’s Retrieval Reference Number (ISO-8583 Field 37) тип String |
irn |
- | Internal Reference Number тип String |
approvalCode |
- | Kод авторизации тип String |
cardPan |
- | Публичный номер карты, с которой совершалась оплата (первые 6 цифр, последние 4) |
created |
- | Время создания платежа по МСК Формат: dd-MM-yyyy HH:mm:ss тип String |
Чек по 54ФЗ
Пример запроса
{
"regPayNum":"1234567890"
}
Пример ответа
{
"fiscalUrl":"https:\\ticket.ckassa.ru\jfnrei48jifmroggdfh4543her"
}
Процесс фискализации проходит в асинхронном режиме. Фискализация платежа может занимать от нескольких минут до часа
После отправки запроса вы получите ссылку на сервис ckassa. При переходе на данную ссылку, если платеж уже был фискализирован, проихойдет редирект клиента на сайт ФНС с фискальным чеком.
Если фискализация еще не была выполнена, то будет выведено сообщение: Ожидайте, скоро здесь появится фискальный чек
. В таком случае запрашивать ссылк повторно не нужно, достаточно повторить переход через
некоторое время.
Рекомендуемый алгоритм работы с методом:
-
После проведения платежа запросить ссылку
-
Переслать ссылку клиенту, либо отобразить в виде QR
-
Клиент сохраняет ссылку и после фискализации поулчает доступ к фискальному чеку
-
Тип запроса -
POST
-
URL -
/receipt-fiscal
Параметры запроса(все обязательные):
-
regPayNum
- номер платежа в системе ckassa (выдается при cоздании платежа)
Параметры ответа(все обязательные):
-
fiscalUrl
- ссылка на фискальный чек
Фискализация наличных
Пример запроса на фискализацию наличных
{
"serviceCode":"15636-15727-1",
"amount":"2500",
"comission":"0",
"payType":"fiscalCash",
"properties":
[
{ "name":"ТЕЛЕФОН",
"value":"9555574499"},
{ "name":"ФИО",
"value":"Тестов Тест Тестович"},
{ "name":"АДРЕС",
"value":"Тестовый адрес"}
]
}
curl -X POST https://demo-api.ckassa.ru/api-shop/do/payment/anonymous --cert ./59-BS-TERM-Test_ShopApi-001.pem:e9shpkwgyc -H "Content-Type: application/json" -d
'{
"serviceCode":"15636-15727-1",
"amount":"2500",
"comission":"0",
"payType":"fiscalCash",
"properties":
[
{
"name":"ТЕЛЕФОН",
"value":"9555574499"
},
{
"name":"ФИО",
"value":"Тестов Тест Тестович"
},
{
"name":"АДРЕС",
"value":"Тестовый адрес"
}
]
Пример ответа
{
"regPayNum":"13894250926",
"payUrl":"https://ckassa.ru/ticket/vy0RHMGco9IibfT7m4fKjKPTDonATcGie7fV6boo4KWuwTO_eokow13nfUjDeKkd",
"methodType":"GET"
}
{
"regPayNum":"13894250926",
"payUrl":"https://ckassa.ru/ticket/vy0RHMGco9IibfT7m4fKjKPTDonATcGie7fV6boo4KWuwTO_eokow13nfUjDeKkd",
"methodType":"GET"
}
Наше API позволяет не только провести платеж, но и создать информационный платеж чтобы зарегистрировать в ФНС принятые наличные
Для того, чтоб создать такой платеж укажите в параметре payType значение fiscalCash
Для тестирования механизма рекомендуем следующий алгоритм:
-
Проверьте статус платежа. Рекомендуем брать паузу 15 секунд между операцией создания и проверки статуса платежа. Либо отправляйте запрос статуса циклично пока не увидите успех, либо ошибку.
-
Готово. Вы восхитительны!
Проверка баланса на карте Лайт
Пример запроса
{
"login":"79020000000",
}
С помощью данного метода можно проверить баланс у водителя на карте Лайт
-
Тип запроса -
POST
-
URL -
ver2/vcard/balance
Параметры запроса(все обязательные):
-
login
- номер телефона, к которому привязана карта Лайт (с кодом, но без '+')
Параметры ответа(все обязательные):
-
amount
- сумма остаток на счете клиента в копейках -
blockedAmount
- сумма заблокированных средств в копейках
Возврат платежа
Пример запроса
{
"regPayNum": "13693892457",
"note": "test",
"refundAmount": "2400",
"remainingAmount": "225"
"shopToken": "SHOP_TOKEN"
}
С помощью данного метода можно можно отправлять заявки на возврат и частичный возврат. Метод доступен только для Магазин. Рекуррентный платёж или Магазин. Анонимный платеж.
-
Тип запроса -
POST
-
URL -
ver2/create/refund/ask
Параметры запроса(все обязательные):
-
regPayNum
- номер платежа -
note
- причина возврата -
refundAmount
- сумма возврата в копейках -
remainingAmount
- остаток платежа (сумма платежа минус сумма возврата в копейках)
Параметры ответа(все обязательные):
-
resultState
- результат (success - успех, fail - неудача), -
desc
- описание (пояснение) -
userToken
- идентификатор пользователя -
ShopToken
- идентификатор магазина
Редирект
С помощью данной настройки, после совершения платежа, клиент, по нажатию на кнопку "Вернуться в магазин", будет перенаправлен по ссылке, что вы нам передадите. Можем указать отдельную для успешного платежа и для неуспешного. При перенаправлении по ссылке, будет так же в ней передаваться номер платежа
Пример:
Success url = http://acq.test.ru/success/
После совершения успешного платежа, номер которого 123456789, пользователь, после нажатия на кнопку "Вернуться в магазин", будет перенаправлен по ссылке http://acq.test.ru/success/?reg_pay_num=123456789
Заказ с оплатой на расчетный счет
В этом разделе мы рассмотрим поддерживаемые запросы для данного типа магазина, их назначение, параметры, а так же примеры использования.
Алгоритм работы
Пример создания объекта MainShop
только для библиотеки php
Регистрация карты
Пример запроса на регистрацию карты
{
"userToken":"USER_TOKEN",
"clientType":"web"
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN"
}
Во время регистрации карты будет списано до 5 рублей, после добавления карты деньги будут возвращены
После подтверждения оплаты карта появится в списке и станет доступной для создания рекуррентных платежей, см. пункт Получение списка карт.
Для тестового соединения нужно использовать тестовую карту, см. пункт Тестовые, боевые данные
В ответ на запрос приходит номер платежа, url регистрации и способ перехода.
-
Метод запроса - POST
-
URL - /card/registration
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
clientType |
- | тип клиента* |
userToken |
+ | идентификатор пользователя |
payType |
- | Способ оплаты. Обязателен только для совершения рекуррентного платежа через SberPay ** Подробнее о Функции payType |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Регистрация пользователя
Пример запроса на регистрацию пользователя
{
"login":"Login",
"email":"Email",
"name":"Name",
"surName":"SurName",
"middleName":"MiddleName"
}
Пример ответа
{
"state":"active",
"login":"getLogin()",
"email":"getEmail()",
"name":"getName()",
"surName":"getSurName()",
"middleName":"getMiddleName()",
"userToken":"USER_TOKEN"
}
-
Метод запроса - POST
-
URL - /user/registration
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ | номер телефона с кодом, но без '+', например - 79020000000. |
email |
- | e-mail (на него отправляются чеки после оплаты) |
name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ | номер телефона с кодом, но без '+', например - 79020000000. |
email |
- | e-mail (на него отправляются чеки после оплаты) |
name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
state |
+ | статус. Более подробно - Статус пользователя |
userToken |
+ | идентификатор пользователя |
Получение списка карт
Пример запроса списка карт
{
"userToken":"USER_TOKEN"
}
Пример ответа
{
"userToken":"USER_TOKEN",
"cards":[{"cardMask":"546949******9929","cardToken":"77a3adeb-1f50-400a-88a9-7127dc9ea9f3","cardType":"master_card","state":"active"}]
"shopToken":"SHOP_TOKEN"
}
Для того что бы карта появилась в списке нужно произвести регистрацию карты см. пункт Регистрация карты
-
Метод запроса - POST
-
URL - ver3/get/cards
Параметры запроса (все параметры обязательные):
-
userToken
- идентификатор пользователя
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
ShopToken
- идентификатор магазина -
cards
- список карт -
cardMask
- маскированый номер карты -
cardToken
- токен карты (используется для создания рекуррентного платежа, и активации карты) -
cardType
- тип карты* -
state
- статус карты** -
exp
-cpoк действия карты -
recType
-тип оплаты
Данные в переменной cards
:
Деактивация/удаление карты
Пример запроса удаления карты
{
"userToken":"USER_TOKEN",
"cardToken":"CARD_TOKEN"
}
Пример ответа
{
"resultState":"success",
"desc":"descSuccess",
"userToken":"USER_TOKEN"
}
После исполнения запроса состояние карты становится inactive
и карта будет недоступна для оплаты (необходимо будет провести повторную привязку карты, см пункт Регистрация карты)
-
Метод запроса - POST
-
URL - /card/deactivation/
Параметры запроса (все параметры обязательные):
-
userToken
- идентификатор пользователя -
cardToken
- идентификатор карты
Параметры ответа (все параметры обязательные):
-
resultState
- результат -
success
- успех -
fail
- неудача -
desc
- описание (пояснение) -
userToken
- идентификатор пользователя
Возможные значения для resultState
:
Уведомление о регистрации карты
Пример запроса создания уведомления
{
"userToken":"USER_TOKEN",
"cardMask":"546949******9929",
"cardToken":"77a3adeb-1f50-400a-88a9-7127dc9ea9f3",
"cardType":"master_card"
}
-
URL: {cb url}/card-reg
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
userToken |
+ | идентификатор пользователя |
cardToken |
+ | токен карты |
cardMask |
+ | маскированый номер карты |
cardType |
+ | тип карты. Подробнее см. п. Получение списка карт |
В ответ ожидается любой ответ со статусом 200
Создание платежа
Пример запроса создания платежа
{
"serviceCode": "111-13658-1",
"userToken": "a2ea360d-0af3-409f-87d0-4ea69ee077e6",
"amount": "12000",
"comission": "480",
"cardToken": "00d7ec3b-403f-416b-80d9-83461f684701",
"shopLogin": true,
"enableSMSConfirm": "null",
"payType": "null",
"clientType": "null",
"userPhone": "null",
"userEmail": "null",
"fiscalType": "null",
"holdTtl": "null",
"orderBestBefore": "1575362617720",
"properties": [
{
"name": "ПОЗЫВНОЙ",
"value": "7757513"
},
{
"name": "ДОП_ИНФ",
"value": "(1) предв 10 Сентября 01:35 Секрет магазин.. (2) Октябрьская 20. длина маршрута:4.0 км. "
}
],
"orderItems": [
{
"num": 1,
"name": "name1",
"quantity": 2,
"price": 100,
"tax": "vat0"
},
{
"num": 2,
"name": "name2",
"quantity": 5,
"price": 50,
"tax": "vat110"
}
]
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN",
}
В ответ приходит номер платежа, url для оплаты и способ перехода.
При рекурентном платеже - url со ссылкой на чек.
-
Метод запроса - POST
-
URL - /do/payment
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
userToken |
+ | идентификатор пользователя | amount |
+ | сумма платежа в копейках, которая идет на счет пользователю |
comission |
+ | комиссия платежа в копейках (при отсутствии комиссии передается 0) |
needRegCard |
- | Включает принудительный 3ds, более подробно: needRegCard |
cardToken |
- | идентификатор карты (для рекуррентного платежа), см. пункт Получение списка карт |
gpayToken |
- | Токен при оплате через Google Pay. Более подробно в разделе Google Pay |
applePayToken |
- | токен при оплате через Apple pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay |
enableSMSConfirm |
- | более подробно: EnableSMScnfirm |
payType |
- | способ оплаты подробнее в п. Параметр payType |
payTypeVisible |
- | используется если необходимо скрыть или скорректировать очередность способов оплаты |
clientType |
- | более подробно в п. Создание анонимного платежа |
userEmail |
* | e-mail для фискального чека, подробнее: Параметр fiscalType |
fiscalType |
* | отправлять ли фискальный чек. Подробнее: Параметр fiscalType |
orderBestBefore |
- | Время истечения срока жизни заказа в секундах. Подробнее |
holdTtl |
- | время заморозки средств (в секундах). Минимум 10 минут, максимум 4 дня. Если услуга не будет подтверждена, произойдет автоматический возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
properties |
+ | массив реквизитов. Более подробно в п. Создание анонимного платежа |
orderItems |
- | Корзина для фискализации. Подробнее |
clientAuInfo |
+ | Параметры браузера для прохождения 3ds v2. Подробнее |
shopLogin |
- | Для авторегистрации пользователя, после создания платежа Подробнее |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Создание платежа с бронированием суммы
Пример запроса создания платежа
{
"serviceCode": "111-13658-1",
"userToken": "a2ea360d-0af3-409f-87d0-4ea69ee077e6",
"amount": "12000",
"comission": "480",
"cardToken": "00d7ec3b-403f-416b-80d9-83461f684701",
"shopLogin": true,
"enableSMSConfirm": "null",
"payType": "null",
"clientType": "null",
"userPhone": "null",
"userEmail": "null",
"fiscalType": "null",
"holdTtl": "3600",
"orderBestBefore": "1575362617720",
"properties": [
{
"name": "ПОЗЫВНОЙ",
"value": "7757513"
},
{
"name": "ДОП_ИНФ",
"value": "(1) предв 10 Сентября 01:35 Секрет магазин.. (2) Октябрьская 20. длина маршрута:4.0 км. "
}
],
"orderItems": [
{
"num": 1,
"name": "name1",
"quantity": 2,
"price": 100,
"tax": "vat0"
},
{
"num": 2,
"name": "name2",
"quantity": 5,
"price": 50,
"tax": "vat110"
}
]
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN",
}
В ответ приходит номер платежа, url для оплаты и способ перехода.
При рекурентном платеже - url со ссылкой на чек.
Для оплаты поездок рекомендуем указывать holdTtl
не менее 30 минут (1800)
-
Метод запроса - POST
-
URL - /do/payment-rezerv
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
userToken |
+ | идентификатор пользователя | amount |
+ | сумма платежа в копейках, которая идет на счет пользователю |
comission |
+ | комиссия платежа в копейках (при отсутствии комиссии передается 0) |
needRegCard |
- | Включает принудительный 3ds, более подробно: needRegCard |
cardToken |
- | идентификатор карты (для рекуррентного платежа), см. пункт Получение списка карт |
gpayToken |
- | Токен при оплате через Google Pay. Более подробно в разделе Google Pay |
applePayToken |
- | токен при оплате через Apple pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay |
enableSMSConfirm |
- | более подробно: EnableSMScnfirm |
payType |
- | способ оплаты подробнее в п. Параметр payType |
payTypeVisible |
- | используется если необходимо скрыть или скорректировать очередность способов оплаты |
clientType |
- | более подробно в п. Создание анонимного платежа |
userEmail |
* | e-mail для фискального чека, подробнее: Параметр fiscalType |
fiscalType |
* | отправлять ли фискальный чек. Подробнее: Параметр fiscalType |
holdTtl |
- | время заморозки средств (в секундах). Минимум 10 минут, максимум 4 дня. Если услуга не будет подтверждена, произойдет автоматический возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
orderBestBefore |
- | Время истечения срока жизни заказа в секундах. Подробнее |
properties |
+ | массив реквизитов. Более подробно в п. Создание анонимного платежа |
orderItems |
- | Корзина для фискализации. Подробнее |
clientAuInfo |
+ | Параметры браузера для прохождения 3ds v2. Подробнее |
shopLogin |
- | Для авторегистрации пользователя, после создания платежа Подробнее |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Обновление получателя забронированных средств
Пример запроса
{
'regPayNum': '501063',
'value': '15'
}
Пример ответа
{
'resultState': 'success',
'desc': 'Success update persAcc ПОЗЫВНОЙ=15 for regPayNum:501064'
}
Метод сработает только если был использован метод Создание платежа с бронированием суммы
Для использования метода платеж должен быть в статусе holded
. Рекомендуем к использованию метод Получение статуса платежа
Изменить получателя можно до того, как вы используете метод Подтверждение оказания услуги
Метод можно вызвать несколько раз
Чтобы обновить получателя денежных средств необходимо указать новый главный реквизит получателя (обычно этот реквизит называют 'лицевой счет'. Указывается в массиве реквизитов properties
)
Рекомендуемый алгоритм использования:
1. Выполнить Создание платежа с бронированием суммы, указав в properties
дефолтный лицевой счет. Он не обязательно должен быть рабочим, главное, чтобы он проходил под критерии
проверки реквизита (размер, с чего начинается и т.д.)
2. После назначения машины выполнить обновление получателя денежных средств
3. По завершению поездки подтвердить заморозку
-
Метод запроса - POST
-
URL: /ver2/update/pers-acc
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
value |
+ | новое значение главного реквизита |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
resultState |
+ | результат (success / fail ) |
desc |
- | пояснение |
Подтверждение оказания услуги (заморозки)
Пример подтверждения оказания услуги
{
"regPayNum":"1234567890",
"orderId":"12345"
}
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to refund. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Необходимость подтверждения оказания услуги определяется настройками терминала с нашей стороны по вашему запросу
Подтвердить можно только платеж в статусе payed
. Узнать статус платежа можно по запросу Получение статуса платежа
После получения подтверждения оказания услуги ckassa переводит денежные средства на кошелек мерчанта. Это значит, что услуга считается выполненной и оплаченной
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/confirm
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
orderId |
+ | уникальный номер заказа на стороне поставщика услуг |
amount |
- | Сумма платежа в копейках. Параметр только для платежей с бронированием суммы. Если передана сумма, менньшая чем в заморозке, то будет выполнен частичный возврат. По умолчанию подтверждается полная сумма |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
resultState |
+ | результат (success / fail ) |
desc |
- | пояснение |
ShopToken |
- | Идентификатор магазина |
Отмена замороженных средств
Пример отмены замороженных средств
{
"regPayNum":"1234567890",
"orderId":"12345"
}
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to refund. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Отменить заморозку и вернуть деньги на карту клиента можно только если платеж находится в статусе hold
(в котором заморозка денежных среств на карте клиента осуществлена, но еще не подтверждено оказание услуги)
После отмены заморозки ckassa откатывает деньги обратно на карту клиента
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/refund
Параметры запроса (все обязательные):
-
regPayNum
- номер платежа в системе ckassa. Выдается на запрос Создание платежа -
orderId
- уникальный номер заказа на стороне магазина
Параметры ответа (все обязательные):
-
resultState
- результатa)
success
- успехб)
fail
- неудача -
ShopToken
- идентификатор магазина
Заказ с оплатой на виртуальную карту Лайт
В этом разделе мы рассмотрим поддерживаемые запросы, их назначение, параметры, а так же примеры их использования.
Алгоритм работы
Блок-схемы проведения процессов:
Регистрация пользователя
Пример запроса на регистрацию пользователя
{
"login":"Login",
"email":"Email",
"name":"Name",
"surName":"SurName",
"middleName":"MiddleName"
}
Пример ответа
{
"state":"active",
"login":"getLogin()",
"email":"getEmail()",
"name":"getName()",
"surName":"getSurName()",
"middleName":"getMiddleName()",
"userToken":"USER_TOKEN"
}
-
Метод запроса - POST
-
URL - /user/registration
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ | номер телефона с кодом, но без '+', например - 79020000000. |
email |
- | e-mail (на него отправляются чеки после оплаты) |
name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ | номер телефона с кодом, но без '+', например - 79020000000. |
email |
- | e-mail (на него отправляются чеки после оплаты) |
name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
state |
+ | статус. Более подробно - Статус пользователя |
userToken |
+ | идентификатор пользователя |
Регистрация карты плательщика
Пример запроса на регистрацию карты
{
"userToken":"USER_TOKEN",
"clientType":"web"
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN"
}
Во время регистрации карты будет списано до 5 рублей, после добавления карты деньги будут возвращены
После подтверждения оплаты карта появится в списке и станет доступной для создания рекуррентных платежей, см. пункт Получение списка карт.
Для тестового соединения нужно использовать тестовую карту, см. пункт Тестовые, боевые данные
В ответ на запрос приходит номер платежа, url регистрации и способ перехода.
-
Метод запроса - POST
-
URL - /card/registration
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
clientType |
- | тип клиента* |
userToken |
+ | идентификатор пользователя |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Получение списка карт
Пример запроса списка карт
{
"userToken":"USER_TOKEN"
}
Пример ответа
{
"userToken":"USER_TOKEN",
"cards":[{"cardMask":"546949******9929","cardToken":"77a3adeb-1f50-400a-88a9-7127dc9ea9f3","cardType":"master_card","state":"active"}]
"shopToken":"SHOP_TOKEN"
}
Для того что бы карта появилась в списке нужно произвести регистрацию карты см. пункт Регистрация карты
-
Метод запроса - POST
-
URL - ver3/get/cards
Параметры запроса (все параметры обязательные):
-
userToken
- идентификатор пользователя
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
ShopToken
- идентификатор магазина -
cards
- список карт -
cardMask
- маскированый номер карты -
cardToken
- токен карты (используется для создания рекуррентного платежа, и активации карты) -
cardType
- тип карты* -
state
- статус карты** -
exp
-cpoк действия карты -
recType
-тип оплаты
Данные в переменной cards
:
Деактивация/удаление карты
Пример запроса удаления карты
{
"userToken":"USER_TOKEN",
"cardToken":"CARD_TOKEN"
}
Пример ответа
{
"resultState":"success",
"desc":"descSuccess",
"userToken":"USER_TOKEN"
}
После исполнения запроса состояние карты становится inactive
и карта будет недоступна для оплаты (необходимо будет провести повторную привязку карты, см пункт Регистрация карты)
-
Метод запроса - POST
-
URL - /card/deactivation/
Параметры запроса (все параметры обязательные):
-
userToken
- идентификатор пользователя -
cardToken
- идентификатор карты
Параметры ответа (все параметры обязательные):
-
resultState
- результат -
success
- успех -
fail
- неудача -
desc
- описание (пояснение) -
userToken
- идентификатор пользователя
Возможные значения для resultState
:
Уведомление о регистрации карты
Пример запроса создания уведомления
{
"userToken":"USER_TOKEN",
"cardMask":"546949******9929",
"cardToken":"77a3adeb-1f50-400a-88a9-7127dc9ea9f3",
"cardType":"master_card"
}
-
URL: {cb url}/card-reg
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
userToken |
+ | идентификатор пользователя |
cardToken |
+ | токен карты |
cardMask |
+ | маскированый номер карты |
cardType |
+ | тип карты. Подробнее см. п. Получение списка карт |
В ответ ожидается любой ответ со статусом 200
Проверка возможности оплаты p2p
Пример запроса регистрации мерчанта
{
"login":"79020000000",
"shopToken":"SHOP_TOKEN"
}
Пример ответа
{
"enable":"true",
"incomeTo":
[
{
"enable":"false",
"incomeTo":"WALLET",
"desc":"Временно недоступен"
},
{
"enable":"true",
"incomeTo":"CARD_CUB_LITE"
}
]
}
Проверка возможности оплаты на карту КУБ Лайт
Если проверка для карты КУБ Лайт прошла успешно, вызовите метод Создания платежа
При Создании платежа с бронированием суммы нужно проверять конечного получателя (если для него опалата не доступна - деньги будут возвращены клиенту)
- Метод запроса - POST
- URL для запросов: /ver2/p2p/available
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ |
номер телефона с кодом, но без '+'. Например: 79020000000 |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
enable |
+ | true /false возможно или нет выполнить платеж |
incomeToList |
+ | IncomeTo . список, расшифровка по иструментам зачисления |
desc |
+ | пояснение |
Параметры передаваемые в IncomeTo
:
enable
- true
/false
incomeTo
- доступные инструменты (куда пойдет зачисление денег)
Значения
-
WALLET - кошелёк
-
CARD_CUB_LITE - карта КУБ Лайт
Создание платежа
Пример запроса создания платежа
{
"serviceCode": "111-13658-1",
"userToken": "a2ea360d-0af3-409f-87d0-4ea69ee077e6",
"amount": "12000",
"comission": "480",
"cardToken": "00d7ec3b-403f-416b-80d9-83461f684701",
"shopLogin": true,
"enableSMSConfirm": "null",
"payType": "null",
"clientType": "null",
"userPhone": "null",
"userEmail": "null",
"fiscalType": "null",
"holdTtl": "null",
"orderBestBefore": "1575362617720",
"properties": [
{
"name": "ПОЗЫВНОЙ",
"value": "7757513"
},
{
"name": "ДОП_ИНФ",
"value": "(1) предв 10 Сентября 01:35 Секрет магазин.. (2) Октябрьская 20. длина маршрута:4.0 км. "
}
],
"orderItems": [
{
"num": 1,
"name": "name1",
"quantity": 2,
"price": 100,
"tax": "vat0"
},
{
"num": 2,
"name": "name2",
"quantity": 5,
"price": 50,
"tax": "vat110"
}
]
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN"
}
В ответ приходит номер платежа, url для оплаты и способ перехода.
При рекурентном платеже - url со ссылкой на чек.
-
Метод запроса - POST
-
URL - /do/payment
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
userToken |
+ | идентификатор пользователя | amount |
+ | сумма платежа в копейках, которая идет на счет пользователю |
comission |
+ | комиссия платежа в копейках (при отсутствии комиссии передается 0) |
needRegCard |
- | Включает принудительный 3ds, более подробно: needRegCard |
cardToken |
- | идентификатор карты (для рекуррентного платежа), см. пункт Получение списка карт |
gpayToken |
- | Токен при оплате через Google Pay. Более подробно в разделе Google Pay |
applePayToken |
- | токен при оплате через Apple pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay |
enableSMSConfirm |
- | более подробно: EnableSMScnfirm |
payType |
- | способ оплаты подробнее в п. Параметр payType |
clientType |
- | более подробно в п. Создание анонимного платежа |
userEmail |
* | e-mail для фискального чека, подробнее: Параметр fiscalType |
fiscalType |
* | отправлять ли фискальный чек. Подробнее: Параметр fiscalType |
orderBestBefore |
- | Время истечения срока жизни заказа в секундах. Подробнее |
holdTtl |
- | время заморозки средств (в секундах). Минимум 10 минут, максимум 4 дня. Если услуга не будет подтверждена, произойдет автоматический возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
properties |
+ | массив реквизитов. |
orderItems |
- | Корзина для фискализации. Подробнее |
clientAuInfo |
- | Параметры браузера для прохождения 3ds v2. Подробнее |
shopLogin |
- | Для авторегистрации пользователя, после создания платежа Подробнее |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Создание платежа с бронированием суммы
Пример запроса создания платежа
{
"serviceCode": "111-13658-1",
"userToken": "a2ea360d-0af3-409f-87d0-4ea69ee077e6",
"amount": "12000",
"comission": "480",
"cardToken": "00d7ec3b-403f-416b-80d9-83461f684701",
"shopLogin": true,
"enableSMSConfirm": "null",
"payType": "null",
"clientType": "null",
"userPhone": "null",
"userEmail": "null",
"fiscalType": "null",
"holdTtl": "3600",
"orderBestBefore": "1575362617720",
"properties": [
{
"name": "ПОЗЫВНОЙ",
"value": "7757513"
},
{
"name": "ДОП_ИНФ",
"value": "(1) предв 10 Сентября 01:35 Секрет магазин.. (2) Октябрьская 20. длина маршрута:4.0 км. "
}
],
"orderItems": [
{
"num": 1,
"name": "name1",
"quantity": 2,
"price": 100,
"tax": "vat0"
},
{
"num": 2,
"name": "name2",
"quantity": 5,
"price": 50,
"tax": "vat110"
}
]
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN"
}
В ответ приходит номер платежа, url для оплаты и способ перехода.
При рекурентном платеже - url со ссылкой на чек.
Для оплаты поездок рекомендуем указывать holdTtl
не менее 30 минут (1800)
-
Метод запроса - POST
-
URL - /do/payment-rezerv
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
userToken |
+ | идентификатор пользователя | amount |
+ | сумма платежа в копейках, которая идет на счет пользователю |
comission |
+ | комиссия платежа в копейках (при отсутствии комиссии передается 0) |
needRegCard |
- | Включает принудительный 3ds, более подробно: needRegCard |
cardToken |
- | идентификатор карты (для рекуррентного платежа), см. пункт Получение списка карт |
gpayToken |
- | Токен при оплате через Google Pay. Более подробно в разделе Google Pay |
applePayToken |
- | токен при оплате через Apple pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay |
enableSMSConfirm |
- | более подробно: EnableSMScnfirm |
payType |
- | способ оплаты подробнее в п. Параметр payType |
payTypeVisible |
- | используется если необходимо скрыть или скорректировать очередность способов оплаты |
clientType |
- | более подробно в п. Создание анонимного платежа |
userEmail |
* | e-mail для фискального чека, подробнее: Параметр fiscalType |
fiscalType |
* | отправлять ли фискальный чек. Подробнее: Параметр fiscalType |
holdTtl |
- | время заморозки средств (в секундах). Минимум 10 минут, максимум 4 дня. Если услуга не будет подтверждена, произойдет автоматический возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
orderBestBefore |
- | Время истечения срока жизни заказа в секундах. Подробнее |
properties |
+ | массив реквизитов. Более подробно в п. Создание анонимного платежа |
orderItems |
- | Корзина для фискализации. Подробнее |
clientAuInfo |
- | Параметры браузера для прохождения 3ds v2. Подробнее |
shopLogin |
- | Для авторегистрации пользователя, после создания платежа Подробнее |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Обновление получателя забронированных средств
Пример запроса
{
'regPayNum': '501063',
'value': '79021639435'
}
Пример ответа
{
'resultState': 'success',
'desc': 'Success update persAcc ТЕЛЕФОН=79021639435 for regPayNum:501064'
}
Метод сработает только если был использован метод Создание платежа с бронированием суммы
Для использования метода платеж должен быть в статусе holded
. Рекомендуем к использованию метод Получение статуса платежа
Изменить получателя можно до того, как вы используете метод Подтверждение оказания услуги
Метод можно вызвать несколько раз
Чтобы обновить получателя денежных средств необходимо указать новый главный реквизит получателя (обычно этот реквизит называют 'лицевой счет'. Указывается в массиве реквизитов properties
)
Рекомендуемый алгоритм использования:
1. Выполнить Создание платежа с бронированием суммы, указав в properties
дефолтный лицевой счет. Он не обязательно должен быть рабочим, главное, чтобы он проходил под критерии
проверки реквизита (размер, с чего начинается и т.д.)
2. После назначения машины выполнить обновление получателя денежных средств
3. По завершению поездки подтвердить заморозку
-
Метод запроса - POST
-
URL: /ver2/update/pers-acc
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
value |
+ | новое значение номера телефона водителя |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
resultState |
+ | результат (success / fail ) |
desc |
- | пояснение |
Подтверждение оказания услуги (заморозки)
Пример подтверждения оказания услуги
{
"regPayNum":"1234567890",
"orderId":"12345"
}
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to refund. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Необходимость подтверждения оказания услуги определяется настройками терминала с нашей стороны по вашему запросу
Подтвердить можно только платеж в статусе payed
. Узнать статус платежа можно по запросу Получение статуса платежа
После получения подтверждения оказания услуги ckassa переводит денежные средства на кошелек мерчанта. Это значит, что услуга считается выполненной и оплаченной
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/confirm
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
orderId |
+ | уникальный номер заказа на стороне поставщика услуг |
amount |
- | Сумма платежа в копейках. Параметр только для платежей с бронированием суммы. Если передана сумма, менньшая чем в заморозке, то будет выполнен частичный возврат. По умолчанию подтверждается полная сумма |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
resultState |
+ | результат (success / fail ) |
desc |
- | пояснение |
ShopToken |
- | Идентификатор магазина |
Отмена замороженных средств
Пример отмены замороженных средств
{
"regPayNum":"1234567890",
"orderId":"12345"
}
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to refund. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Отменить заморозку и вернуть деньги на карту клиента можно только если платеж находится в статусе hold
(в котором заморозка денежных среств на карте клиента осуществлена, но еще не подтверждено оказание услуги)
После отмены заморозки ckassa откатывает деньги обратно на карту клиента
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/refund
Параметры запроса (все обязательные):
-
regPayNum
- номер платежа в системе ckassa. Выдается на запрос Создание платежа -
orderId
- уникальный номер заказа на стороне магазина
Параметры ответа (все обязательные):
-
resultState
- результатa)
success
- успехб)
fail
- неудача -
ShopToken
- идентификатор магазина
Заказ с оплатой на виртуальную карту Лайт на основе методов api-merchant
В этом разделе мы рассмотрим поддерживаемые запросы, их назначение, параметры, а так же примеры их использования.
Алгоритм работы
Блок-схемы проведения процессов:
Регистрация мерчанта
- Метод запроса - POST
- URL для запросов: /registration/merchant
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
phone |
+ |
номер телефона с кодом, но без '+'. Например: 79020000000 |
email |
- | |
name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
callName |
- | позывной |
region |
- | регион, либо город мерчанта |
docList |
- | список документов (используется для идентификации) |
Если используется параметр docList
, необходимо указать номера удостоверяющего документа (либо нескольких документов) в формате:
type
- тип документа
-
passport - паcпорт
-
snils - СНИЛС
-
inn - ИНН
-
car_drive - водительское удостоверение
И далее указать номер параметром number
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
merchantToken |
+ | идентификатор мерчанта |
state |
+ | статус |
phone |
+ | номер телефона |
Возможные значения поля state
:
-
active - активный (для данного мерчанта доступны все операции)
-
inactive - неактивный (операции недоступны, требуется активация)
-
disable - заблокирован (операции не доступны, активация невозможна. Например - данный мерчант более не работает)
Статус мерчанта
Если мерчант не зарегистрирован, то будет сгенерировано исключение MerchantNotRegisteredForShop
(код 2709 в разделе Разбор ошибок)
- Метод запроса - POST
- URL: /merchant/status
Параметры запроса (все параметры обязательные):
-
login
- номер телефона с кодом, но без "+" (например, 79020000000) -
merchantToken
- идентификатор мерчанта -
state
- статус -
phone
- номер телефона
Параметры ответа:
а) active - активный (для данного мерчанта доступны все операции)
б) inactive - не активный (операции не доступны, требуется активация)
в) disable - заблокирован (операции не доступны, активация невозможна. Например, данный мерчант больше не работает)
Проверка возможности оплаты p2p
Пример запроса регистрации мерчанта
{
"merchantToken": "0785de5b-f647-417e-b1ca-5f184e493545",
"shopToken":"SHOP_TOKEN"
}
Пример ответа
{
"enable":"true",
"incomeTo":
[
{
"enable":"false",
"incomeTo":"WALLET",
"desc":"Временно недоступен"
},
{
"enable":"true",
"incomeTo":"CARD_CUB_LITE"
}
]
}
Проверка возможности оплаты на карту КУБ Лайт
Если проверка для карты КУБ Лайт прошла успешно, вызовите метод Создания платежа
При Создании платежа с бронированием суммы нужно проверять конечного получателя (если для него опалата не доступна - деньги будут возвращены клиенту)
- Метод запроса - POST
- URL для запросов: /p2p/available
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
merchantToken |
+ |
идентификатор мерчанта |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
enable |
+ | true /false возможно или нет выполнить платеж |
incomeToList |
+ | IncomeTo . список, расшифровка по иструментам зачисления |
desc |
+ | пояснение |
Параметры передаваемые в IncomeTo
:
enable
- true
/false
incomeTo
- доступные инструменты (куда пойдет зачисление денег)
Значения
-
WALLET - кошелёк
-
CARD_CUB_LITE - карта КУБ Лайт
-
SELF_EMPL - cамозанятые
-
MON_SBP - СБП
Создание платежа с зачислением на карту Лайт
В ответ на данный запрос приходит номер платежа, URL со ссылкой на чек и способ перехода
-
Метод запроса - POST
-
URL: /do/payment
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
amount |
+ | сумма платежа в копейках, которая идет на счет пользователю. Должна быть минимум 1 рубль (значение - 100) |
comission |
+ | комиссия платежа в копейках (при отсутствии комиссии передается 0) |
orderId |
+ | уникальный номер заказа на стороне ПО заказчика (вас) |
description |
+ | Информация о поездке в формате: "[тип заказа]","Заказ:"[номер заказа]"."[идентификатор города]":"[адрес от - до]" |
userToken |
+ | идентификатор пользователя |
cardToken |
+ | идентификатор карты |
gpayToken |
- | Токен при оплате через Google Pay. Более подробно в разделе Google Pay |
applePayToken |
- | Токен при оплате через Apple Pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay | enableSMSConfirm |
- | см. раздел Параметр EnableSMScnfirm |
merchantToken |
+ | идентификатор мерчанта | callName |
- | позывной мерчанта (используется для дополнительной идентификации) |
extraPhone |
- | дополнительный телефон мерчанта (используется для дополнительной идентификации) |
holdTtl |
- | время заморозки средств (в секундах). Минимум 10 минут, максимум 4 дня. Если услуга не будет подтверждена, произойдет автоматический возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
payType |
- | Тип оплаты |
fiscalType |
- | нужно ли отправлять фискальный чек. Cмотри раздел Функция fiscalType |
shopLogin |
- | Для авторегистрации пользователя, после создания платежа Подробнее |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
userToken |
+ | идентификатор пользователя |
regPayNum |
+ | номер платежа |
payUrl |
+ | url на страницу с чеком |
methodType |
+ | метод перехода по url для просмотра чека (GET/POST) |
merchantToken |
+ | идентификатор мерчанта |
Бронирование суммы
Этот запрос бронирует сумму на карте вашего клиента без установки конечного получателя. Удобно использовать, когда вы хотите исключить риски, связаные с тем, что заказ не может быть оплачен по причине недостатка средств на счете клиента и т.п.
Для того, чтобы платеж был проведен, необходимо задать получателя (мерчанта) и подтвердить оказание услуги.
В ответ на данный запрос приходит информация с номером платежа, url со ссылкой на чек и способ перехода (GET/POST)
-
Метод запроса - POST
-
URL: /do/payment-rezerv
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
amount |
+ | сумма платежа в копейках, которая идет на счет пользователю |
comission |
+ | комиссия платежа в копейках (при отсутствии комиссии передается 0) |
orderId |
+ | уникальный номер заказа на стороне магазина |
description |
+ | Информация о поездке в формате: "[тип заказа]","Заказ:"[номер заказа]"."[идентификатор города]":"[адрес от - до]" |
userToken |
+ | идентификатор пользователя |
cardToken |
- | идентификатор карты |
gpayToken |
- | токен при оплате через Google pay. Подробнее в разделе Google Pay |
applePayToken |
- | токен при оплате через Apple pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay |
enableSMSConfirm |
- | смотри Параметр EnableSMScnfirm |
holdTtl |
- | Время в секундах от исполнения заморозки. Минимум 10 минут, максимум 4 дня, по умолчанию 30 минут. Если услуга не будет подтверждена в заданный период времени, автоматически произойдет возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
payType |
- | смотри раздел Функция payType |
userEmail |
- | e-mail для отправки фискального чека |
fiscalType |
+ | Нужно ли отправлять фискальный чек |
shopLogin |
- | Для авторегистрации пользователя, после создания платежа Подробнее |
Параметры ответа
Все параметры ответа являются обязательными.
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для просмотра чека (GET/POST) -
payUrl
- url на страницу с чеком
Обновление получателя забронированных средств
-
Метод запроса - POST
-
URL: /update/payment/merchant
Параметры запроса
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
merchantToken |
+ | идентификатор мерчанта |
callName |
- | позывной |
extraPhone |
- | дополнительный телефон мерчанта (используется для дополнительной идентификации) |
Параметры ответа (все обязательные)
-
regPayNum
- номер платежа в системе ckassa -
merchantToken
- идентификатор мерчанта -
shopToken
- идентификатор организации -
sign
- подпись
Подтверждение оказания услуги
Необходимость подтверждения оказания услуги определяется настройками терминала с нашей стороны по вашему запросу
Подтвердить можно только платеж в статусе holded
. Узнать статус платежа можно по запросу Получение статуса платежа
После получения подтверждения оказания услуги ckassa переводит денежные средства на кошелек мерчанта. Это значит, что услуга считается выполненной и оплаченной
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/confirm
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
orderId |
+ | идентификатор заказа |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
resultState |
+ | результат (success / fail ) |
desc |
- | пояснение |
ShopToken |
- | Идентификатор магазина |
Отмена замороженных/забронированных средств
Отменить заморозку и вернуть деньги на карту клиента можно только если платеж находится в статусе hold
(в котором заморозка денежных среств на карте клиента осуществлена, но еще не подтверждено оказание услуги)
После отмены заморозки ckassa откатывает деньги обратно на карту клиента
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/refund
Параметры запроса (все обязательные):
-
regPayNum
- номер платежа в системе ckassa. Выдается на запрос Создание платежа -
orderId
- уникальный номер заказа на стороне магазина
Параметры ответа (все обязательные):
-
resultState
- результатa)
success
- успехб)
fail
- неудача -
ShopToken
- идентификатор магазина
Магазин. Анонимный платеж
Онлайн магазин, в котором принимается к оплате банковская карта.
Под "Анонимным" платежом предполагается платеж без сохраненных ранее данных по банковской карте.
Алгоритм работы
Создание анонимного платежа
Пример запроса на создание анонимного платежа
{
"serviceCode": "111-11111-1",
"amount": "5000",
"comission": "0",
"properties": [
{
"name": "НОМЕР_СЧЕТА",
"value": "12345"
}
]
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'ССЫЛКА НА ФОРМУ ВВОДА ДАННЫХ КАРТЫ',
'userToken':'USER_TOKEN',
"shopToken": "SHOP_TOKEN"
}
Пример запроса на создание анонимного платежа с вызовом платежной формы, заместо формы ввода данных карты
{
"serviceCode": "111-11111-1",
"amount": "5000",
"comission": "0",
"pfPayLink": true,
"properties": [
{
"name": "НОМЕР_СЧЕТА",
"value": "12345"
}
]
}
Пример ответа
{
"sign": "9B43774C04EED49961A1474F1CB26367",
"shopToken": "aa00***",
"regPayNum": null,
"payUrl": "ССЫЛКА НА ПЛАТЕЖНУЮ ФОРМУ",
"methodType": "GET",
"payUrlImg": null
}
Метод вызывается после успешной проверки на возможность создания платежа.
В ответ приходит номер платежа, URL
и способ перехода.
-
Метод запроса - POST
-
URL: /do/payment/anonymous
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
amount |
+ | сумма платежа в копейках (сумма которая идет на счет пользователю) |
comission |
+ | комиссия платежа в копейках (если нет комиссии - передается 0) | gpayToken |
- | Токен при оплате через Google Pay. Более подробно в разделе Google Pay |
applePayToken |
- | токен при оплате через Apple pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay |
payType |
- | способ оплаты Функция payType |
clientType |
- | тип клиента* |
userPhone |
- | Параметр для типа оплаты sberPay , номер телефона пользователя Сбербанка, с которого будет производится оплата |
userEmail |
- | e-mail для отправки фискального чека, доступен только при значении параметра fiscalType - email |
fiscalType |
- | Описание Параметра |
orderBestBefore |
- | Время истечения срока жизни заказа в секундах. Подробнее |
holdTtl |
- | время заморозки средств (в секундах). Минимум 10 минут, максимум 4 дня. Если услуга не будет подтверждена, произойдет автоматический возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
properties |
+ | массив реквизитов** |
orderItems |
- | Корзина для фискализации. Подробнее |
orderNote |
- | Доп. справочное поле для пользователя. Подробнее |
pfPayLink |
- | Используется для создания ссылки на платежную форму, принимает значение true в ответе получаем ссылку на платежную форму, заместо формы ввода данных карты, по умолчанию false |
payTypeVisible |
- | используется если необходимо скрыть или скорректировать очередность способов оплаты |
Параметры ответа (все обязательные):
-
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
url для перехода к оплате
Подтверждение оказания услуги (заморозки)
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to confirm. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Необходимость подтверждения оказания услуги определяется настройками терминала с нашей стороны по вашему запросу
Подтвердить можно только платеж в статусе holded
. Узнать статус платежа можно по запросу Получение статуса платежа
После получения подтверждения оказания услуги ckassa переводит денежные средства на кошелек мерчанта/расчетный счет. Это значит, что услуга считается выполненной и оплаченной
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/confirm
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
orderId |
+ | уникальный номер заказа на стороне поставщика услуг |
amount |
- | Сумма платежа в копейках. Параметр только для платежей с бронированием суммы. Если передана сумма, менньшая чем в заморозке, то будет выполнен частичный возврат. По умолчанию подтверждается полная сумма |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
resultState |
+ | результат (success / fail ) |
desc |
- | пояснение |
ShopToken |
- | Идентификатор магазина |
Отмена замороженных средств
Пример отмены замороженных средств
{
"regPayNum":"1234567890",
"orderId":"12345"
}
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to refund. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Отменить заморозку и вернуть деньги на карту клиента можно только если платеж находится в статусе hold
(в котором заморозка денежных среств на карте клиента осуществлена, но еще не подтверждено оказание услуги)
После отмены заморозки ckassa откатывает деньги обратно на карту клиента
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/refund
Параметры запроса (все обязательные):
-
regPayNum
- номер платежа в системе ckassa. Выдается на запрос Создание платежа -
orderId
- уникальный номер заказа на стороне магазина
Параметры ответа (все обязательные):
-
resultState
- результатa)
success
- успехб)
fail
- неудача -
ShopToken
- идентификатор магазина
Магазин. Рекуррентный платеж
Онлайн магазин, позволяющий сохранять данные карты, держать список карт по пользователю, проводить оплату из сохраненных карточных данных.
Алгоритм работы
Регистрация пользователя
Пример запроса на регистрацию пользователя
{
"login":"Login",
"email":"Email",
"name":"Name",
"surName":"SurName",
"middleName":"MiddleName"
}
curl -X POST https://demo-api.ckassa.ru/api-shop/user/registration --cert ./59-BS-TERM-Test_ShopApi-001.pem:e9shpkwgyc -H "Content-Type: application/json" -d
'{
"login":"79124933293"
}'
Пример ответа
{
"state":"active",
"login":"getLogin()",
"email":"getEmail()",
"name":"getName()",
"surName":"getSurName()",
"middleName":"getMiddleName()"
}
{ " "login":"79124933293", "email":null, "name":"", "surName":null, "middleName":null, "userToken":"cc507cb4-fe90-4cb4-af75-37b9b5b41387", "state":"active" }
-
Метод запроса - POST
-
URL - /user/registration
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ | номер телефона с кодом, но без '+', например - 79020000000. |
email |
- | e-mail (на него отправляются чеки после оплаты) |
name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ | номер телефона с кодом, но без '+', например - 79020000000. |
email |
- | e-mail (на него отправляются чеки после оплаты) |
name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
state |
+ | статус. Более подробно - Статус пользователя |
userToken |
+ | идентификатор пользователя |
Статус пользователя
Пример запроса статуса пользователя
{
"login":"79150000000"
}
Пример ответа
{
"state":"active",
"login":"getLogin()",
"email":"getEmail()",
"name":"getName()",
"surName":"getSurName()",
"middleName":"getMiddleName()"
,"userToken":"USER_TOKEN"
}
Если пользователь не зарегистрирован, то будет сгенерировано исключение UserNotRegisteredForShop
(см. Разбор ошибок)
-
Метод запроса - POST
-
URL - /user/status
Параметры запроса (все параметры обязательные):
-
login
- номер телефона с кодом, но без '+', например - 79020000000.
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
login |
+ | номер телефона |
email |
- | name |
- | имя |
surName |
- | фамилия |
middleName |
- | отчество |
state |
+ | статус* |
userToken |
+ | идентификатор пользователя |
Регистрация карты
Пример запроса на регистрацию карты
{
"userToken":"USER_TOKEN",
"clientType":"web"
}
curl -X POST https://demo-api.ckassa.ru/api-shop/card/registration --cert ./59-BS-TERM-Test_ShopApi-001.pem:e9shpkwgyc -H "Content-Type: application/json" -d '{ "userToken":"cc507cb4-fe90-4cb4-af75-37b9b5b41387" }' Строка формирования подписи: cc507cb4-fe90-4cb4-af75-37b9b5b41387&1a4c0d33-010c-4365-9c65-4c7f9bb415d5&6a7abaad-2147-4646-b91a-435b5d97527b
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN"
}
Во время регистрации карты будет списано до 5 рублей, после добавления карты деньги будут возвращены
После подтверждения оплаты карта появится в списке и станет доступной для создания рекуррентных платежей, см. пункт Получение списка карт.
Для тестового соединения нужно использовать тестовую карту, см. пункт Тестовые, боевые данные
В ответ на запрос приходит номер платежа, url регистрации и способ перехода.
-
Метод запроса - POST
-
URL - /card/registration
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
clientType |
- | тип клиента* |
userToken |
+ | идентификатор пользователя |
payType |
- | Способ оплаты. Обязателен только для совершения рекуррентного платежа через SberPay ** Подробнее о Функции payType |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Получение списка карт
Пример запроса списка карт
{
"userToken":"USER_TOKEN"
}
curl -X POST https://demo-api.ckassa.ru/api-shop/ver3/get/cards --cert ./59-BS-TERM-Test_ShopApi-001.pem:e9shpkwgyc -H "Content-Type: application/json" -d '{ "sign":"0D3039397B11326E941557CF0D897996", "userToken":"cc507cb4-fe90-4cb4-af75-37b9b5b41387" }' Строка формирования подписи: cc507cb4-fe90-4cb4-af75-37b9b5b41387&1a4c0d33-010c-4365-9c65-4c7f9bb415d5&6a7abaad-2147-4646-b91a-435b5d97527b
Пример ответа
{
"userToken":"USER_TOKEN",
"cards":[{"cardMask":"546949******9929","cardToken":"77a3adeb-1f50-400a-88a9-7127dc9ea9f3","cardType":"master_card","state":"active"}]
"shopToken":"SHOP_TOKEN"
}
{ "userToken":"cc507cb4-fe90-4cb4-af75-37b9b5b41387" "cards": [{ "cardMask":"400000******0002", "cardToken":"ae7f3942-4e7c-44d3-9ab9-8c84d118b5ed", "cardType":"visa", "state":"active" }] }
Для того что бы карта появилась в списке нужно произвести регистрацию карты см. пункт Регистрация карты
-
Метод запроса - POST
-
URL - ver3/get/cards
Параметры запроса (все параметры обязательные):
-
userToken
- идентификатор пользователя
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
ShopToken
- идентификатор магазина -
cards
- список карт -
cardMask
- маскированый номер карты -
cardToken
- токен карты (используется для создания рекуррентного платежа, и активации карты) -
cardType
- тип карты* -
state
- статус карты** -
exp
-cpoк действия карты -
recType
-тип оплаты
Данные в переменной cards
:
Деактивация/удаление карты
Пример запроса удаления карты
{
"userToken":"USER_TOKEN",
"cardToken":"CARD_TOKEN"
}
Пример ответа
{
"resultState":"success",
"desc":"descSuccess",
"userToken":"USER_TOKEN"
}
После исполнения запроса состояние карты становится inactive
и карта будет недоступна для оплаты (необходимо будет провести повторную привязку карты, см пункт Регистрация карты
-
Метод запроса - POST
-
URL - /card/deactivation/
Параметры запроса (все параметры обязательные):
-
userToken
- идентификатор пользователя -
cardToken
- идентификатор карты
Параметры ответа (все параметры обязательные):
-
resultState
- результат -
success
- успех -
fail
- неудача -
desc
- описание (пояснение) -
userToken
- идентификатор пользователя
Возможные значения для resultState
:
Cоздание рекуррентного платежа
Пример запроса создания рекуррентного платежа
{
"cardToken": "CARD_TOKEN",
"value": "10000",
"clientType": "web",
"payType": "card",
"shopLogin": true,
"properties": [
{
"name": "Л/СЧЕТ",
"value": "9503006477"
},
{
"name": "ФИО",
"value": "Иванов Н П"
},
{
"name": "АДРЕС",
"value": "Ленина10"
},
{
"name": "МЕСЯЦ",
"value": "05.2015"
},
{
"name": "СУММА_ПЕНИ",
"value": "10000"
}
],
"orderItems": [
{
"num": 1,
"name": "name1",
"quantity": 2,
"price": 100,
"tax": "vat0"
},
{
"num": 2,
"name": "name2",
"quantity": 5,
"price": 50,
"tax": "vat110"
}
],
"serviceCode": "109-5804-1",
"userToken": "USER_TOKEN",
"amount": "10000",
"comission": "13300"
}
Пример ответа
{
'regPayNum':'1234567890',
'methodType':'GET',
'payUrl':'https://autopays.ru/payment/#!search_payment',
'userToken':'USER_TOKEN'
"shopToken": "SHOP_TOKEN"
}
В ответ приходит номер платежа, url для оплаты и способ перехода.
При рекурентном платеже - url со ссылкой на чек.
-
Метод запроса - POST
-
URL - /do/payment
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
serviceCode |
+ | код провайдера |
userToken |
+ | идентификатор пользователя | amount |
+ | сумма платежа в копейках, которая идет на счет пользователю |
comission |
+ | комиссия платежа в копейках (при отсутствии комиссии передается 0) |
cardToken |
- | идентификатор карты (для рекуррентного платежа), см. пункт Получение списка карт |
needRegCard |
- | Включает принудительный 3ds, более подробно: needRegCard |
gpayToken |
- | Токен при оплате через Google Pay. Более подробно в разделе Google Pay |
applePayToken |
- | токен при оплате через Apple pay. Подробнее в разделе Apple Pay |
mirPayToken |
- | токен при оплате через Mir Pay. Подробнее в разделе Mir Pay |
enableSMSConfirm |
- | более подробно: EnableSMScnfirm |
payType |
- | способ оплаты подробнее в п. Параметр payType |
payTypeVisible |
- | используется если необходимо скрыть или скорректировать очередность способов оплаты |
clientType |
- | более подробно в п. Создание анонимного платежа |
userEmail |
* | e-mail для фискального чека, подробнее: Параметр fiscalType |
fiscalType |
* | отправлять ли фискальный чек. Подробнее: Параметр fiscalType |
holdTtl |
- | время заморозки средств (в секундах). Минимум 10 минут, максимум 4 дня. Если услуга не будет подтверждена, произойдет автоматический возврат средств на карту клиента. |
successUrl |
- | динамический url возврата клиента после успешной оплаты*** |
failUrl |
- | динамический url возврата клиента после неуспешной оплаты*** |
cbUrl |
- | динамический url для отправки уведомлений, более подробно: Уведомление об оплате |
orderBestBefore |
- | Время истечения срока жизни заказа в секундах. Подробнее |
properties |
+ | массив реквизитов. Более подробно в п. Создание анонимного платежа |
orderItems |
- | Корзина для фискализации. Подробнее |
clientAuInfo |
+ | Параметры браузера для прохождения 3ds v2. Подробнее |
orderNote |
- | Доп. справочное поле для пользователя. Подробнее |
shopLogin |
- | Для авторегистрации пользователя, после создания платежа Подробнее |
Параметры ответа (все параметры обязательные):
-
userToken
- идентификатор пользователя -
regPayNum
- номер платежа -
methodType
- метод перехода по url для оплаты (GET/POST) -
payUrl
- url оплаты -
ShopToken
- идентификатор магазина
Подтверждение оказания услуги (заморозки)
Пример подтверждения оказания услуги
{
"regPayNum":"1234567890",
"orderId":"12345"
}
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to confirm. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Необходимость подтверждения оказания услуги определяется настройками терминала с нашей стороны по вашему запросу
Подтвердить можно только платеж в статусе holded
. Узнать статус платежа можно по запросу Получение статуса платежа
После получения подтверждения оказания услуги ckassa переводит денежные средства на кошелек мерчанта/расчетный счет. Это значит, что услуга считается выполненной и оплаченной
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/confirm
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
regPayNum |
+ | номер платежа |
orderId |
+ | уникальный номер заказа на стороне поставщика услуг |
amount |
- | Сумма платежа в копейках. Параметр только для платежей с бронированием суммы. Если передана сумма, менньшая чем в заморозке, то будет выполнен частичный возврат. По умолчанию подтверждается полная сумма |
Параметры ответа:
Параметр | Обязательный | Описание |
---|---|---|
resultState |
+ | результат (success / fail ) |
desc |
- | пояснение |
ShopToken |
- | Идентификатор магазина |
Отмена замороженных средств
Пример отмены замороженных средств
{
"regPayNum":"1234567890",
"orderId":"12345"
}
Пример ответа
{
"resultState":"success",
"desc":"Success update provision services to refund. RegPayNum:1234567890"
"shopToken": "SHOP_TOKEN",
}
Отменить заморозку и вернуть деньги на карту клиента можно только если платеж находится в статусе hold
(в котором заморозка денежных среств на карте клиента осуществлена, но еще не подтверждено оказание услуги)
После отмены заморозки ckassa откатывает деньги обратно на карту клиента
В случае ошибки достаточно повторить запрос
-
Метод запроса - POST
-
URL: /provision-services/refund
Параметры запроса (все обязательные):
-
regPayNum
- номер платежа в системе ckassa. Выдается на запрос Создание платежа -
orderId
- уникальный номер заказа на стороне магазина
Параметры ответа (все обязательные):
-
resultState
- результатa)
success
- успехб)
fail
- неудача -
ShopToken
- идентификатор магазина
Уведомление о регистрации карты
Пример запроса создания уведомления
{
"userToken":"USER_TOKEN",
"cardMask":"546949******9929",
"cardToken":"77a3adeb-1f50-400a-88a9-7127dc9ea9f3",
"cardType":"master_card"
}
-
URL: {cb url}/card-reg
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
userToken |
+ | идентификатор пользователя |
cardToken |
+ | токен карты |
cardMask |
+ | маскированый номер карты |
cardType |
+ | тип карты. Подробнее см. п. Получение списка карт |
В ответ ожидается любой ответ со статусом 200
Sber Pay
Алгоритм для Магазин.
1. Создаем платеж с параметром payType и типом оплаты SberPay
2. C помощью параметра sberPayInfo выбираем тип оплаты по sberPay
3. В ответ вы получите regpaynum c помощью которого вы сможете посмотреть статус платежа(см. подробнее Получение статуса платежа)
Описание значений для параметра sberPayInfo .
back2app-Ссылка на оплату,придет пуш или sms уведомлении на указанный в запросе номер телефона
app2app-Вызывается в приложение клиента, далее клиент перенаправляемся в мобильное приложение "Сбербанк-Онлайн"
web2app-Вызывается в браузере клиента, далее клиент перенаправляемся в мобильное приложение "Сбербанк-Онлайн"(Пока не поддерживается)
Запрос - POST
Параметры запроса:
Параметр | Обязательный | Описание |
---|---|---|
payType |
+ | способ оплаты подробнее в п. Параметр payType |
userPhone |
- | Телефон клиента(обязателен только для back2App) |
sberPayInfo |
- | Дополнительная информация.По умолчанию используется sberPayInfo со значением back2app. |
orderBestBefore |
- | Время истечения срока жизни заказа в секундах. Подробнее |
Возможные занчения для параметра sberPayInfo:
-
sberPayType
- Выбор метода оплаты по SberPay (back2app, web2app, app2app) -
sberPayOsType
- Тип ОС клиента.Обязателен для app2app.(ios, Android) -
deepLink
-Линк для возврата в приложение мерчанта. Обязателен для app2app `^([a-zA-Z0-9_]|-|:|/|\\.|&|\\?|=){1,256}$` -
sbolBankInvoiceId
- (Обязательный для app2app.Уникальный идентификатор заказа, сгенерированный Банком ) -
backUrl
- Линк для возврата после оплаты.Только для web2app `https URL-Based ссылка до 256 символов`
Параметры ответа (все параметры обязательные):
-
sbolDeepLink
- (обязательный для web2app, app2app Ссылка на переход в мобильное приложение "Сбербанк-Онлайн" для завершения оплаты.) `^([a-zA-Z0-9_]|-|:|/|\\.|&|\\?|=){1,1024}$` -
sberPayload
- `https URL-Based ссылка до 256 символов`(Обязательный для web2app Зарегистрированная ссылка оплата по QR от Сбербанка формата двухмерного QR-кода (ISO/IEC 18004-2015), представляемая в виде URL-Based.)
Mir Pay
Предоставьте пользователям быстрый, простой и безопасный способ покупки товаров и услуг в вашем приложении или на вашем веб-сайте.
Наш шлюз поддерживает работу Mir Pay только в мобильном приложении и в мобильных браузерах устройств Android версий 7.0 (API level 23) – 13.0 (API level 33)
Для корректной работы Mir Pay у Вас обязательно должен быть установлен и добавлен в доверенное хранилище корневых сертификатов сертификат Минцифры РФ, выпущенный Национальным удостоверяющим центром(НУЦ). Подробная инструкция для установки корневого сертификата доступна на Едином портале государственных услуг РФ ссылка
Алгоритм подключения
1. Обратитесь в отдел продаж или нашу техническую поддержку с просьбой подключить Mir Pay
2. После согласования подключения Mir Pay мы выдадим Вам mid(Merchand ID), после чего Вам необходимо сгенерировать закрытый ключ, тип ключа должен быть RSA-2048 и на его основе отправьте CSR запрос на сертификат. Требования к запросу СSR:
- OU = Mmid(Mmid - Merchant ID)
- keyUsage = digitalSignature
3. После получения запроса на сертификат необходимо направить его нам, имя файла должно быть mid.csr, где mid - Ваш merchant ID
4. Ckassa выпускает конечный сертификат для мерчанта, подписывая его своим секретным ключом
5. В конечном итоге Вы получаете:
Сертификат, который мы подпишем своим ключом
Документация
Библиотека MirPaySDK.aar для встраивания в мобильное приложение
Описание API для реализации сервиса приема данных от Mir Pay
URL-адрес сертификата на общедоступном ресурсе
В мобильном приложении с помощью MirPay SDK
Сценарий проведения In-Application операции для мерчанта
1. Мерчант проверяет наличие установленного приложения Mir Pay на устройстве пользователя с помощью метода MirApp.isMirPayInstalled
2. Мерчант активирует приложение Mir Pay на устройстве с помощью метода MirPayPaymentClientFactory.create
3. Мерчант инициирует сценарий формирования In-Application операции с помощбю метода IMirPayPaymentClient.createPaymentIntent
4. Мерчант получает данные In-Application с помощью метода MirPayPaymentResultExtractor.extract
5. Мерчант завершает взаимодействие с приложением Mir Pay с помощью метода IMirPayPaymentClient.disconnect
6. Мерчант отправляет полученные данные In-Application операции в формате JSON Web Encryption(JWE) Ckassa по каналу взаимодействия
На сайте
Пример формирования Deep Link
{
"alg": "PS256",
"typ": "JWT",
"jku": "https://agent-host/jwks/000000000000001-jwks.json",
"kid": "1000"
}
{
"iat": 1660553079,
"iss": "000000000000001",
"orderId": "123456",
"sum": 10000,
"cur": 643,
"media": "DL",
"rurl": "https://merchant/api/v1/inapp/merchants/000000000000001/orders/123456"
}
Пример формирования Universal Link
{
"alg": "PS256",
"typ": "JWT",
"jku": "https://agent-host/jwks/000000000000001-jwks.json",
"kid": "1000"
}
{
"iat": 1660553079,
"iss": "000000000000001",
"orderId": "123456",
"sum": 10000,
"cur": 643,
"media": "UL",
"rurl": "https://merchant/api/v1/inapp/merchants/000000000000001/orders/123456"
}
Сценарий проведения web-based In-Application операции для мерчанта по технологии Deep Link или Universal Link
1. Мерчант формирует Deep Link или Universal Link с данными In-Application операции.
2. Далее, в зависимости от типа ссылки мерчант:
- передает сформированный Deep link в ОС Android для вызова приложения Mir Pay
- осуществляет переход по Universal link в мобильном браузере для активации Mir Pay
3. Mir Pay формирует данные In-Application операции в формате JSON Web Encryption (JWE).
4. Mir Pay отправляет подготовленные зашифрованные данные In-Application операции внутри JWE на адрес, который Вы отправили в параметре rurl при запросе на формирование Deep Link и Universal Link
5. Мерчант передаёт полученные зашифрованные данные In-Application операции JWE Ckassa
Google Pay™
С помощью системы Google Pay™ вы сможете быстро принимать в своем приложении оплату от миллионов пользователей, которые сохранили данные банковских карт в своих аккаунтах Google.
Введение
Нажав на кнопку оплаты через Google Pay, пользователь переходит на страницу, где указаны способы оплаты и адреса доставки, сохраненные в его аккаунте Google. Здесь он может быстро выбрать нужную информацию или добавить новую.
Как это работает: оплата осуществляется из мобильного приложения с устройства пользователя. В сценарии приложение запрашивает зашифрованные данные у Google Pay. Эти данные необходимо передать в платежный шлюз: тоесть, нам.
Итак, вы приняли решение внедрить технологию Google Pay в ваше приложение. С чего начать?
Алгоритм работы
Пример инициализации структуры Подробнее
"type": "CARD", "parameters": { "allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"], "allowedCardNetworks": ["MASTERCARD", "VISA"]
В настоящее время шлюз поддерживает платежные системы Visa и MasterCard, а так же обработку токенизированных и нетокенизированных карт (PAN_ONLY и CRYPTOGRAM_3DS).
Наш шлюз поддерживает возможность оплаты через Google Pay как в вашем android приложении, так и в вашем web-приложении (на сайте).
1. Пользователь в приложении выбирает тип оплаты Google Pay (привязывает карту, либо выбирает уже привязанную).
2. Приложение запрашивает у Google Pay данные карт, привязанных к Google в маскированном виде. Для того, чтоб приложение могло успешно общаться с системой Google Pay не нужно к ним интегрироваться, достаточно знать несколько параметров. Мы рассмотрим их ниже.
3. Google Pay возвращает в приложение данные карт (привязанных к Google) в маскированном виде.
4. Приложение показывает пользователю данные его карт/карты (привязанной к Google) в маскированном виде.
5. Пользователь подтверждает оплату (выбирает карту, либо другой способ оплаты).
6. Приложение запрашивает у Google Pay карточные данные в зашифрованном виде.
7. Google Pay шифрует данные, используя открытый ключ - соответствующий ему закрытый ключ расположен в платёжном шлюзе. То есть, собирает некую посылку в виде криптограммы.
Пример криптограммы от Google Pay
{"signature":"MEYCIQDzIjWGqr1teZiawa3HJ9IgJ/j4ZJnHkgIXzJv1pD1MIQIhAMWLvRlTZjdVCJBHO6/Jo+wuIudYqlrIxKU3nJdcU9XW","protocolVersion":"ECv1","signedMessage":"{\"encryptedMessage\":\"s3w41rMoVYpgOaWGWF8Sk6WAxxbDCPkepD94OIPTt4BMCJYTFMkM34KG60ONbu1bQkSfibSveqTtP0+bnXNcF2N50ZT+QTJ4rt7411nyXmWlsqHVGTHCI7RT02Q45l9NM33BIA8zuqAigqhPd91a3x1b0ZrBZW7xBOPf8Vzh5sokepySQRLIWwN/F40aO3DC3AP+wt8FT+ly4M3C7srDZAJT4/pbE4Qyr9ftvdqFze2fRJmPv0Uc1m8C+4AZHYwZSY8jCMlhdsEECR1pHdaXqpiTNDutY9Qw0ESQq63zMqPsfpDLo15bl4l52zkqtC7bxPfI31CaB0dmV+Et8rw6TYVa0+8DvvYAEWoHU1aZAXQd2amI7rGdJ3p6KO8IaL5QwwtFk5byjvxrsjN1Nq9EQJnzCVfE5/P7PdGVB3LLLTLmc5xJJH89CYuu6er4erVcfw\\u003d\\u003d\",\"ephemeralPublicKey\":\"BGLg5omp43/eI6V43NvI1FEF2TpTnz/S9T4hByZ3Oa726uLc3BTVzOpcUefzBDL5gePdvRqQTrL3U0vV4JRHFhU\\u003d\",\"tag\":\"x1hLpFnhsB2tSUO4CMAWCbZgvClC3ieIKkjRtCSQV1Q\\u003d\"}"}
8. Google возвращает в приложение зашифрованные данные о платеже (криптограмму).
9. Приложение отправляет в нашу платежную систему запрос на оплату, указывая полученный ранее Google Pay Token
.
10. Наша платежная система собирает данные о платеже и отправляет платеж в эквайринг.
11. Эквайринг проводит платеж в обычном режиме (методами того типа магазина, который вы выбрали).
12. Информация о статусе платежа отправляется на Backend приложения.
В мобильном приложении
Пример выбора способа токенизации (из документации Google Pay API)
private static JSONObject getGatewayTokenizationSpecification() throws JSONException { return new JSONObject(){{ put("type", "PAYMENT_GATEWAY"); put("parameters", new JSONObject(){{ put("gateway", "billingsystems"); put("gatewayMerchantId", "shopToken"); } }); }}; }
-
Первое, что вам необходимо - это получить одобрение у Google на право получить доступ к платежному поведению. Без этого ваше приложение после установки на устройство пользователя просто не сможет запросить доступ на платежные операции в Android устройстве.
-
Используйте Google Pay API для формирования запроса в систему Google Pay на платежные данные.
-
Укажите тип оплаты через шлюз: PAYMENT_GATEWAY
-
Добавьте два параметра:
-
gateway
- billingsystems -
gatewayMerchantId
- вашshopToken
(выдается в ЛК при кодключении. Подробнее)
-
-
Cоблюдайте правила использования бренда и рекомендации для интерфейса
-
Осталось включить параметр
gpayToken
в ваш запрос на создание платежа. Более подробное описание запроса смотрите в документации своего типа магазина. Например: Создание платежа в пользу мерчанта -
Сверьтесь с контрольным списком интеграции с сервисами Google.
Подробная инструкция по добавлению Google Pay в ваше приложение с примерами готового кода изложена в документации по Google Pay для Android
Если с какими-то параметрами, запросами у вас возникли проблемы и ошибки, то обязательно загляните в раздел Устранение неполадок. Ведь с большинством проблем уже столкнулись, решили и описали их решение.
На сайте
Пример выбора способа токенизации (из документации Google Pay API для сайта)
const tokenizationSpecification = { type: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'billingsystems', 'gatewayMerchantId': 'shopToken' } };
-
При формировании запроса на платежные данные укажите тип оплаты через шлюз - PAYMENT_GATEWAY
-
Ориентируйтесь на документацию Google Pay API для сайта
-
Добавьте два параметра:
-
gateway
- billingsystems -
gatewayMerchantId
- ВашshopToken
(выдается в ЛК при кодключении. Подробнее)
-
-
Ваш сайт должен работать по HTTPS и поддерживать протокол TLS версии 1.2
-
Cоблюдайте правила использования бренда и рекомендации для интерфейса
-
Осталось включить параметр
gpayToken
в ваш запрос на создание платежа. Более подробное описание запроса смотрите в документации своего типа магазина. Например: Создание анонимного платежа -
Cверьтесь с контрольным списком интеграции с сервисами Google.
Если с какими-то параметрами, запросами у вас возникли проблемы и ошибки, то обязательно загляните в раздел Устранение неполадок. Ведь с большинством проблем уже столкнулись, решили и описали их решение.
Apple Pay
Предоставьте пользователям быстрый, простой и безопасный способ покупки товаров и услуг в вашем приложении или на вашем веб-сайте. Разработчики, внедрившие Apple Pay с использованием лучших практик, значительно повысили конверсию продаж, лояльность клиентов и частоту покупок, а также сократили время оформления покупок.
Алгоритм работы
Пример получаемого приложением от Apple объекта PKPaymentToken:
{ "paymentData": { "data": "vj5Uvux7Im8DD8YhSOsJvw5lWmfl2HMUnTNWJhVfTehvFffRhDo54mfpjxMt9vJdp6DwD7fgcNHDxBvnj56qYG4DpOxg1fTSdXgPFrezprZHCrRxPhN/aQQEThe2pQ0c7hgzzZlA6TpkIR/Xtk6CTcEbD1W6znFVdvMgX8G96Gg4OAGl8GaTXdSU3wlMQL5E63CLQzPi1xHVErWl1OOn6hYQuREUDGc7mAjmqMyLwXp6mOwJZ6ZFO/b9HkgFi428rqtOH08AfqkfaIWwIIAz2w3xEoZrDXbgFpNBnN7F2oretCU1/dFvQJjDYbMorKQ8GJbWtlsVbKsy0U91eoUetDcyMpB9zc139STYVoC8yp6Yk6Mn3icCLY0ZBujq7/404kMGpnHgkNVqFc/4SN0U2XQ5rrb14DM8M69w=", "signature": "MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIID4jCCA4igAwIBAgIIJEPyqAad9XcwCgYIKoZIzj0EAwIwejEuMCwGA1UEAwwlQXBwbGUgQXBwbGljYXRpb24gSW50ZWdyYXRpb24gQ0EgLSBHMzEmMCQGA1UECwwdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE0MDkyNTIyMDYxMVoXDTE5MDkyNDIyMDYxMVowXzElMCMGA1UEAwwcZWNjLXNtcC1icm9rZXItc2lnbl9VQzQtUFJPRDEUMBIGA1UECwwLaU9TIFN5c3RlbXMxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwhV37evWx7Ihj2jdcJChIY3HsL1vLCg9hGCV2Ur0pUEbg0IO2BHzQH6DMx8cVMP36zIg1rrV1O/0komJPnwPE6OCAhEwggINMEUGCCsGAQUFBwEBBDkwNzA1BggrBgEFBQcwAYYpaHR0cDovL29jc3AuYXBwbGUuY29tL29jc3AwNC1hcHBsZWFpY2EzMDEwHQYDVR0OBBYEFJRX22\/VdIGGiYl2L35XhQfnm1gkMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUI/JJxE+T5O8n5sT2KGw/orv9LkswggEdBgNVHSAEggEUMIIBEDCCAQwGCSqGSIb3Y2QFATCB/jCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjA2BggrBgEFBQcCARYqaHR0cDovL3d3dy5hcHBsZS5jb20vY2VydGlmaWNhdGVhdXRob3JpdHkvMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlYWljYTMuY3JsMA4GA1UdDwEB/wQEAwIHgDAPBgkqhkiG92NkBh0EAgUAMAoGCCqGSM49BAMCA0gAMEUCIHKKnwSoyq5mXQr1V62c0BXKpaHodYu9TWXEPUWPpbpAiEAkTecfW6+W5l0r0ADfzTCPq2YtbS39w01XIayqBNy8bEwggLuMIICdaADAgECAghJbS+/OpjalzAKBggqhkjOPQQDAjBnMRswGQYDVQQDDBJBcHBsZSBSb290IENBIC0gRzMxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzAeFw0xNDA1MDYyMzQ2MzBaFw0yOTA1MDYyMzQ2MzBaMHoxLjAsBgNVBAMMJUFwcGxlIEFwcGxpY2F0aW9uIEludGVncmF0aW9uIENBIC0gRzMxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPAXEYQZ12SF1RpeJYEHduiAou\/ee65N4I38S5PhM1bVZls1riLQl3YNIk57ugj9dhfOiMt2u2ZwvsjoKYT/VEWjgfcwgfQwRgYIKwYBBQUHAQEEOjA4MDYGCCsGAQUFBzABhipodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDA0LWFwcGxlcm9vdGNhZzMwHQYDVR0OBBYEFCPyScRPk+TvJ+bE9ihsP6K7\/S5LMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUu7DeoVgziJqkipnevr3rr9rLJKswNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NybC5hcHBsZS5jb20vYXBwbGVyb290Y2FnMy5jcmwwDgYDVR0PAQH/BAQDAgEGMBAGCiqGSIb3Y2QGAg4EAgUAMAoGCCqGSM49BAMCA2cAMGQCMDrPcoNRFpmxhvs1w1bKYr/0F+3ZD3VNoo6+8ZyBXkK3ifiY95tZn5jVQQ2PnenC/gIwMi3VRCGwowV3bF3zODuQZ/0XfCwhbZZPxnJpghJvVPh6fRuZy5sJiSFhBpkPCZIdAAAxggGMMIIBiAIBATCBhjB6MS4wLAYDVQQDDCVBcHBsZSBBcHBsaWNhdGlvbiBJbnRlZ3JhdGlvbiBDQSAtIEczMSYwJAYDVQQLDB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMCCCRD8qgGnfV3MA0GCWCGSAFlAwQCAQUAoIGVMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE3MDMxNzEwMzgzOVowKgYJKoZIhvcNAQk0MR0wGzANBglghkgBZQMEAgEFAKEKBggqhkjOPQQDAjAvBgkqhkiG9w0BCQQxIgQgvL+q07/reM0N/5b0hwWT7TJReVTdS9QX5SPhiqeie+cwCgYIKoZIzj0EAwIERzBFAiEAttC68Xyzs6I0+tAKmg6x+0UrqmkQN/V5c8RMMIEJHooCIHIgUHbAt2p5WrFHQKrAVL4c7nohRplZWVbVu6wbBeCgAAAAAAAA", "header": { "publicKeyHash": "fpvAnSDwQFX4NX4pghdjpNwUFhoTH/DDGhew94uJaRA=", "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErKZUfqvhlieGAOaCKeTB/oDEo29fS1jWSKemNDh3fIqmbfs86nL4BGtRsWRxWcMnHN6GFOQm1MEj4m7ZHxe78g==", "transactionId": "38e4c267ef1de62a343d0eccada3f7e19f6b22ffc7ede899c039865432ba6aa2" }, "version": "EC_v1" }, "transactionIdentifier": "38E4C267EF1DE62A343D0ECCADA3F7E19F6B22FFC7EDE899C039865432BA6AA2", "paymentMethod": { "network": "Visa", "type": "debit", "displayName": "Visa5223" } }
Значение параметра paymentData, которое надо закодировать в Base64 и передать в запросе на оплату нам:
{ "data": "vj5Uvux7Im8DD8YhSOsJvw5lWmfl2HMUnTNWJhVfTehvFffRhDo54mfpjxMt9vJdp6DwD7fgcNHDxBvnj56qYG4DpOxg1fTSdXgPFrezprZHCrRxPhN/aQQEThe2pQ0c7hgzzZlA6TpkIR/Xtk6CTcEbD1W6znFVdvMgX8G96Gg4OAGl8GaTXdSU3wlMQL5E63CLQzPi1xHVErWl1OOn6hYQuREUDGc7mAjmqMyLwXp6mOwJZ6ZFO/b9HkgFi428rqtOH08AfqkfaIWwIIAz2w3xEoZrDXbgFpNBnN7F2oretCU1/dFvQJjDYbMorKQ8GJbWtlsVbKsy0U91eoUetDcyMpB9zc139STYVoC8yp6Yk6Mn3icCLY0ZBujq7/404kMGpnHgkNVqFc/4SN0U2XQ5rrb14DM8M69w=", "signature": "MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIID4jCCA4igAwIBAgIIJEPyqAad9XcwCgYIKoZIzj0EAwIwejEuMCwGA1UEAwwlQXBwbGUgQXBwbGljYXRpb24gSW50ZWdyYXRpb24gQ0EgLSBHMzEmMCQGA1UECwwdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE0MDkyNTIyMDYxMVoXDTE5MDkyNDIyMDYxMVowXzElMCMGA1UEAwwcZWNjLXNtcC1icm9rZXItc2lnbl9VQzQtUFJPRDEUMBIGA1UECwwLaU9TIFN5c3RlbXMxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwhV37evWx7Ihj2jdcJChIY3HsL1vLCg9hGCV2Ur0pUEbg0IO2BHzQH6DMx8cVMP36zIg1rrV1O/0komJPnwPE6OCAhEwggINMEUGCCsGAQUFBwEBBDkwNzA1BggrBgEFBQcwAYYpaHR0cDovL29jc3AuYXBwbGUuY29tL29jc3AwNC1hcHBsZWFpY2EzMDEwHQYDVR0OBBYEFJRX22\/VdIGGiYl2L35XhQfnm1gkMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUI/JJxE+T5O8n5sT2KGw/orv9LkswggEdBgNVHSAEggEUMIIBEDCCAQwGCSqGSIb3Y2QFATCB/jCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjA2BggrBgEFBQcCARYqaHR0cDovL3d3dy5hcHBsZS5jb20vY2VydGlmaWNhdGVhdXRob3JpdHkvMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlYWljYTMuY3JsMA4GA1UdDwEB/wQEAwIHgDAPBgkqhkiG92NkBh0EAgUAMAoGCCqGSM49BAMCA0gAMEUCIHKKnwSoyq5mXQr1V62c0BXKpaHodYu9TWXEPUWPpbpAiEAkTecfW6+W5l0r0ADfzTCPq2YtbS39w01XIayqBNy8bEwggLuMIICdaADAgECAghJbS+/OpjalzAKBggqhkjOPQQDAjBnMRswGQYDVQQDDBJBcHBsZSBSb290IENBIC0gRzMxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzAeFw0xNDA1MDYyMzQ2MzBaFw0yOTA1MDYyMzQ2MzBaMHoxLjAsBgNVBAMMJUFwcGxlIEFwcGxpY2F0aW9uIEludGVncmF0aW9uIENBIC0gRzMxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPAXEYQZ12SF1RpeJYEHduiAou\/ee65N4I38S5PhM1bVZls1riLQl3YNIk57ugj9dhfOiMt2u2ZwvsjoKYT/VEWjgfcwgfQwRgYIKwYBBQUHAQEEOjA4MDYGCCsGAQUFBzABhipodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDA0LWFwcGxlcm9vdGNhZzMwHQYDVR0OBBYEFCPyScRPk+TvJ+bE9ihsP6K7\/S5LMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUu7DeoVgziJqkipnevr3rr9rLJKswNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NybC5hcHBsZS5jb20vYXBwbGVyb290Y2FnMy5jcmwwDgYDVR0PAQH/BAQDAgEGMBAGCiqGSIb3Y2QGAg4EAgUAMAoGCCqGSM49BAMCA2cAMGQCMDrPcoNRFpmxhvs1w1bKYr/0F+3ZD3VNoo6+8ZyBXkK3ifiY95tZn5jVQQ2PnenC/gIwMi3VRCGwowV3bF3zODuQZ/0XfCwhbZZPxnJpghJvVPh6fRuZy5sJiSFhBpkPCZIdAAAxggGMMIIBiAIBATCBhjB6MS4wLAYDVQQDDCVBcHBsZSBBcHBsaWNhdGlvbiBJbnRlZ3JhdGlvbiBDQSAtIEczMSYwJAYDVQQLDB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMCCCRD8qgGnfV3MA0GCWCGSAFlAwQCAQUAoIGVMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE3MDMxNzEwMzgzOVowKgYJKoZIhvcNAQk0MR0wGzANBglghkgBZQMEAgEFAKEKBggqhkjOPQQDAjAvBgkqhkiG9w0BCQQxIgQgvL+q07/reM0N/5b0hwWT7TJReVTdS9QX5SPhiqeie+cwCgYIKoZIzj0EAwIERzBFAiEAttC68Xyzs6I0+tAKmg6x+0UrqmkQN/V5c8RMMIEJHooCIHIgUHbAt2p5WrFHQKrAVL4c7nohRplZWVbVu6wbBeCgAAAAAAAA", "header": { "publicKeyHash": "fpvAnSDwQFX4NX4pghdjpNwUFhoTH/DDGhew94uJaRA=", "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErKZUfqvhlieGAOaCKeTB/oDEo29fS1jWSKemNDh3fIqmbfs86nL4BGtRsWRxWcMnHN6GFOQm1MEj4m7ZHxe78g==", "transactionId": "38e4c267ef1de62a343d0eccada3f7e19f6b22ffc7ede899c039865432ba6aa2" }, "version": "EC_v1" }
Наш шлюз поддерживает возможность оплаты через Apple Pay как в вашем android приложении, так и в вашем web-приложении (на сайте).
1. Пользователь выбирает способ оплаты Apple Pay
2. Сведения о платеже отправляются на обработку в Apple Pay. Формируя посылку, обязательно укажите в applicationData
ваш ShopToken
Подробней про поле applicationData
3. В системе Apple Pay создаётся объект PKPaymentToken Object, который содержит свойство paymentData (подробнее в документации Apple)
4. Apple Pay направляет ответ в мобильное/web приложение
5. Мобильное/web приложение извлекает из полученного объекта PKPaymentToken Object
свойство paymentData
и кодирует его содержимое в Base64
6. Мобильное/web приложение отправляет запрос в ckassa на создание платежа с указанием параметра applePayToken
, содержащим ранее полученный paymentData
в кодировке Base64
7. Ckassa собирает данные о платеже и отправяет запрос в эквайринг
8. Эквайринг проводит платеж с полученными данными в обычном режиме (методами того типа магазина, который вы выбрали)
9. Информация о статусе платежа отправляется на Backend мобильного/web приложения
В мобильном приложении
Совместимость
-
Работает на устройствах начиная с iphone 6 (в полной мере), с некоторыми допущениями также на iphone 5
-
Обязательна учетная запись appleid и авторизация в icloud
1. Убедитесь что ваше приложение соответствует требованиям от Apple
2. Создайте MerchantID
Для подключения приложения необходимо в кабинете разработчика (из которого выпускается приложение) создать MerchantID - видео-туториал
Срок действия MerchantID не ограничен
3. Создайте Payment Processing Certificate
Payment Processing Certificate состоит из двух частей:
-
Закрытая. Она хранится у нас
-
Запрос на сертификат (certificate signing request, далее - CSR). Эту часть мы генерируем на основе закрытой части и передаем вам для генерации итогового сертификата (открытая часть)
Сначала запросите у нас CSR. Для этого обратитесь к своему менеджеру, либо в техническую поддержку. Вам будет выслан файл с открытой частью подписи
Теперь зайдите в кабинет разработчика в раздел Certificates, Identifiers & Profiles и загрузите туда данный файл как это указано в видеоинструкции выше
4. Передайте получившийся файл нам
В результате Apple выпустит сертификат, его необходимо скачать и передать получившийся файл нам
Срок действия сертификата будет указан при его генерации в кабинете разработчика. По истечению срока его необходимо обновить. Допустимо иметь до двух сертификатов одновременно
Данный сертификат необходимо использовать для взаимодейсвтия с Apple Pay
Все готово! Вы, как всегда, восхитительны! Осталось реализовать взаимодействие вашего приложения с Apple Pay
Справочные материалы, документацию Apple и помощь в реализации от Apple смотрите в дополнительных материалах
На сайте
1. Приведите ваше web приложение в соответствие с требованиями Apple:
-
Дизайн сайта должен соответствовать требованиям Apple Pay
-
Все страницы, содержащие Apple Pay должны работать по
https
-
Добавьте адреса системы Apple Pay в white list на своем сервере
-
У вас должна быть учетная запись разработчика Apple c завершенной регистрацией. Об этом подробнее ниже
2. Создайте MerchantID
Срок действия MerchantID не ограничен
3. Создайте Payment Processing Certificate
Payment Processing Certificate состоит из двух частей:
-
Закрытая. Она хранится у нас
-
Запрос на сертификат (certificate signing request, далее - CSR). Эту часть мы генерируем на основе закрытой части и передаем вам для генерации итогового сертификата (открытая часть)
Сначала запросите у нас CSR. Для этого обратитесь к своему менеджеру, либо в техническую поддержку. Вам будет выслан файл с открытой частью подписи
Теперь зайдите в кабинет разработчика в раздел Certificates, Identifiers & Profiles и загрузите туда данный файл как это указано в видеоинструкции выше
4. Создайте Merchant identity certificate
Необходимо для того, чтоб пройти аппрув в системе Apple Pay. Для этого пройдите по инстуркции от Apple
5. Реализуйте взаимодействие сайта с системой Apple Pay
Итак, вы прошли через все круги аппрувов. Теперь необходимо реализовать взаимодействие вашего сайта с системой Apple Pay
Для этого используйте Apple Pay JS
Рекомендуем заглянуть в дополнительную информацию. Там мы собрали полезные ссылки на справочную информацию
Дополнительная информация
Описание | Ссылка |
---|---|
Тестировать Apple Pay (песочница) | https://developer.apple.com/apple-pay/sandbox-testing/ |
Demo | https://applepaydemo.apple.com/ |
XCODE Help | https://help.apple.com/xcode/mac/9.3/#/deva43983eb7?sub=dev44ce8ef13 |
Страница входа в среду разработки | https://devforums.apple.com/community/ios/connected/applepay |
Описание структуры PKPaymentToken Object | https://developer.apple.com/library/ios/documentation/PassKit/Reference/PaymentTokenJSON/PaymentTokenJSON.html#//apple_ref/doc/uid/TP40014929 |
Раздел справочного руководства по App Store, посвящённый приложениям Apple Pay | https://developer.apple.com/app-store/review/guidelines/#apple-pay |
Справочник по программированию от Apple | https://developer.apple.com/library/ios/ApplePay_Guide |
Встраиваемые модули
Вы всегда можете встроить в ваш сайт, либо личный кабинет один из наших модулей, не затрачивая на разработку свое драгоценное время!
Просто вставьте код, сгеренированный в нашем конструкторе и настройте ссылку для редиректа по своим нуждам.
QR на оплату через API
Пример запроса создания уведомления
https://oapi.ckassa.ru/api-shop/rs/pay-url/create-qr-img?service-code=100-7618-317&amount=10000&ttl=1651449600&property=%D0%9D%D0%9E%D0%9C%D0%95%D0%A0|9659657777
Пример ответа
QR code
Данный метод позволяет сгенерировать QR код на оплату услуги с предустановленными параметрами
-
Метод запроса -
GET
-
URL - https://oapi.ckassa.ru/api-shop/rs/pay-url/create-qr-img
Параметры запроса(все параметры обязательные):
-
service-code
- код провайдера -
amount
- сумма в копейках -
properties
- список реквизитов. Формат -'название реквизита|значение'
, если реквизитов несколько -property=название1|значение1&property=название2|значение2&...
ttl
(не обязательный параметр) - время жизни ссылки в секундах по unix time, т.е. с 01.01.1970 г.
В ответ придет картинка с QR кодом в html и короткая ссылка на оплату
Ссылка на оплату через API
Пример запроса создания уведомления
https://oapi.ckassa.ru/api-shop/rs/pay-url/create-qr?service-code=979-13689-20&amount=10000&property=НОМЕР_ТЕЛЕФОНА|9659657777
Пример ответа
https://bc.ckassa.ru/ys6o71
В нашем API есть специальный метод, позволяющий сгенерировать короткую ссылку на оплату
Метод работает в следующих типах магазинов: Магазин. Поездка с оплатой на р/с, Магазин. Анонимный платеж, Магазин. Рекуррентрый платеж
-
Метод запроса -
GET
-
URL - https://oapi.ckassa.ru/api-shop/rs/pay-url/create-qr
Параметры запроса(все параметры обязательные):
-
service-code
- код провайдера -
amount
- сумма в копейках -
properties
- список реквизитов. Формат -'название реквизита|значение'
, если реквизитов несколько -property=название1|значение1&property=название2|значение2&...
ttl
(не обязательный параметр) - время жизни ссылки в секундах по unix time, т.е. с 01.01.1970 г.
После проверки возможности оплаты поступит ответ. В ответе будет короткая ссылка на оплату
Универсальная платежная форма
Пример кода платежной формы.
Скрипт платежной формы для кнопки:
<script
src="https://payframe.ckassa.ru/checkout.js"
class="checkout-script"
data-service="111-15892-1"
data-reqs="ЛИЦЕВОЙ_СЧЕТ=21129113&amount=123"
data-light-version="True"
>
</script>
Ссылка на платежную форму:
https://payframe.ckassa.ru/?service=111-15892-1&ЛИЦЕВОЙ_СЧЕТ=21129113&amount=123
Веб-версия. Реквизиты платежа. Баланс доступен после валидации.
Мобильная версия. Способы оплаты.
Чтобы платежная форма появилась на вашем сайте, используйте пример кода справа, чтобы установить его в наиболее удобное место страницы.
Функциональные возможности:
-
В форме используется логотип, который вы настроили в личном кабинете. Поменять его можно самостоятельно через ЛК или через техническую поддержку.
-
Фон формы генерируется из цветов логотипа.
-
Форма автоматически проверяет реквизиты плательщика на корректность. В случае ошибки форма выдаёт предупреждение. Также предусмотрены подсказки по длине реквизитов.
-
Форма самостоятельно заполнит поля реквизитов, если корректно указан ключевой реквизит. Функция работает, когда вы возвращаете информацию после валидации ключевого реквизита.
-
Ключевой реквизит сохраняется в куках браузера после успешного платежа и, при повторной оплате, автоматически подставляется в форму.
-
Кнопка "продолжить" становится активной только после корректного ввода ключевых реквизитов.
-
Для ваших плательщиков доступна оплата банковской картой, SberPay и СБП.
-
При повторном платеже с помощью банковской карты форма показывает маску карты и проводит платеж через CVV-аутентификацию.
Условия автоматического сохранения карты:
- платеж с вводом данных карты
- платеж успешен
Условия показа плашки сохраненной карты:
- повторный платеж с того же браузера (поскольку карта сохраняется по кукам браузера)
- в браузере не чистили историю с куками
Параметры платежа:
-
data-reqs
- предзаполненные реквизиты. -
amount_read_only
- Возможность редактирования суммы.
-
amount_read_only=true
- редактирование запрещено. -
amount_read_only=false
(либо без этого параметра) - редактирование разрешено. -
receipt_email=
(после знака равно требуется указать e-mail) - подставляется e-mail в поле "для отправки чека" на экране успешного платежа.
Ссылка для оплаты по предзаполненным реквизитам.
-
Указывайте и меняйте реквизиты оплаты прямо из адресной строки браузера, чтобы отправить ссылку на почту или в мессенджеры клиентам.
Ссылка имеет вид https://payframe.ckassa.ru/?service=N
, где N-персональный код вашей услуги.
-
Вы можете предзаполнить любой реквизит в формате
name1=value1&name2=value2
, например:ЛС=12345678&amount=123
. Каждый параметр должен называться так, как это предусмотрено в ваших реквизитах, а сумма -amount
. Сумма передается в копейках.
Если вы передаете нам предзаполненные реквизиты и сумму, то можете начать сценарий оплаты для клиентов со второго шага.
-
start_pay_select=true
- с данным параметром форма автоматически перейдёт на шаг выбора способа оплаты, пропуская экран ввода суммы и реквизитов (Обратите внимание, что в параметров сумма и ключевой реквизит должны быть прописаны)
Пример ссылки с предзаполненным лицевым счётом - 100, суммой - 1 рубль и запретом редактирования суммы: https://payframe.ckassa.ru/?service=111-15892-1&Лицевой счет=100&amount=100&amount_read_only=true
Пример ссылки с предзаполненным лицевым счетом - 100, суммой - 1 рубль и переходом на второй шаг оплаты(выбор способа оплаты): https://payframe.ckassa.ru/?service=111-15892-1&Лицевой счет=100&amount=100&amount_read_only=true&start_pay_select=true
Ссылка на оплату как альтернатива встраиванию формы.
Альтернативой встраиванию формы является размещение ссылки на оплату. Скопируйте ссылку с кодом вашей услуги. При необходимости отредактируйте её, предзаполнив реквизиты, как показано выше. Установите ссылку в платежный раздел вашего сайта или отправьте её пользователю напрямую по email и в мессенджеры. Кликнув на эту ссылку, пользователь перейдет к вашей персональной форме оплаты.
Отправка ссылки на оплату https://payframe.ckassa.ru/?service=100-12671-1
в мессенджеры и соцсети сопровождается отображением превью. Пользователь увидит ваш лого, бренд, категорию и доступные способы оплаты.
Разбор ошибок
Ошибки, сигнализирующие о том, что необходимо заново регистрировать карту:
-
code:112 {"message":"Unknown card","userMessage":"Необходимо заново зарегистрировать карту","code":112}
-
code:116 {"message":"Card record expired":"Необходимо заново зарегистрировать карту","code":116}
-
code:117 {"message":"Unknown card","userMessage":"Необходимо заново зарегистрировать карту","code":117}
-
code:203 {"message":"Card expired","userMessage":"Действие карты истекло","code":203}
-
code:204 {"message":"Channel card declined","userMessage":"Карта в стоп-листе","code":204}
-
code:206 {"message":"Card locked","userMessage":"Карта заблокирована","code":206}
Ошибки, связанные со сложностями в авторизации:
-
code:2001 {"message":"Incorrect request param {0}","userMessage":"Некорректный параметр запроса {0}","code":2001}
-
code:2700 {"message":"Incorrect signature","userMessage":"Некорректная подпись","code":2700}
-
code 2701 {"message":"Unknown shop token","userMessage":"Неизвестный идентификатор магазина","code":2701}
-
code 2703 {"message":"User not registered for shop","userMessage":"Пользователь не зарегистрирован для данного магазина","code":2703}
-
code 2709 {"message":"Merchant not registered for shop","userMessage":"Мерчант не зарегистрирован для магазина","code":2709}
Не удалось получить список услуг:
-
code 1263 {"message":"Can't pay for number","userMessage":"Невозможно оплатить данный номер","code":1263}
Сложности с регистрацией:
-
code 1951 {"message":"Can't create new user","userMessage":"Не удалось зарегистрировать нового пользователя","code":1951}
-
code 2751 {"message":"Invalid user login","userMessage":"Некорректный логин","code":2751}
Сложности с активацией:
-
code 2350 {"message":"Activate card error","userMessage":"Ошибка привязки карты","code":2350}
-
code 2356 {"message":"Incorrect sms code","userMessage":"Неверный SMS код","code":2356}
-
code 2600 {"message":"SMS to number {0} already sent","userMessage":"Отправили СМС на номер {0}","code":2600, "canSendNewSMSThrough":60000}.
canSendNewSMSThrough
- время в милисекундах до следущей попытки отправить SMS
Проблемы со статусом платежа:
-
code 2365 {"message":"For recurrent need pass 3ds":"Необходимо ввести 3ds код","code":2365,"regPayNum":"1234567890","securePageURL":"https://ya.ru"}
-
code 2704 {"message":"User not owned payment","userMessage":"Платеж не принадлежит пользователю","code":2704}
-
code 2705 {"message":"Shop not owned payment","userMessage":"Платеж не принадлежит магазину","code":2705}
-
code 2366 {"message":"Recurrent 3ds not support", "userMessage":"Невозможно ввести 3ds код", "code":2366}
Данная ошибка возвращается если возникла необходимость в вводе 3ds кода, когда этого не ожидалось
Например, в создании платежа, где в параметре
enableSMSConfirm
указаноfalse
, но банк-эмитент карты клиента запросил ввод кода 3dsРекомендуем в данном случае повторно создать платеж с указанием параметра
enableSMSConfirm
на значениеtrue
ПодробнеПример реализации сценария оплаты с вводом кода 3ds можно увидеть в схеме рекуррентого платежа
Трудности в создании платежа:
-
code 1295 {"message":"Can't create payment, please try later","userMessage":"В данный момент принять платеж невозможно, попробуйте позже","code":1295}
-
code 2354 {"message":"Create recurrent payment error. Try other car","userMessage":"Ошибка проведения платежа. Попробуйте другую карту"}
-
code 2360 {"message":"Can't create recurrent payment","userMessage":"Мы сожалеем, но вы не можете совершить этот платеж привязанной картой из соображений вашей безопасности"}
Общее:
-
code:1300 {"message":"Provider not found","userMessage":"Оператор не найден","code":1300}
-
code:2702 {"message":"Provider forbidden for shop","userMessage":"Поставщик запрещен для данного магазина","code":2702}
-
code:2706 {"message":"Incorrect user state:{0}","userMessage":"Некорректное состояние пользователя","code":2706}
-
code:1262 {"message":"Unknown error, try later","userMessage":"Непредвиденная ошибка, попробуйте позже","code":1262}
-
code:3300 общий код ошибки, подробности в userMessage
Коды ошибок проводки платежа
-
101:
System Error - Системная ошибка. Обратитесь к эквайеру -
102:
Temporary Error - Временный отказ -
103:
BankInteraction Error - Ошибка взаимодействия с банком -
104:
Antifraud blocked - Операция отклонена антифродом банка -
105:
Unsupported Security Action - Запрошен 3DS для операции, в которой его использование невозможно -
106:
Unexpected Bank Response - Неожиданный ответ банка -
107:
AcqAccess Denied - Магазину доступ запрещен -
108:
AcqIncorrect Data - Не известный тип заказа, номер заказа и т.п. -
109:
Parallel Processing - Попытка параллельной оплаты -
110:
Processing Error - Ошибка, связанная с обработкой конкретного заказа -
111:
Auth Failed - Ошибки авторизации запроса (подпись, токен и т.п.) -
112:
Unknown Card - Неизвестная карта. Необходимо заново зарегистрировать карту -
113:
Unknown Order - Неизвестный заказ -
201:
Transaction declined by acquirer, Transaction Declined - Эквайер отклонил транзакцию -
202:
Security check failed - Эквайер отклонил транзакцию, Не пройдена проверка безопасности -
203:
Card expired - Действие карты истекло -
204:
Transaction declined by issuer, Card Declined - Банк отклонил транзакцию -
205:
Channel Insufficient Funds - Недостаточно средств -
206:
Card locked - Карта заблокирована -
207:
Not Permitted - Эквайер отклонил транзакцию -
208:
Temporary Decline - Эквайер временно отклонил транзакцию -
209:
3DS Failed - Ошибка при выполнении аутентификации 3-D Secure, Эквайер отклонил транзакцию -
210:
Card not found - Карта недействительна, либо карта с указанным токеном не найдена -
211:
Transaction error - Транзакция отклонена эквайером -
212:
Card incorrect data - Проблемы с картой, карточными данными. Неверно указаны данные карты (например, CVV2/CVC2) -
213:
Card too often - Превышен установленный лимит на количество операций за отведенный период.Превышен установленный лимит на количество или общую сумму операций за отведенный период. -
214:
Limit settled - Превышен установленный лимит на общую сумму операций за отведенный период.Превышен установленный лимит на количество или общую сумму операций за отведенный период. -
217:
Declined by client - Аутентификация отклонена клиентским устройством.
Общие ошибки:
-
1295
:CreatePaymentFailed - Не удалось создать платеж -
2354
:CreateRecurrentFailed - Не удалось создать рекуррентный платеж -
2715
:Access to {0} API denied{1} - Доступ запрещен
Спецификация №1
Так же именуемая Bisys 3
Позволяет Вывести на сайт ckassa.ru оплату услуг вашей организации, добавить на ваш сайт, либо ЛК специальную кнопку оплаты ваших услуг.
Описание общее. Что конкретно будет передаваться в запросах и ответах определяется условиями договора.
Совсместимость с биллингами-партнерами:
Основные положения
Поставщик принимает запросы с данными о платежах от Общества. Для обработки запросов Поставщику необходимо следующее ПО: HTTP-сервер, программы (скрипты), которые обрабатывают запросы Общества и заносят платежи в базу данных Поставщика. (Чаще всего используются Apache и скрипты, написанные на PHP.)
Обмен данными проходит по протоколу HTTPS. Для авторизации Общества используется MD5-хэш данных запроса с паролем, в шестнадцатеричном виде.
ПО Поставщика должно проверять IP-адрес, с которого поступают запросы и MD5-хэш. Поставщик обязан отвергать все запросы, совершенные с других IP-адресов, и/или с неверным значением MD5-хэша.
Для идентификации Поставщика используется MD5-хэш данных ответа с паролем. В случае получения неверного значения хэша в ответе, Общество считает ответ ошибочным и должно сообщить об этом Поставщику
Формат запросов и ответов
Общий формат запроса:
<?xml version="1.0" encoding="{кодировка}"?> <request> <params> {параметры} </params> <sign>{подпись}</sign> </request>
Общий формат ответа:
<?xml version="1.0" encoding="{кодировка}"?> <response> <params> <err_code>{кодошибки}</err_code> <err_text>[текстошибки]</err_text> [параметры] </params> <sign>{подпись}</sign> </response>
Тип запросов UTF-8
. Кодировку выбирает Поставщик. Все запросы Общества и ответы Поставщика должны быть в одной кодировке.
Тело POST-запроса содержит один параметр params
, в котором передается XML-запрос. Данные URL-кодированные. Заголовок: ContentType: application/x-www-form-urlencoded
. Аналогичный запрос будет, если создать
HTML-форму с элементом <textarea name="params" …>
, поместить в элемент текст XML-запроса и отправить средствами браузера.
Ответы Поставщика в формате XML, кодировка ответа должна соответствовать кодировке запросов. В HTTP заголовке желательно установить Content-Type: text/xml; charset=<кодировка>
.
Ограничения XML.
Запрещены пробелы до или после имени тэга (между <>
). Общество гарантирует отсутствие таких пробелов в запросах. В связи с этим, и с тем, что структура XML простая, можно не использовать для обработки XML специальные
компоненты, а обрабатывать простыми функциями работы со строками.
Достаточно написать одну строковую функцию по типу: содержимое_тега = get_tag_content
(запрос - имя тега). Либо использовать резульрные выражения.
Элементы запроса:
-
request
- корневой элемент, содержит:-
params
- элементы запроса -
sign
- подпись запроса. Правила формирования описаны в разделе Формирование подписи в запросах
-
Элементы ответа:
-
response
- корневой элемент, содержит:-
params
- элементы запроса -
sign
- подпись запроса. Правила формирования описаны в разделе Формирование подписи в запросах
-
Доступные типы данных
-
N
- Целое число -
S[n]
- Текстовое значение длиной не более n символов -
DATETIME
- Дата и время в формате “ YYYY-MMDDTHH24:MI:SS ”
Проверка параметров платежа
Пример запроса проверки возможности занесения платежа:
<?xml version="1.0" encoding="windows-1251"?> <request> <params> <act>1</act> <agent_date>2009-04-15T11:22:33</agent_date> <account>54321</account> <serv_code>53001</serv_code> <pay_amount>10000</pay_amount> <client_name>Иванов Иван Иванович</client_name> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </request>
Данный запрос позволяет Обществу предварительно проверить возможность занесения палатежа.
Поля запроса:
-
act
- тип запроса-
Обязательный
-
Тип - S[2]
-
1 - проверка параметров будущего платежа
-
-
account
- Идентификатор плательщика-
Обязательный
-
Тип - S[100]
-
Обычно для индентификации используется лиевой счет клиента, либо телефон
-
-
pay_amount
- Сумма платежа-
Необязательный
-
Тип - N
-
Сумма платежа в копейках. Целое число
-
-
agent_code
- Код Общества-
Необязательный
-
Тип - S[30]
-
Используется, когда у Поставщика есть другие Общества, работающие по данному протоколу
-
-
serv_code
- Код услуги-
Необязательный
-
Тип - S[32]
-
Используется, когда у Поставщика могут совпадать номера лицевых счетов разных услуг
-
-
agent_date
- Дата учета (для сверки платежей)-
Необязательный
-
Тип - DATETIME
-
Используется дата получения платежа Обществом по часовому поясу Поставщика
-
-
param_name1 param_name2 ...
- Дополнительные параметры платежа-
Необязательный
-
Тип - S
-
Имена параметров могут быть выбраны оператором
-
Пример ответа Поставщика на запрос проверки:
<?xml version="1.0" encoding="windows-1251"?> <response> <params> <err_code>0</err_code> <err_text>OK</err_text> <account>54321</account> <client_name>Иванов Иван Иванович</client_name> <balance>50.00</balance> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </response>
Пример ответа Поставщика при ошибке:
<?xml version="1.0" encoding="windows-1251"?> <response> <params> <err_code>20</err_code> <err_text>Номер счета не найден</err_text> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </response>
Поля ответа:
-
err_code
- Код ошибки-
Обязательный
-
Тип - N
-
Если запрос обработан успешно, то код ошибки 0. Другие коды ошибок в разделе Коды ошибок
-
-
err_text
- Текст ошибки-
Обязательный
-
Тип - S[200]
-
Текст показывается непосредственно плательщику
-
-
desired_amount
- Желательная сумма платежа в копейках-
Необязательный
-
Тип - N
-
-
param_name1 param_name2 ...
- Дополнительные параметры платежа-
Необязательный
-
Тип - S
-
Имена параметров могут быть выбраны оператором
-
Проведение платежа
При запросе проведения платежа все его параметры проверяются так же, как при запросе проверки. По этому Обществу не обязательно использовать предварительный запрос проверки.
Поля запроса проведения платежа:
Пример запроса на проведение платежа:
<?xml version="1.0" encoding="windows-1251"?> <request> <params> <act>2</act> <agent_date>2009-04-15T11:22:33</agent_date> <pay_id>2345</pay_id> <pay_date>2009-04-15T11:00:12</pay_date> <account>54321</account> <pay_amount>10000</pay_amount> <client_name>Иванов</client_name> <month>08.2012</month> <client_ip>127.0.0.1</client_ip> <client_card> <pan>411111******1111</pan> <rrn>111111111111</rrn> <acq_auth_code>123456</acq_auth_code> <acq_term_id>1234567890</acq_term_id> </client_card> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </request>
-
act
- Тип запроса-
Обязательный
-
Тип - S[2]
-
"2" - проведение платежа
-
-
account
- Идентификатор плательщика-
Обязательный
-
Тип - S[100]
-
Обычно лицевой счет клиента или телефон
-
-
pay_amount
- Сумма платежа (в копейках)-
Обязательный
-
Тип - N
-
-
pay_id
- Уникальный номер платежа-
Обязательный
-
Тип - S[50]
-
-
pay_date
- Дата платежа-
Обязательный
-
Тип - DATETIME
-
Дата принятия платежа у клиента по часовому поясу в месте принятия платежа.
-
-
pay_type
- Вид платежа-
Необязательный
-
Тип - S[10]
-
К примеру, используется когда надо делить платежи на наличные и безналичные
-
-
agent_code
- Код общества-
Необязательный
-
Тип - S[30]
-
Используется когда у Поставщика есть другие Общества, работающие по данному протоколу
-
-
serv_code
- Код услуги-
Необязательный
-
Тип - S[32]
-
Используется, когда у Поставщика могут совпадать номера лицевых счетов разных услуг
-
-
agent_date
- Дата учета (для сверки платежей)-
Необязательный
-
Тип - DATETIME
-
Используется дата получения платежа Обществом по часовому поясу Поставщика
-
-
client_card*
- Данные о банковской транзакции-
Необязательный, включается по желанию Принципала
-
-
client_ip
- IP плательщика-
Необязательный
-
Тип - S
-
Используется вместе с client_card
-
-
sign
- подпись-
Обязательный
-
Тип - S[32]
-
Правила формирования описаны в разделе Формирование подписи в запросах
-
-
param_name1 param_name2 ...
- Дополнительные параметры платежа-
Необязательный
-
Тип - S
-
Имена параметров могут быть выбраны оператором
-
Поля ответа:
Пример ответа на проведение платежа:
<?xml version="1.0" encoding="windows-1251"?> <response> <params> <err_code>0</err_code> <err_text>OK</err_text> <reg_id>3456</reg_id> <reg_date>2009-04-15T11:22:55</reg_date> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </response>
-
Обязательный
-
Тип - N
-
Если запрос обработан успешно, то код ошибки 0. Другие коды ошибок в разделе Коды ошибок
-
err_text
- Текст ошибки-
Обязательный
-
Тип - S[200]
-
Текст показывается непосредственно плательщику
-
-
reg_id
- Идентификатор платежа у Оператора-
Необязательный
-
Тип - S[50]
-
-
reg_date
- Дата регистрации платежа у Оператора-
Необязательный
-
Тип - DATETIME
-
err_code
- Код ошибки
Статус платежа
Пример запроса на проверку статуса:
<?xml version="1.0" encoding="windows-1251"?> <request> <params> <act>4</act> <pay_id>2345</pay_id> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </request>
Пример ответа Поставщика на проверку статуса:
<?xml version="1.0" encoding="windows-1251"?> <response> <params> <err_code>0</err_code> <err_text>Платеж обработан</err_text> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </response>
Пример ответа Поставщика на проверку статуса в случае временной ошибки:
<?xml version="1.0" encoding="windows-1251"?> <response> <params> <err_code>40</err_code> <err_text>Ошибка подключения к серверу получателя.</err_text> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </response
Иногда статус платежа у Поставщика не конечный на момент выдачи ответа на запрос проведения. В таких случаях Поставщик отвечает кодом 2
(Платеж ожидает обработки у Поставщика). После этого Общество будет посылать запросы на
получение статуса. На такие запросы Поставщик отвечает кодом 0
(платеж проведен), 2
(платеж в процессе обработки), 40
(временная ошибка обработки), или 41
(окончательная ошибка обработки).
Поля запроса:
-
act
- Тип запроса-
Обязательный
-
Тип - S[2]
-
4 - проверка статуса платежа
-
-
pay_id
- Уникальный номер платежа-
Обязательный
-
Тип - S[50]
-
Такой же, какой использовался при проведении платежа
-
Возврат платежа
Пример запроса на возврат платежа:
<?xml version="1.0" encoding="windows-1251"?> <request> <params> <act>8</act> <pay_id>2345</pay_id> <pay_date>2009-04-15T11:00:12</pay_date> <account>54321</account> <pay_amount>10000</pay_amount> <reg_id>5432</reg_id> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </request>
Пример ответа на запрос по возврату платежа:
<?xml version="1.0"encoding="windows-1251"?> <response> <params> <err_code>0</err_code> <err_text>Запрос принят</err_text> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </response>
Пример ответа на запрос возврата платежа в случае ошибки:
<?xml version="1.0" encoding="windows-1251"?> <response> <params> <err_code>80</err_code> <err_text>Операция невозможна.</err_text> </params> <sign>827CCB0EEA8A706C4C34A16891F84E7B</sign> </response>
В некоторых случаях требуется отмена платежа, проведенного Поставщику. Запрос на возврат передает, как бы, заявку на возврат платежа. Поставщик рассматривает возможность отмены платежа. По возможности отменяет платежи, меняя их статус. Общество может узнать об итоге операции запросом статуса платежа, или письменным уведомлением.
Запрос на возврат не обязателен для реализации протокола. Решайте сами, нужна ли вам такая возможность.
Поля запроса:
-
act
- Тип запроса-
Обязательный
-
Тип - S[2]
-
8– запрос на возврат платежа
-
-
agent_code
- Код общества-
Необязательный
-
Тип - S[30]
-
Используется, когда у Поставщика есть другие Общества, работающие по данному протоколу
-
-
pay_id
- Уникальный номер платежа-
Обязательный
-
Тип - S[50]
-
-
pay_date
- Дата платежа-
Обязательный
-
Тип - DATETIME
-
Дата принятия платежа у клиента по часовому поясу в месте принятия платежа.
-
-
account
- Идентификатор плательщика-
Обязательный
-
Тип - S[100]
-
Обычно это лицевой счет клиента, или телефон
-
-
pay_amount
- Сумма платежа (в копейках)-
Обязательный
-
Тип - N
-
-
reg_id
- Идентификатор платежа у Поставщика-
Обязательный
-
Тип - S[50]
-
Поля ответа аналогичны полям запроса на Проведение платежа
Уникальность платежа
При получении запроса проведения платежа Поставщик должен проверить уникальность платежа. Номер платежа pay_id
должен быть уникальным по Обществоу. При получении запроса Поставщик должен выполнить в своей базе поиск платежа с
таким же pay_id
, как у полученного в запросе.
Если такой платеж будет найден, необходимо сверить реквизиты account
и pay_amount
платежа в запросе с соответствующими реквизитами платежа в базе.
Если они совпадают, то это просто повтор запроса. В этом случае ответ Поставщика должен быть как на первый удачный запрос проведения, с теми же reg_id
и reg_date
, если они используются, но с кодом ошибки
1
.
Если account
или pay_amount
различаются, то это нарушение правил учета платежей у Общества и Поставщик должен ответить ошибкой с кодом 30
. reg_id
и reg_date
в этом случае не
передаются.
Формирование подписи в запросах
Пример
Для запроса: <?xml version="1.0" encoding="windows-1251"?> <request> <params> <act>1</act> <account>758</account> </params> <sign>724870FC6BC385D7A29F4A259B6E9A6B</sign> </request> Нужно делать хэш для строки “<act>1</act><account>758</account>пароль”
Правила формирования подписи.
Предварительно Общество и Оператор обмениваются паролем. Используется одинаковый пароль для Общества и Оператора. В качестве подписи используется MD5-хэш в виде последовательности из 32 шестнадцатеричных цифр. Регистр букв значения не имеет.
К сформированному содержимому тэга params
конкатенируется пароль. Содержимое тэга params
берется как есть, вместе с вложенными тэгами, переносами строк. Для полученной строки генерируется подпись, которая
передается в параметре sign
.
Получив запрос, Оператор извлекает из него подстроку между тэгами params
, генерирует для нее подпись и сверяет ее с подписью в запросе. Оператор должен обрабатывать подпись запроса в любом регистре, поэтому перед сравнением
надо приводить подписи к одному регистру.
Формирование подписи в ответах Поставщика
К сформированному содержимому тэга params
конкатенируются подпись полученного ранее запроса и пароль. Подпись полученного ранее запроса должна быть в том регистре, в котором получена от Общества. Для полученной строки
генерируется подпись, которая передается в параметре sign
.
Получив ответ, Общество извлекает из него подстроку между тэгами params
, генерирует для нее подпись и сверяет ее с подписью в ответе.
Сформированная подпись переводится в MD5-ХЭШ, также по протоколу БИСИС-3 рекомендуем использовать формат UTF-8
params_str = params_str + bs_params["sign"] + self.sign_key
sign_str = hashlib.md5(params_str.encode(DEFAULT_LOCALE)).hexdigest()
Коды ошибок
Коды ошибок, возвращаемых оператором
Код ошибки | Описание ошибки |
---|---|
0 |
Успешное выполнение операции |
1 |
Платеж уже был проведен |
2 |
Платеж ожидает обработки у оператора |
10 |
Запрос выполнен с неразрешенного адреса |
11 |
Указаны не все необходимые параметры |
12 |
Неверный формат параметров |
13 |
Неверная цифровая подпись |
20 |
Указанный номер счета отсутствует |
21 |
Запрещены платежи на указанный номер счета |
22 |
Запрещены платежи для указанной услуги |
23 |
Запрещены платежи для указанного Общества |
29 |
Неверные параметры платежа. В тэге err_text конкретное описание причины |
30 |
Был другой платеж с указанным номером |
40 |
Предварительная ошибка обработки платежа |
41 |
Окончательная ошибка обработки платежа |
80 |
Отказ на возврат платежа, в тэге err_text причина отказа. |
90 |
Временная техническая ошибка |
99 |
Прочие ошибки Поставщика. В тэге err_text указывается описание причины |
Формат реестра
В информационный реестр платежей включаются все платежи, принятые Обществом для передачи Поставщику за прошедшие сутки. Платежи выбираются по дате учета Общества – agent_date
. Реестр высылается Обществом до 12 часов следующих
суток по часовому поясу Общества. Реестр высылается по почте. Поставщик проводит сверку платежей, принятых в течение контрольных суток, с платежами в реестре.
Платежи, полученные Поставщиком, но отсутствующие в реестре - считаются спорными. Поставщик должен получить подтверждение таких платежей у Общества. Неподтвержденные платежи удаляются. Оператор вправе отменить спорные платежи сразу при их выявлении и должен внести их заново после подтверждения Обществом.
Платежи, присутствующие в реестре, но не полученные Оператором, считаются спорными. Оператор должен получить подтверждение таких платежей у Общества. Подтвержденные платежи заносятся Оператором.
Формат реестра.
Реестр платежей представляет собой XML-файл в кодировке windows-1251.
Пример реестра платежей:
<?xml version="1.0" encoding="windows-1251"?> <registry format=”P03” form_date=”2011-05-13 12:00:00”> <reg_date>2011-05-12</reg_date> <agent_name>ООО Общество</agent_name> <prov_name>ООО Оператор</prov_name> <pays> <pay agent_date=”2011-05-12 11:22:33” pay_id=”2345” pay_date=”2011-05-12 11:00:12” account=”54321” pay_amount=”10000” serv_code=”123/1” serv_name=”Интернет” reg_id=”98765” err_code=”0” note=”” /> <pay agent_date=”2011-05-12 11:22:35” pay_id=”2346” pay_date=”2011-05-12 11:00:17” account=”65432” pay_amount=”20000” serv_code=”123/1” serv_name=”Интернет” reg_id=”98767” err_code=”99” note=”Ошибкаподключенияксерверуоператора”/> … </pays> </registry>
Элементы реестра:
-
registry
- корневой элемент. Имеет атрибуты: -
format
- обозначение формата реестра. Для данного случая всегда “P03”. -
from_date
- дата формирования реестра по часовому поясу Общества. -
reg_date
- дата, за которую реестр содержит данные -
agent_name
- наименование организации Общества -
prov_code
- код организации Оператора у Общества -
prov_name
- наименование организации Оператора -
pays
- содержит список элементов платежей -
agent_date
- дата учета для сверки. Такая же, как в запросе платежа -
pay_date
- дата платежа -
pay_id
- -
account
- лицевой счет (например, номер договора/номер телефона) -
pay_amount
- сумма платежа в копейках, (целое число) как и в онлайн-запросах -
serv_code
- код услуги -
serv_name
- наименование услуги -
reg_id
- номер платежа у Оператора (из ответа Оператора на запрос проведения) -
note
- примечание. В случае ошибки проведения,note
содержит описание ошибки
registry
содержит элементы:
pays
содержит элементы pay
(данные о платежах в виде атрибутов)
Атрибуты pay
:
Имя файла итогового реестра формируется следующим образом:
bs-Код-YYYYMMDD.xml
-
bs - идентификатор Общества
-
Код - - код Поставщика у Общества
-
YYYY - год полностью
-
MM - двузначный номер месяца в году
-
DD - двузначный номер дня месяца
Реестр отправляется отдельным сообщением электронной почты в виде вложения.
Разработчикам
Пример 1
function getTagContent(string request, string tag) return string
{
string beginTag = "<" + tag + ">";
string endTag = "</" + tag + ">";
int p1 = pos(request, beginTag); //позиция первого тэга
if (p1 > 0)
{
p1 = p1 + length(beginTag); //смещение на начало содержимого
int p2 = pos(request, endTag); //позиция конечного тэга
if (p2 > p1)
return SubString(request, p1, p2 - p1); //выбор содержимого
}
return "";
}
Пример 2
function getTagContent($string, $tagname)
{
$pattern = "|<".$tagname.">(.+)</".$tagname."|si";
preg_match($pattern, $string, $matches);
return $matches[1];
}
Пример 3
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Тест протокола БС</title>
</head>
<body>
<form name="text" action="https://ваш адрес" method="post">
XML-запрос:
<br> <textarea name="params" rows="20" cols="80"></textarea>
<br> <br>
<input type="submit" value="Отправить">
<input type="reset" value="Очистить">
</form>
</body>
</html>
XML используется с ограничениями, без атрибутов (кроме реестра). Для извлечения данных нет необходимости использовать парсер, достаточно использовать функцию
.
Пример функции в примере 1
Либо регулярные выражения
. Более подробно в примере 2
Так же, вы можете тестировать себя из браузера. Создайте html-файл с текстовым полем, вставляйте в поле XML-запросы и отправляйте.
Подробней в примере 3.
Спецификация №2
Так же именуемая Kiberplat
Позволяет Вывести на сайт ckassa.ru оплату услуг вашей организации, добавить на ваш сайт, либо ЛК специальную кнопку оплаты ваших услуг.
Предоставлено общее описание. Что конкретно будет передаваться в запросах и ответах определяется условиями договора.
Требования
Требования к интерфейсу поставщика:
-
Интерфейс должен принимать запросы по протоколу
HTTPS
с/на конкретные IP-адреса Общества и Поставщика. -
Интерфейс должен обрабатывать параметры, передаваемые Обществом методом
GET
-
Интерфейс должен формировать ответ Общества в формате
XML
в кодировке UTF-8 (если ответ содержит символы национальных алфавитов) -
Обмен информацией ведется в режиме запрос-ответ, при этом скорость ответа не должна превышать 30 секунд, в противном случае Общество разрывает соединение по таймауту
-
Основной адрес серверов Общества - agent.bisys.ru
Параметры запросов
Пример запроса-ответа поиска Плательщика по номеру телефона
Запрос: https://<host>/<path>?ACTION=check&ACCOUNT=8462333333 Ответ: <?xml version=”1.0” encoding=”windows-1251”?> <response> <CODE>0</CODE> <MESSAGE>ОК</MESSAGE> <FIO>Иванов Иван Иванович</FIO> <ADDRESS>Москва</ADDRESS> <ACCOUNT_BALANCE>-34.27</ACCOUNT_BALANCE> </response> Запрос: https://<host>/<path>?ACTION=check&ACCOUNT=24 Ответ: <?xml version=”1.0” encoding=”windows-1251”?> <response> <CODE>3</CODE> <MESSAGE>Абонент не найден</MESSAGE> </response>
-
ACTION
-
Предопределенная строка. Возможные значения:
-
check
- поиск плательщика -
payment
- создание платежной транзакции
-
-
-
ACCOUNT
-
Значение: Строка до 15 символов
-
Назначение: лицевой счет плательщика
-
Возможные значения для
ACTION
:check
,payment
-
-
AMOUNT
-
Значение: Число
-
Назначение: сумма платежа
-
Разделитель - "." (точка)
-
Возможные значения для
ACTION
:payment
-
-
PAY_ID
-
Значение: число
-
Назначение: идентификатор платежной транзакции
-
Положительное длинное целое число. Генерируется платежной системой и используется для индентификацииплатежных транзакций
-
Возможные значения для
ACTION
:payment
-
-
PAY_DATE
-
Значение: дата и время
-
Назначние: дата и время операции в платежной системе
-
Это дата и время операции в платежной системе по часовому поясу платежной системы в формате "DD.MM.YYYY_HH24:MI:SS". Тут между датой и временем стоит символ "_" (подчеркивание)
-
Возможные значения для
ACTION
:payment
-
Атрибуты ответа
Примеры запросов - ответов создания транзакции платежа
Запрос: https://<host>/<path>?ACTION=payment&ACCOUNT=8462333333&AMOUNT=340.24&PAY_ID=11223344&PAY_DATE=12.12.2005_12:45:18 Ответ: <?xml version=”1.0” encoding=”windows-1251”?> <response> <CODE>0</CODE> <MESSAGE></MESSAGE> <REG_DATE>12.12.2005_12:46:03</REG_DATE> </response> Запрос: https://<host>/<path>?ACTION=payment&ACCOUNT=8462333333&TYPE=15&AMOUNT=340.24&PAY_ID=11223344&PAY_DATE=12.12..2005_12:45:18 Ответ: <?xml version=”1.0” encoding=”windows-1251”?> <response> <CODE>6</CODE> <MESSAGE>Не верное значение даты платежа</MESSAGE> </response>
Какой должен быть формат ответа сервера Поставщика:
Ответы сервера Поставщика возвращаются в виде XML-сообщений. Атрибут encoding
должен иметь значение windows-1251
и соответствовать кодировке, используемой в XML-сообщении.
Рассмотрим атрибуты, используемые в ответах сервера Поставщика на запросы Общества.
-
CODE
-
Значение: целое число
-
Назначение: код статуса операции
-
Возможные значения для
ACTION
:check
,payment
-
-
FIO
-
Значение: текст
-
Назначение: ФИО Плательщика
-
Возможные значения для
ACTION
:check
-
-
ADDRESS
-
Значение: текст
-
Назначение: адрес Плательщика
-
Возможные значения для
ACTION
:check
-
-
MESSAGE
-
Значение: текст до 512 символов
-
Назначение: текстовое сообщение о статусе операции
-
Примечание: предусмотрено для ошибок. Может содержать текстовое описание
-
Возможные значения для
ACTION
:check
,payment
-
-
ACCOUNT_BALANCE
-
Значение: число со знаком
-
Назначение: остаток на счете Плательщика
-
Примечание: Сумма остатка на счете Плательщика в рублях с копейками. Разделитель целой и дробной части - «.» (точка). Отрицательная сумма обозначает задолженность Плательщика
-
Возможные значения для
ACTION
:check
-
-
REG_DATE
-
Значение: дата и время
-
Назначение: дата и время операции в биллинговой системе
-
Примечание: Дата и время регистрации операции в Организации по часовому поясу Организации в формате “DD.MM.YYYY_HH24:MI:SI”. Здесь между датой и временем вставлен символ «_» (подчеркивание).
-
Возможные значения для
ACTION
:payment
-
Коды ответов
Ниже приведены возможные значения кодов возврата (атрибут - CODE
)
Код ответа | Значение | check/payment |
---|---|---|
-1 |
Внутренняя ошибка организации | + / + |
0 |
Успешное завершение операции. Для операции проверки состояния транзакции это означает, что транзакция подтверждена и платежи в системе Поставщика были успешно созданы | + / + |
2 |
Неизвестный тип запроса. Неизвестное значение поля ACTION |
+ / + |
3 |
Плательщик не найден | + / + |
4 |
Неверная сумма платежа. Недопустимое значение для поля платежа (AMOUNT ) |
- / + |
5 |
Неверное значение идентификатора транзакции. Недопустимое значение поля идентификатора платѐжной транзакции в платѐжной системе (PAY_ID ) |
- / + |
6 |
Неверное значение даты. Недопустимое значение поля даты платежа (PAY_DATE ) |
- / + |
8 |
Дублирование транзакции. Транзакция с указанным идентификатором уже была введена в систему | - / + |
12 |
Транзакция не подтверждена | - / - |
Шаблоны ответов
Ответ сервера Поставщика на запрос проверки номера (check
) должен подчиняться следующему шаблону DTD:
<?xml version=”1.0” encoding=”windows-1251”?>
<!DOCTYPE response [
<!ELEMENT response (CODE, MESSAGE, FIO,ADDRESS, ACCOUNT_BALANCE)>
]>
Ответ сервера Поставщика на запрос создания транзакции платежа (payment
) должен подчиняться следующему шаблону DTD:
<?xml version=”1.0” encoding=”windows-1251”?>
<!DOCTYPE response [
<!ELEMENT response (CODE, MESSAGE, REG_DATE)>
]>
Ответ сервера Поставщика на запрос подтверждения транзакции (commit
) должен подчиняться следующему шаблону DTD
<?xml version=”1.0” encoding=”windows-1251”?>
<!DOCTYPE response [
<!ELEMENT response (CODE, MESSAGE, REG_DATE, PAY_ID_EXT*)>
] >
Спецификация №3
Также именуемая ОСМП
Совместимость с биллингами-партнерами:
Требования к интерфейсу Поставщика
-
Интерфейс должен принимать запросы по протоколу
HTTPS
с/на конкретные IP-адреса Общества и Поставщика с использованием публичного сертификата сервера -
Для авторизации Общества в процессинговой системе Поставщика при регистрации платежа используются логин и пароль
-
Интерфейс должен обрабатывать параметры, передаваемые Обществом с помощью метода
GET
-
Интерфейс должен формировать ответ Общества в формате XML в кодировке
UTF-8
(если ответ содержит символы национальных алфавитов) -
Обмен информацией ведется в режиме запрос-ответ, при этом скорость ответа не должна превышать 60 секунд, в противном случае, Общество разрывает соединение по таймауту
-
Если за услуги подключаемого Поставщика ожидается до 10 платежей в минуту и более, то предполагается, что интерфейс Поставщика поддерживает (без каких-либо проблем) многопотоковую коммуникацию до 10-15 одновременных соединений.
Основные принципы работы интерфейса
Каждый платеж Общества имеет уникальный идентификатор, который передается Поставщику в переменной txn_id
– это целое число длиной до 20 знаков. По этому идентификатору производится дальнейшая сверка взаиморасчетов и решение
спорных вопросов.
Сумма платежа принимается от Плательщика и передается Поставщику в рублях в переменной sum
– это дробное число с точностью до сотых. В качестве разделителя используется «.» (точка). Если сумма представляет целое число, то оно
все равно дополняется точкой и нулями, например – «152.00»
В запросе на добавление платежа Общество передает дату платежа (под датой платежа в системе подразумевается дата получения запроса от клиента) в переменной txn_date
– дата в формате ГГГГММДДЧЧММСС. Эту дату необходимо
использовать для проведения бухгалтерских взаиморасчетов. Так как у Общества учет платежей ведется по дате получения запроса от Плательщика, то и расчеты с Поставщиком необходимо вести по этой дате.
Например:
Плательщик прислал Обществу запрос 31.12.2016 в 23:59:59, учитывая задержку на обработку данных и пересылку информации по каналам связи, Общество смогло отправить запрос Поставщику 01.01.2017 00:00:05, соответственно, платеж будет учтен в системе Поставщика в другом отчетном периоде. Это вызовет некоторые проблемы при проведении сверок. Чтобы избежать такой ситуации, Общество передает Принципалу дату, в которой нужно учитывать платеж.
Поставщик идентифицирует своего Плательщика по уникальному идентификатору (Идентификатор Плательщика). Перед отправкой Поставщику Идентификатор проходит проверку корректности в соответствии с регулярным выражением, которое должен
предоставить Поставщик. Идентификатор Плательщика передается в переменной account
– это строка, содержащая буквы, цифры и спецсимволы длиной до 200 символов.
Оплата услуг Поставщика производится системой в 2 этапа – проверка состояния Плательщика и, непосредственно, проведение платежа. Тип запроса передается Обществом в переменной command
– это строка, принимающая значения
check
и pay
. При проверке статуса (запрос check
) Поставщик должен проверить наличие в своей базе абонента с указанным Идентификатором и выполнить внутренние проверки Идентификатора, суммы платежа в
соответствии с принятой логикой пополнения лицевых счетов через платежные системы. При проведении платежа (запрос pay
) Поставщик должен произвести пополнение баланса Плательщика.
Если любой из запросов Поставщику завершается ошибкой, то Поставщик возвращает код ошибки в соответствии с таблицей, приведенной Ниже . Все ошибки имеют признак фатальности. Для Общества фатальная
ошибка означает, что повторная отправка запроса с теми же параметрами приведет к 100% повторению той же ошибки – следовательно, Общество прекращает обработку запроса и завершает его с ошибкой. Нефатальная ошибка означает для Общества, что
повторение запроса с теми же параметрами через некоторый промежуток времени, возможно, приведет к успеху. Общество будет повторять запросы, завершающиеся нефатальной ошибкой, постоянно увеличивая интервал, пока операция не завершится
успехом, или фатальной ошибкой, либо пока не истечет срок жизни запроса (24 часа). Отсутствие связи с сервером Поставщика является нефатальной ошибкой. Например, отсутствие в ответе элемента <result> (некорректный XML, страница
Servicetemporarilyunavailable и т.д.) - является фатальной ошибкой. Запросы получают отказ с ошибкой 300
– Другая ошибка Поставщика
В базе Поставщика не должно содержаться двух успешно проведенных платежей с одним и тем же номером txn_id
. Если Общество повторно присылает запрос с уже существующим в базе Поставщика txn_id
, то Поставщик должен
вернуть результат обработки предыдущего запроса.
Структура XML ответа Поставщика
<?xml version="1.0" encoding="UTF-8"?>
<response>
<osmp_txn_id></osmp_txn_id>
<prv_txn></prv_txn>
<sum></sum>
<result></result>
<comment></comment>
</response>
Где:
-
<response>
- тело ответа -
<osmp_txn_id>
- номер транзакции в системе Общества, который передается Поставщику в переменнойtxn_id
-
<prv_txn>
- уникальный номер операции пополнения баланса Плательщика (в базе Поставщика) - это целое число длиной до 20 знаков. Этот элемент должен возвращаться Поставщикам после запроса на пополнение баланса (запросаpay
). Однако, при ответе на запрос на проверку состояния Абонента (запросcheck
) его возвращать не нужно – он всеравно не обрабатывается -
<sum>
- сумма платежа, передаваемая Поставщику - это дробное число с точностью до сотых. В качестве разделителя используется «.» (точка). Если сумма представляет целое число, то оно все равно дополняется точкой и нулями, например – «152.00» -
<result>
- код результата завершения запроса -
<comment>
- комментарий завершения операции (необязательный элемент)
Коды ответов
При обработке запросов от системы Общества, Поставщик должен сопоставить все возникающие в его приложении ошибки с приведенным ниже списком и возвращать соответствующие коды в элементе <result>
Код | Значение | Фатальность |
---|---|---|
0 |
Все ОК | - |
1 |
Временная ошибка. Повторите запрос позже | - |
4 |
Неверный формат идентификатора Плательщика | + |
5 |
Идентификатор Плательщика не найден (Ошиблись номером) | + |
7 |
Прием платежа запрещен Поставщиком | + |
8 |
Прием платежа запрещен по техническим причинам | + |
79 |
Счет Плательщика не активен | + |
90 |
Проведение платежа не окончено | + |
241 |
Сумма слишком мала | + |
242 |
Сумма слишком велика | + |
243 |
Невозможно проверить состояние счета | + |
300 |
Другая ошибка Поставщика | + |
Примеры
Пример запроса/ответа "check" от Поставщика
Запрос должен выглядеть так: https://service.someprovider.ru:8443/payment_app.cgi?command=check&txn_id=1234567&account=4957835959&sum=10.45 Ответ Поставщика должен выглядеть так: <?xml version="1.0" encoding="UTF-8"?> <response> <osmp_txn_id>1234567</osmp_txn_id> <result>0</result> </response>\ Или так: <?xml version="1.0" encoding="UTF-8"?> <response> <osmp_txn_id>1234567</osmp_txn_id> <result>0</result> <comment>account exists</comment> </response>
Пример запроса на проверку состояния счета Плательщика
Платежное приложение Поставщика payment_app.cgi, располагается по адресу service.someprv.ru, сервер поддерживает HTTPS соединения на порт 8443. Для проверки состояния
Плательщика, Общество генерирует запрос, показанный в примере check
Строка запроса содержит переменные:
-
command=check
- запрос на проверку состояния Плательщика -
txn_id=1234567
- внутренний номер платежа в системе Общества -
account=4957835959
- идентификатор Плательщика в информационной системе Поставщика -
sum=10.45
- сумма к зачислению на лицевой счет Плательщика
Возвращение result=0
на запрос check
свидетельствует о том, что лицевой счет Плательщика с соответствующим ему номером osmp_txn_id
может быть пополнен на сумму, указанную в запросе. После успешной
проверки состояния счета Плательщика система переходит к формированию и отправке запроса на пополнение баланса (запрос pay
).
Пример запроса/ответа "pay" от Поставщика
Запрос должен выглядеть так: https://service.someprovider.ru:8443/payment_app.cgi?command=pay&txn_id=1234567&txn_date=20050815120133&account=4957835959&sum=10.45 Ответ Поставщика должен выглядеть так: <?xml version="1.0" encoding="UTF-8"?> <response> <osmp_txn_id>1234567</osmp_txn_id> <prv_txn>2016</prv_txn> <sum>10.45</sum> <result>0</result> </response> Или так: <?xml version="1.0" encoding="UTF-8"?> <response> <osmp_txn_id>1234567</osmp_txn_id> <prv_txn>2016</prv_txn> <sum>10.45</sum> <result>0</result> <comment>OK</comment> </response>
Пример запроса на пополнение лицевого счета
Запрос, показанный в примере запроса Поставщика "pay" содержит следующие переменные:
-
command=pay
- запрос на пополнение баланса Плательщика -
txn_id=1234567
- внутренний номер платежа в системе Плательщика -
txn_date=20050815120133
- дата учета платежа в системе Общества -
account=4957835959
- идентификатор Плательщика в информационной системе Поставщика -
sum=10.45
- сумма к зачислению на лицевой счет Плательщика
Возвращая result=0
на запрос pay
, Поставщик сообщает об успешном завершении операции пополнения баланса. Система полностью завершает обработку данной транзакции
Пример передачи дополнительных параметров в запросе
<?xml version="1.0" encoding="UTF-8"?> <response> <result>0</result> <osmp_txn_id>1001</osmp_txn_id> <comment></comment> <bisys_params> <client_name>Иванов</client_name> <balance>-200.00</balance> </bisys_params>
SSL сертификат
ПОРЯДОК ИСПОЛЬЗОВАНИЯ SSL-СЕРТИФИКАТОВ
1. Поставщик предоставляет Обществу корневой сертификат Поставщика (для обеспечения доверия сертификатам, выданным Центром сертификации Поставщика) в виде, пригодном для установления его принадлежности Поставщику, то есть в виде base-64 кодированного файла формата PKCS#10 и на бумажном носителе, заверенном собственноручной подписью руководителя и оттиском печати Поставщика.
2. Полученный сертификат Поставщика вводится Обществом в действие, не позднее следующего рабочего дня после его предоставления Поставщиком на бумажном носителе.
3. При истечении срока действия корневого сертификата Поставщика, Поставщик не позднее, чем за 5 (пять) рабочих дней до окончания срока действия активного корневого сертификата предоставляет Обществу новый корневой сертификат в соответствии с п.1.
4. При компрометации или подозрении на компрометацию закрытого ключа сертификата Поставщика (т.е. при ознакомлении или подозрении на ознакомление неуполномоченного лица с закрытым ключом сертификата, а также при несанкционированном использовании или подозрении на несанкционированное использование закрытого ключа сертификата) Общество извещается в простой письменной форме о прекращении действия указанного сертификата. С момента уведомления Поставщик прекращает электронный документооборот с Обществом с использованием указанного сертификата.
5. Общество, после получения сообщения о компрометации сертификата, выводит соответствующий сертификат из действия в максимально короткие сроки, но не позднее следующего рабочего дня после получения сообщения о компрометации.
6. Клиент имеет право в любое время производить замену собственных сертификатов.