Общие сведения
Это старая версия API. Переходите на новую версию API.
Протокол Paymaster Direct предназначен для Компаний (Продавцов), чей бизнес предусматривает списания средств с плательщика без дополнительного подтверждения им каждой транзакции (безакцептные платежи, Direct Debit). Примерами может служить подписка на новостной контент, продление доменных или хостинговых услуг, покупка в один клик в играх и других средах, где нежелателен выход из процесса, мобильные приложения и так далее.
Разумеется, получение Продавцом возможности безакцептного списания невозможно без разрешения плательщика в выбранной им платежной системе. Это разрешение (долгосрочный акцепт, долгосрочное поручение) представляет собой данное им право потратить заданную сумму в заданный промежуток времени без прохождения платежных авторизационных процедур (разовых акцептов). После получения разрешения и до тех пор, пока оно будет действительным, списание производится на уровне межсерверного взаимодействия (без участия плательщика).
Продавец должен инициировать получение специальных разрешений на это у той платежной системы, которую хочет использовать его клиент-плательщик. Он передает плательщика на сайт Paymaster; тот, взаимодействуя с выбранной платежной системой, организует получение разрешений (акцепта) и сообщает Продавцу статус этой операции. После успешного завершения операции Продавец получает доступ к безакцептному списанию средств с плательщика.
Схема взаимодействия
Техническая информация
Передача данных
Все запросы должны направляться на https://paymaster.ru
с использованием ключа проверки клиента.
Продавец может использовать любой из 2 протоколов взаимодействия:
- JWS
- Rest
Тип протокола необходимо передавать в каждом запросе в http-заголовке "type" (или в get, или в post параметре). Если значение отсутствует, то по умолчанию считается, что используется JWS. Если в http-заголовке "resp-type" (или в get, или в post параметре) передавать значение "xml", то ответ будет в формате XML. Если значение отсутствует, то ответ будет в формате JWS. Для каждого протокола определяются данные для подписи и способ передачи подписи.
Типы подписи
Продавец может использовать 2 типа подписи запросов: RSA и Hash.
- RSA - подпись по алгоритму RSA (SHA256), кодировка строк UTF-8.
- Hash - SHA256 хеш от "данные для подписи;секретный ключ", кодировка строк UTF-8.
Payloads (данные)
Заголовок всех запросов всегда должен содержать обязательное поле "iat" (означающее "инициирован в") , содержащее целочисленное значение в секундах (1970-01-01T0:0:0Z в стандарте UTC). При каждом запросе данное поле должно содержать фактическое время отправки запроса. Поле "iat" может быть использовано PayMaster для предотвращения угроз повторного воспроизведения платежа с помощью сравнения времени занесенного в это поле и заданного временного интервала с фактическим.
JWS
Содержание запросов будет иметь вид сообщений в формате JSON Web Signature (JWS). Подписываемое тело запроса: "HeaderEncoded.BodyEncoded" (разделитель "." - точка) - все параметры, кроме sign. HeaderEncoded - закодированный UrlSafeBase64Encoding заголовок сообщения, BodyEncoded - закодированное UrlSafeBase64Encoding тело запроса. Подпись идет через точку(.) после Body ("HeaderEncoded.BodyEncoded.SignEncoded") и кодируется UrlSafeBase64Encoding.
Заголовок должен содержать стандартное поле "alg", которое всегда должно приводиться к "RS256" ("alg":"RS256"). Для удобства выполнения данной спецификации PayMaster’ом данные запроса передаются по протоколу HTTPS в параметре "request".
Rest
Формирование подписи для REST запроса
var encoding = Encoding.UTF8;
var iat = GetUnixtime();
var payload = string.Empty
+ "access_token=" + accessToken
+ "&type=rest"
+ "&merchant_id=" + merchantId
+ "&merchant_transaction_id=" + transactionId
+ "¤cy=" + currencyCode
+ "&amount=" + chargeAmount;
var dataToSign = string.Format("{0};{1};{2}", payload, iat, secretKey);
var bytesToSign = encoding.GetBytes(dataToSign);
string signBase64Encoded;
using (var sha256 = SHA256.Create())
{
var sign = sha256.ComputeHash(bytesToSign);
signBase64Encoded = Convert.ToBase64String(sign);
}
var result = SendRequest("/payment/init", payload, iat, signBase64Encoded);
Подписываемое тело запроса: В случае Get запроса - это "QueryString;iat", где: QueryString - это строка параметров после знака вопроса в Url; iat - это поле "инициирован в"; В случае Post запроса - это "Body;iat;секретный ключ", где: Body - это тело запроса; iat - это поле "инициирован в"; секретный ключ - назначается продавцом в личном кабинете ("Настройки подписи Direct").
Запросы формируются и отправляются Get или Post (application/x-www-form-urlencoded) параметрами. Подпись передается в заголовке "sign" или в параметрах запроса и кодируется Base64Encoding. Замечание для разработчиков на PHP: если $str - строка параметров, то хеш считается как base64_encode(hash('sha256', $string, true)). URLs: для всех типов запросов перечисленных ниже PayMaster присваивает уникальный URL и передает Продавцу. URL’ы для разных типов запросов не обязательно должны находиться на одном и том же хосте.
Авторизация
Авторизация проходит с использованием протокола OAuth 2.0 Authorization. Авторизация выглядит следующим образом:
- Продавец перенаправляет пользователя на сайт Paymaster Direct. Пользователю будет предложено авторизоваться, если он еще не авторизован или не выдал Продавцу разрешение на использование его Веб-кошелька.
- После прохождения авторизации пользователь перенаправляется на redirect_uri, указанную продавцом при перенаправлении пользователя, с добавлением временного токена.
- Продавец генерирует токен-запрос в PayMaster, содержащий временный токен для получения постоянного токена.
Запрос авторизации
POST /direct/security/auth
Запрос авторизации определяется протоколом OAuth.
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
response_type | String | Да | Константа. Параметр всегда должен иметь значение "code" |
client_id | String | Да | Идентификатор Продавца в системе PayMaster |
redirect_uri | String | Да | URL для перенаправления клиента после успешной авторизации |
scope | String | Да | Идентификатор платежной системы |
limits | Dictionary | Нет | Дневной, недельный и месячный лимит на списание средств пользователя (0 - без ограничения). Пример: JSON: {....,limits:[{RUB:"<daylimit>;<weeklimit>;<monthlimit>"}],...} или POST: limits[RUB]=<daylimit>;<weeklimit>;<monthlimit> |
String | Нет | Электронная почта пользователя | |
phone | String (\d{11,15}) | Нет | Мобильный телефон пользователя |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Пример перенаправления:
HTTP/1.1 302 Found
Location: https://www.example.com/?code=Pbl8KuP8vg
Параметры ответа
Реакцией на успешное завершение процесса авторизации будет перенаправление пользователя на предоставленный redirect_uri
со следующими параметрами:
Параметр | Тип данных | Обязательный | Описание |
code | String | Да | Временный токен авторизации, который будут обменен на постоянный токен. Время действия временного токена не должно превышать 10 минут после отправки исходного запроса |
Запрос на получение токена доступа
Заголовок запроса:
{
"iat": 1347447988,
"alg": "RS256"
}
Данные запроса:
{
"client_id": "54bf4d42-b85c-48e2-8bda-ad0cf876f411",
"code": "Pbl8KuP8vg",
"grant_type": "authorization_code",
"redirect_uri": "example.com"
}
Ответ:
HTTP/1.1 200 OK
{
"access_token": "thN250MQ5scFlaa-1Kc61PP8gpAusuHgpJKoflAzF5g",
"token_type": "bearer",
"expires_in": 31535999,
"account_identifier": "WebMoney Purse R111111111111"
}
POST /direct/security/token
Запрос определяется протоколом OAuth. Запрос передается Продавцом в PayMaster для обмена временного токена из исходного запроса на постоянный токен, который будет использоваться для будущих платежей.
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
client_id | String | Да | Идентификатор Продавца в системе PayMaster |
code | String | Да | Временный токен, присвоенный при запросе на авторизацию |
grant_type | String | Да | Константа. Всегда должен быть установлен на "authorization_code" |
redirect_uri | String | Да | Всегда в точности должен совпадать с redirect_uri указанной в запросе авторизации |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Параметры ответа
Параметр | Тип данных | Обязательный | Описание |
access_token | String | Только в случае успешного завершения | Постоянный токен, для использования в последующих запросах |
token_type | String | Только в случае успешного завершения | Константа. Всегда должен иметь значение "bearer" |
expires_in | Number | Только в случае успешного завершения | Количество секунд до истечения срока жизни токена |
account_identifier | String | Только в случае успешного завершения | Идентификатор клиента в платежной системе. Параметр будет отображаться пользователю, чтобы разделить различные учетные записи в одной системе |
error | String | Только в случае неудачи | Причина, по которой запрос токена доступа не удался. Допустимые значения: "invalid_request", "invalid_client", "invalid_grant", "unauthorized_client", "unsupported_grant_type" и "invalid_scope" |
Запрос отзыва токена доступа
Заголовок запроса:
{
"iat": 1384949320,
"alg": "RS256"
}
Данные запроса:
{
"client_id": "1",
"access_token": "7J-YBO_7cI9A5lb1U2PgLwoDyZxnTJhkM2o5XWIpjjE"
}
Ответ:
HTTP/1.1 200 OK
{
"status": "complete"
}
POST /direct/security/revoke
Запрос передается Продавцом по запросу покупателя в PayMaster для отмены существующего доверия. После выполнения запроса токен доступа будет аннулирован.
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
client_id | String | Да | Идентификатор Продавца в системе PayMaster |
access_token | String | Да | Постоянный токен доступа |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Параметры ответа
Параметр | Тип данных | Обязательный | Описание |
status | String | Да | Результат запроса. Допустимые значения "complete", "in_progress" и "failure" |
error_code | String | Только в случае неудачи | Причина ошибки. См. Коды ошибок |
error | String | Только в случае неудачи | Описание ошибки, которая привела к отказу запроса, в свободной форме. Используется для устранения неполадок и не отображается пользователю |
Проведение платежа
Инициация платежа
Заголовок запроса:
{
"alg": "RS256",
"iat": 1347448234
}
Данные запроса:
{
"access_token": "thN250MQ5scFlaa-1Kc61PP8gpAusuHgpJKoflAzF5g",
"merchant_id": "54bf4d42-b85c-48e2-8bda-ad0cf876f411",
"merchant_transaction_id": "da47e4ee-ef12-469e-a9f0-1fa0d4a4365c",
"amount": 1,
"currency": "RUB"
}
Ответ:
HTTP/1.1 200 OK
{
"status": "success",
"processor_transaction_id": "36"
}
POST /direct/payment/init
Запрос передается Продавцом в PayMaster для инициации платежа. Успешно выполненный запрос не гарантирует перевод средств Продавцу, он только указывает на то, что пользователь находится в платежной системе и готов оплатить всю сумму в полном объеме в момент отправки запроса. Если запрос, по какой- либо причине, не удался, то сообщение об ошибке отобразиться пользователю и данный платеж повторить будет невозможно.
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
access_token | String | Да | Постоянный токен доступа, предоставленный Продавцу ранее |
merchant_id | String | Да | Идентификатор Продавца в системе PayMaster. То же самое, что "client_id" используемый для получения access_token |
merchant_transaction_id | String | Да | Идентификатор транзакции генерируемый в системе Продавца. Должен использоваться для предотвращения повторного требования об оплате, если истек срок ожидания платежа или не был возвращен processor_transaction_id |
amount | Number | Да | Сумма для оплаты Клиентом |
currency | String | Да | Текстовый 3-буквенный код валюты (ISO). Всегда должно быть RUB |
description | String | Дополнительный | Описание покупки (не более 255 символов) |
custom | String | Дополнительный | Дополнительные поля Продавца, не имеющие в названии префикса "ap_", обрабатываются системой PayMaster автоматически и передаются на веб-сайт Продавца после выполнения платежа. Например, в случае REST-запроса: custom[FIO]=ivanovivan&custom[kvartira]=45; в случае JSON: "custom":{"FIO":"123","KVARTIRA":"45"}. |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Параметры ответа
Параметр | Тип данных | Обязательный | Описание |
status | String | Да | Результат запроса. Допустимые значения "success" и "failure" |
processor_transaction_id | String | Только в случае успешного завершения | Идентификатор транзакции в платежной системе |
error_code | String | Только в случае неудачи | Причина возникновения ошибки. См. Коды ошибок |
error | String | Только в случае неудачи | Описание ошибки, которая привела к отказу запроса, в свободной форме. Используется для устранения неполадок и не отображается пользователю |
Проведение платежа
Заголовок запроса:
{
"alg": "RS256",
"iat": 1347448499
}
Данные запроса:
{
"access_token": "thN250MQ5scFlaa-1Kc61PP8gpAusuHgpJKoflAzF5g",
"merchant_id": "54bf4d42-b85c-48e2-8bda-ad0cf876f411",
"merchant_transaction_id": "da47e4ee-EF12-469e-a9f0-1fa0d4a4365c",
"processor_transaction_id": "36"
}
Ответ:
HTTP/1.1 200 OK
{
"status": "complete"
}
POST /direct/payment/complete
Запрос необходим для завершения платежа, который был инициирован запросом инициации платежа. Если запрос выполнен успешно, считается, что средства передаются от клиента Продавцу. Если запрос по какой-либо причине не выполнен и не помечен как повторный, то пользователь будет оповещен о незавершенном платеже и повторить данный платеж будет невозможно. Если запрос будет возвращен со статусом "in_progress" без кода возврата 200 или таймаута платежа, то запрос необходимо повторить позже (Рекомендуемое время повторной отправки запроса 15 секунд). Продавец должен быть в состоянии обработать этот запрос, используя только параметр merchant_transaction_id для идентификации данной транзакции.
Параметр processor_transaction_id используется только для удобства исполнителя. Запрос на проведение платежа, достигший конечного состояния (проведен или отказ), должен вернуть последний результат запроса на проведение платежа. Запросы, не достигшие состояния "проведен" или "отказ" в течение 120 часов с начала запуска платежа считаются отмененными и переходят в состояние "отказ".
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
access_token | String | Да | Постоянный токен доступа, предоставленный Продавцу ранее |
merchant_id | String | Да | Идентификатор Продавца в системе PayMaster. То же самое, что "client_id" используемый для получения access_token |
merchant_transaction_id | String | Да | Идентификатор транзакции генерируемый в системе Продавца |
processor_transaction_id | String | Нет | Идентификатор транзакции в платежной системе. Будет включен тогда, когда ответ на запрос инициации платежа возвращает это значение и счет не просрочен |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Параметры ответа
Параметр | Тип данных | Обязательный | Описание |
status | String | Да | Результат запроса. Допустимые значения "complete", "in_progress" и "failure" |
error_code | String | Только в случае неудачи | Причина ошибки. См. Коды ошибок |
error | String | Только в случае неудачи | Описание ошибки, которая привела к отказу запроса, в свободной форме. Используется для устранения неполадок и не отображается пользователю |
Инлайн-токенизация карт
Дополнительные методы позволяют осуществлять привязку (токенизацию) карты прямо с сайта магазина (или из приложения) без необходимости направлять пользователя на сайт PayMaster.
Запрос авторизации
Заголовок запроса:
{
"alg": "RS256",
"iat": 1347447988
}
Данные запроса:
{
"response_type": "code",
"client_id": "54bf4d42-b85c-48e2-8bda-ad0cf876f411",
"card_number": "5470000000000000",
"card_holder": "IVAN INVANOV",
"card_expiry": "04/18",
"card_cvv": "123"
}
Ответ c токеном:
HTTP/1.1 200 OK
{
"access_token":"thN2****zF5g",
"token_type":"bearer",
"expires_in":31535999,
"account_identifier":"4************1234"
}
Ответ c запросом на 3DS:
HTTP/1.1 200 OK
{
"confirmation": "3DSecure",
"code": "Pbl8KuP8vg",
"redirect_url": "https://acs.somebank.ru",
"pa_req": "bhzV****jzVL"
}
Ответ c запросом на подтверждение суммы:
HTTP/1.1 200 OK
{
"confirmation": "DebitAmount",
"code": "Pbl8KuP8vg",
}
POST /direct/authorize/card
Создание привязки по банковской карте. В зависимости от настроек может потребоваться дополнительное подтверждение: через 3DSecure-авторизацию, либо через подтверждение случайной суммы, блокированной на счете карты.
Соответственно в ответ на данный запрос может выдаваться:
- токен доступа
- параметры для 3DSecure-авторизации
- указание на подтверждение через блокировку случайной суммы
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
response_type | String | Да | Константа. Параметр всегда должен иметь значение "code" |
client_id | String | Да | Идентификатор Продавца в системе PayMaster |
card_number | String | Да | Номер карты пользователя |
card_holder | String | Да | Имя держателя карты |
card_expiry | String | Да | Срок действия карты (ММ/ГГ или ГГГГ-ММ) |
card_cvv | String | Да | CVV код карты |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Параметры ответа
Параметр | Тип данных | Описание |
confirmation | String | Способ дополнительного подтверждения 3DSecure/DebitAmount |
code | String | Временный токен для идентификации данной сессии |
redirect_url | String | ACS-страница процессинга эмитента |
pa_req | String | Кодированные данные запроса 3DS |
Подтверждение суммы списания
Заголовок запроса:
{
"alg": "RS256",
"IAT": 1438247717
}
Данные запроса:
{
"response_type": "code",
"client_id": "54bf4d42-b85c-48e2-8bda-ad0cf876f411",
"code": "Pbl8KuP8vg",
"amount": "83.98"
}
Ответ:
HTTP/1.1 200 OK
{
"access_token":"thN2****zF5g",
"token_type":"bearer",
"expires_in":31535999,
"account_identifier":"4************1234"
}
POST /direct/authorize/confirm
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
response_type | String | Да | Константа. Параметр всегда должен иметь значение "code" |
client_id | String | Да | Идентификатор Продавца в системе PayMaster |
code | String | Да | Временный токен, присвоенный при запросе на авторизацию |
amount | String | Да | Сумма списания, два знака в дробной части, разделитель точка ‘.’ |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Проведение 3DSecure авторизации
Для проведения 3DSecure авторизации нужно перенаправить пользователя на специальную страницу эмитента карты по адресу redirect_url. В запросе передаются следующие параметры:
- PaReq - кодированная информация о операции, подставляется значение pa_req
- MD - номер запроса мерчанта для идентификации результата
- TermUrl - страница магазина для возврата пользователя после авторизации
Запрос передается методом POST.
После авторизации эмитент перенаправит пользователя на указанную страницу мерчанта TermUrl со следующими полями:
- PaRes - кодированный результат авторизации
- MD - номер запроса мерчанта, копируется из запроса
Для завершения привязки необходимо передать полученный результат авторизации PaRes через вызов метода завершения привязки.
Завершение 3DSecure авторизации
Заголовок запроса:
{
"alg": "RS256",
"IAT": 1438647742
}
Данные запроса:
{
"response_type": "code",
"client_id": "54bf4d42-b85c-48e2-8bda-ad0cf876f411",
"code": "Pbl8KuP8vg",
"pa_res": "eJzV****jX/L"
}
Ответ:
HTTP/1.1 200 OK
{
"access_token":"thN2****zF5g",
"token_type":"bearer",
"expires_in":31535999,
"account_identifier":"4************1234"
}
POST /direct/authorize/complete3ds
Параметры запроса
Параметр | Тип данных | Обязательный | Описание |
response_type | String | Да | Константа. Параметр всегда должен иметь значение "code" |
client_id | String | Да | Идентификатор Продавца в системе PayMaster |
code | String | Да | Временный токен, присвоенный при запросе на авторизацию |
pa_res | String | Да | Результат авторизации 3DSecure |
sign | String | Да | Подпись запроса. Передается либо в заголовке запроса, либо в параметре |
type | String | Нет | Тип протокола. Определяется продавцом. Передается либо в заголовке запроса, либо в параметре. Допустимые значения: jws, rest |
iat | String | Да | Фактическое время отправки запроса. Передается либо в заголовке запроса, либо в параметрах |
Справочники
Коды ошибок
Код | Описание |
invalid_request | В запросе отсутствуют обязательные параметры или параметр является строкой неверного типа |
verification_failure | Сбой запроса проверки подписи, или параметр "iat" находится за пределами допустимого временного интервала |
invalid_token | Токен является недействительным, т.к. не совпадает с предоставленным токеном, токен истек или был отменен клиентом |
token_locked | Операции по токену временно заблокированы. Дата разблокировки указана в поле blocked_until |
unknown_transaction_id | Транзакция не может быть найдена по merchant_transaction_id или по processor_transaction_id (если предусмотрен) |
insufficient_funds | Клиент не имеет достаточно средств на счету для выполнения платежа в полном объеме |
payment_cancelled | Оплата была отменена запросом отмены платежа или по тайм-ауту |
payment_limit_exceeded | Операция не может быть выполнена из-за превышения лимита |
payment_count_exceeded | Операция не может быть выполнена из-за превышения количества операций |
invalid_operation | Недопустимая операция по карте |
invalid_amount | Недопустимая сумма платежа |
account_blocked | Карта блокирована |
account_expired | Срок действия карты истек |
invalid_account | Неверный номер карты |
payment_system_rejected | Отказ платежной системы |
other | Этот код может быть использован для любых других ошибок, которые не перечислины выше |
Приложение А
Пример RSA- секретного ключа (используется, например, для подписания сообщения в этом документе):
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAxw6Wp7mDULZksgyOfvDJYTpbwdQeDXWTG0mq6Z6geDT2naYm 6q3bL17oy2IbBhXqrh6CzufPoppb3H8v+2mdR484fO955HwCWekVqaWUw5MzYpaq KbBqBepENi9lxaOGEg4Tuy48ARsmZc7KBubnEohA6BjDyx8AdwCLeKYNKhKSwzrl EKteCwWvqpXwszOck2zqK1VzDKZT8+G7g7aZH496sw16iBtId0QcI5sV/IAq58Vj QqCsKj7khweiPaxtWpsawnmylazm0O8/8Mj5d+GSLmO3hhT2ZoPpeSdvruC2RPLA YliWAl+NouqrAp2Di4yYFwKAX2nwvuZVFk5TiQIDAQABAoIBABzvwvjY3/0Atryn VKOhbzTiHeqcYk4ElID4AY96jstKr7sVJz0gTueg/Whrd5A36WisaMmZKzbxB3+T Qa9jmAiKCmUnDuonGNRnLM3/kxOnN2YSjuQGkDMR7h6OX1YOwnOndjjUrMZgYwGT wQylzluEUSMsTnIdrJygCKZeRTWjQYOwzIDoLamsaaYTq5MPKs30DDsiQW8GRRra 510CiXuDzig10ohpqZNvXAjoGhSCWm83ZrCF9R4ge8D7WJju8zX5IJfaauqecfpK 6Z8N87tScFJJ8sIEbsK0cAqKpDbeRo40r8rQG8CECzeDn9bzBbDUdiWE435INV8o mWaaH4ECgYEA/LMU2Cd+Md6/EQlbs7oqh60YnU0S/a5GlVuB60EQR209qXOGmG7G 7nff3aCzMIKon5pm/QURmW7udLGekJKWeyXwUTmsE4xGfeFXBqmxV1nhCN0klj0h YCzYxYgSHNgDGCf9UXvecAa4SD1Axtdmww58mMCMz/n/jy+mtvZ7zlkCgYEAyagm QptkufmmHErUI0O3iCVtJqcbdBJBpUCj5hT4vwGiktOPTPxG1fNvi1QQ5uI5Ygo4 +Hl2vNmHJj+TNsvoSdWI40Ad6wADKMZngkl+y/mPeQp2DZbmLyT49zO7XbVYKjSg JQudk3cvU31Jml2Zx/1QTONRCWNogmm144bU6LECgYBplY3VDxNMVQyyWp2lR9jz XaDWQNj5g/Lb/yMWn9XkckF8ZtfLIyYdh5rTKI0WbNF19nanq5GB8XbS7VAaihU0 GVMDLTy34jml6RyKnSaLH/PF11itKZejbrmYN1WSFbOdSUAv5ri3SCeBj45cRq4a PBhVXsa3M3bTZg6bjfuG6QKBgHp3pSzEZKrRY8FA7I6yHG8Rk7VqvTCDudxbYm5k BCE0JACZfSja+UYMPozWNCGT+BeDb8/vLF5KmVpwN76KnXrhtO2WTdUfP8vumoQ0 kE3eNPTklodwQkEVaiHvB/ZEINQY+70jzcH2GwbQSvf1qmQbgj3/u4JBHgI9otoY U4sxAoGBAO6mMtFer5H2XepHqQ+MELswkLX7K1WC7Pc/vLhRHxpaZX6Mcdn3KbB1 B3eb8YtNmkUIFP4mYzmf/vL0qdOLFOzvJ0XwXGvSoDLspvwz/tZHqk6rtV22TA57 j8PDSV2Byd8TAgedFnF3cPlVCXsvQVH7k5MBhEY4b1jJWp8U1i6M -----END RSA PRIVATE KEY-----
Пример RSA-открытого ключа (может быть использована для проверки подписи сообщения в этом документе):
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxw6Wp7mDULZksgyOfvDJ YTpbwdQeDXWTG0mq6Z6geDT2naYm6q3bL17oy2IbBhXqrh6CzufPoppb3H8v+2md R484fO955HwCWekVqaWUw5MzYpaqKbBqBepENi9lxaOGEg4Tuy48ARsmZc7KBubn EohA6BjDyx8AdwCLeKYNKhKSwzrlEKteCwWvqpXwszOck2zqK1VzDKZT8+G7g7aZ H496sw16iBtId0QcI5sV/IAq58VjQqCsKj7khweiPaxtWpsawnmylazm0O8/8Mj5 d+GSLmO3hhT2ZoPpeSdvruC2RPLAYliWAl+NouqrAp2Di4yYFwKAX2nwvuZVFk5T iQIDAQAB -----END PUBLIC KEY-----
Приложение B
Тестовые действия перед принятием окончательных настроек:
- Протестируйте запрос с использованием токена с некорректным кодом. Проверьте сообщение об ошибке в ответе.
- Протестируйте запрос с использованием токена с некорректым client_id. Проверьте сообщение об ошибке в ответе.
- Протестируйте запрос инициации платежа с токеном доступа не соответствующим тому, который использован на странице авторизации.
- Протестируйте запрос инициации платежа с использованием конкретного параметра merchant_transaction_id. Сделать еще один запрос, использую то же значение параметра merchant_transaction_id и убедиться, что processor_transaction_id содержит тоже значение, что и при первом запросе.
- Протестируйте запрос инициации платежа с отрицательным значением суммы. Получите сообщение об ошибке.
- Протестируйте запрос проведения платежа без параметра processor_transaction_id. Убедитесь в том, что запрос прошел успешно.
- Протестируйте запрос проведения платежа с параметрами merchant_transaction_id и processor_transaction_id, относящимися к разным операциям. Получите сообщение об ошибке.