INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y...

23
Información Técnica sobre Comercio Electrónico Visa CheckOut Versión Nº: 2 Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú. Página 1 de 23 17/02/2016 INFORMACIÓN TÉCNICA SOBRE COMERCIO ELECTRÓNICO VISA CHECKOUT

Transcript of INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y...

Page 1: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 1 de 23 17/02/2016

INFORMACIÓN TÉCNICA

SOBRE

COMERCIO ELECTRÓNICO

VISA CHECKOUT

Page 2: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 2 de 23 17/02/2016

INDICE

1. OBJETIVO ............................................................................................................................. 3

2. CONFIGURACIÓN DE DEVICE FINGERPRINT EN LA PÁGINA WEB DEL COMERCIO . 3

1.1 DATOS PARA LA INTEGRACIÓN .................................................................................... 3

1.2 INCLUIR FUNCIÓN DE CAPTURA DE DEVICE FINGERPRINT EN LA PÁGINA WEB 3

1.3 PROCESO DE INVOCACIÓN............................................................................................ 4

2 PROCESO DE CONFIGURACIÓN DE VISA CHECKOUT .................................................. 5

2.1 DATOS PARA LA INTEGRACIÓN .................................................................................... 5

2.2 INCLUIR BOTÓN DE VISA CHECKOUT EN LA PÁGINA. .............................................. 5

2.3 PREVENCIÓN CLICKJACKING ....................................................................................... 6

2.4 CONTROLAR LAS OPERACIONES DE VISA CHECKOUT LIGHTBOX ........................ 6

2.3.1. MANEJADOR DE EVENTOS V.INIT ............................................................................. 6

2.3.2. MANEJADOR DE EVENTOS V.ON ............................................................................... 8

2.5 MOSTRAR EL RESUMEN DE VISA CHECKOUT (DESENCRIPTAR) .......................... 10

2.5.1 DESENCRIPTAR .......................................................................................................... 10

2.5.2 MOSTRAR RESUMEN EN SU PÁGINA ...................................................................... 10

3 PROCESO DE AUTORIZACIÓN......................................................................................... 15

3.1 WEB SERVICE PARA TRANSACCIONES CON VISA CHECKOUT ............................ 15

3.2 MOSTRAR EL RESULTADO DE LA TRANSACCIÓN ................................................... 18

4 ANEXO 1 - EJEMPLO DE DESENCRIPTADO................................................................... 19

Page 3: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 3 de 23 17/02/2016

1. Objetivo

Este documento tiene como objetivo describir los pasos a seguir por un comercio para la integración a Visa CheckOut, los cuales son:

1. Configuración de Device Fingerprint en la página web del comercio. 2. Configuración botón Visa CheckOut 3. Proceso de Autorización

Visa CheckOut es flexible en su forma de integrar, este documento muestra una forma resumida de este proceso, además de un mínimo esfuerzo requerido. Para acceder a información adicional deberá ponerse en contacto con el equipo de Visanet.

2. Configuración de Device Fingerprint en la página web del comercio

El Device Fingerprint permite recolectar información del dispositivo desde donde se está realizando el pago para la realización del análisis de prevención de fraude. A continuación describimos como se realizará la configuración de Device Fingerprint, para Visa CheckOut.

1.1 Datos para la integración

Utilizar la librería java Script [prd/dev]_dfp.js para controlar la operativa de Device Fingerprint en la página web. Existe una versión de integración y otra de producción:

Ambiente Archivo

Integración dev_dfp.js

Producción prd_dfp.js Ejemplo: <script src="prd_dfp.js" > </script> // archivo JavaScript

1.2 Incluir función de captura de Device Fingerprint en la página web

Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio cuando se registra en Comercio

Electrónico. 2. uuid: Identificador único que debe generar el comercio para cada transacción. Este valor

también se utilizará en el proceso de autorización. 3. numOrden: Número de orden del pedido de compra. Este valor también se utilizará en el

proceso de autorización. 4. cliente: IP del cliente (tarjetahabiente) que realiza la transacción pago.

Page 4: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 4 de 23 17/02/2016

<script type="text/javascript">

