Сбербанк PAY
Сервис для приема платежей в интернет-магазинах через Национальную Платежную Систему. Реализация оплаты заключается в создании формы на странице продавца, в которой будут собираться данные о карте — номер, дата истечения, CVV. При этом важно упомнянуть тот факт, что эти персональные данные не должны никак сохранятся на вашем сервере. Идеальный вариант: чтобы они слались напрямую с клиента к нам на сервер, а уже полученный с нашего сервера токен и сопуствующие данные можно уже сохранять для дальнейшей работы.
Процесс оплаты
Первый этап заключается в сохранении на сервере Банка персональной информации. Для этого делается запрос на токен — просто ключ к сохраненной информации о карте. При этом сам сервер Банка не сохраняет персональные данные в открытом виде, данные лежат зашифрованными. Для доступа к ним нужен полный токен, который возвращается клиенту при запросе. Токен при этом находится в состоянии pending — в ожидании подтверждения.
Второй этап — подтверждение токена. Это дополнительный уровень безопасности для онлайн операций. Для этого клиента просто надо перенаправить на страницу 3d-secure (3ds) и ожидать прохождения этой процедуры с возвратом на указанную вами страницу. После подтверждения токен переходит в статус chargeable — в таком состоянии позволяется с помощью токена списывать деньги с карты клиента.
Третий этап — оплата. Она не проходит автоматически после подтверждения токена. Это имеет смысл, так как токены могут являться многоразовыми (но для разовых операций старайтесь избегать такого поведения, клиенту в случае многоразового токена будет показано предупреждение о неограниченном доступе к карте при подтверждении токена). Если токен одноразовый (с заявленной суммой при создании), то токен переходит после оплаты в состояние charged, если многоразовый, то так и остается в состоянии chargeable. Оплату по многоразовому токену можно вызывать неограниченно (но в пределах лимитов карты, которые указываются клиентом в банке самостоятельно).
В случае каких-либо проблем, можно однократно выполнить отмену платежа, в таком случае токен перейдет в статус refunded (если он одноразовый).
В любой момент вы можете набюдать за статусом созданного вами токена.
Ключи
После регистрации в системе вам выдается 2 ключа: публикуемый (pk) и секретный (sk).
-
pk - это ключ, который можно размещать в открытых источниках и он используется только для создания токена
-
sk - ключ, которым проивзодятся остальные операции - оплата, возврат, а также получается информация о существующих объектах текущего клиента.
Resource Group ¶
Токены ¶
Для платежа в интернет-магазине в начале создается токен - код, который характеризует платежные данные клиента, но при этом не хранит его персональные данные.
Это обязательный первый этап для платежа.
Создание нового токенаPOST/v1/token?token={token}
Для создания токена вы должны создать форму у себя в интернет-магазине.
- Аттрибуты запроса
key(string) - публикуемый ключ клиентаcard_number(string) - комер карты НПСexp_month(number) - номер месяца даты истечения картыexp_year(number) - последние две цифры года даты истечения картыcvc(number) - CVC/CVV код, указанный на обороте картыamount(number) - сумма операции в копейках. К примеру, 3 рубля = 300. В будущем возможно опциональное использование для переиспользуемых токенов.currency(string, optional) - код валюты. Код приднестровских рублей - “000”check_card(boolean, optional) - проверять ли данные карты. Необязательный параметр. Проводит операцию на 1 копейку и делает сразу же возврат. Использовать рекомендуется только в случае особой необходимости, так как клиенту может дойти оповещение о списании и отмене снятия. В случае если параметр не был передан, или не был равен true - проверка будет проведена только на этапе оплаты. Данный параметр не влияет на проверку данных карты (номера, даты истечения), которая возможна без процессинга.
Example URI
- token
string(required)токен (передается при запросе информации о токене)
Headers
Content-Type: application/x-www-form-urlencoded200В ответе возвращается вся необходимая информация для отображения.
token - токен, который можно сохранить на сервере и необходимо передавать в дальнейших шагах.
last4numbers - последние 4 цифры номера карты, которые можно отображать клиенту для идентификации карты, с которой будет происходить оплата.
created - дата создания токена в формате ISO 8601:2004.
Возможные значения аттрибута status:
-
pending- в ожидании подтверждения клиентом через 3ds -
chargeable- готово для оплаты -
charged- оплачено (вместе со статусомrefundedпопадает в этот статус только при создании токена как не переиспользуемый) -
refunded- платеж возвращен
Параметр three_ds_required говорит о том, что токен требует подтвержения клиентом через банк-эмитент карты.
Параметр bank возвращает КУБ (код учерждения банка) головного отделения банка, выданный ПРБ.
Параметр type возвращает название типа карты. На данный момент принимаются только карты НПС, значение аттрибута NPS.
Параметр subscription возвращает boolean результат можно ли этот токен переиспользовать.
Headers
Content-Type: application/jsonBody
{
"token": "tok_33a58e48-5ac6-4806-aecd-392637e95da3$$n1SGqf6-Xe0e9v7TCTc9AQ",
"last4numbers": "8709",
"created": "2018-01-23T11:13:25.910+02",
"status": "pending",
"three_ds_required": true,
"exp_month": 6,
"exp_year": 18,
"bank": "21",
"type": "NPS",
"subscription": false
}401Не передан публикуемый ключ, или такой ключ не найден.
403Карта данного банка на данный момент не поддерживается.
406Не переданы все обязательные параметры, переданная карта не НПС, или не правильно набран номер, или валюта не в списке поддерживаемых (рубль ПМР (000) и рубль РФ (643)).
432Ошибка при проверке карты (см. параметр check_card).
433Слишком много ошибочных попыток проверить карту (см. параметр check_card).
Получить информацию о токенеGET/v1/token?token={token}
Example URI
- token
string(required)токен (передается при запросе информации о токене)
В запросе на получение информации о токене необходимо указать секретный ключ в header-е.
Headers
X-Secret: sk_ABC123200Headers
Content-Type: application/jsonBody
{
"created": "2018-01-23T11:13:25.000+02",
"status": "charged",
"three_ds_required": true,
"amount": 75,
"currency": "000"
}401Не передан секретный ключ, или такой ключ не найден.
404Токен не найден.
Удалить токенDELETE/v1/token?token={token}
Example URI
- token
string(required)токен (передается при запросе информации о токене)
В запросе на получение информации о токене необходимо указать секретный ключ в header-е.
Headers
X-Secret: sk_ABC123200Токен удален.
401Не передан секретный ключ, или такой ключ не найден.
404Токен не найден.
Подтверждение клиентом токена 3ds ¶
Для подтверждения оплаты необходимо перенаправить клиента на страницу банка, где произойдет проверка клиента.
В результате проверки клиент будет перенаправлен на страницу return_url, а к GET запросу будет добавлен параметр success со значением 1, или 0 в зависимости от того будет ли подтверждение успешным, или нет.
Перенаправить на страницу банка для подтвержденияGET/v1/3ds?token={token}&return_url={return_url}
Example URI
- token
string(required)полученный токен
- return_url
string(required)URL магазина, на который надо вернуться после получения результата проверки
307Успешное перенаправление на страницу банка.
Headers
Location: https://3ds.bank-name.test/some_code403Токен находится не в состоянии pending и подтверждать его уже не требуется.
404Токен не найден.
Оплата ¶
Создание оплатыPOST/v1/charge?token={token}&charge={charge}&amount={amount}
Example URI
- token
string(required)полученный токен (используется при оплате)
- charge
string(optional)id платежа (используется при получении информации о оплате)
- amount
number(optional)сумма платежа в копейках (для оплаты многоразовых токенов)
Headers
Content-Type: application/x-www-form-urlencoded
X-Secret: sk_ABC123200Возвращается результат оплаты.
id - id платежа в системе “Сбербанк PAY”.
Если параметр paid - true - оплата успешно произошла и возвращается параметр reference - id платежа в системе НПС.
Если paid - false, тогда reference не возвращается, а возвращаются failure_code и failure_name - код и текст ошибки.
Headers
Content-Type: application/jsonBody
{
"id": "ch_9cb0a8db-6378-41f4-86f6-bfb8ac55febe",
"created": "2018-01-23T11:15:30.000+02",
"paid": true,
"reference": "000002812310"
}400Не передан токен.
401Не передан секретный ключ, или такой ключ не найден.
403Токен находится не в состоянии chargeable.
404Токен не найден.
Информация об оплатеGET/v1/charge?token={token}&charge={charge}&amount={amount}
Example URI
- token
string(required)полученный токен (используется при оплате)
- charge
string(optional)id платежа (используется при получении информации о оплате)
- amount
number(optional)сумма платежа в копейках (для оплаты многоразовых токенов)
Headers
X-Secret: sk_ABC123200Получение информации об оплате.
Дополнительно возвращается amount - сумма платежа (в копейках), currency - валюта платежа, а также refunds - попытки отмены данного платежа. Во внутренней структуре отмены платежа параметр refunded указывает на результат отмены.
Headers
Content-Type: application/jsonBody
{
"id": "ch_9cb0a8db-6378-41f4-86f6-bfb8ac55febe",
"created": "2018-01-23T11:15:30.000+02",
"currency": "000",
"amount": 75,
"paid": true,
"reference": "000002812310",
"refunds": [
{
"id": "re_ad26b88c-61ca-4755-90f4-b72ab015328c",
"date": "2018-01-23T11:17:49.000+02",
"refunded": true
},
{
"id": "re_e52cd23b-d422-4128-abc9-893046503270",
"date": "2018-01-23T11:17:52.000+02",
"refunded": false
},
{
"id": "re_080dbd3b-a777-440a-9d5c-810d8e4c9b6b",
"date": "2018-01-23T11:17:54.000+02",
"refunded": false
}
]
}401Не передан секретный ключ, или такой ключ не найден.
404Токен не найден.
Возврат платежа ¶
В различных случаях требуется отменить уже проведенный платеж. Для этого есть метод refund.
Обратите внимание на то, что возврат осуществляется на полную сумму транзакции.
Созданные возвраты, успешные и ошибочные отображаются при запросе информации о оплате.
Запрос возвратаPOST/v1/refund?token={token}&charge={charge}
Example URI
- token
string(required)полученный токен
- charge
string(required)id платежа
Headers
X-Secret: sk_ABC123200В данном случае кроме уникального идентификатора возврата id, переданного токена token, даты возврата date, возвращается refunded, показывающий успешно, или нет прошла операция возврата.
Headers
Content-Type: application/jsonBody
{
"id": "re_080dbd3b-a777-440a-9d5c-810d8e4c9b6b",
"token": "tok_33a58e48-5ac6-4806-aecd-392637e95da3$$n1SGqf6-Xe0e9v7TCTc9AQ",
"date": "2018-01-23T11:17:54.283+02",
"refunded": true
}401Не передан секретный ключ, или такой ключ не найден.
403В случае не проведенного возврата возвращается refunded: false
Body
{
"id": "re_080dbd3b-a777-440a-9d5c-810d8e4c9b6b",
"token": "tok_33a58e48-5ac6-4806-aecd-392637e95da3$$n1SGqf6-Xe0e9v7TCTc9AQ",
"date": "2018-01-23T11:17:54.283+02",
"refunded": false
}404Токен не найден.