Generación de seToken
Qué es seToken
seToken (Self Encrypted Token) - es un criptograma usado para la transmisión segura de datos de tarjeta. Se puede usar en las siguientes solicitudes, cuando los datos de la tarjeta se recopilan del lado del comerciante:
A continuación se describe cómo crear seToken y enviarlo en una solicitud de pago.
Formato de seToken antes del cifrado
Antes del cifrado, seToken representa una cadena que incluye de 5 a 9 parámetros, separados por el símbolo "/".
Parámetros incluidos en la composición de seToken
En la tabla a continuación se enumeran los parámetros que se pueden usar en la cadena seToken. Estos parámetros deben incluirse en la cadena en secuencia estricta según esta tabla.
| Obligatorio | Nombre | Tipo | Descripción |
|---|---|---|---|
| Sí | timestamp |
String | Fecha de la solicitud según ISO 8601:2004 en formato YYYY-MM-DDThh:mm:ss±hh:mm. |
| Sí | uuid |
String [1..32] | Identificador en el estándar UUID formado de acuerdo con el documento |
| Condición | PAN |
Integer [1..19] | Número de tarjeta para el débito de fondos. La solicitud debe incluir PAN o bindingId. |
| Obligatorio para algunos métodos. La lista de parámetros obligatorios de seToken, usados en un método determinado, se enumera en la descripción del método correspondiente en Referencia API. | |||
| Condición (ver descripción) | CVV |
String [3] | Código de verificación de la tarjeta. Este parámetro es obligatorio si para el comerciante no está seleccionado el permiso Puede procesar el pago sin confirmación CVC. Se permiten solo dígitos. |
| Condición | EXPDATE |
Integer [6] | Fecha de vencimiento de la tarjeta en el siguiente formato: YYYYMM, donde YYYY - año, MM - mes. |
| Obligatorio para algunos métodos. La lista de parámetros obligatorios de seToken, usados en un método determinado, se enumera en la descripción del método correspondiente en Referencia API. | |||
| Condición | mdOrder |
String [1..36] | Identificador del pedido para el pago con criptograma. |
| Obligatorio para algunos métodos. La lista de parámetros obligatorios de seToken, usados en un método determinado, se enumera en la descripción del método correspondiente en Referencia API. | |||
| Condición | bindingId |
String [1..255] | Identificador de una vinculación ya existente (identificador de tarjeta tokenizada por el gateway). Solo puede utilizarse si el comerciante tiene permiso para trabajar con vinculaciones. La solicitud debe incluir PAN o bindingId. |
| Obligatorio para algunos métodos. La lista de parámetros obligatorios de seToken, usados en un método determinado, se enumera en la descripción del método correspondiente en Referencia API. | |||
| No | cardholder |
String | Nombre del titular de la tarjeta en letras latinas. |
| No | registeredFrom |
String | SDK que se utilizó para registrar el pedido. Valores permitidos: MSDK_CORE, MSDK_FORMS, MSDK_PAYMENT, WSDK_CORE, WSDK_PAYMENT
|
Ejemplo de cadena generada:
2020-09-15T10:00:33+03:00/9bb1501a-1547-425a-a022-1db5ff8f72c4/5555555555555599/123/202412
donde:
- tiempo correspondiente 2020-09-15T10:00:33+03:00
- uuid
- PAN - 5555555555555599
- CVV - 123
- vigencia de la tarjeta diciembre de 2024
Algoritmo de creación de solicitud de pago
-
Envíe solicitud de clave
Para esto, abra el enlace https://dev.bpcbt.com/payment/se/keys.do.
Como resultado obtenemos una clave en el siguiente formato:
{ "keys": [ { "keyValue": "-----BEGIN PUBLIC KEY-----{PUBLIC KEY BODY}-----END PUBLIC KEY-----", "protocolVersion": "RSA", "keyExpiration": 1893456000000 }, { "keyValue": "-----BEGIN PUBLIC KEY-----{PUBLIC KEY BODY}-----END PUBLIC KEY-----", "protocolVersion": "RSA", "keyExpiration": 1924992000000 } ] }Donde:
-
keyValue- representación en cadena de la clave pública RSA 2048 -
keyExpiration- fecha planificada de vencimiento de la clave, fecha en segundos según el estándar de tiempo UNIX -
protocolVersion- versión del algoritmo de cifrado
-
-
Registre el pedido
-
Genere la cadena que necesita ser cifrada
En nuestro ejemplo anterior el valor
orderId=b94eac90-e487-796a-8ed2-cf5a00096352está indicado comoUUID. Obtenemos la cadena:2020-09-15T10:00:33+03:00/9bb1501a-1547-425a-a022-1db5ff8f72c4/5555555555555599/123/202412 -
Cifre la cadena obtenida
La cadena obtenida debe ser cifrada utilizando el algoritmo de cifrado RSA "RSA/None/PKCS1Padding" con una longitud de clave de 2048.
Ejemplo del resultado del cifrado:
Cfqv4t2XHBb9k8ixM7jxxCvziETS4koa3bV3F0QUvGVY47nKyMBqjGzV/rvmCAw6KzwoBDzeLsqwBLEzvQhaF627ZS0OJnhttBi4fL3/h/sBSwFtxr3s+oVUeoE3e4SNVUq9vciinOyNCIKqfpeQya+pOUYt3MgrtSeu66Ar12XEj4k6lecZN7Ffquj9RqhZsYhP63np5VCxJR90cNQG+TMWIFU6rqxLAe4gzCJtcXNrPT8aDOI201Zwd+e4K1YnrI7dZGlibO7MVMPB9m7NJaJTHko/MiJNWumAjS4yDDovLraIKMwOFTvAhqXsHslthpcUO0GZXEIaDRgERD7+jw==Antes del envío en la solicitud REST, es necesario aplicar codificación URL a la cadena cifrada:
Cfqv4t2XHBb9k8ixM7jxxCvziETS4koa3bV3F0QUvGVY47nKyMBqjGzV%2FrvmCAw6KzwoBDzeLsqwBLEzvQhaF627ZS0OJnhttBi4fL3%2Fh%2FsBSwFtxr3s%2BoVUeoE3e4SNVUq9vciinOyNCIKqfpeQya%2BpOUYt3MgrtSeu66Ar12XEj4k6lecZN7Ffquj9RqhZsYhP63np5VCxJR90cNQG%2BTMWIFU6rqxLAe4gzCJtcXNrPT8aDOI201Zwd%2Be4K1YnrI7dZGlibO7MVMPB9m7NJaJTHko%2FMiJNWumAjS4yDDovLraIKMwOFTvAhqXsHslthpcUO0GZXEIaDRgERD7%2Bjw%3D%3D -
Envíe la solicitud de pago con seToken.
Ver ejemplo de solicitud de pago utilizando seToken aquí.