function capturaDFP(){

var codComercio= "123456789"; //Código del comercio asignado por VisaNet. var uuid= "567"; //Identificador Único de la Transacción var numOrden= "123456"; //Número de Orden del Pedido var ipCliente= "192.168.1.1"; //IP del Cliente que accede a la página del comercio.

initDFP(uuid, numOrden, ipCliente, codComercio); }

</script>

Luego colocar el llamado al método “initDFP” en el evento onload de la página de pago. A continuación un ejemplo de invocación <body onload=” capturaDFP()” >

1.3 Proceso de Invocación

El comercio debe seguir los siguientes pasos para invocar al Device Fingerprint.

1. Capturar el IP del cliente. 2. Generar el UUID. 3. Generar el numOrden. 4. Invocar la función “initDFP” enviando los parámetros indicados, en el evento onload que se

encuentra en la misma página de pago.

Page 5: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 5 de 23 17/02/2016

2 Proceso de configuración de Visa CheckOut

El siguiente paso para la integración es la configuración de Visa CheckOut, para ello debe añadir el botón de Visa CheckOut a su página web e incluir el JavaScript necesario para manejar los eventos asociados a este botón. 2.1 Datos para la Integración

Debe utilizar la librería java Script sdk.js para controlar la operativa de VCO en la página web. Existe una versión de prueba y otra en de producción:

Ambiente URL

Integración https://sandbox-assets.secure.checkout.visa.com/ checkout-widget/resources/js/integration/v1/sdk.js

Producción https://assets.secure.checkout.visa.com/ checkout-widget/resources/js/integration/v1/sdk.js

Ejemplo: <script type="text/javascript" src="https://sandbox-assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js"> </script>

2.2 Incluir botón de Visa CheckOut en la página.

Debe usar la clase v-button img para invocar al botón Visa Checkout, el cual inicia el proceso de pago cuando el cliente da click.

Ambiente URL

Integración https://sandbox.secure.checkout.visa.com/wallet-services-web/xo/button.png

Producción https://secure.checkout.visa.com/wallet-services-web/xo/button.png

Ejemplo: <body>

... <img alt="..." class="v-button" role="button" src= "https://sandbox.secure.checkout.visa.com/wallet-services-web/xo/button.png?..." /> ... </body>

Page 6: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 6 de 23 17/02/2016

2.3 Prevención Clickjacking

Para la prevención de ataques usando clickjacking, debe incluir en el header de cada página que aloje un botón de Visa CheckOut las siguientes líneas de código.

<head>

<style id="antiClickjack">body{display:none;}</style> <script type="text/javascript"> if (self === top) { var antiClickjack = document.getElementById("antiClickjack"); antiClickjack.parentNode.removeChild(antiClickjack); } else { top.location = self.location; } </script>

</head>

Este ataque ocurre si un código malicioso está oculto detrás de botones originales o en otros objetos a los cuales un usuario pueda hacerle click dentro de la página web. 2.4 Controlar las operaciones de Visa CheckOut lightbox

Deberá definir una función onVisaCheckoutReady, que incluya el manejador para los eventos de inicialización y compra. Esta función incluye 2 tipos de eventos:

Manejador de Evento Obligatorio Descripción

V.init Si Manejador de evento para la inicialización. Especifica los valores para la inicialización.

V.on Si Manejador de evento para la compra con Visa CheckOut. Especifica las acciones a tomar en los siguientes eventos de Visa CheckOut.

payment.success

payment.cancel

payment.error

2.3.1. Manejador de eventos V.init

El evento V.init se utiliza para especificar un objeto JSON que contiene los valores de inicialización de la librería de Visa CheckOut JavaScript. Debe especificar los valores de estas propiedades:

Propiedad Longitud Descripción Formato Obligatorio

apikey 100 Es el API Key que se obtiene cuando cree su cuenta en Visa CheckOut. Usará diferentes llaves: live key y sandbox key.

Alfanumérico

Si

Page 7: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 7 de 23 17/02/2016

Parámetros

Propiedad Longitud Descripción Formato Obligatorio

locale Indica cómo se mostrará el texto en el lightbox de Visa CheckOut. Por defecto Visa CheckOut obtiene los datos de la configuración del browser para determinar la ubicación

en_PE - Peru, English

Si

countryCode Indica cómo se mostrará el texto en el lightbox de Visa CheckOut. Visa CheckOut determinará el país por medio de la dirección IP

