Токенизация доступна мерчантам, чей ресурс сертифицирован PCI DSS.
Токенизация - это механизм, который позволяет мерчанту один раз запросить данные карты у пользователя, а затем сохранить эти данные на защищенных ресурсах OCTO обменяв их на уникальный ключ - токен. Этот токен может быть сохранен на серверах мерчанта и связан с аккаунтом покупателя для того, чтобы все последующие покупки инициировать передавая в OCTO данный токен (не запрашивая у пользователя повторно данные карты кроме трехзначного кода безопасности cvv2/cvc2 с обратной стороны карты).
Обобщенный алгоритм оплаты с использованием токенов:
Метод: POST https://secure.octo.uz/bind_card
Тело запроса:
{
"octo_shop_id": 242,
"octo_secret": "1d45df74-bb95-47cf-a616-8d6dcee2e10d",
"shop_transaction_id": "d87f4hd8d76f4h58d",
"pan" : "4276380012341025",
"exp":"2006",
“phone” : “99812341212”,
"cardHolderName" : "BOB MARLEY",
"cvc2" : "123",
"method" : "bank_card",
"return_url": "http://merchant.site.uz/return_URL",
"notify_url": "http://merchant.site.uz/send_me_status_URL",
"bind_notify_url": "http://merchant.site.uz/send_me_status_URL"
}
Описание полей запроса:
Поле | Обязательное | Описание |
---|---|---|
octo_shop_id | да | Уникальный ID магазина (доступен в ЛК магазина) |
octo_secret | да | Персональный секретный ключ магазина, который генерируется в ЛК магазина. Должен содержаться в безопасной недоступной зоне сайта магазина |
shop_transaction_id | да | Уникальный идентификатор транзакции на стороне магазина. Используется OCTO для предотвращения случайного дублирования транзакций |
pan | да | 16-значный номер карты |
exp | да | Дата истечения срока действия карты в формате YYMM |
phone | нет | Обязательно для карт Uzcard и HUMO, необязательно для международных карт |
cardHolderName | нет | Имя держателя карты. Необязательно для карт Uzcard и HUMO, обязательно для международных карт |
cvc2 | нет | трехзначный код безопасности с обратной стороны карты. Необязательно для карт Uzcard и HUMO, обязательно для международных карт |
method | да | Метод оплаты (платежная система bank_card , uzcard , humo ) |
return_url | нет | Адрес на который надо вернуть покупателя после окончания процедуры верификации карты. Обязательно для карт Uzcard и HUMO, необязательно для международных карт |
notify_url | да | URL нотификаций о статусе платежа, который авторизует карту |
bind_notify_url | да | URL нотификации о статусе токенизации |
Ответ сервера:
{
"error": 0,
"errMessage": "",
"data": {
"status": "created",
"shop_transaction_id": "d87f4hd8d76f4h58d",
"octo_payment_UUID": "1145df74-bb95-47cf-a616-8d6dcee2e222",
"octo_pay_url": "https://pay.octo.uz/pay_wisard/1145df74-bb95-47cf-a616-8d6dcee2e222",
"card_token": "sdf9g87sd6f9g876sdf9g876sdf98g"
}
}
Описание полей ответа:
Поле | Обязательное | Описание |
---|---|---|
data | да (если error=0) | При успешном ответе содержит все поля (кроме erroe и errMessage). |
error | да | Код ошибки, 0 – нет ошибки |
status | да | Статус авторизационного платежа |
shop_transaction_id | да | Уникальный идентификатор транзакции на стороне магазина. Используется OCTO для предотвращения случайного дублирования транзакций |
octo_payment_UUID | да | UUID авторизационного платежа в OCTO |
octo_pay_url | нет | URL на который надо перенаправить пользователя для завершения авторизации (покупка с возвратом). Может отсутствовать если номер телефона phone, переданный в запросе совпал с номер телефона привязанным к карте и при этом мерчант обладает повышенным уровнем доверия |
card_token | нет | Токен, связанный с данной картой. Этот токен можно будет использовать для процессинга платежей, до завершения авторизации токен не активен. Здесь токен передается только при максимальном уровне безопасности мерчанта в безакцептном режиме токенизации |
Метод: GET https://secure.octo.uz/verificationInfo/{uuid}
Данные из этого метода понадобятся в следующем шаге токенизации.
Ответ сервера:
{
"error": 0,
"errMessage": "",
"data": {
"verifyId": 9437386,
"phone": "+998** *****04",
"secondsLeft": 231
}
}
В случае если error не равна 0, то это ошибка валидации.
Описание полей ответа:
Поле | Обязательное | Описание |
---|---|---|
verifyId | да | ID верификации привязки |
phone | да | Маскированный номер куда была отправлена смс |
secondsLeft | да | Время жизни верификации привязки(4 минуты), если значение равно 0, то время вышло, при продолжении привязки будет ошибка |
Второй шаг. Поскольку в Национальных Платежных системах процедура 3DSecure заменена на OTP, пользователю приходит OTP на номер привязанный к карте, пользователь передает код смс магазину, а тот в свою очередь в ПС OCTO.
Метод: POST https://secure.octo.uz/bind_card/check_sms_key
{
"octo_shop_id": 242,
"octo_secret": "7236fef0-5589-487a-a228-f0756011ed1c",
"smsKey":"963015" ,
"paymentUUID":"a77e12cc-6f12-4b76-a32c-1b7c71993b56" ,
"verifyId": 9437386
}
Описание полей запроса:
Поле | Обязательное | Описание |
---|---|---|
octo_shop_id | да | Уникальный ID магазина (доступен в ЛК магазина) |
octo_secret | да | Персональный секретный ключ магазина, который генерируется в ЛК магазина. Должен содержаться в безопасной недоступной зоне сайта магазина |
smsKey | да | Код из СМС |
paymentUUID | да | Уникальный идентификатор транзакции в ПС Octo. |
verifyId | да | ID верификации привязки |
Ответ сервера:
{
"error": 0,
"errMessage": "",
"data": {
"status": "created",
"shop_transaction_id": "d87f4hd8d76f4h58d",
"octo_payment_UUID": "1145df74-bb95-47cf-a616-8d6dcee2e222",
"octo_pay_url": "https://pay.octo.uz/pay_wisard/1145df74-bb95-47cf-a616-8d6dcee2e222",
"card_token": "sdf9g87sd6f9g876sdf9g876sdf98g"
}
}
Описание полей ответа:
Поле | Обязательное | Описание |
---|---|---|
data | да (если error=0) | При успешном ответе содержит все поля (кроме erroe и errMessage). |
error | да | Код ошибки, 0 – нет ошибки |
status | да | Статус авторизационного платежа |
shop_transaction_id | да | Уникальный идентификатор транзакции на стороне магазина. Используется OCTO для предотвращения случайного дублирования транзакций |
octo_payment_UUID | да | UUID авторизационного платежа в OCTO |
octo_pay_url | нет | URL на который надо перенаправить пользователя для завершения авторизации (покупка с возвратом). Может отсутствовать если номер телефона phone, переданный в запросе совпал с номер телефона привязанным к карте и при этом мерчант обладает повышенным уровнем доверия |
card_token | нет | Токен, связанный с данной картой. Этот токен можно будет использовать для процессинга платежей, до завершения авторизации токен не активен. Здесь токен передается только при максимальном уровне безопасности мерчанта в безакцептном режиме токенизации |
POST запрос отправляется со стороны OCTO на указанный адрес bind_notify_url
, указанный магазином
при вызове /bind_card
.
Тело запроса:
{
"shop_transaction_id": "d87f4hd8d76f4h58d",
"pan" : "4276380012341025", // исходный PAN
"exp":"2006", // YYMM
"cardHolderName" : "BOB MARLEY",
"card_token": "sdf9g87sd6f9g876sdf9g876sdf98g",
"status" : "active" // (или failed)
}
OCTO ожидает в ответ HTTP status 200 и OK в теле. Если OCTO безуспешно пытается отправить уведомление мерчанту 3 раза подряд, то попытки уведомления прекращаются и токен переходит в статус failed
.
Если мерчант знает, что пользователь и его данные в регистрации на стороне магазина скомпрометированы или если пользователь сам аннулировал свою регистрацию или по другим соображениям безопасности магазин обязан заблокировать выпущенный для данного пользователя токен.
Метод POST https://secure.octo.uz/block_card_token
Тело запроса:
{
"octo_shop_id": 242,
"octo_secret": "1d45df74-bb95-47cf-a616-8d6dcee2e10d",
"card_token": "sdf9g87sd6f9g876sdf9g876sdf98g"
}
Ответ:
{
"error": 0,
"errMessage": null,
“status” : "blocked"
}
Коды ошибок
active
Возможные статусы токена
Механизм описан в разделе Ввод карточных данных на сайте магазина