Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IMPLEMENTACIÓN
DATAWEB (BOTÓN DE PAGOS)
ANDRÉS FLORES / MARIO TORRES
2020
Fecha Versión Descripción Autor
2017-10-06 1.0 Documento inicial Andrés Flores
Mario Torres
2017-11-16 2.0 Anulaciones y Diferidos Andrés Flores
2017-11-23 2.1 Intereses y meses de gracia Andrés Flores
2018-01-23 2.2 Campos adicionales en las Andrés Flores
transacciones de compras y
anulaciones en las opciones
avanzadas
2018-02-27 2.3 Campos adicionales en las Andrés Flores
transacciones de compras para
control de riesgos
2018-04-24 2.4 Campo adicional para control de Andrés Flores
riesgos
2018-08-08 2.5 Actualización y mejoras en el Andrés Flores
contenido del documento
2019-02-14 2.5.3 Se agregó código de error de Andrés Flores
reglas antifraude
2019-03-22 2.5.4 Validación campo cardholder vacío Andrés Flores
2019-05-09 2.5.5 Requisito técnico actualizado Andrés Flores
2019-05-13 2.6 Modulo Oneclickcheckout Andrés Flores
2019-06-25 2.7 Se incluye más detalle en el Andrés Flores
proceso de integración, además de
un estimado de tiempo de
desarrollo de acuerdo a las etapas
2019-08-19 2.8 Se incluye el módulo de Ruth Medina /
verificador de transacción Andrés Flores
30-09-19 2.8.1 Recomendaciones en uso de Andrés Flores
diferidos
14-10-19 2.9 Nuevo método de autenticación Andrés Flores
28-10-19 2.9.1 Se agrega documentación sobre la Andrés Flores /
eliminación de token Ruth Medina
30-11-19 2.9.2 Mejoras en la autenticación del Andrés Flores /
canal del botón de pagos. Uso de Ruth Medina
autorizador y eliminación de
parámetros.
1. Introducción .......................................................................................................................... 7
2. DATAWEB (COPYandPAY)...................................................................................................... 7
2.1 Componentes ...................................................................................................................... 7
2.2 Tecnologías.......................................................................................................................... 7
2.3 Certificados.......................................................................................................................... 7
2.4 Sobre los ejemplos .............................................................................................................. 8
2.5 Sobre los Plugins ................................................................................................................. 8
2.6 Sobre las transacciones y monto......................................................................................... 8
2.7 Esquema de Seguridad ........................................................................................................ 8
3. Fases de Integración.............................................................................................................. 8
3.1 Fase Prueba Inicial ......................................................................................................... 8
3.1.1 Identificador de Pago (Checkout id) ...................................................................... 9
3.1.2 Formulario de Pago ............................................................................................. 10
3.1.3 Procesamiento de la compra............................................................................... 12
3.2 Fase Prueba Final ........................................................................................................ 13
3.2.1 Nuevos campos, identificador de Pago (Checkout id) ............................................... 13
3.2.1.1 Nombre ............................................................................................................... 13
3.2.1.2 Segundo Nombre ................................................................................................ 14
3.2.1.3 Apellido ............................................................................................................... 14
3.2.1.4 Dirección IP.......................................................................................................... 14
3.2.1.5 Identificador del Cliente en el Comercio ............................................................. 14
3.2.1.6 Número de Transacción ...................................................................................... 14
3.2.1.7 Dirección de Correo Electrónico.......................................................................... 14
3.2.1.8 Tipo de Documento de Identificación del Usuario .............................................. 14
3.2.1.9 Documento de Identificación del Usuario........................................................... 15
3.2.1.10 Datos del producto ............................................................................................ 15
3.2.1.10.1 Nombre ...................................................................................................... 15
3.2.1.10.2 Descripción ................................................................................................. 15
3.2.1.10.3 Precio.......................................................................................................... 15
3.2.1.10.4 Cantidad ..................................................................................................... 15
3.2.1.11. Teléfono del cliente .......................................................................................... 15
3.2.1.12 Dirección de entrega ......................................................................................... 15
3.2.1.13 Dirección del Cliente ......................................................................................... 16
3.2.1.14 País de entrega .................................................................................................. 16
3.2.1.15 País del Cliente .................................................................................................. 16
3.2.1.16 Modo de Prueba................................................................................................ 16
3.2.1.17 Parámetros Personalizados ............................................................................... 16
3.2.1.17.1 Custom Parameters .................................................................................... 19
3.2.1.18 Risk Parameters ................................................................................................ 19
4. Código de Mensajes. ........................................................................................................... 22
5. Anulaciones ......................................................................................................................... 24
5.1 Campos obtenidos de la respuesta ............................................................................. 25
5.2 Campos obtenidos del usuario (Cliente) ..................................................................... 26
5.3 Función de eliminación ............................................................................................... 27
6. Opciones Avanzadas............................................................................................................ 28
6.1 Diferidos ...................................................................................................................... 28
6.2 Intereses ...................................................................................................................... 31
6.3 Meses de gracia ........................................................................................................... 31
6.4 Formulario de Opciones Avanzadas ............................................................................ 32
6.4.1 Anulaciones en Opciones Avanzadas .................................................................. 34
6.5 Validación campos vacíos.................................................................................................. 35
7. OneclickCheckout (Pago con un click) ................................................................................. 35
7.1 Preparación del pago (primera compra) ..................................................................... 35
7.2 Eliminación del Token ................................................................................................. 37
8. Otros métodos de integración ............................................................................................ 37
9. Personalización.................................................................................................................... 38
10. Verificador de transacciones ........................................................................................... 38
10.2 Verificar por identificador de la transacción ................................................................... 38
10.2 Verificar por el número de transacción del comercio ................................................. 40
11. Paso a Producción (Cronograma estimado) .................................................................... 40
ANEXOS ....................................................................................................................................... 43
Anexo A.1 Php ......................................................................................................................... 43
Anexo A.2 ................................................................................................................................ 44
Anexo B.1 Java......................................................................................................................... 45
Anexo B.2 ................................................................................................................................ 46
Anexo C.1 C# ........................................................................................................................... 47
Anexo C.2 ................................................................................................................................ 48
Anexo D.1 Python .................................................................................................................... 49
Anexo D.2 ................................................................................................................................ 50
Todo lo expuesto en el documento es lo que se debe integrar en sus portales web, los campos
son mandatorios y el código fuente adjunto es referencial y sirve como guía, si existe algún
problema con la obtención de un dato tienen que comunicarlo vía correo electrónico a
aflores@datafast.com.ec
2. DATAWEB (COPYandPAY)
Es una solución de forma de pago que la hace segura y sencilla de integrar en los diferentes
portales e-commerce debido a su fácil integración, de aquí en adelante se lo describirá como
botón de pagos.
2.1 Componentes
Al ser una solución web, su estructura está definida por las tecnologías:
➢ HTML
➢ CSS
➢ JavaScript
2.2 Tecnologías
El widget por ser un componente que va con la vanguardia tecnológica es adaptable a
los lenguajes de programación modernos tales como:
➢ Python
➢ Java
➢ Php
➢ Groovy
➢ VB.Net
➢ Ruby
➢ Node Js
➢ C#
➢ Scala
2.3 Certificados
El botón de pagos utiliza certificado TLS 1.2 con encriptación SHA-2 (256 bits) por lo
que su sitio web debe poseer el mismo tanto en ambientes de pruebas y producción.
3. Fases de Integración
Para la integración de la solución se ha dividido en dos etapas de pruebas antes del
paso al ambiente de producción.
➢ entityId (8a829418533cf31d01533d06f2ee06fa)
➢ amount (Monto total obtenido de la transacción) respetando los
dos dígitos para decimales.
➢ currency (El valor es USD)
➢ paymentType (Para transacciones de compras va DB)
➢ Authorization:Bearer (
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ
3RjIyUUVOWA== )
➢ authentication.entityId
➢ Authorization:Bearer
3.2.1.1 Nombre
Este campo se refiere al nombre del usuario que está
realizando la transacción, el mismo será asignado a un campo
disponible de la plataforma.
3.2.1.3 Apellido
Este campo se refiere al apellido del usuario que está
realizando la transacción, el mismo será asignado a un campo
disponible de la plataforma.
3.2.1.4 Dirección IP
Este campo se refiere a la dirección ip del equipo desde donde
el usuario está realizando la transacción, el mismo será
asignado a un campo disponible de la plataforma.
3.2.1.10.1 Nombre
Nombre del producto, no se acepta el &
3.2.1.10.2 Descripción
Descripción del producto.
3.2.1.10.3 Precio
Precio del producto
3.2.1.10.4 Cantidad
Cantidad del producto
testMode
004012000000000012052012000000000200
052012000000000200004012000000000012
0081
Ejemplo final:
00810030070103910004012000000000012051008179131010
52012000000000200053012000000000100
3.2.1.17.1 Custom Parameters
Finalmente el parámetro que se requiere es el
denominado customParameters el cual necesita
como clave dos valores concatenados, esto son el
identificador del comercio (MID=1000000505) y el
identificador del terminal (TID= PD100406),
quedando finalmente construido el parámetro de la
siguiente manera:
customParameters[1000000505_PD100406]
Luego tendremos.
customParameters[1000000505_PD100406]=
00810030070103910004012000000000012051
00817913101052012000000000200053012000
000000100
risk.parameters[USER_DATA2]
Ejemplo: “&risk.parameters[USER_DATA2]=MiComercio”
Campo Descripción
paymentType DB
amount El mismo monto de la transacción
aprobada
currency USD
autorization Campo código de autorización. Ejm:
000093.
Este dato se lo obtiene del campo del
JSON [AuthCode]
Mes de expiración Mes de expiración de la T.C. ingresado
por el formulario [expiryMonth]
Año de expiración Año de expiración de la T.C. ingresado
por el formulario [expiryYear]
Número de referencia Este dato se lo obtiene del campo del
JSON [ReferenceNbr].
Ej.: 170926_000071
Donde el 000071 es el número de
referencia y el otro componente
170926 en el número de lote
custom_parameter MID_TID
custom_value Valor inicial del customParameters
4. Código de Mensajes.
El listado a continuación muestra los códigos de respuestas emitidos por el switch
transaccional. La descripción de los códigos debe ser personalizados para una mejor
comprensión por parte del cliente, es decir usted puede cambiar la descripción que le
llega como respuesta en el JSON para mostrarlo de mejor manera al usuario. De
manera general los códigos que empiezan por 800 son debido a un rechazo por la
entidad bancaria.
5. Anulaciones
Cuando Datafast aprueba una transacción de compra retorna hacia el comercio la
siguiente información. Figuras 11a, 11b, 11c.
Mandatorios
Código de autorización [AUTHCODE]: 000093
Número de referencia: 000071 (Dato parseado)
Identificador de la transacción [ID]: 8a82944a5ebed5f8015ebefea94142b9
customParameters[1000000505_PD100406]:
008100300701039100040120000000000120510081791310105201200000000020
0053012000000000100
No mandatorios
Numero de lote: 170926 (Dato parseado)
Código de respuesta: 00 (Dato parseado)
Código del adquirente: 04MI (Dato parseado)
Estos campos deben ser almacenados en alguna tabla de su base de datos que
definan, así como otros datos que vienen en la trama de respuesta. Cabe recalcar
que por normas PCI ni el comercio ni Datafast puede almacenar datos de tarjetas
de crédito.
6. Opciones Avanzadas
Esta sección describirá como utilizar las opciones de diferidos, intereses y meses de
gracia, para esto deben incluir la librería JQuery, por ejemplo:
6.1 Diferidos
Para realizar diferidos se debe agregar código javascript en la misma página o sección
en donde se invoca el formulario de pago, en el ejemplo a continuación se lo agrega de
forma estática, pero se recomienda que esto sea dinámico.
Código:
<script type="text/javascript">
var wpwlOptions = {
onReady: function() {
'<select name="recurring.numberOfInstallments"><option
value="0">0</option><option value="3">3'+
'</option><option value="6">6</option><option
value="9">9</option></select>' +
'</div>';
$('form.wpwl-form-card').find('.wpwl-
button').before(numberOfInstallmentsHtml);
} } </script>
Muy importante que el nombre (atributo name) del elemento HTML (select) sea
recurring.numberOfInstallments debido a que es un campo válido y reconocido por la
plataforma de pago, cualquier cambio de este nombre no se garantiza el correcto
funcionamiento.
'<select name="customParameters[SHOPPER_interes]"><option
value="0">No</option><option value="1">Si</option></select>' +
'</div>';
$('form.wpwl-form-card').find('.wpwl-button').before(frecuente);
Así como en el caso de los diferidos se debe respetar el nombre (name) del
elemento del formulario, en este caso
name="customParameters[SHOPPER_interes]" caso contrario no será
reconocido, adicional se debe respetar el valor del atributo “value” que debe
ser 1 cuando la opción elegida es SI y 0 cuando es NO
'<select name="customParameters[SHOPPER_gracia]"><option
value="0">No</option><option value="1">Si</option></select>' +
'</div>';
$('form.wpwl-form-card').find('.wpwl-button').before(gracia);
Así como en los anteriores casos se debe respetar el nombre (name) del
elemento del formulario, en este caso
name="customParameters[SHOPPER_gracia]" caso contrario no será
reconocido, adicional se debe aplicar el valor del atributo “value” que debe ser
1 cuando la opción elegida es SI y 0 cuando es NO
Figura 20. Respuesta Json de la opción meses de gracia, en este caso no aplica
Figura 21. Formulario con las opciones avanzadas agregadas, en este caso la
combinación que se observa se comporta como una transacción corriente ya que no se ha
elegido ninguna opción
Cuando se realiza el pago con las opciones avanzadas obtendremos el
siguiente JSON de respuesta.
Figura 24. Función de anulación en PHP de las opciones avanzadas donde se incluyen
los campos
6.5 Validación campos vacíos
Dentro del formulario del botón de pagos se pueden validar por ejemplo que el
campo cardholder no este vacío para evitar transacciones rechazadas por el
banco renombrado el método onBeforeSubmitCard.
Figura 25. Código para validación del campo cardholder (Nombre del dueño de la
tarjeta).
Figura 26. Código para activar la captura (tokenización) de los datos de la tarjeta del cliente.
Figura 27. Formulario incluyendo la opción de captura de datos.
En la segunda compra, de existir tokens asociados a ese cliente entonces usted los
agregará a la primera función request() usando el parámetro registrations de la
siguiente manera.
®istrations[0].id= 8ac7a49f6ab04d18016ab2067a2731b2
®istrations[1].id= 8ac7a4a06ab05883016ab2067d3841d0
Si desea comprobar que el token está eliminado puede intentar realizar una
transacción con dicho token y obtendrán el siguiente mensaje.
Esta modalidad debe ser validada por Datafast y las entidades financieras involucradas.
9. Personalización
El botón de pagos puede ser personalizado en su apariencia (CSS), solo basta conocer
el nombre de las clases asociadas actualmente a los elementos. Para adicional
información se debe solicitar a Datafast.
Para validaciones que involucren JavaScript seguir la referencia del apartado 6.5
Figura 34. Muestra parcial del JSON de respuesta donde encontrarán datos importantes
Figura 36. Función para verificar y obtener si una transacción fue procesada (aceptada/rechazada) mediante el
merchantTransactionId
function request() {
$url = "https://test.oppwa.com/v1/checkouts";
$data = "entityId=8a829418533cf31d01533d06f2ee06fa" .
"&amount=92.00" .
"¤cy=USD" .
"&paymentType=DB";
$ch = curl_init();
'Authorization:Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA=='));
$responseData = curl_exec($ch);
if(curl_errno($ch)) {
return curl_error($ch);
curl_close($ch);
return $responseData;
}
Anexo A.2
PASO 3. Código básico en PHP, función de comprobación del estado de la transacción.
Previamente ya se ha obtenido el parámetro $resourcePath basado en la URL en el atributo
action del tag FORM
function request() {
$url = "https://oppwa.com".$resourcePath;
$url .= "?entityId=".$entityId;
$ch = curl_init();
'Authorization:Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA=='));
$responseData = curl_exec($ch);
if(curl_errno($ch)) {
return curl_error($ch);
curl_close($ch);
return $responseData;
}
Anexo B.1 Java
Paso 1. Código básico en lenguaje JAVA, función para obtener el checkoutId
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA==");
conn.setDoInput(true);
conn.setDoOutput(true);
+ "entityId=8a829418533cf31d01533d06f2ee06fa"
+ "&amount=92.00"
+ "¤cy=USD"
+ "&paymentType=DB";
wr.writeBytes(data);
wr.flush();
wr.close();
InputStream is;
else is = conn.getInputStream();
return IOUtils.toString(is);
}
Anexo B.2
PASO 3. Código básico en JAVA, función de comprobación del estado de la transacción.
Previamente ya se ha obtenido el parámetro String resourcePath basado en la URL en el
atributo action del tag FORM
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA==");
InputStream is;
else is = conn.getInputStream();
return IOUtils.toString(is);
}
Anexo C.1 C#
Paso 1. Código básico en lenguaje C#, función para obtener el checkoutId
"&amount=92.00" +
"¤cy=USD" +
"&paymentType=DB";
request.Method = "POST";
request.Headers["Authorization"] = "Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA==";
request.ContentType = "application/x-www-form-urlencoded";
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
reader.Close();
dataStream.Close();
return responseData;
}
Anexo C.2
PASO 3. Código básico en C#, función de comprobación del estado de la transacción.
Previamente ya se ha obtenido el parámetro String resourcePath basado en la URL en el
atributo action del tag FORM
string data="entityId=8a829418533cf31d01533d06f2ee06fa";
request.Method = "GET";
request.Headers["Authorization"] = "Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA==";
reader.Close();
dataStream.Close();
return responseData;
}
Anexo D.1 Python
Paso 1. Código básico en lenguaje Python, función para obtener el checkoutId
def request():
url = "https://test.oppwa.com/v1/checkouts"
data = {
'entityId' : '8a829418533cf31d01533d06f2ee06fa',
'amount' : '92.00',
'currency' : 'USD',
'paymentType' : 'DB'
try:
opener = urllib2.build_opener(urllib2.HTTPHandler)
request.add_header('Authorization', 'Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA==')
response = opener.open(request)
return json.loads(response.read());
except urllib2.HTTPError, e:
return e.code;
Anexo D.2
PASO 3. Código básico en Python, función de comprobación del estado de la transacción.
Previamente ya se ha obtenido el parámetro String resourcePath basado en la URL en el
atributo action del tag FORM
def request():
url = "https://test.oppwa.com/v1/checkouts/{id}/payment"
url += '?entityId=8a829418533cf31d01533d06f2ee06fa'
try:
opener = urllib2.build_opener(urllib2.HTTPHandler)
request.add_header('Authorization', 'Bearer
OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh8WHQ3RjIyUUVOWA==')
response = opener.open(request)
return json.loads(response.read());
except urllib2.HTTPError, e:
return e.code;