PE No

logoUrl 256 URL que indica el logo a ser mostrado en el Visa CheckOut lightbox. Por defecto se muestra el logo de Visa CheckOut

HTTPS URL SI

displayName 100 Nombre del comercio, nombre de la compañía, el cual aparece como título de imagen

String No

websiteUrl URL del comercio No

shipping Propiedades: acceptedRegions: Limita la región de entrega. collectShipping: Para obtener la dirección de entrega del cliente

A list of ISO-3166-1 alpha-2 standard codes, such as US or CA. Format: uno de los siguientes valores • true – obtener la dirección del cliente (defecto) • false – La dirección de entrega no es requerida.

Si

payment Propiedades cardBrands: Visa como marca de tarjeta aceptada.

VISA

SI

dataLevel Nivel de información del cliente y del pago que la respuesta del evento payment.success debe incluir.

SUMMARY Si

Page 8: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 8 de 23 17/02/2016

2.3.2. Manejador de eventos V.on

El evento V.on se utiliza para especificar un objeto JSON que contiene los valores para la compra con Visa CheckOut JavaScript. Maneja los siguientes eventos:

payment.success

payment.cancel

payment.error

1. payment.success

La respuesta asociada con el evento payment.success (respuesta de compra satisfactoria), retorna la siguiente información:

Propiedad Longitud Descripción Formato Obligatorio

callID 48 ID de la transacción de Visa CheckOut asociada con el requerimiento de pago. Por defecto el callId no expira. Puede solicitar la expiración por un periodo determinado en días, pero debe ser mayor al timeout de la sesión del comercio.

Alfanumérico

Si

responseStatus

Estado de la respuesta Propiedades

severity: severidad del error

message: descripción del error

ERROR, WARNING alfanumérico

si

encKey 128 Llave encriptada a ser usada para desencriptar el encPaymentData. Debe usar su shared secret para desencriptar esta llave.

Alfanumérico

si

encPaymentData

Contiene los datos del cliente y del pago encriptados que deben ser usados para procesar la transacción. Debe desencriptar este valor primero, revelando el valor encKey, luego use esta llave para desencriptar este valor.

si

externalClientId

100 ID del comercio, del comercio que recibe el pago.

Alfanumérico

Si

partialShippingAddress

2 128

Información parcial de envío del cliente

Propiedades countryCode: código del país donde la compra debe ser enviada

Alfanumérico Alfanumérico

Si Si

Page 9: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 9 de 23 17/02/2016

Propiedad Longitud Descripción Formato Obligatorio

postalCode: de la ubicación donde la compra debe ser enviada, usada para el cálculo del costo de envío.

2. payment.cancel

La respuesta asociada con el evento payment.cancel retorna la siguiente información:

Propiedad Longitud Descripción Formato Obligatorio

callID 48 ID de la transacción de Visa que identifica a la solicitud de cancelación de pago

Alfanumérico

Si

3. payment.error

La respuesta asociada con el evento payment.error retorna la siguiente información:

Propiedad Descripción Formato

status Estado de respuesta HTTPS Numérico

Code Sub código interno numérico

severity Severidad del error ERROR, WARNING

message Descripción del error Alfanumérico

Ejemplo completo: <head> <script type="text/javascript"> function onVisaCheckoutReady() {

V.init({ apikey: "...", sourceId: "Merchant Defined Source ID", settings: {

locale: "en_US", countryCode: "US", displayName: "...Corp", logoUrl: "www.Some_Image_URL.gif", websiteUrl: "www....Corp.com", customerSupportUrl: "www....Corp.support.com", shipping: {

acceptedRegions: ["US", "CA"], collectShipping: "true" },

payment: { cardBrands: [

"VISA", "MASTERCARD" ],

acceptCanadianVisaDebit: "true", billingCountries:["US","CA"] },

Page 10: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 10 de 23 17/02/2016

review: { message: "Merchant defined message", buttonAction: "Continue"

}, dataLevel: "SUMMARY"

}, paymentRequest: {

merchantRequestId: "Merchant defined request ID", currencyCode: "USD", subtotal: "10.00", shippingHandling: "2.00", tax: "2.00", discount: "1.00", giftWrap: "2.00", misc: "1.00", total: "16.00", description: "Megacorp Product", orderId: "Merchant defined order ID", promoCode: "Merchant defined promo code", customData: {

"nvPair": [ { "name": "customName1", "value": "customValue1" }, { "name": "customName2", "value": "customValue2" }

] }

} }

); V.on("payment.success", function(payment){document.write(JSON.stringify(payment)); }); V.on("payment.cancel", function (payment) { ... }); V.on("payment.error", function (payment, error) { ... });

} </script> </head> <body> <img alt="Visa Checkout" class="v-button" role="button"

src="https://sandbox.secure.checkout.visa.com/wallet-services-web/xo/button.png? cardBrands=VISA,MASTERCARD,DISCOVER,AMEX"/>

<script type="text/javascript" src="https://sandbox-assets.secure.checkout.visa.com/ checkout-widget/resources/js/integration/v1/sdk.js">

</script> </body> </html>

2.5 Mostrar el resumen de Visa CheckOut (Desencriptar)

Luego de recibir la respuesta de Visa CheckOut, deberá retornar a la página web, desencriptar la información y mostrar un resumen con los datos de la tarjeta que seleccionó el cliente en el lightbox de VISA Checkout. Este paso es importante para proporcionar seguridad de la elección al tarjetahabiente.

2.5.1 Desencriptar

Para desencriptar puede utilizar la información del Anexo 1 – Ejemplo de desencriptado.

2.5.2 Mostrar Resumen en su página

Page 11: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 11 de 23 17/02/2016

En esta sección deberá mostrarse la información del cliente, la cual retorna en un formato JSON. Debe considerar usar librerías estándar para analizar sintácticamente objetos JSON. En las siguientes imágenes se muestra un ejemplo del resumen que deberá considerar para confirmar la tarjeta seleccionada por el cliente (imagen2), luego de seleccionarla en Visa CheckOut (imagen1).

Imagen1. Selección de tarjeta en Visa Checkout

Page 12: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 12 de 23 17/02/2016

Imagen2. Confirmación de tarjeta

La siguiente información del cliente está disponible, ya sea encriptada en un payload, o como información de resumen de Get Payment Data:

Propiedad longitud Descripción Formato obligatorio

paymentInstrument

Información de la cuenta del cliente (tarjeta), es de contenido variado dependiendo si dataLevel es FULL o SUMMARY Propiedades

id: Identificador interno único relacionado al instrumento de pago.

Alfanumérico

lastFourDigits: 4 últimos número de la tarjeta

Numérico

binSixDigits: 6 primeros dígitos de la tarjeta

Numérico

19

paymentType: Tipo de instrumento de pago Propiedades

cardbrand: marca del instrumento de pago cardtype: tipo de tarjeta

VISA Numérico,

Page 13: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 13 de 23 17/02/2016

Propiedad longitud Descripción Formato obligatorio

36

accountNumber: número de cuenta asociado al instrumento de pago. billingAddress: dirección de facturación asociada con el instrumento de pago. id: Identificador de la dirección

Alfanumérico. .

verificationStatus: Estatus de verificación de la dirección

VERIFIED, NOT_VERIFIED, CONSUMER_OVERRIDE

100

cardArts Propiedades

baseImageFileName: URL del arte de la tarjeta.

Height: Alto del arte en pixeles.

Width: ancho del arte en pixeles

Alfanumerico Número, valores entre 1 y 4096. Número, valores entre 1 y 4096.

Si

256 nameOnCard expirationDate: Fecha de expiración

month

year

Alfanumérico Formato MM (01-12) Formato YYYY

shippingAddress Información de la dirección de envío. Este dato es opcional. Propiedades

36 id: Identificador de la dirección

Alfanumérico

256

personName: Nombre de la persona propietaria de la dirección.

Alfanumérico

140 line1: Primera línea de la dirección

Alfanumérico.

Page 14: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 14 de 23 17/02/2016

Propiedad longitud Descripción Formato obligatorio

140 line2: Segunda línea de la dirección

Alfanumérico.

140 line3: Tercera línea de la dirección

Alfanumérico.

100 city: Ciudad asociada a la dirección Alfanumérico.

100 stateProvinceCode: Estado o provincia asociada a la dirección

Alfanumérico

100 postalcode: Código postal asociado a la dirección (zip code)

Alfanumérico

countryCode: Código de país asociado a la dirección

Page 15: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 15 de 23 17/02/2016

3 Proceso de Autorización

El último paso es el proceso de autorización de la compra, este se realiza mediante la invocación al web Service “WSVISACHECKOUT”, para luego mostrar el resultado de la transacción. 3.1 Web Service para transacciones con Visa CheckOut

El Web Service para transacciones con Visa CheckOut se llama “WSVISACHECKOUT”. Las Características de este Web Service son los siguientes:

1. URL: El Web Service se encuentra publicado en la URL

Ambiente URL

Integración http://qas.multimerchantvisanet.com/WebVisaCheckOut/WSVisacheckOut.asmx

Producción https://www.multimerchantvisanet.com/WebVisaCheckOut/WSVisacheckOut.asmx

2. Información de envío

Método: El Web Service expondrá el método llamado “AutorizarVisaCheckOut”.

Parámetro: Este método recibe un único parámetro “mensajeXML” de tipo String cuyo contenido es un XML.

XML Envío: El XML básico, para el envío de información al WSVisaCheckOut se describe a continuación:

Parámetro Longitud Descripción Formato Obligatorio

CANAL 1 Código de Canal: 3 Numérico SI

PRODUCTO 1 Código Producto: 1 Numérico SI

CODTIENDA 9 Código de Comercio Numérico SI

NUMORDEN 9 Código de Orden Numérico SI

MOUNT 10 Monto (Formato: ##.## - Ejemplo: 10.05)

Decimal SI

CODASOCIADO 15 Código PSP Numérico NO

NOMBREASOCIADO

17 Nombre Comercio Asociado

String NO

MCC 4 Numérico NO

NOMBRE 200 Nombre del Tarjeta Habiente

Alfanumérico

NO

APELLIDO 200 Apellido del Tarjeta Habiente

Alfanumérico

NO

CIUDAD 100 Ciudad del Tarjeta Habiente

Alfanumérico

NO

DIRECCION 100 Dirección de facturación

Alfanumérico

NO

Page 16: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 16 de 23 17/02/2016

1 Ver 1. Integración de Device Fingerprint para la integración de Comercio Electrónico

El formato del XML de entrada es el siguiente:

<?xml version="1.0" encoding="UTF-8" ?> <registrar_pedidovco> <parametros> <parametro id="CANAL"></parametro> <parametro id="PRODUCTO"></parametro> <parametro id="CODTIENDA"></parametro> <parametro id="NUMORDEN"></parametro> <parametro id="MOUNT"></parametro> <parametro id="CODASOCIADO"></parametro> <parametro id="NOMBREASOCIADO"></parametro> <parametro id="MCC"></parametro> <parametro id="NOMBRE"></parametro> <parametro id="APELLIDO"></parametro> <parametro id="CIUDAD"></parametro> <parametro id="DIRECCION"></parametro> <parametro id="EMAIL"></parametro> <parametro id="DATO_COMERCIO"></parametro> <parametro id="CALLID"></parametro> <parametro id="CSCCODE"></parametro> </parametros> <parametros_antifraude> <parametro_ant id="DEVICEFINGERPRINTID"></parametro_ant> <parametro_ant id="merchantDefinedData"> <campo id="field3">VCO</campo> </parametro_ant> </parametros_antifraude> </registrar_pedidovco>

3. Información de Respuesta

EMAIL 100 Email del Tarjeta habiente

Alfanumérico

NO

DATO_COMERCIO

100 Valor referencial del comercio

String NO

CALLID 20 Identificador de VisaCheckOut

Numérico SI

CSCCODE 4 Código de seguridad de la tarjeta

Numérico NO

DeviceFingerprintID1

88 Identificador de sesión de la huella digital. La cadena puede contener letras mayúsculas y minúsculas, dígitos y estos Caracteres especiales: guion (-) y subrayado (_). El identificador de sesión debe ser exclusivo para cada orden y comercio.

Alfanumérico

NO

Page 17: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 17 de 23 17/02/2016

Respuesta: La información de respuesta del web Service “WSVisaCheckOut – AutorizarVisaCheckOutResult”, es un dato de tipo String cuyo contenido es un XML.

XML Respuesta: El XML de respuesta del WS VisaCheckOut se describe a continuación:

Parámetro Descripción

RESPUESTA Tiene los siguientes valores: 1: Éxito 2: Error

CODTIENDA Código de la tienda

NUMORDEN Número de orden de la tienda.

CODACCION Código de denegación y aprobación. El Código de aprobación: 000.

PAN Número de tarjeta American Express. Está enmascarado, solamente muestra los 6 primeros dígitos y los 4 últimos.

ECI Electronic Commerce Indicator

COD_AUTORIZA

Código de autorización

ORI_TARJETA Indica origen de tarjeta: N (Tarjeta Nacional); I (Tarjeta Internacional)

NOM_EMISOR Nombre del banco emisor de la tarjeta. Solamente en caso que la tarjeta sea nacional.

DSC_ECI Descripción del campo ECI

RES_AVV Resultado de la validación del AVV

RES_ALPHA Resultado de la validación del Código ALPHA

IMP_AUTORIZADO

Importe autorizado.

MENSAJE Errores durante el proceso o de validación

El formato del XML de Respuesta es el siguiente: <?xml version="1.0" encoding="UTF-8"?> <respuesta_pedido> <pedido id="09090261"> <campo id="CODTIENDA"></campo> <campo id="NUMORDEN"></campo> <campo id="CODACCION"></campo> <campo id="PAN"></campo> <campo id="ECI"></campo> <campo id="COD_AUTORIZA"></campo> <campo id="ORI_TARJETA"></campo> <campo id="NOM_EMISOR"></campo> <campo id="DSC_ECI"></campo> <campo id="RES_CVV2"></campo> <campo id="IMP_AUTORIZADO"></campo> <campo id="ID_UNICO"></campo> <campo id="RESPUESTA"></campo> <campo id="FECHAYHORA_TX"></campo> <campo id="DSC_COD_ACCION"> </campo> <campo id="CANAL"></campo> <campo id="PRODUCTO"></campo> <campo id="DATO_COMERCIO"></campo> <campo id="NROCUOTA"></campo> <campo id="IMPCUOTAAPROX"></campo>

Page 18: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 18 de 23 17/02/2016

</pedido> <mensajes /> </respuesta_pedido>

NOTA: Se debe tener en consideración que estos parámetros son los que se envían a la fecha de redacción de este documento. Siendo tramas XML, se puede incrementar el número de parámetros de respuesta, de acuerdo a las mejoras que se vayan implementando en la pasarela de pagos.

3.2 Mostrar el Resultado de la Transacción

Una vez obtenido el resultado del proceso de pago, el comercio deberá mostrar la pantalla final de respuesta al cliente. La pantalla final de compra debe mostrar la siguiente información:

Número de pedido

Número de tarjeta enmascarada

Fecha y hora del pedido

Importe de la transacción

Moneda

Descripción del producto

Nombre del Comprador

Descripción del código de acción de acuerdo a tabla

Términos y Condiciones (o el link a la página)

Incluir un texto indicando al cliente que debe imprimir y/o guardar el recibo de transacción.

En algunos casos por un tema de reclamos, VisaNet solicitará al establecimiento el envío de una copia de esta pantalla final de compra en un plazo no mayor a 48 horas.

Page 19: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 19 de 23 17/02/2016

4 Anexo 1 - Ejemplo de desencriptado.

Ejemplos para desencriptación utilizando distintos lenguajes de programación:

Java:

private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";

private static final String HASH_ALGORITHM = "SHA-256";

private static final String HMAC_ALGORITHM = "HmacSHA256";

private static final int IV_LENGTH = 16, HMAC_LENGTH = 32;

private static final Charset utf8 = Charset.forName("UTF-8");

private static final Provider bcProvider;

static {

bcProvider = new BouncyCastleProvider();

if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {

Security.addProvider(bcProvider);

}

}

private static byte[] decrypt(byte[] key, byte[] data) throws GeneralSecurityException {

byte[] decodedData = Base64.decode(data);

if (decodedData == null || decodedData.length <= IV_LENGTH) {

throw new RuntimeException("Bad input data.");

}

byte[] hmac = new byte[HMAC_LENGTH];

System.arraycopy(decodedData, 0, hmac, 0, HMAC_LENGTH);

if (!Arrays.equals(hmac,

hmac(key, decodedData, HMAC_LENGTH, decodedData.length - HMAC_LENGTH))) {

throw new RuntimeException("HMAC validation failed.");

}

byte[] iv = new byte[IV_LENGTH];

System.arraycopy(decodedData, HMAC_LENGTH, iv, 0, IV_LENGTH);

Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, bcProvider);

cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(hash(key), "AES"),

new IvParameterSpec(iv));

return cipher.doFinal(decodedData, HMAC_LENGTH + IV_LENGTH,

decodedData.length - HMAC_LENGTH - IV_LENGTH);

}

private static byte[] hash(byte[] key) throws NoSuchAlgorithmException {

MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM);

md.update(key);

return md.digest();

}

private static byte[] hmac(byte[] key, byte[] data, int offset, int length)

throws GeneralSecurityException {

Mac mac = Mac.getInstance(HMAC_ALGORITHM, bcProvider);

mac.init(new SecretKeySpec(key, HMAC_ALGORITHM));

mac.update(data, offset, length);

return mac.doFinal();

}

C#:

using System;

using System.IO;

using System.Security.Cryptography;

using System.Text;

Page 20: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 20 de 23 17/02/2016

class Decrypt {

const int HMAC_LENGTH = 32, IV_LENGTH = 16;

public static String decryptPayload(String key, String wrappedKey, String payload) {

return Encoding.UTF8.GetString(decrypt(decrypt(Encoding.UTF8.GetBytes(key),

Convert.FromBase64String(wrappedKey)), Convert.FromBase64String(payload)));

}

public static byte[] decrypt(byte[] key, byte[] data) {

if (data == null || data.Length <= IV_LENGTH + HMAC_LENGTH) {

throw new ArgumentException("Bad input data", "data");

}

byte[] hmac = new byte[HMAC_LENGTH];

Array.Copy(data, 0, hmac, 0, HMAC_LENGTH);

byte[] iv = new byte[IV_LENGTH];

Array.Copy(data, HMAC_LENGTH, iv, 0, IV_LENGTH);

byte[] payload = new byte[data.Length - HMAC_LENGTH - IV_LENGTH];

Array.Copy(data, HMAC_LENGTH + IV_LENGTH, payload, 0, payload.Length);

//if (byteArrayEquals(hmac, dohmac(key, byteArrayConcat(iv, payload)))) {

// TODO: Handle HMAC validation failure

//}

Aes aes = new AesManaged();

aes.BlockSize = 128;

aes.KeySize = 256;

aes.Key = hash(key);

aes.IV = iv;

aes.Mode = CipherMode.CBC;

aes.Padding = PaddingMode.PKCS7;

MemoryStream ms = new MemoryStream();

CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write);

cs.Write(payload, 0, payload.Length);

cs.FlushFinalBlock();

return ms.ToArray();

}

public static byte[] hash(byte[] key) {

return (new SHA256Managed()).ComputeHash(key);

}

public static byte[] dohmac(byte[] key, byte[] data) {

return (new HMACSHA256(key)).ComputeHash(data);

}

public static void Main(string[] args) {

Console.WriteLine(decryptPayload("SECRET_KEY",

"pX0WUfsSJQin8U01dmAHJHyZp1+M+CLnyw2oYS1ty

CcHJjSWcOl5oRcHl0LCq9+9YaGy1+WthVfKHRnTf+J7wMCFqcJzr6PXTxP7uKPXaHMrWQyIY5xXGN9Du8np75Em"

,

"6kH6cPtgvpgS4DvxsMWNg9W3CwN9AmhDFHmNQAJbvR4JBIvl4LznmIXESc9CgE87D5lAdqBVacGkR3bnCaBmfKi

b

/sVQoOQ/uNvB1O0Rrqo="));

}

}

Node.js:

var crypto = require('crypto')

function decryptPayload(key, wrappedKey, payload) {

var unwrappedKey = decrypt(key, wrappedKey);

return decrypt(unwrappedKey, payload);

}

function decrypt(key, data) {

Page 21: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 21 de 23 17/02/2016

var dataBuffer = new Buffer(data, 'base64');

// TODO: Check that data is at least bigger than HMAC + IV length

var hmac = dataBuffer.toString('binary', 0, 32);

var iv = dataBuffer.toString('binary', 32, 48);

var decodedData = dataBuffer.toString('binary', 48);

if (hmac != doHmac(key, iv + decodedData)) {

// TODO: Handle HMAC validation failure

return 0;

}

var cipher = crypto.createDecipheriv('aes-256-cbc', hash(key), iv);

return cipher.update(decodedData, 'binary', 'binary') + cipher.final('binary');

}

function hash(data) {

var hasher = crypto.createHash('sha256');

hasher.update(data, 'binary');

return hasher.digest('binary');

}

function doHmac(key, data) {

var hmacer = crypto.createHmac('sha256', key);

hmacer.update(data);

return hmacer.digest('binary');

}

PHP:

<?php

function decryptPayload($key, $wrappedKey, $payload) {

$unwrappedKey = decrypt($key, $wrappedKey);

return decrypt($unwrappedKey, $payload);

}

function decrypt($key, $data) {

$decodedData = base64_decode($data);

// TODO: Check that data is at least bigger than HMAC + IV length

$hmac = substr($decodedData, 0, 32);

$iv = substr($decodedData, 32, 16);

$data = substr($decodedData, 48);

if ($hmac != hmac($key, $iv . $data)) {

// TODO: Handle HMAC validation failure

return 0;

}

return openssl_decrypt($data, 'aes-256-cbc', hashKey($key), OPENSSL_RAW_DATA, $iv);

}

function hashKey($data) {

$hasher = hash_init('sha256');

hash_update($hasher, $data);

return hash_final($hasher, true);

}

function hmac($key, $data) {

return hash_hmac('sha256', $data, $key, true);

}

?>

Python:

Page 22: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 22 de 23 17/02/2016

from M2Crypto import EVP

import base64

import hashlib

import hmac

def decryptPayload(key, wrappedKey, payload):

unwrappedKey = decrypt(key, wrappedKey)

return decrypt(unwrappedKey, payload)

def decrypt(key, data):

decodedData = base64.b64decode(data)

# TODO: Check that data is at least bigger than HMAC + IV length

hmac = decodedData[0:32]

iv = decodedData[32:48]

data = decodedData[48:]

if hmac != doHmac(key, iv + data):

# TODO: Handle HMAC validation failure

return ''

cipher = EVP.Cipher('aes_256_cbc', hash(key), iv, 0)

unencrypted = cipher.update(data)

return unencrypted + cipher.final()

def hash(data):

hasher = hashlib.sha256()

hasher.update(data)

return hasher.digest()

def doHmac(key, data):

hmacer = hmac.new(key, data, hashlib.sha256)

return hmacer.digest()

Ruby:

require 'openssl'

require 'base64'

def decryptPayload(key, wrappedKey, payload)

unwrappedKey = decrypt(key, wrappedKey)

decrypt(unwrappedKey, payload)

end

def decrypt(key, data)

decodedData = Base64.strict_decode64(data)

# TODO: Check that data is at least bigger than IV length

if (decodedData.byteslice(0,32) !=

hmac(key,decodedData.byteslice(32,decodedData.bytesize-32)))

# TODO: Handle HMAC validation failure

return ''

end

cipher = OpenSSL::Cipher.new('AES-256-CBC')

cipher.decrypt

cipher.key = hash(key)

cipher.iv = decodedData.byteslice(32, 48)

cipher.update(decodedData.byteslice(48, decodedData.bytesize)) + cipher.final

end

def hash(data)

Page 23: INFORMACIÓN TÉCNICA SOBRE COMERCIO ...Colocar la siguiente función en el header de la página y configurar los valores indicados 1. codComercio: Código que VisaNet asigna al comercio

Información Técnica sobre

Comercio Electrónico Visa CheckOut Versión Nº: 2

Propiedad de Compañía Peruana de Medios de Pago S.A.C. - Prohibida cualquier reproducción, distribución o comunicación para otros fines, salvo autorización expresa de Visanet Perú.

Página 23 de 23 17/02/2016

digest = OpenSSL::Digest::SHA256.new

digest.update(data)

digest.digest

end

def hmac(key, data)

OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, key, data)

end