first atlantic commerce payment gateway 2 guía rápida de … · 2020. 7. 28. · nota: el monto...

63
First Atlantic Commerce Payment Gateway 2 Guía Rápida de Integración para Programadores Versión 1.4, 24 de Enero de 2020

Upload: others

Post on 25-Sep-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

First Atlantic Commerce Payment Gateway 2 Guía Rápida de Integración para Programadores

Versión 1.4, 24 de Enero de 2020

Page 2: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

2

Table of Contents

Registro de Cambios ...................................................................................................................................................4

Acerca de esta guía .....................................................................................................................................................5

Antecedentes..............................................................................................................................................................5

API de FACPG2 ............................................................................................................................................................6

URLs de plataforma de producción ........................................................................................................................7

https://ecm.firstatlanticcommerce.com/PGService/<Service Name> ........................................................................7

https://marlin.firstatlanticcommerce.com/PGService/<Service Name> .....................................................................7

https://ecm.firstatlanticcommerce.com/PGServiceXML ............................................................................................7

https://marlin.firstatlanticcommerce.com/PGServiceXML ........................................................................................7

https://ecm.firstatlanticcommerce.com/PGService/Services.svc................................................................................7

https://ecm.firstatlanticcommerce.com/PGService/Services.svc?WSDL ..................................................................7

Operaciones disponibles de servicio ......................................................................................................................7

La operación Authorize...............................................................................................................................................8

AuthorizeRequest – Descripciones detalladas de campos .....................................................................................9

AuthorizeResponse – Descripciones detalladas de campos................................................................................ 12

Ejemplos de Código Fuente ................................................................................................................................. 14

Ejemplos de XML ............................................................................................................................................. 15

xmlns="http://schemas.firstatlanticcommerce.com/gateway/data" ......................................................................... 15

xmlns="http://schemas.firstatlanticcommerce.com/gateway/data" ......................................................................... 15

Ejemplos de SOAP ............................................................................................................................................ 17

Ejemplo de autorización simple (SOAP) .......................................................................................................... 18

Ejemplo de autorización simple (XML) ............................................................................................................ 21

Ejemplo de autorización de una sola pasada con AVS (SOAP) ........................................................................ 24

Authorization with Tokenization (SOAP) ......................................................................................................... 24

Mensajes de Ejemplo .......................................................................................................................................... 25

Ejemplo de AuthorizeRequest / AuthorizeResponse en SOAP: ...................................................................... 25

Ejemplo de AuthorizeRequest / AuthorizeResponse en XML: ........................................................................ 26

La operación TransactionModification .................................................................................................................... 28

1) Capture ............................................................................................................................................................ 28

Page 3: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

3

2) Refund ............................................................................................................................................................. 28

3) Reversal ........................................................................................................................................................... 28

Tipos de modificación .......................................................................................................................................... 28

Capture ............................................................................................................................................................ 28

Refund ............................................................................................................................................................. 28

Reversal ........................................................................................................................................................... 29

TransactionModificationRequest – Descripciones detalladas de campos .......................................................... 29

TransactionModificationResponse – Descripciones detalladas de campos ........................................................ 30

Ejemplos de Código Fuente ................................................................................................................................. 31

Modificación de transacción – Capture (SOAP)............................................................................................... 31

Modificación de transacción – Reversal (SOAP) .............................................................................................. 32

Modificación de transacción – Refund (SOAP) ................................................................................................ 33

Mensajes de Ejemplo .......................................................................................................................................... 34

Ejemplo de TransactionModificationRequest / TransactionModificationResponse en XML para una captura:

......................................................................................................................................................................... 34

Ejemplo de TransactionModificationRequest / TransactionModificationResponse en SOAP para una

captura:............................................................................................................................................................ 35

La operación de pago por token o tokenización ..................................................................................................... 36

TokenizeRequest – Descripciones detalladas de campos ................................................................................... 37

TokenizeResponse – Descripciones detalladas de campos ................................................................................. 37

Ejemplos de Código Fuente ................................................................................................................................. 38

Tokenización (SOAP) ........................................................................................................................................ 38

Mensajes de Ejemplo .......................................................................................................................................... 39

Ejemplo de TokenizeRequest / TokenizeResponse en SOAP: ......................................................................... 39

Ejemplo de TokenizeRequest / TokenizeResponse en XML: ........................................................................... 39

La operación 3D-Secure ........................................................................................................................................... 40

3D-Secure con Tokenizacion ............................................................................................................................... 41

Aquí .................................................................................................................................................................. 41

Authorize3DSRequest – Descripciones detalladas de campos ........................................................................... 41

Authorize3DSResponse – Descripciones detalladas de campos ......................................................................... 41

3DSecure Authentication Result (EcIIndicator, AuthenticationResult, CAVV) .................................................... 42

Page 4: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

4

Ejemplos de Código Fuente ................................................................................................................................. 43

Authorize3DS (SOAP) ....................................................................................................................................... 43

Authorize3DS (XML) ........................................................................................................................................ 45

Tokenizacion con 3D-Secure............................................................................................................................ 49

Ejemplos de Mensajes ......................................................................................................................................... 52

Authorize3DS (SOAP) flujo normal .................................................................................................................. 52

Authorize3DS (SOAP) flujo de error – Cuando se retorna un error................................................................ 56

Authorize3DS XML flujo normal ...................................................................................................................... 61

Registro de Cambios

Versión del documento

Descripción Fecha de emisión

V1.0 Versión inicial en base a la Guía de integración FACPG2 v2.5.9 23/Ene/2019 V1.1 Se agregaron ejemplos de mensajes HTTP POST 19/Feb/2019 V1.2 - Se agregaron ejemplos adicionales de mensajes HTTP POST para 3D Secure.

- Se agregó una ejemplo de utilizacion de 3D Secure con tokenización 12/Nov/2019

V1.3 Se agregaron ejemplos adicionales para 3D Secure (via interface XML) 12/Dic/2019

V1.4 Se agregaron ejemplos adicionales para 3D Secure para Autorizaciones y Modificacion de Transcciones

24/Ene/2020

Page 5: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

5

Acerca de esta guía

Este documento sirve como una guía rápida que permitirá a los programadores repasar en corto tiempo los aspectos más

importantes del proceso de integración para utilizar, por primera vez, los servicios de pasarela de pagos (conocida en inglés

como Payment Gateway o PG) de First Atlantic Commerce (FAC).

Este documento incluye solamente las operaciones más comunes de API, así que debe acompañarse siempre del documento

completo Guía de Integración de FACPG2, que contiene explicaciones detalladas de todas las operaciones.

Antecedentes

Este documento es una guía para el programador durante el proceso de integración requerido para utilizar por primera vez los

servicios de pasarela de pagos Payment Gateway Services de First Atlantic Commerce.

La versión actual de la pasarela de pagos de FAC tiene dos maneras de integrarse; un servicio web de pasarela de pagos

basado en SOAP y un servicio XML POST. Ambos métodos comparte los mismos atributos y estructuras de datos, pero se

convocan a través de distintos URLs y campos semánticos.

Ambos métodos utilizan HTTPS como protocolo de transporte.

Page 6: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

6

API de FACPG2

Los servicios de pasarela de pagos de FAC aceptan solicitudes tanto de SOAP como de XML POST y soportan

solicitudes de transacción que utilizan el protocolo HTTPS. Este es un resumen de las operaciones disponibles:

Operación(SOAP) Descripción

Services.svc – Operaciones base de pasarela de pagos

Authorize - Autorizar Soporta autorizaciones sin 3D Secure,

autorizaciones con captura en una sola transacción,

Verificación AVS,

transacciones recurrentes

transacciones pre-autenticadas con servicio 3D secure

Transaction

Modification –

Modificación de

transacción

Captura una transacción previamente autorizada

Reversa una transacción previamente autorizada y capturada

Reembolsa una transacción previamente autorizada, capturada y liquidada

Cancela una transacción recurrente

Authorize3DS –

Autorización con

seguridad 3DS

Soporta autorizaciones con 3DS solamente,

autorización 3DS con una captura,

transacciones con seguridad 3DS para autenticación solamente

AVS

Transaction Status –

Estatus de

transacción

Despliega el estatus de una transacción previa

Tokenization.svc – Operaciones de tokenización/destokenización y manejo de PANs

Tokenize – Tokenizar Tokeniza un número de tarjeta de crédito

ExpiringCreditCards

– Tarjetas de crédito

a punto de expirar

Despliega una lista de tarjetas tokenizadas con fecha cercana de expiración

DeTokenize -

Destokenizar

Permite que una tarjeta tokenizada sea destokenizada de regreso al número de tarjeta original

UpdateToken –

Actualizar token

Permite la actualización de la fecha de expiración y la referencia del cliente

HostedPage.svc – Operaciones para la autorización de una página de pago alojada en el portal del cliente

HostedPageAuthorize

– Autorización de una

página alojada en la

página web del cliente

Pasa datos preliminares de una página alojada hacia la pasarela de pagos y devuelve un token de

uso único para permitir acceso a la página

HostedPageResults –

Resultados de página

alojada

Permite recuperar todos los datos de respuesta, independientemente a la transacción en la pagina

alojada en la web del cliente. Sólo se requiere del token de uso único como parámetro

Page 7: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

7

URLs de plataforma de producción

Interface Ambiente Url

SOAP Prueba https://ecm.firstatlanticcommerce.com/PGService/<Service Name>

SOAP Producción https://marlin.firstatlanticcommerce.com/PGService/<Service Name>

XML Prueba https://ecm.firstatlanticcommerce.com/PGServiceXML

XML Producción https://marlin.firstatlanticcommerce.com/PGServiceXML

Ejemplos:

Operación de

servicio

https://ecm.firstatlanticcommerce.com/PGService/Services.svc

WSDL https://ecm.firstatlanticcommerce.com/PGService/Services.svc?WSDL

Operaciones disponibles de servicio

Las operaciones de servicios disponibles se enumeran a continuación, y están agrupadas en cuatro grupos de

servicios (Servicios, pago por tokens, página web alojada y utilerías).

// Services.svc:

AuthorizeResponse Authorize(AuthorizeRequest Request)

TransactionModificationResponse TransactionModification(TransactionModificationRequest Request)

Authorize3DSResponse Authorize3DS(Authorize3DSRequest Request)

TransactionStatusResponse TransactionStatus(TransactionStatusRequest Request)

// Tokenization.svc:

TokenizeResponse Tokenize(TokenizeRequest Request)

ExpiringCreditCardsResponse ExpiringCreditCards(ExpiringCreditCardsRequest Request)

DeTokenizeResponse DeTokenize(DeTokenizeRequest Request)

UpdateTokenResponse UpdateToken(UpdateTokenRequest Request)

// HostedPage.svc:

HostedPageAuthorizationResponse HostedPageAuthorize(HostedPageAuthorizationRequest Request)

HostedPageResultsResponse HostedPageResults(string Key)

Page 8: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

8

La operación Authorize

La operación de autorización Authorize Operation utiliza el mensaje AuthorizeRequest para enviar una solicitud

de autorización de transacción sin seguridad 3D.

Con esta operación también es posible:

Incluir una captura como parte de la solicitud (conocida como transacción de una sola pasada)

Incluir una Verificación de dirección (AVS por sus siglas en inglés) en la solicitud

Llevar a cabo una verificación de dirección $0 solamente, sin autorización ni monto

Incluir los resultados de una transacción previa autenticada a través de 3D Secure

- - Debido a la naturaleza apátrida e interconectada de la internet, es posible que ocasionalmente una

solicitud de autorización de un transacción enviada a FAC caduque (timeout) antes de recibir una respuesta.

Si este fuera el caso, no asuma que la transacción no fue procesada de nuestro lado. Es posible que hayamos

recibido la solicitud y enviado una respuesta que nunca llegó a usted debido a una falla en la conexión entre

su servidor y FAC. En este caso, utilice la operación TransactionStatus para verificar el estatus de esta

transacción y si fue o no aprobada.

- - El parámetro TransactionCode se utiliza para identificar los ítems de la operación de autorización que se

encuentran soportados a nivel sistema. El parámetro TransactionCode es una totalización del valor asignado

al ítem. Favor de referirse a la sección Descripción detallada de campos para una lista de posibles

TransactionCodes.

o Si el parámetro TransactionCode se encuentra ajustado para incluir la marca AVS Verification Only,

es posible enviar una transacción con monto cero, con el propósito de verificar la dirección

solamente. Este tipo de transacciones AVS Verification Only nunca son autorizadas. El banco que

proporciona el hosting deberá soportar solicitudes de AVS con monto cero para poder utilizar este

parámetro. Si el banco no soporta este servicio, FAC puede proporcionar una cuenta separada de

FAC que soporte solamente verificaciones de dirección con monto cero. Para más información

consulte la sección de Verificación AVS de montos en cero en la Guía de integración FACPG2.

o Si el parámetro TransactionCode está fijado para incluir la marca (flag) ‘Pre-Authenticated’, los

parámetros ECIIndicator y AuthenticationResult deberán incluirse en la solicitud; de lo contrario, la

transacción no podrá ser completada. Adicionalmente, si el valor del parámetro ECIIndicator está

fijado en “05” (para Visa) o en “02” (para MC), y el valor del parámetro AuthenticationResult está

fijado en “Y”, los parámetros TransactionStain y CAVVValue deberán incluirse; de lo contrario, la

transacción no podrá ser completada.

No se podrá ajustar el parámetro TransactionCode para incluir las marcas (flags) AVSOnly y PreAuthenticated.

Hacerlo le arrojará un mensaje de error y la transacción no será procesada.

Page 9: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

9

AuthorizeRequest – Descripciones detalladas de campos

Nota:

“R/O/C” se refiere a si la presencia del campo es Requerida (obligatoria), Opcional o Condicional.

N/AN se refiere a si el campo es Numérico o AlfaNumérico.

Sección/Campo Format

o R/

O/

C

Valor

TransactionDetails

AcquirerId N(11) R “464748”

MerchantId N(15) R Su número de FAC ID que le proporcionó FAC

OrderNumber AN(150) R Identificador único asignado por el comercio para la transacción

TransactionCode N(4) R El código de transacción es un valor numérico que permite cualesquiera

combinaciones de los identificadores (flags) que se enlistan a

continuación y que se incluyen con la solicitud de transacción, sumando

su valor correspondiente. Por ejemplo, para incluir AVS en la

transacción y marcarla como una transacción de prueba, se asigna la

suma de los valores correspondientes 1 y 16 al código de la transacción.

Los códigos válidos para una solicitud de autorización son:

0 - Ninguno

1 – Incluir una verificación AVS en la transacción

2 – Identificar como una verificación AVS solamente, con monto cero

4 – La transacción ha sido previamente autenticada con seguridad 3D y

los resultados de la autenticación se incluirán en la transacción. 8 – Identificar como transacción de una sola pasada (autorización y

captura en una sola transacción)

32 - Reservado

64 – Identificar como una transacción de autenticación solamente, con

seguridad 3DS

128 – Tokenizar el PAN (solicitar token)

256 – Autorización de página alojada + 3DS (aplica solamente a

páginas de pago alojadas)

512 – Verificación de fraude solamente

1024 – Prueba de fraude

2048 - Reservado

Amount N(12) R Monto total de la compra. Nota: El monto de la compra deberá

presentarse como una secuencia de 12 caracteres (por ej. $12.00 se

escribiría “000000001200”)

Currency N(3) R El código ISO del país de divisa con la que se hizo la compra (ej. US

Dollars = 840)

Ver el Anexo A de la Guía de integración FACPG2 para obtener una

lista completa de códigos.

CurrencyExponent N(1) R El número de dígitos después del punto decimal del monto de la compra

(por ej. $12.00 = 2)

SignatureMethod AN(4) R “SHA1”

Signature AN(28) R Ver Creación y verificación de firma en la Guía de integración

FACPG2 para información sobre cómo crear esta firma

IPAddress AN(15) C Dirección del cliente IPv4

CustomData AN(n) O Reservado para uso futuro

Page 10: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

10

CustomerReference AN(256) O Se usa con la solicitud de tokenización para asociar un token con un

cliente

CardDetails

CardNumber N(19) R Número de tarjeta de crédito/débito de un tarjetahabiente o de un PAN

previamente tokenizado

CardExpiryDate N(4) C Fecha de expiración de la tarjeta de crédito de un tarjetahabiente

(formato MMYY)

No se requiere si se utiliza un número de tarjeta tokenizado

CardCVV2 N(4) R Número CVV2 de tarjeta de crédito del tarjetahabiente tal como aparece

en la parte trasera de la tarjeta de crédito

(3 dígitos para tarjetas Visa y MasterCard, 4 dígitos para AMEX)

IssueNumber N(2) C Número de expedición de la tarjeta de débito del tarjetahabiente Puede

ser de uno o dos dígitos, dependiendo del tipo de tarjeta.

StartDate C Fecha de vigencia inicial de la tarjeta de crédito de un tarjetahabiente

(formato MMYY) Se requiere para algunas tarjetas de débito. BillingDetails

BillToAddress AN(50) C Dirección del tarjetahabiente. Este valor se necesita para transacciones

con verificación AVS. Ver el Anexo A en la Guía de integración

FACPG2 para todos los requerimientos de los campos de detalles de

facturación

BillToAddress2 AN(50) O Reservado para uso interno de FAC

BillToZipPostCode AN(10) C Código postal del tarjetahabiente. Este valor se necesita para

transacciones con verificación AVS. Ver el Anexo A en la Guía de

integración FACPG2 para todos los requerimientos de los campos.

BillToFirstName AN(30) O Nombre del tarjetahabiente

BillToLastName AN(30) O Apellido del tarjetahabiente

BillToCity AN(30) O Ciudad del tarjetahabiente.

BillToState AN(5) O Estado o provincial del tarjetahabiente – debe tener un mínimo de dos

caracteres Ver el Anexo A en la Guía de integración FACPG2 para

información sobre los valores permitidos.

BillToCountry* N(3) O Código ISO del país del tarjetahabiente (ej. U.S.A. = 840) Ver el Anexo

A en la Guía de integración FACPG2

BillToEmail* AN(50) O Dirección electrónica del tarjetahabiente

BillToTelephone* N(20) O Número telefónico del tarjetahabiente

ShippingDetails

Son los mismos campos que BillingDetails, pero con el prefijo “ShipTo”

Detalles de 3DSecure

ECIIndicator N(2) C Este valor solo se necesita para transacciones con seguridad 3D y el

código de transacción debe incluir el valor 4 en el valor totalizado. Los

posibles valores incluyen: Visa:

“05” – Autenticación completa 3D Secure

“06” – El emisor y/o el tarjetahabiente no están suscritos a 3D Secure

“07” – Falló el intento de autenticación 3D Secure (las razones posibles

son numerosas)

MasterCard:

“01” – El emisor y/o el tarjetahabiente no están suscritos a 3D Secure

“02” – Autenticación completa 3D Secure

AuthenticationResult A(1) C Este valor solo se necesita para transacciones con seguridad 3D y el

código de transacción debe incluir el valor 4 en el valor totalizado. Los

posibles valores incluyen:

Page 11: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

11

“A” = Se hizo un intento de autenticación (ECIIndicator: V=06,

MC=01) “N” = El intento de autenticación no se encontraba soportado

(ECIIndicator: V=06, MC=01) “U” = No se pudo autenticar (ECIIndicator: V=07, MC=01) “Y” = Se intentó y se logró la autenticación (ECIIndicator: V=05,

MC=02)

TransactionStain AN(28) O Una versión “hash” del número de identificación de la transacción

(XID). El XID es un número único de rastreo que se asigna a la

solicitud de autenticación y previene el reenvío de la misma

transacción.

CAVV AN(28) O Este es un valor criptográfico que se deriva del emisor durante la

autenticación del pago; proporciona evidencia de los resultados del

proceso de autenticación del pago. Note que para MasterCard, este

campo se conoce como UCAF pero el nombre del campo seguirá siendo

CAVV. RecurringDetails IsRecurring A(5) C Se fija como “True” o “False” dependiendo de si se requiere una

transacción recurrente.

ExecutionDate N(8) C Cuándo ejecutar la siguiente autorización después de la autorización

inicial inmediata. Un ejemplo del formato de la fecha es “20130715”

(YYYYMMDD).

Frequency A(1) C Identificar o marcar para definir la frecuencia de ejecución de la

autorización recurrente.

Los posibles valores son:

“D” – Diariamente

“W” – Semanalmente

“F” – Quincenal/cada dos semanas

“M” – Mensualmente

“E” – Bi-Mensualmente

“Q” – Trimestralmente

“Y” – Anual

NumberOfRecurrences

N(3) C Cuántas veces se debe ejecutar. Por ejemplo, si Frequency = “D”,

NumberOfRecurrences = 7 se ejecutará cada día por una semana.

FraudDetails

AuthResponseCode A(1) O Para verificaciones de preautorización, solo para verificación de fraude,

“A” = Autorizado, “D” = Declinado.

AVSResponseCode A(1) O Código estándar de respuesta AVS, para verificaciones solamente de

fraude pre-autorizados

CVVResponseCode A(1) O Código estándar de respuesta de validación CVV2, para verificaciones

pre-autorizadas de fraude solamente

SessionId AN(32) R Para cualquier verificación de fraude se requiere un número único de

identificación de sesión y debe ser el mismo número de ID de la sesión

generado por el recolector de datos. Ver la sección de Control de fraude

en la Guía de integración FACPG2

Notas:

La capacidad de procesar verificaciones AVS es específica según el procesador. Por favor informe a FAC

si usted desea utilizar este servicio y nosotros le haremos saber si se encuentra disponible a través del

procesador de su elección.

Page 12: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

12

Aunque la interface existe para soportar transacciones recurrentes, este servicio podría depender del

procesador. Le sugerimos que se comunique con FAC si usted desea utilizar transacciones recurrentes.

Para servicios de Control de Fraude, se requiere de cambios adicionales en la configuración de su cuenta

de procesamiento y se requiere también que se inscriba al servicio. Por favor informe a FAC si desea

implementar servicios de control de fraude.

AuthorizeResponse – Descripciones detalladas de campos

Nota:

“R/O/C” se refiere a si la presencia del campo es Requerida (obligatoria), Opcional o Condicional.

N/AN se refiere a si el campo es Numérico o AlfaNumérico.

Sección/Campo Format

o

Notas:

AuthorizeResponse (Main Body)

AcquirerID N(11) El valor pasado en AcquiereId en la operación AuthorizeRequest

CustomData AN(n) Reservado para uso futuro

IPAddress N(15) El valor pasado en IPAddress en la operación AuthorizeRequest

MerchantID N(15) El valor pasado en AcquirerId en la operación AuthorizeRequest

ReferenceNumber N(12) El número único de referencia que el sistema de FAC asigna a esta

transacción

Signature AN(28) Ver Verificación y creación de firmas en la sección de ejemplos más abajo o

consulte la Guía de integración FACPG2 para obtener información sobre

cómo se crea esta firma

SignatureMethod AN(4) Siempre será “SHA1”

CreditCardTransactionResults

AuthCode AN(6) El código de autorización lo proporciona el banco emisor del tarjetahabiente

AVSResult AN(1) Campo de resultados de la verificación de dirección. Ver Error! Reference s

ource not found.

CVV2Result A(1) Ver Códigos de respuesta CVV2/CVC2 en la Guía de integración FACPG2

para consultar los posibles valores de este parámetro.

OriginalResponseCode AN(3) Ver Códigos de respuesta de autorización original en la Guía de integración

FACPG2 para consultar los posibles valores de este parámetro.

PaddedCardNumber N(19) El valor pasado en CardNumber en la operación AuthorizeRequest, ampliado

con Xs, pero que solo proporciona los últimos 4 dígitos

ReasonCode N(4) Ver Códigos de respuesta y de razones en la Guía de integración FACPG2

para consultar los posibles valores de este parámetro.

ReasonCodeDescription AN(100) Ver Códigos de respuesta y de razones en la Guía de integración FACPG2

para consultar los posibles valores de este parámetro.

ResponseCode N(1) Ver Códigos de respuesta y de razones en la Guía de integración FACPG2

para consultar los posibles valores de este parámetro.

TokenizedPAN N(19) Se despliega el número de tarjeta tokenizado con solicitudes de tokenización

y autorizaciones tokenizadas

BillingDetails

BillToAddress AN(50) Dirección del tarjetahabiente. Este valor se necesita para transacciones con

verificación AVS.

Page 13: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

13

BillToAddress2 AN(50) Reservado para uso interno de FAC

BillToZipPostCode AN(10) Código postal del tarjetahabiente. Este valor se necesita para transacciones

con verificación AVS.

BillToFirstName AN(30) Nombre del tarjetahabiente

BillToLastName AN(30) Apellido del tarjetahabiente

BillToCity AN(30) Ciudad del tarjetahabiente.

BillToState AN(5) Estado o provincial del tarjetahabiente – debe tener un mínimo de dos

caracteres

BillToCountry N(3) Código ISO del país del tarjetahabiente (ej. U.S.A. = 840). Ver el Anexo A

en la Guía de integración FACPG2

BillToEmail AN(50) Dirección electrónica del tarjetahabiente

BillToTelephone N(20) Número telefónico del tarjetahabiente

FraudControlResults AuthCode N(6) Código de autorización de una transacción completada exitosamente

FraudControlId AN(50) Número de identificación de la transacción del sistema de control de fraudes

FraudResponseCode AN(3) Código de respuesta del Sistema de control de fraudes. Ver la sección de

Códigos de respuesta del sistema de control de fraudes en la Guía de

integración FACPG2

ReasonCode AN(4) Razón de fraude if ResponseCode = 3. Ver la sección de Códigos de respuesta del sistema de control de fraudes en la Guía de integración

FACPG2

ReasonCodeDesc AN(255) Descripción de la razón de fraude. Ver la sección de Códigos de razón del control de fraudes en la Guía de integración FACPG2

ResponseCode N(1) 1 or 3, Pass o Fail. Ver la sección de Códigos de respuesta de control de fraudes en la Guía de integración FACPG2

Score AN(20) Número de calificación de fraude (Kount)

Page 14: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

14

Ejemplos de Código Fuente

Como se mencionó anteriormente, los servicios de pasarela de pagos de FAC aceptan tanto solicitudes

SOAP como XML POST.

En las secciones siguientes damos ejemplos de la mayoría de las operaciones incluidas en esta guía.

Por favor utilice estos ejemplos como referencia solamente.

Los ejemplos incluidos para todas las operaciones utilizan SOAP.

El ejemplo de la operación de autorización (Authorize) se encuentra tanto en SOAP como en XML POST.

Page 15: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

15

Ejemplos de XML

Al utilizar la interface XML asegúrese de incluir referencias del espacio de nombre predeterminado para la

solicitud; podrá esperar en la respuesta, tal como se describe a continuación:

Ejemplo de solicitud:

<AuthorizeRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://schemas.firstatlanticcommerce.com/gateway/data">

Ejemplo de respuesta:

<AuthorizeRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://schemas.firstatlanticcommerce.com/gateway/data">

El siguiente ejemplo fue creado utilizando lenguaje Microsoft Visual Studio using C# y muestra cómo

postear una solicitud de autorización XML en nuestro ambiente de prueba.

Un ejemplo de mensaje de autorización XML (solicitud y respuesta) se puede encontrar en las páginas más

arriba.

/// <summary> /// Posts an XML message using HTTP POST /// </summary> /// <param name="strRequest">xmlrequest</param> /// <param name="baseUrl">For example: baseUrl= @https://ecm.firstatlanticcommerce.com </param> /// <param name="url">For example: url = @"/PGService/Services.svc" </param> /// <returns></returns> public static string postFACXMLMessage(string strRequest, string baseUrl, string url) { StreamReader reader = null; string strResponse = ""; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; byte[] byteArray = Encoding.UTF8.GetBytes(strRequest); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseUrl + url); req.Method = "POST"; req.ContentType = string.Format("text/xml"); req.ContentLength = byteArray.Length; try { // Get the request stream. Stream dataStream = req.GetRequestStream(); // Write the data to the request stream. dataStream.Write(byteArray, 0, byteArray.Length); // Close the Stream object. dataStream.Close(); WebResponse response = req.GetResponse();

Page 16: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

16

Debug.WriteLine("Service Status Code:" + ((HttpWebResponse)response).StatusDescription); // Get the stream containing content returned by the server. dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. reader = new StreamReader(dataStream); // Read the content. strResponse = reader.ReadToEnd(); reader.Close(); } catch (WebException ex) { string exMessage = ex.Message; if (ex.Response != null) { using (var responseReader = new StreamReader(ex.Response.GetResponseStream())) { strResponse = responseReader.ReadToEnd(); } } } return strResponse; }

Page 17: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

17

Ejemplos de SOAP

Los siguientes ejemplos se programaron utilizando operaciones SOAP en Microsoft C#.

Para poder correr estos ejemplos en Microsoft Visual Studio:

1) Genere un Proyecto de prueba C# y copie todo el código fuente C# que se encuentra a continuación

2) Genere las referencias necesarias de servicio (por ej.: Servicios, pago por tokens, HostedPage)

3) Asegúrese que el archivo app.config se vea similar a la configuración descrita más abajo (si fuese

necesario)

4) Asegúrese de checar que los nombres de servicio correspondan a la configuración (si fuese necesario)

<?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> … </runtime> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IHostedPage"> <security mode="Transport" /> </binding> <binding name="BasicHttpBinding_IServices"> <security mode="Transport" /> </binding> <binding name="BasicHttpBinding_Tokenization"> <security mode="Transport" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="https://ecm.firstatlanticcommerce.com/PGService/HostedPage.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHostedPage" contract="HPPSvc.IHostedPage" name="BasicHttpBinding_IHostedPage" /> <endpoint address="https://ecm.firstatlanticcommerce.com/PGService/Services.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServices" contract="FPG2Svc.IServices" name="BasicHttpBinding_IServices" /> <endpoint address="https://ecm.firstatlanticcommerce.com/PGService/Tokenization.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Tokenization" contract="FACPG2Tok.Tokenization" name="BasicHttpBinding_Tokenization" /> </client> </system.serviceModel> </configuration>

Page 18: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

18

Ejemplo de autorización simple (SOAP)

Este ejemplo muestra cómo enviar una autorización utilizando la operación Authorize de SOAP.

[TestClass] public class FACPG2Tests { private readonly string MERCH_ID = "YOUR MERCHANT ID NUMBER GOES HERE"; private readonly string MERCH_PWD = "YOUR MERCHANT PASSWORD GOES HERE"; [TestMethod] public void TestAuthorize_WithCorrectCardInfo_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var authRequest = CreateAuthorizeRequest(MERCH_ID, MERCH_PWD); //Act var authResponse = client.Authorize(authRequest); //Assert Assert.IsNotNull(authResponse); Assert.IsTrue(authResponse.CreditCardTransactionResults.ResponseCode == "1" && authResponse.CreditCardTransactionResults.ReasonCode == "1" && authResponse.CreditCardTransactionResults.ReasonCodeDescription == "Transaction is approved."); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.AuthCode)); Assert.IsFalse( string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.ReferenceNumber)); }

private FPG2Svc.AuthorizeRequest CreateAuthorizeRequest(string merchId, string merchPwd) { var request = new FPG2Svc.AuthorizeRequest { CardDetails = GetCardDetails(), TransactionDetails = GetTransactionDetails(merchId, merchPwd), ShippingDetails = null, BillingDetails = GetBillingDetails(), RecurringDetails = null, FraudDetails = null, ThreeDSecureDetails = null }; return request; }

Page 19: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

19

private FPG2Svc.CardDetails GetCardDetails() { return new FPG2Svc.CardDetails { CardNumber = "4242424242424242", CardExpiryDate = "1220", CardCVV2 = "234" }; } private FPG2Svc.TransactionDetails GetTransactionDetails(string merchId, string merchPwd) { var amount = 1; var currency = "840"; var order = GenOrderNum(); return new FPG2Svc.TransactionDetails { Amount = AmountFormatted(amount).Trim(), Currency = currency, CurrencyExponent = 2, TransactionCode = 0, OrderNumber = order, AcquirerId = "464748", MerchantId = merchId, Signature = GenerateSignature(merchId, merchPwd, order, amount, currency), SignatureMethod = "SHA1", CustomerReference = $"This is a test for merchant: {merchId}" }; }

private BillingDetails GetBillingDetails() { return new BillingDetails { BillToFirstName = "John", BillToLastName = "Smith", BillToAddress = "1200 Whitewall Blvd.", BillToAddress2 = "Unit 15", BillToCity = "Boston", BillToZipPostCode = "200341", BillToState = "NY", BillToCountry = "840", BillToTelephone = "211-3454-6790", BillToEmail = "[email protected]" }; }

private string GenOrderNum() { return string.Format("Test|{0}", Right(Guid.NewGuid().ToString(), 18).Replace("-", "")); } public static string Right(string value, int length) { return value.Substring(value.Length - length); }

Page 20: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

20

private string GenerateSignature(string merchId, string merchPwd, string ordNum, decimal amount, string curr) { var source = string.Format("{0}{1}{2}{3}{4}{5}", merchPwd, merchId, "464748", ordNum, AmountFormatted(amount).Trim(), curr.Trim()); //HPP Auth+3DS (trxn code 256) requires SHA1 signature no longer than 28 characters //so HPP signature cannot be URL-encoded return GenerateSignature(source); } public static string GenerateSignature(string source) { var provider = new SHA1CryptoServiceProvider(); var bytearray = Encoding.UTF8.GetBytes(source); var buffer = provider.ComputeHash(bytearray); var hashValue = Convert.ToBase64String(buffer); return hashValue; } public string AmountFormatted(decimal amount) { var factor = Math.Pow(10, 2); return Math.Round(amount * (decimal)factor, 0).ToString().PadLeft(12, '0'); }

}

Page 21: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

21

Ejemplo de autorización simple (XML)

Este ejemplo muestra cómo enviar una autorización utilizando la operación Authorize de HTTP POST.

Los parámetros AuthorizeRequest y AuthorizeResponse necesitan estar activos para que este ejemplo

funcione.

La definición de esas clases se pueden extraer de las descripciones detalladas de campos que se incluyen

en cada sección para cada operación y también de los ejemplos de mensajes de SOAP.

[TestClass] public class FACPG2XMLTests { private const string BASE_XML_URL = @"https://ecm.firstatlanticcommerce.com"; private readonly string MERCH_ID = "YOUR MERCHANT ID NUMBER GOES HERE"; private readonly string MERCH_PWD = "YOUR MERCHANT PASSWORD GOES HERE"; [TestMethod] public void TestAuthorize_WithCorrectCardInfo_ShouldSucceed() { //Arrange ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var tcode = 0; //None=0 var authRequest = CreateAuthorizeRequest(MERCH_ID, MERCH_PWD, tcode); var authRequestBody = ToXML(authRequest); //Act var authResponseBody = ExecXmlAction(BASE_XML_URL, authRequestBody, "Authorize"); var authResponse = LoadFromXMLString(typeof(AuthorizeResponse), authResponseBody) as AuthorizeResponse; //Assert Assert.IsNotNull(authResponse); Assert.IsTrue(authResponse.CreditCardTransactionResults.ResponseCode == "1" && authResponse.CreditCardTransactionResults.ReasonCode == "1" && authResponse.CreditCardTransactionResults.ReasonCodeDescription == "Transaction is approved."); Assert.IsFalse(string.IsNullOrEmpty( authResponse.CreditCardTransactionResults.AuthCode)); Assert.IsFalse(string.IsNullOrEmpty( authResponse.CreditCardTransactionResults.ReferenceNumber)); }

Page 22: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

22

/// <summary> /// Serializes an Object to XML /// </summary> /// <param name="obj"></param> /// <returns></returns> public string ToXML(object obj) { var stringwriter = new StringWriter(); var serializer = new XmlSerializer(obj.GetType()); serializer.Serialize(stringwriter, obj); var rslt = stringwriter.ToString(); //Add default namespace to the Request --> // xmlns:i="http://www.w3.org/2001/XMLSchema-instance" // xmlns=""http://schemas.firstatlanticcommerce.com/gateway/data" rslt = rslt.Replace( @"Request xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">", @"Request xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.firstatlanticcommerce.com/gateway/data"">"); //Make sure the encoding is utf-8 return rslt.Replace(@"encoding=""utf-16""?", @"encoding=""utf-8""?"); } /// <summary> /// Deserializes a string into an object of the specified Type /// </summary> /// <param name="myType"></param> /// <param name="xmlText"></param> /// <returns></returns> public static object LoadFromXMLString(Type myType, string xmlText) { var xmlBody = @"<?xml version=""1.0"" encoding=""utf-8""?>" + "\n" + xmlText; //Remove default namespace otherwise Deserialization fails xmlBody = xmlBody.Replace( @"Response xmlns=""http://schemas.firstatlanticcommerce.com/gateway/data"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">", @"Response xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">"); var stringReader = new System.IO.StringReader(xmlBody); var serializer = new XmlSerializer(myType); return serializer.Deserialize(stringReader); } }

Page 23: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

23

/// <summary> /// Post the XML request to the Server /// </summary> /// <param name="baseUrl"></param> /// <param name="requestBody"></param> /// <param name="xmlAction"></param> /// <returns></returns> string ExecXmlAction(string baseUrl, string requestBody, string xmlAction) { var url = $"{baseUrl}/PGServiceXML/{xmlAction}"; string ResponseRaw = PostXmlRequest(url, requestBody); return ResponseRaw; } public string PostXmlRequest(string url, string requestBody) { var postData = Encoding.UTF8.GetBytes(requestBody); var request = WebRequest.Create(url) as HttpWebRequest; if (request == null) { throw new Exception("HttpWebRequest initialization failed"); } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; using (var requestStream = request.GetRequestStream()) { requestStream.Write(postData, 0, postData.Length); using (var responseStream = request.GetResponse().GetResponseStream()) using (var reader = new StreamReader(responseStream)) { return reader.ReadToEnd(); } } }

Page 24: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

24

Ejemplo de autorización de una sola pasada con AVS (SOAP) [TestMethod] public void TestAuthorize_WithSinglePassAndAVSAndCorrectCardInfo_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var authRequest = CreateAuthorizeRequest(MERCH_ID, MERCH_PWD); authRequest.TransactionDetails.TransactionCode = 0 + 1 + 8; //AVS=1, SINGLE_PASS=8 //Act var authResponse = client.Authorize(authRequest); //Assert Assert.IsNotNull(authResponse); Assert.IsTrue(authResponse.CreditCardTransactionResults.ResponseCode == "1" && authResponse.CreditCardTransactionResults.ReasonCode == "1" && authResponse.CreditCardTransactionResults.ReasonCodeDescription == "Transaction is approved."); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.CVV2Result)); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.AVSResult)); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.AuthCode)); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.ReferenceNumber)); }

Authorization with Tokenization (SOAP) [TestMethod] public void TestAuthorize_WithTokenizePanAndCorrectCardInfo_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var authRequest = CreateAuthorizeRequest(MERCH_ID, MERCH_PWD); authRequest.TransactionDetails.TransactionCode = 0 + 128; //TokenizePAN=128 //Act var authResponse = client.Authorize(authRequest); //Assert Assert.IsNotNull(authResponse); Assert.IsTrue(authResponse.CreditCardTransactionResults.ResponseCode == "1" && authResponse.CreditCardTransactionResults.ReasonCode == "1" && authResponse.CreditCardTransactionResults.ReasonCodeDescription == "Transaction is approved."); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.AuthCode)); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.ReferenceNumber)); Assert.IsFalse(string.IsNullOrEmpty(authResponse.CreditCardTransactionResults.TokenizedPAN)); Assert.IsTrue(authResponse.CreditCardTransactionResults.TokenizedPAN != authRequest.CardDetails.CardNumber); }

Page 25: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

25

Mensajes de Ejemplo

Ejemplo de AuthorizeRequest / AuthorizeResponse en SOAP:

AuthorizeRequest AuthorizeResponse POST

https://ecm.firstatlanticcommerce.com/PGServiceXML/Autho

rize HTTP/1.1

Content-Type: application/x-www-form-urlencoded

Host: ecm.firstatlanticcommerce.com

Content-Length: 1906

Expect: 100-continue

Connection: Keep-Alive

<?xml version="1.0" encoding="utf-8"?>

<AuthorizeRequest

xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://schemas.firstatlanticcommerce.com/gateway/

data">

<BillingDetails>

<BillToAddress>1200 Whitewall Blvd.</BillToAddress>

<BillToAddress2>Unit 15</BillToAddress2>

<BillToCity>Boston</BillToCity>

<BillToCountry>840</BillToCountry>

<BillToEmail>[email protected]</BillToEmail>

<BillToFirstName>John</BillToFirstName>

<BillToLastName>Smith</BillToLastName>

<BillToState>NY</BillToState>

<BillToTelephone>211-3454-6790</BillToTelephone>

<BillToZipPostCode>200341</BillToZipPostCode>

</BillingDetails>

<CardDetails>

<CardCVV2>234</CardCVV2>

<CardExpiryDate>1220</CardExpiryDate>

<CardNumber>4111111111111111</CardNumber>

<Installments>0</Installments>

</CardDetails>

<TransactionDetails>

<AcquirerId>464748</AcquirerId>

<Amount>000000000100</Amount>

<Currency>840</Currency>

<CurrencyExponent>2</CurrencyExponent>

<MerchantId>YOUR_MERCHANT_HERE</MerchantId>

<OrderNumber>Test|a4a475c787c2285f</OrderNumber>

<Signature>QCRcH7W20DVDWzTPlFZou+lXhTQ=</Signature>

<SignatureMethod>SHA1</SignatureMethod>

<TransactionCode>0</TransactionCode>

<CustomerReference>This is a

test</CustomerReference>

</TransactionDetails>

<ShippingDetails>

<ShipToAddress>1200 Whitewall Blvd.</ShipToAddress>

<ShipToAddress2>Unit 15</ShipToAddress2>

<ShipToCity>Boston</ShipToCity>

<ShipToCountry>840</ShipToCountry>

<ShipToEmail>[email protected]</ShipToEmail>

<ShipToFirstName>John</ShipToFirstName>

<ShipToLastName>Smith</ShipToLastName>

<ShipToState>NY</ShipToState>

<ShipToTelephone>211-3454-6790</ShipToTelephone>

<ShipToZipPostCode>200341</ShipToZipPostCode>

</ShippingDetails>

</AuthorizeRequest>

HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=utf-8 Server: X-AspNet-Version: 4.0.30319 Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline' Strict-Transport-Security: max-age=31536000; includeSubdomains=true X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Date: Thu, 28 Nov 2019 22:19:48 GMT Content-Length: 2206 <AuthorizeResponse xmlns="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <AcquirerId>464748</AcquirerId> <CreditCardTransactionResults> <AVSResult/> <AuthCode>123456</AuthCode> <CVV2Result>M</CVV2Result> <OriginalResponseCode>00</OriginalResponseCode> <PaddedCardNumber>XXXXXXXXXXXX1111</PaddedCardNumber> <ReasonCode>1</ReasonCode> <ReasonCodeDescription>Transaction is approved.</ReasonCodeDescription> <ReferenceNumber>933222600144</ReferenceNumber> <ResponseCode>1</ResponseCode> <TokenizedPAN/> </CreditCardTransactionResults> <CustomData/> <MerchantId>88800033</MerchantId> <OrderNumber>Test|a4a475c787c2285f</OrderNumber> <Signature>KPvVKY7wdcZMmLoLhiUjTkheSmA=</Signature> <SignatureMethod>SHA1</SignatureMethod> <BinCheckResults> <BIN/> <Brand/> <Country/> <Issuer/> <Subtype/> <Type/> </BinCheckResults> </FraudControlResults> <ShippingDetails> <ShipToAddress>1200 Whitewall Blvd.</ShipToAddress> <ShipToAddress2>Unit 15</ShipToAddress2> <ShipToCity>Boston</ShipToCity> <ShipToCountry>840</ShipToCountry> <ShipToCounty/> <ShipToEmail>[email protected]</ShipToEmail> <ShipToFirstName>John</ShipToFirstName> <ShipToLastName>Smith</ShipToLastName> <ShipToMobile/> <ShipToState>NY</ShipToState> <ShipToTelephone>211-3454-6790</ShipToTelephone> <ShipToZipPostCode>200341</ShipToZipPostCode> </ShippingDetails> </AuthorizeResponse>

Page 26: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

26

Ejemplo de AuthorizeRequest / AuthorizeResponse en XML:

AuthorizeRequest AuthorizeResponse POST https://ecm.firstatlanticcommerce.com/PGServiceXML/Authorize

HTTP/1.1

Content-Type: text/xml

Host: ecm.firstatlanticcommerce.com

Content-Length: 2386

Expect: 100-continue

Connection: Keep-Alive

<AuthorizeRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.firstatlanticcommerce.com/gateway/data"> <TransactionDetails> <AcquirerId>464748</AcquirerId> <MerchantId>MERCHANT_ID HERE</MerchantId> <OrderNumber>Test|b40a41bda7d6402d</OrderNumber> <TransactionCode>0</TransactionCode> <Amount>000000000120</Amount> <Currency>840</Currency> <CurrencyExponent>2</CurrencyExponent> <SignatureMethod>SHA1</SignatureMethod> <Signature>SIGNATURE_HERE</Signature> <IPAddress /> <CustomData /> <CustomerReference /> <ExtensionData /> </TransactionDetails> <CardDetails> <CardNumber>4111111111111111</CardNumber> <CardExpiryDate>0130</CardExpiryDate> <CardCVV2>123</CardCVV2> <IssueNumber /> <StartDate /> <Installments>0</Installments> <DocumentNumber /> <ExtensionData /> </CardDetails> <BillingDetails> <BillToAddress>STREET786</BillToAddress> <BillToAddress2 /> <BillToZipPostCode /> <BillToFirstName /> <BillToLastName /> <BillToCity>BELGARDE</BillToCity> <BillToState /> <BillToCountry /> <BillToEmail /> <BillToTelephone>875684445</BillToTelephone> <BillToCounty /> <BillToMobile /> <ExtensionData /> </BillingDetails> <ThreeDSecureDetails> <ECIIndicator /> <AuthenticationResult /> <TransactionStain /> <CAVV /> </ThreeDSecureDetails> <RecurringDetails> <IsRecurring>false</IsRecurring> <ExecutionDate /> <Frequency /> <NumberOfRecurrences>0</NumberOfRecurrences> </RecurringDetails> <ShippingDetails> <ShipToAddress /> <ShipToAddress2 />

HTTP/1.1 200 OK

Cache-Control: private

Content-Type: text/html; charset=utf-8

Server: Microsoft-IIS/8.5

X-AspNet-Version: 4.0.30319

Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'

Strict-Transport-Security: max-age=31536000;

includeSubdomains=true

X-Frame-Options: SAMEORIGIN

X-XSS-Protection: 1; mode=block

X-Content-Type-Options: nosniff

Referrer-Policy: no-referrer-when-downgrade

Date: Tue, 19 Feb 2019 14:17:07 GMT

Content-Length: 1884

<AuthorizeResponse xmlns="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <AcquirerId>464748</AcquirerId> <BillingDetails> <BillToAddress>STREET786</BillToAddress> <BillToAddress2/> <BillToCity>BELGARDE</BillToCity> <BillToCountry/> <BillToEmail/> <BillToFirstName/> <BillToLastName/> <BillToState/> <BillToTelephone>875684445</BillToTelephone> <BillToZipPostCode/> <BillToCounty/> <BillToMobile/> </BillingDetails> <CreditCardTransactionResults> <AVSResult/> <AuthCode>123456</AuthCode> <CVV2Result>M</CVV2Result> <OriginalResponseCode>00</OriginalResponseCode> <PaddedCardNumber>XXXXXXXXXXXX1111</PaddedCardNumber> <ReasonCode>1</ReasonCode> <ReasonCodeDescription>Transaction is approved.</ReasonCodeDescription> <ReferenceNumber>905014574660</ReferenceNumber> <ResponseCode>1</ResponseCode> <TokenizedPAN/> </CreditCardTransactionResults> <CustomData/> <IPGeoLocationResults> <City/> <CountryLong/> <CountryShort/> <DomainName/> <IPAddress/> <IPResponseCode/> <IPResponseCodeDescription/> <ISP/> <Latitude/> <Longitude/> <Region/> <TimeZone/> <ZipCode/> </IPGeoLocationResults> <MerchantId>88800033</MerchantId> <OrderNumber>Test|b40a41bda7d6402d</OrderNumber> <Signature>DU8gjgUD5JCajxOjl7/mgWdq7Qs=</Signature> <SignatureMethod>SHA1</SignatureMethod>

Page 27: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

27

<ShipToZipPostCode /> <ShipToFirstName /> <ShipToLastName /> <ShipToCity /> <ShipToState /> <ShipToCountry /> <ShipToEmail /> <ShipToTelephone /> <ShipToMobile /> <ShipToCounty /> </ShippingDetails> <FraudDetails> <SessionId /> <AuthResponseCode /> <AVSResponseCode /> <CVVResponseCode /> </FraudDetails> <InterfaceCode></InterfaceCode> <TransactionID>00000000-0000-0000-0000-000000000000</TransactionID> <Version>0</Version> <ExtensionData /> </AuthorizeRequest>

<BinCheckResults> <BIN>411111</BIN> <Brand>VISA</Brand> <Country>UNITED STATES</Country> <Issuer>JPMORGAN CHASE BANK, N.A.</Issuer> <Subtype/> <Type/> </BinCheckResults> <FraudControlResults> <FraudControlId>7TMN0Q08KS3X</FraudControlId> <FraudResponseCode>A</FraudResponseCode> <ReasonCode/> <ReasonCodeDesc/> <ResponseCode>1</ResponseCode> <Score>34</Score> </FraudControlResults> <ShippingDetails> <ShipToAddress/> <ShipToAddress2/> <ShipToCity/> <ShipToCountry/> <ShipToCounty/> <ShipToEmail/> <ShipToFirstName/> <ShipToLastName/> <ShipToMobile/> <ShipToState/> <ShipToTelephone/> <ShipToZipPostCode/> </ShippingDetails> </AuthorizeResponse>

Page 28: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

28

La operación TransactionModification

La operación TransactionModification permite cambios a una transacción previamente autorizada.

Las siguientes operaciones son posibles:

1) Capture

2) Refund

3) Reversal

Nota: Si recibe una notificación de caducidad (timeout) de una transacción de Capture, Reversal o Refund, deberá

revisar los reportes web de FAC para verificar si la transacción fue o no completada.

Tipos de modificación

Capture

La operación Capture se utiliza para capturar una transacción previamente autorizada que no ha sido aún

capturada.

- Si el monto de la captura es igual al de la transacción previamente autorizada, la transacción se enviará para

ser completada durante el siguiente periodo de liquidación.

- Si el monto solicitado de la captura es menor al monto previamente autorizado, la transacción no se

completará hasta que la diferencia sea reversada o que se emita una nueva solicitud de captura que coincida

con el monto autorizado originalmente.

- Si el monto solicitado de la captura es mayor al monto previamente autorizado, se generará un mensaje de

error.

Nota: Informe a FAC si usted planea procesar capturas parciales, pues se requiere de una configuración

específica en nuestro sistema de pasarela de pagos.

Refund

La operación de Refund se utiliza para reembolsar una transacción previamente capturada y liquidada. Una

transacción de reembolso se enviará para ser completada en el siguiente periodo de liquidación.

Nota: Es posible reembolsar una transacción que no ha sido aún completada, pero al hacer esto, tanto la captura

como el reembolso aparecerán en el estado de cuenta de tarjeta de crédito del cliente como un débito seguido de

un crédito. De ser posible, sería preferible evitar esto por lo que se recomienda que la transacción capturada se

reverse antes de su liquidación.

Page 29: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

29

Reversal

La operación de Reversal se puede utilizar para reversar en forma parcial o total una transacción previamente

capturada.

- Si una transacción previamente autorizada se captura en forma parcial solamente, el monto remanente

deberá ser reversado antes de que el monto parcial sea completado.

- Esta operación también se puede utilizar para reversar una transacción capturada en su totalidad, siempre y

cuando la transacción no haya sido enviada para su liquidación. Si la transacción ya ha sido enviada para

liquidación, se tendrá que procesar un reembolso de la misma de acuerdo a la operación Refund descrita

anteriormente.

Nota:

- Si usted necesita procesar reversos parciales por favor informe a FAC, pues para ello se requiere de una

configuración específica en nuestro sistema de pasarela de pagos.

Para una lista completa de códigos de posibles respuestas y de razones de una solicitud de reembolso, favor de

consultar la sección Códigos de Respuesta y Respuestas de Códigos de Razones en la Guía de integración

FACPG2.

TransactionModificationRequest – Descripciones detalladas de campos

Nota:

“R/O/C” se refiere a si la presencia del campo es Requerida (obligatoria), Opcional o Condicional.

N/AN se refiere a si el campo es Numérico o AlfaNumérico.

Sección Nombre del campo Form

ato

Presen

cia

Notas:

TransactionModification Request (Main Body)

ModificationType N(1) R Puede ser uno de 3 valores:

1 = Capture (captura)

2 = Refund (reembolso)

3 = Reversal (reverso)

AcquirerID N(11) R “464748”

Password AN(20)

R Contraseña del comercio

MerchantID N(15) R Su número de FAC ID que le

proporcionó FAC

OrderNumber AN(150)

R Identificador único asignado

por el comercio para la

transacción

Page 30: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

30

Amount N(12) R Monto total de la compra.

Nota: El monto de la compra

deberá presentarse como una

secuencia de 12 caracteres

(por ej. $12.00 se escribiría

“000000001200”)

CurrencyExponent N(1) R El número de dígitos después

del punto decimal del monto

de la compra (por ej. $12.00

= 2)

TransactionModificationResponse – Descripciones detalladas de campos

Nota:

“R/O/C” se refiere a si la presencia del campo es Requerida (obligatoria), Opcional o Condicional.

N/AN se refiere a si el campo es Numérico o AlfaNumérico.

Sección Nobre del campo Form

ato

Notas:

Transaction

Modification

Response

(Main Body)

AcquirerID N(11) El valor pasado en AcquiereId en la

operación AuthorizeRequest

MerchantID N(15) El valor pasado en AcquirerId en la

operación AuthorizeRequest

OrderNumber AN(150)

Identificador único asignado por el

comercio para la transacción

OriginalResponseCode AN(3) Ver Códigos de respuesta de autorización

original en la Guía de integración FACPG2

para consultar los posibles valores de este

parámetro

ReasonCode N(4) Ver Códigos de razón y respuesta de

modificación de transacción en la Guía de

integración FACPG2

ReasonCodeDescription

AN(100)

Ver Códigos de razón y respuesta de

modificación de transacción en la Guía de

integración FACPG2

ResponseCode N(1) Ver Códigos de razón y respuesta de

modificación de transacción en la Guía de

integración FACPG2

Page 31: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

31

Ejemplos de Código Fuente

Modificación de transacción – Capture (SOAP)

Este ejemplo muestra cómo enviar una captura de una transacción previamente autorizada utilizando la

operación de SOAP TransactionModification.

Por favor, tome nota de que en este ejemplo primero se autoriza la transacción y después se envía la

captura.

[TestMethod] public void TestCapture_WithCorrectInfo_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //First send the authorization var authRequest = CreateAuthorizeRequest(MERCH_ID, MERCH_PWD); var authResponse = client.Authorize(authRequest); //Then create the capture with the order number of the authorization we just sent var captureRequest = CreateCaptureRequest(MERCH_ID, MERCH_PWD, authRequest.TransactionDetails.OrderNumber); //Act var captureResponse = client.TransactionModification(captureRequest); //Assert Assert.IsNotNull(captureResponse); Assert.IsTrue(captureResponse.ResponseCode == "1" && captureResponse.ReasonCode == "1101" && captureResponse.ReasonCodeDescription == "Transaction successful"); }

private TransactionModificationRequest CreateCaptureRequest(string merchId, string merchPwd, string orderNumber) { var amount = 1; return new TransactionModificationRequest { ModificationType = 1, //Capture=1 AcquirerId = "464748", MerchantId = merchId, Password = merchPwd, OrderNumber = orderNumber, Amount = AmountFormatted(amount).Trim(), CurrencyExponent = 2 }; }

Page 32: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

32

Modificación de transacción – Reversal (SOAP)

Este ejemplo muestra cómo enviar un reverso de una transacción previamente capturada utilizando la

operación de SOAP TransactionModification.

Por favor, tome nota de que en este ejemplo primero se autoriza la transacción, después se envía la

captura y finalmente se envía el reverso.

[TestMethod] public void TestReversal_WithCorrectInfo_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //First send the authorization var authRequest = CreateAuthorizeRequest(MERCH_ID, MERCH_PWD); var authResponse = client.Authorize(authRequest); //Then create the capture with the order number of the authorization we just sent var captureRequest = CreateCaptureRequest(MERCH_ID, MERCH_PWD, authRequest.TransactionDetails.OrderNumber); //Then create the reversal with the order number of the authorization we just sent var reversalRequest = CreateReversalRequest(MERCH_ID, MERCH_PWD, authRequest.TransactionDetails.OrderNumber); //Act var reversalResponse = client.TransactionModification(reversalRequest); //Assert Assert.IsNotNull(reversalResponse); Assert.IsTrue(reversalResponse.ResponseCode == "1" && reversalResponse.ReasonCode == "1101" && reversalResponse.ReasonCodeDescription == "Transaction successful"); }

private TransactionModificationRequest CreateReversalRequest(string merchId, string merchPwd, string orderNumber) { var amount = 1; return new TransactionModificationRequest { ModificationType = 3, //Reversal=3 AcquirerId = "464748", MerchantId = merchId, Password = merchPwd, OrderNumber = orderNumber, Amount = AmountFormatted(amount).Trim(), CurrencyExponent = 2 }; }

Page 33: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

33

Modificación de transacción – Refund (SOAP)

Este ejemplo muestra cómo enviar un reembolso de una transacción previamente capturada y liquidada

utilizando la operación de SOAP TransactionModification.

Por favor, tome nota de que en este ejemplo primero se autoriza la transacción, después se envía la

captura y finalmente se envía el reembolso.

Este ejemplo no completa la transacción, pues la liquidación es un proceso batch que corre diariamente.

[TestMethod] public void TestRefund_WithCorrectInfo_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //First send the authorization var authRequest = CreateAuthorizeRequest(MERCH_ID, MERCH_PWD); var authResponse = client.Authorize(authRequest); //Then we send the capture with the order number of the authorization we just sent var captureRequest = CreateCaptureRequest(MERCH_ID, MERCH_PWD, authRequest.TransactionDetails.OrderNumber); var captureResponse = client.TransactionModification(captureRequest); //Then create the refund with the order number of the authorization we just sent var refundRequest = CreateRefundRequest(MERCH_ID, MERCH_PWD, authRequest.TransactionDetails.OrderNumber); //Act var refundResponse = client.TransactionModification(refundRequest); //Assert Assert.IsNotNull(refundResponse); Assert.IsTrue(refundResponse.ResponseCode == "1" && refundResponse.ReasonCode == "1101" && refundResponse.ReasonCodeDescription == "Transaction successful"); }

private TransactionModificationRequest CreateRefundRequest(string merchId, string merchPwd, string orderNumber) { var amount = 1; return new TransactionModificationRequest { ModificationType = (int)ModificationType.Refund, AcquirerId = "464748", MerchantId = merchId, Password = merchPwd, OrderNumber = orderNumber, Amount = AmountFormatted(amount).Trim(), CurrencyExponent = 2 }; }

Page 34: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

Mensajes de Ejemplo

Ejemplo de TransactionModificationRequest / TransactionModificationResponse en XML para una captura:

TransactionModificationRequest TransactionModificationResponse POST https://ecm.firstatlanticcommerce.com/PGServiceXML/TransactionModification HTTP/1.1 Content-Type: application/x-www-form-urlencoded Host: ecm.firstatlanticcommerce.com Content-Length: 495 Expect: 100-continue <?xml version="1.0" encoding="utf-8"?> <TransactionModificationRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.firstatlanticcommerce.com/gateway/data"> <AcquirerId>464748</AcquirerId> <Amount>000000000100</Amount> <CurrencyExponent>2</CurrencyExponent> <MerchantId>YOUR_MERCHANT_HERE</MerchantId> <ModificationType>1</ModificationType> <OrderNumber>Test|a4a475c787c2285f</OrderNumber> <Password>*********</Password> </TransactionModificationRequest>

HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html Server: X-AspNet-Version: 4.0.30319 Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline' Strict-Transport-Security: max-age=31536000; includeSubdomains=true X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Date: Thu, 28 Nov 2019 22:19:50 GMT Content-Length: 444 <TransactionModificationResponse xmlns="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <AcquirerId>464748</AcquirerId> <MerchantId>88800033</MerchantId> <OrderNumber>Test|a4a475c787c2285f</OrderNumber> <OriginalResponseCode/> <ReasonCode>1101</ReasonCode> <ReasonCodeDescription>Transaction successful</ReasonCodeDescription> <ResponseCode>1</ResponseCode> </TransactionModificationResponse>

Page 35: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

35

Ejemplo de TransactionModificationRequest / TransactionModificationResponse en SOAP para una captura:

TransactionModificationRequest TransactionModificationResponse POST https://ecm.firstatlanticcommerce.com/PGService/Services.svc HTTP/1.1 Content-Type: text/xml; charset=utf-8 SOAPAction: "http://schemas.firstatlanticcommerce.com/gateway/IServices/TransactionModification" Host: ecm.firstatlanticcommerce.com Content-Length: 611 Expect: 100-continue Accept-Encoding: gzip, deflate <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <TransactionModification xmlns="http://schemas.firstatlanticcommerce.com/gateway"> <Request xmlns:a="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:AcquirerId>464748</a:AcquirerId> <a:Amount>000000000100</a:Amount> <a:CurrencyExponent>2</a:CurrencyExponent> <a:MerchantId>MERCHANT_HERE</a:MerchantId> <a:ModificationType>1</a:ModificationType> <a:OrderNumber>Test|b69013d69fa1a47f</a:OrderNumber> <a:Password>PASSWORD_HERE</a:Password> </Request> </TransactionModification> </s:Body> </s:Envelope>

HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Server: Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline' Strict-Transport-Security: max-age=31536000; includeSubdomains=true X-Frame-Options: sameorigin X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Date: Fri, 24 Jan 2020 20:31:32 GMT Content-Length: 686 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <TransactionModificationResponse xmlns="http://schemas.firstatlanticcommerce.com/gateway"> <TransactionModificationResult xmlns:a="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:AcquirerId>464748</a:AcquirerId> <a:MerchantId>MERCHANT_ID</a:MerchantId> <a:OrderNumber>Test|b69013d69fa1a47f</a:OrderNumber> <a:OriginalResponseCode/> <a:ReasonCode>1101</a:ReasonCode> <a:ReasonCodeDescription>Transaction successful</a:ReasonCodeDescription> <a:ResponseCode>1</a:ResponseCode> </TransactionModificationResult> </TransactionModificationResponse> </s:Body> </s:Envelope>

Page 36: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

La operación de pago por token o tokenización

En la operación de tokenización se toma un número de tarjeta y se devuelve un número de tarjeta tokenizado.

Favor de referirse a la sección de Pagos por token utilizando la operación Authorize (y Authorize3DS) de la Guía

de integración FACPG2, para mayor información sobre los usos y formatos de tokenización.

- Aunque usted puede solicitar un PAN tokenizado utilizando los métodos Authorize o Authorize3DS, algunos

comercios prefieren convertir los números de tarjeta que tienen almacenados “en masa”. Este método se

puede utilizar para hacer esto.

- Una vez creado un token, usted puede utilizar el PAN tokenizado en lugar del número de tarjeta y fecha de

expiración para todas las transacciones futuras del mismo tarjetahabiente. Si desea reducir el alcance de

algunas partes de sus sistema para cumplir con PCI, usted no debería almacenar el número original de la

tarjeta y debería eliminarlo al momento de ser tokenizado.

Nota IMPORTANTE:

• Cuando se tokeniza un número de tarjeta de crédito mediante la operación Tokenize, la fecha de

vencimiento es obligatoria y se almacena en la base de datos FAC para su uso futuro durante la

Autorización.

• Sin embargo, la validez de la Fecha de Vencimiento no se puede verificar en el Banco hasta que se envíe

posteriormente una Autorización.

• Esto significa que si la fecha de vencimiento proporcionada es incorrecta al llamar a la función Tokenize,

cualquier autorización posterior se rechazará en el banco independientemente de la fecha de

vencimiento proporcionada durante la autorización (porque solo se utiliza la fecha de vencimiento

almacenada y fue incorrecta en el citado ejemplo )

• Se recomienda utilizar solamente Authorize o Authorize3DS con TransactionCode = 128. Estas

operaciones, con el mencionado código de transacción, tokenizarán el número de la tarjeta de crédito

solo si la autorización tiene éxito, lo que significa que la fecha de vencimiento y el CVV se han verificado

en el banco previamente.

Page 37: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

37

TokenizeRequest – Descripciones detalladas de campos

Nobre del

campo

Format

o

Presenc

ia

Valor

CardNumb

er

N(19) R Número de tarjeta a ser tokenizado

Customer Reference

AN(255) R Nombre o número de identificación interno de cliente. Debería

ser único para cada cliente (tarjetahabiente)

ExpiryDate N(4) R Fecha de expiración (MMYY) de la tarjeta

Merchant Number

N(8) R Su número de FAC ID que le proporcionó FAC

Signature AN(28) R Ver Creación y verificación de firma en la Guía de integración FACPG2 o en los ejemplos que vienen más abajo

TokenizeResponse – Descripciones detalladas de campos

Nobre del

campo

Format

o

Presenc

ia

Valor

ErrorMsg AN(255) O Contiene información sobre cualquier tipo de error

Success Boolean R Puede ser True o False

Token AN(19) R El número tokenizado de tarjeta

Ejemplo:

CardNumber: 4111111111111111

ExpiryDate: 1220

Token: 411111_000011111

Page 38: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

38

Ejemplos de Código Fuente

Tokenización (SOAP)

Este ejemplo muestra cómo enviar una solicitud de tokenización de tarjeta de crédito utilizando la

operación Tokenize de SOAP

Si el proceso se completa en forma exitosa, se obtiene un token para la tarjeta de crédito en cuestión.

[TestMethod] public void TestTokenize_WithCorrectCardInfo_ShouldSucceed() { //Arrange var client = new TokenizationClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var tokRequest = CreateTokenizationRequest(MERCH_ID, MERCH_PWD); //Act var tokResponse = client.Tokenize(tokRequest); //Assert Assert.IsNotNull(tokResponse); Assert.IsTrue(tokResponse.Success); Assert.IsNotNull(tokResponse.Token); Assert.IsTrue(tokResponse.Token != tokRequest.CardNumber); Assert.IsTrue(string.IsNullOrEmpty(tokResponse.ErrorMsg)); }

private TokenizationSvc.TokenizeRequest CreateTokenizationRequest(string merchId, string merchPwd) { return new TokenizationSvc.TokenizeRequest { CardNumber="4111111111111111", ExpiryDate = "1220", MerchantNumber=merchId, Signature = GenerateTokenSignature(merchId, merchPwd) }; }

private string GenerateTokenSignature(string merchId, string merchPwd) { var source = string.Format("{0}{1}{2}", merchPwd, merchId, "464748"); return GenerateSignature(source); }

Page 39: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

39

Mensajes de Ejemplo

Ejemplo de TokenizeRequest / TokenizeResponse en SOAP: POST

https://ecm.firstatlanticcommerce.com/PGService/Tokenization.svc

HTTP/1.1

Content-Type: text/xml; charset=utf-8

SOAPAction:

"http://schemas.firstatlanticcommerce.com/gateway/Tokenization/Token

ize"

Host: ecm.firstatlanticcommerce.com

Content-Length: 520

Expect: 100-continue

Accept-Encoding: gzip, deflate

Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

<s:Body>

<Tokenize

xmlns="http://schemas.firstatlanticcommerce.com/gateway">

<Request

xmlns:a="http://schemas.firstatlanticcommerce.com/gateway/data"

xmlns:i="http://www.w3.org/2001/XMLSchema-

instance">

<a:CardNumber>4111111111111111</a:CardNumber>

<a:CustomerReference i:nil="true"/>

<a:ExpiryDate>0121</a:ExpiryDate>

<a:MerchantNumber>YOUR_MERCHANT</a:MerchantNumber>

<a:Signature>m//jB6Dpgl3OyXeA/thFQNelXb0=</a:Signature>

</Request>

</Tokenize>

</s:Body>

</s:Envelope>

HTTP/1.1 200 OK

Content-Type: text/xml; charset=utf-8

Server:

Content-Security-Policy: default-src https: 'unsafe-eval'

'unsafe-inline'

Strict-Transport-Security: max-age=31536000;

includeSubdomains=true

X-Frame-Options: sameorigin

X-XSS-Protection: 1; mode=block

X-Content-Type-Options: nosniff

Referrer-Policy: no-referrer-when-downgrade

Date: Fri, 24 Jan 2020 21:04:43 GMT

Content-Length: 412

<s:Envelope

xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

<s:Body>

<TokenizeResponse

xmlns="http://schemas.firstatlanticcommerce.com/gateway">

<TokenizeResult

xmlns:a="http://schemas.firstatlanticcommerce.com/gateway/da

ta" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

<a:ErrorMsg/>

<a:Success>true</a:Success>

<a:Token>411111_04NK01111</a:Token>

</TokenizeResult>

</TokenizeResponse>

</s:Body>

</s:Envelope>

Ejemplo de TokenizeRequest / TokenizeResponse en XML:

POST

https://ecm.firstatlanticcommerce.com/PGServiceXML/Tokeniz

e HTTP/1.1

Content-Type: application/x-www-form-urlencoded

Host: ecm.firstatlanticcommerce.com

Content-Length: 369

Expect: 100-continue

Connection: Keep-Alive

<?xml version="1.0" encoding="utf-8"?>

<TokenizeRequest

xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://schemas.firstatlanticcommerce.com/gateway/da

ta">

<CardNumber>4111111111111111</CardNumber>

<ExpiryDate>0121</ExpiryDate>

<MerchantNumber>YOUR_MERCHANT</MerchantNumber>

<Signature>m//jB6Dpgl3OyXeA/thFQNelXb0=</Signature

>

</TokenizeRequest>

HTTP/1.1 200 OK

Cache-Control: private

Content-Type: text/html

Server:

X-AspNet-Version: 4.0.30319

Content-Security-Policy: default-src https: 'unsafe-eval'

'unsafe-inline'

Strict-Transport-Security: max-age=31536000;

includeSubdomains=true

X-Frame-Options: sameorigin

X-XSS-Protection: 1; mode=block

X-Content-Type-Options: nosniff

Referrer-Policy: no-referrer-when-downgrade

Date: Fri, 24 Jan 2020 21:08:33 GMT

Content-Length: 216

<TokenizeResponse

xmlns="http://schemas.firstatlanticcommerce.com/gateway/d

ata" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

<ErrorMsg/>

<Success>true</Success>

<Token>411111_04NK01111</Token>

</TokenizeResponse>

Page 40: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

40

La operación 3D-Secure

3-D Secure es un protocolo XML diseñado para agregar una capa de seguridad a las transacciones de tarjetas de

crédito y débito.

El protocolo utiliza mensajes XML que se envían a través de conexiones SSL con autenticación de cliente

(esto asegura la autenticidad tanto del servidor como del cliente, utilizando certificados digitales).

La intención de este Sistema es que los tarjetahabientes reduzcan el riesgo de que otras personas

puedan utilizar sus tarjetas para cometer fraudes a través del internet.

La ventaja para los comercios es la reducción de contracargos por concepto de “cargos no autorizados”.

La operación Authorize3DS utiliza el mensaje Authorize3DSRequest para mandar datos de 3DS Authorization

que se utilizan para construir una forma HTML con campos ocultos. Esta forma se devuelve en la operación

Authorize3DSResponse.

Este método es diferente al método de web Authorize en que la respuesta que se devuelve no es la autorización

final; más bien se trata de una página HTML con código JavaScript integrado que debe ser re-dirigido al

navegador del tarjetahabiente. Esto es necesario para que la porción de autenticación de una transacción con

seguridad 3D ocurra directamente entre el navegador del tarjetahabiente y su banco emisor.

Por esta razón, usted deberá hacer dos cosas para utilizar estos métodos en la web:

1) Publique la respuesta de este mensaje, sin modificaciones, de vuelta en el navegador del

tarjetahabiente.

2) Desarrolle una página web segura utilizando HTTPS para recibir la información de la autorización final

en 3DS. El URL de esta página deberá incluirse en el campo MerchantResponseURL de la solicitud

Authorize3DS.

Nota importante

Cuando se invoca la función Authorize3DS ejecuta solo la primera parte de la operación:

• Cualquier información de error detectada en los parámetros Authorize3DSRequest se devolverá dentro

de un formulario HTML, de vuelta al MerchantResponseURL especificado. Ver ejemplo para más

detalles.

• Si no se detectaron errores en Authorize3DS, el formulario HTML devuelto redirigirá al usuario a la

página de autenticación 3DS del banco. Después de que el usuario se autentica, el usuario es redirigido a

MerchantResponseURL y esa redirección también lleva un formulario HTML con el resultado de la

autenticación (campo AuthenticationResult y ECIIndicator) y la prueba de autenticación (campo CAVV).

Ver ejemplo para más detalles.

Page 41: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

41

3D-Secure con Tokenizacion

En la actualidad la mayoría de los bancos exigen que las transacciones se realicen exclusivamente como

transacciones 3D-Secure.

Al usar la “card on file”, la tarjeta debe ser Tokenizada previamente usando el método Tokenize

explicado anteriormente. El CVV no se proporcionará durante el proceso de tokenización. Para más

información consultar aquí.

La tarjeta Tokenizada y el CVV (el CVV que es capturado por el usuario cada vez) deberán proporcionarse

en la operación Authorize3Ds.

Aquí se proporciona un ejemplo o tokenización con 3D-Secure.

Authorize3DSRequest – Descripciones detalladas de campos

Sección Nobre del campo Format

o

Presenci

a

Notas:

Authorize3DSReque

st

(Main Body)

MerchantResponseURL AN(250) R El URL de una página web

segura utilizando HTTPS para

recibir la información de la

autorización final en 3DS.

BillingDetails Ver la sección, AuthorizeRequest, BillingDetails en la Guía de integración

FACPG2

CardDetails Ver la sección, AuthorizeRequest, CardDetails en la Guía de integración

FACPG2

TransactionDetails Ver la sección, AuthorizeRequest, TransactionDetails en la Guía de integración

FACPG2

FraudDetails Ver la sección, AuthorizeRequest, FraudDetails en la Guía de integración

FACPG2

Authorize3DSResponse – Descripciones detalladas de campos

Sección Nobre del campo Format

o

Notas:

Authorize3DSRespons

e

(Main Body)

HTMLFormData AN(250) Página HTML con JavaScript que

se debe postear de regreso al

navegador del usuario

ResponseCode N(4) Responde con un "00" si la

autorización procede o "03" si hay

algún problema

ResponseCodeDescription AN(100) Descripción de la respuesta

Page 42: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

42

TokenizedPAN N(19) Se despliega el número de tarjeta

tokenizado con solicitudes de

tokenización y autorizaciones

tokenizadas

3DSecure Authentication Result (EcIIndicator, AuthenticationResult, CAVV)

Page 43: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

43

Ejemplos de Código Fuente

Authorize3DS (SOAP)

Este ejemplo muestra cómo enviar una autorización 3DS utilizando la operación Authorize3DS de SOAP

Este ejemplo solamente verifica la tarjeta registrada en 3DS.

El resultado de invocar la operación Authorize3DS es una forma HTML que se presentará al usuario para

continuar con el paso de autenticación en el proceso 3D Secure.

[TestMethod] public void TestAuthorize3DS_WithAuthOnly_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var authRequest = CreateAuthorize3DSRequest(MERCH_ID, MERCH_PWD); authRequest.TransactionDetails.TransactionCode = 0 + 64; //AuthenticateOnly=64 //Act var authResponse = client.Authorize3DS(authRequest); //Assert Assert.IsNotNull(authResponse); Assert.IsTrue(authResponse.ResponseCode == "0" && authResponse.ResponseCodeDescription == "Success"); Assert.IsFalse(string.IsNullOrEmpty(authResponse.HTMLFormData)); Assert.IsTrue(authResponse.HTMLFormData.StartsWith("<HTML><BODY><FORM ID=")); Assert.IsTrue(authResponse.HTMLFormData.Contains("Please click on the Submit button to continue processing")); }

private FPG2Svc.Authorize3DSRequest CreateAuthorize3DSRequest(string merchId, string merchPwd) { var request = new FPG2Svc.Authorize3DSRequest { CardDetails = GetCardDetails(), TransactionDetails = GetTransactionDetails(merchId, merchPwd, 0), ShippingDetails = GetShippingDetails(), BillingDetails = GetBillingDetails(), RecurringDetails = GetRecurringDetails(), FraudDetails = GetFraudDetails(), MerchantResponseURL ="https://Merchant.com/MerchantResponseURL" }; return request; }

Page 44: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

44

private static FACPG2Svc.TransactionDetails GetTransactionDetails(string merchId, string merchPwd, int tcode) { var amount = 1; var currency = "840"; var order = GenOrderNum(); return new FACPG2Svc.TransactionDetails { Amount = AmountFormatted(amount).Trim(), Currency = currency, CurrencyExponent = 2, TransactionCode = tcode, OrderNumber = order, AcquirerId = "464748", MerchantId = merchId, Signature = GenerateSignature(merchId, merchPwd, order, amount, currency), SignatureMethod = "SHA1", CustomerReference = $"This is a test for merchant: {merchId}" }; }

public static string GenerateSignature(string merchId, string merchPwd, string ordNum, decimal amount, string curr) { var source = string.Format("{0}{1}{2}{3}{4}{5}", merchPwd, merchId, "464748", ordNum, AmountFormatted(amount).Trim(), curr.Trim()); //HPP Auth+3DS (trxn code 256) requires SHA1 signature no longer than 28 characters //so HPP signature cannot be URL-encoded return GenerateSignature(source); } public static string GenerateSignature(string source) { var provider = new SHA1CryptoServiceProvider(); var bytearray = Encoding.UTF8.GetBytes(source); var buffer = provider.ComputeHash(bytearray); var hashValue = Convert.ToBase64String(buffer); return hashValue; } public static string AmountFormatted(decimal amount) { var factor = Math.Pow(10, 2); return Math.Round(amount * (decimal)factor, 0).ToString().PadLeft(12, '0'); }

Page 45: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

45

Authorize3DS (XML)

[TestMethod] public void TestAuthorize3DS_WithCorrectCardInfo_ShouldSucceed() { //Arrange ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; WebUtils.AcceptCerts(); var authRequest = CreateAuthorize3DSRequest(MERCH_ID, MERCH_PWD); var authRequestBody = ToXML(authRequest); //Act var authResponseBody = ExecXmlAction(BASE_XML_URL, authRequestBody, "Authorize3DS"); var authResponse = LoadFromXMLString(typeof(FACPG2Svc.Authorize3DSResponse), authResponseBody) as FACPG2Svc.Authorize3DSResponse; //Assert Assert.IsNotNull(authResponse); Assert.IsTrue(authResponse.ResponseCode == "0" && authResponse.ResponseCodeDescription == "Success"); Assert.IsFalse(string.IsNullOrEmpty(authResponse.HTMLFormData)); Assert.IsTrue(authResponse.HTMLFormData.StartsWith("<HTML><BODY><FORM ID=")); Assert.IsTrue(authResponse.HTMLFormData.Contains("Please click on the Submit button to continue processing")); }

private Authorize3DSRequest CreateAuthorize3DSRequest(string merchId, string merchPwd) { var request = new Authorize3DSRequest { CardDetails = GetCardDetails(), TransactionDetails = GetTransactionDetails(merchId, merchPwd, 0), ShippingDetails = GetShippingDetails(), BillingDetails = GetBillingDetails(), RecurringDetails = GetRecurringDetails(), FraudDetails = GetFraudDetails(), MerchantResponseURL ="https://Merchant.com/MerchantResponseURL" }; return request; }

private static TransactionDetails GetTransactionDetails(string merchId, string merchPwd, int tcode) { var amount = 1; var currency = "840"; var order = GenOrderNum(); return new TransactionDetails {

Page 46: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

46

Amount = AmountFormatted(amount).Trim(), Currency = currency, CurrencyExponent = 2, TransactionCode = tcode, OrderNumber = order, AcquirerId = "464748", MerchantId = merchId, Signature = GenerateSignature(merchId, merchPwd, order, amount, currency), SignatureMethod = "SHA1", CustomerReference = $"This is a test for merchant: {merchId}" }; }

public static string GenerateSignature(string merchId, string merchPwd, string ordNum, decimal amount, string curr) { var source = string.Format("{0}{1}{2}{3}{4}{5}", merchPwd, merchId, "464748", ordNum, AmountFormatted(amount).Trim(), curr.Trim()); //HPP Auth+3DS (trxn code 256) requires SHA1 signature no longer than 28 characters //so HPP signature cannot be URL-encoded return GenerateSignature(source); } public static string GenerateSignature(string source) { var provider = new SHA1CryptoServiceProvider(); var bytearray = Encoding.UTF8.GetBytes(source); var buffer = provider.ComputeHash(bytearray); var hashValue = Convert.ToBase64String(buffer); return hashValue; } public static string AmountFormatted(decimal amount) { var factor = Math.Pow(10, 2); return Math.Round(amount * (decimal)factor, 0).ToString().PadLeft(12, '0'); }

Page 47: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

47

public static string ExecXmlAction(string baseUrl, string requestBody, string xmlAction) { var url = $"{baseUrl}/PGServiceXML/{xmlAction}"; string ResponseRaw = PostXmlRequest(url, requestBody); return ResponseRaw; } /// <summary> /// Post the XML request to the Server /// </summary> /// <param name="baseUrl"></param> /// <param name="requestBody"></param> /// <returns></returns> public static string PostXmlRequest(string url, string requestBody) { var postData = Encoding.UTF8.GetBytes(requestBody); var request = WebRequest.Create(url) as HttpWebRequest; if (request == null) { throw new Exception("HttpWebRequest initialization failed"); } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; using (var requestStream = request.GetRequestStream()) { requestStream.Write(postData, 0, postData.Length); using (var responseStream = request.GetResponse().GetResponseStream()) using (var reader = new StreamReader(responseStream)) { return reader.ReadToEnd(); } } }

Page 48: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

48

/// <summary> /// Serializes an Object to XML /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string ToXML(object obj) { var stringwriter = new StringWriter(); var serializer = new XmlSerializer(obj.GetType()); serializer.Serialize(stringwriter, obj); var rslt = stringwriter.ToString(); //Add default namespace to the Request rslt = rslt.Replace(@"Request xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">", @"Request xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.firstatlanticcommerce.com/gateway/data"">"); //Make sure the encoding is utf-8 return rslt.Replace(@"encoding=""utf-16""?", @"encoding=""utf-8""?"); }

/// <summary> /// Deserializes a string into an object of the specified Type /// </summary> /// <param name="myType"></param> /// <param name="xmlText"></param> /// <returns></returns> public static object LoadFromXMLString(Type myType, string xmlText) { var xmlBody = @"<?xml version=""1.0"" encoding=""utf-8""?>" + "\n" + xmlText; //Remove default namespace otherwise Deserialization fails xmlBody = xmlBody.Replace(@"Response xmlns=""http://schemas.firstatlanticcommerce.com/gateway/data"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">", @"Response xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">"); var stringReader = new System.IO.StringReader(xmlBody); var serializer = new XmlSerializer(myType); return serializer.Deserialize(stringReader); }

Page 49: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

49

Tokenizacion con 3D-Secure

[TestMethod] public void TestAuthorize3DS_WithAuthOnly_ShouldSucceed() { //Arrange var client = new ServicesClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //First send the Tokenization var tokClient = new TokenizationClient(); var crdDtls = GetVisaTestCard1Details(); var tokRequest = CreateTokenizationRequest(MERCH_ID, MERCH_PWD, crdDtls.CardNumber, crdDtls.CardExpiryDate); var tokResponse = tokClient.Tokenize(tokRequest); Assert.IsNotNull(tokResponse); Assert.IsTrue(tokResponse.Success); Assert.IsNotNull(tokResponse.Token); //Assign the card Token obtained during Tokenization var crdDetails = new CardDetails { CardNumber = tokResponse.Token, CardExpiryDate = crdDtls.CardExpiryDate, CardCVV2 = crdDtls.CardCVV2 }; var authRequest = CreateAuthorize3DSRequest(MERCH_ID, MERCH_PWD, crdDetails); //Act //Call the Authorize3Ds method var authResponse = client.Authorize3DS(authRequest); //Assert Assert.IsNotNull(authResponse); Assert.IsTrue(authResponse.ResponseCode == "0" && authResponse.ResponseCodeDescription == "Success"); Assert.IsFalse(string.IsNullOrEmpty(authResponse.HTMLFormData)); Assert.IsTrue(authResponse.HTMLFormData.StartsWith("<HTML><BODY><FORM ID=")); Assert.IsTrue(authResponse.HTMLFormData.Contains("Please click on the Submit button to continue processing")); }

public static FACPG2Svc.CardDetails GetVisaTestCard1Details() { return new FACPG2Svc.CardDetails { CardNumber = "4111111111111111", CardExpiryDate = "1220", CardCVV2 = "234" }; }

Page 50: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

50

public static FACPG2Tok.TokenizeRequest CreateTokenizationRequest(string merchId, string

merchPwd, string cardNumber, string expiryDate)

{ return new FACPG2Tok.TokenizeRequest { CardNumber = cardNumber, ExpiryDate = expiryDate, MerchantNumber = merchId, Signature = GenerateTokenSignature(merchId, merchPwd) }; }

private static string GenerateTokenSignature(string merchId, string merchPwd) { var source = string.Format("{0}{1}{2}", merchPwd, merchId, "464748"); return GenerateSignature(source); } public static string GenerateSignature(string source) { var provider = new SHA1CryptoServiceProvider(); var bytearray = Encoding.UTF8.GetBytes(source); var buffer = provider.ComputeHash(bytearray); var hashValue = Convert.ToBase64String(buffer); return hashValue; }

public static FACPG2Svc.Authorize3DSRequest CreateAuthorize3DSRequest(string merchId, string merchPwd, FACPG2Svc.CardDetails crdDetails) { var resp = CreateAuthorize3DSRequest(merchId, merchPwd); resp.CardDetails = crdDetails; return resp; }

Page 51: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

51

public static FACPG2Svc.Authorize3DSRequest CreateAuthorize3DSRequest(string merchId, string merchPwd) { var request = new FACPG2Svc.Authorize3DSRequest { CardDetails = GetVisaTestCard1Details(), TransactionDetails = GetTransactionDetails(merchId, merchPwd, (int)TransactionCodes.None), ShippingDetails = GetShippingDetails(), BillingDetails = GetBillingDetails(), RecurringDetails = GetRecurringDetails(), FraudDetails = GetFraudDetails(), MerchantResponseURL = "https://ecm.firstatlanticcommerce.com/FACPGTest/receiveInfo.aspx" }; return request; }

Page 52: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

Ejemplos de Mensajes

Authorize3DS (SOAP) flujo normal

Authorize3DS SOAP Request devuelve un formulario HTML que comienza el proceso de autenticacion 3DS.

Authorize3DS SOAP Response (con el HTMLFormData que sera auto-posted cuando sea desplegado en el browser)

Request Response POST https://ecm.firstatlanticcommerce.com/PGService/Services.svc

HTTP/1.1

Content-Type: text/xml; charset=utf-8

SOAPAction:

"http://schemas.firstatlanticcommerce.com/gateway/IServices/Authorize3DS"

Host: ecm.firstatlanticcommerce.com

Content-Length: 2384

Expect: 100-continue

Accept-Encoding: gzip, deflate

Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

<s:Body>

<Authorize3DS

xmlns="http://schemas.firstatlanticcommerce.com/gateway">

<Request

xmlns:a="http://schemas.firstatlanticcommerce.com/gateway/data"

xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

<a:BillingDetails>

<a:BillToAddress>1200 Whitewall Blvd.</a:BillToAddress>

<a:BillToAddress2>Unit 15</a:BillToAddress2>

<a:BillToCity>Boston</a:BillToCity>

<a:BillToCountry>840</a:BillToCountry>

<a:BillToEmail>[email protected]</a:BillToEmail>

<a:BillToFirstName>John</a:BillToFirstName>

<a:BillToLastName>Smith</a:BillToLastName>

<a:BillToState>NY</a:BillToState>

<a:BillToTelephone>211-3454-6790</a:BillToTelephone>

<a:BillToZipPostCode>200341</a:BillToZipPostCode>

<a:BillToCounty i:nil="true"/>

<a:BillToMobile i:nil="true"/>

</a:BillingDetails>

<a:CardDetails>

<a:CardCVV2>234</a:CardCVV2>

<HTML><BODY><FORM ID="frmHtmlCheckout" NAME="frmHtmlCheckout" METHOD="POST"

ACTION="https://ecm.firstatlanticcommerce.com/SENTRY/PaymentGateway/

Application/DirectAuthLink.aspx">

<NOSCRIPT>

<BR><BR>

<H1 ALIGN="center">Processing your Transaction</H1>

<H2 ALIGN="center">JavaScript is currently disabled or is

not supported by your browser.</H2><BR>

<H3 ALIGN="center">Please click on the Submit button to continue

processing.</H3>

<INPUT TYPE="submit" value="Submit" ID="submit" NAME="submit">

</NOSCRIPT>

<INPUT TYPE="hidden" NAME="Version" ID="Version" VALUE="1.0.0">

<INPUT TYPE="hidden" NAME="AcqID" ID="AcqID" VALUE="464748">

<INPUT TYPE="hidden" NAME="MerID" ID="MerID" VALUE="#### MERCHANT ID HERE

####">

<INPUT TYPE="hidden" NAME="PurchaseAmt" ID="PurchaseAmt"

VALUE="000000000100">

<INPUT TYPE="hidden" NAME="PurchaseCurrency" ID="PurchaseCurrency"

VALUE="840">

<INPUT TYPE="hidden" NAME="PurchaseCurrencyExponent"

ID="PurchaseCurrencyExponent" VALUE="2">

<INPUT TYPE="hidden" NAME="OrderID" ID="OrderID"

VALUE="Test|834c6ba3448f6861">

<INPUT TYPE="hidden" NAME="CardNo" ID="CardNo" VALUE="###### CARD HERE

######">

<INPUT TYPE="hidden" NAME="CardExpDate" ID="CardExpDate" VALUE="0122">

<INPUT TYPE="hidden" NAME="CardCVV2" ID="CardCVV2" VALUE="#####CVV

HERE#####">

<INPUT TYPE="hidden" NAME="SignatureMethod" ID="SignatureMethod"

VALUE="SHA1">

<INPUT TYPE="hidden" NAME="Signature" ID="Signature"

VALUE="LBqvpeOyyhe/ab3635N47YBUnRY=">

<INPUT TYPE="hidden" NAME="CaptureFlag" ID="CaptureFlag" VALUE="M">

Page 53: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

53

<a:CardExpiryDate>01/22</a:CardExpiryDate>

<a:CardNumber>CARD_HERE</a:CardNumber>

<a:IssueNumber i:nil="true"/>

<a:StartDate i:nil="true"/>

<a:DocumentNumber i:nil="true"/>

<a:Installments>0</a:Installments>

</a:CardDetails>

<a:MerchantResponseURL>https://Merchant.com/MerchantResponseURL

</a:MerchantResponseURL>

<a:TransactionDetails>

<a:AcquirerId>464748</a:AcquirerId>

<a:Amount>000000000100</a:Amount>

<a:Currency>840</a:Currency>

<a:CurrencyExponent>2</a:CurrencyExponent>

<a:CustomData i:nil="true"/>

<a:IPAddress i:nil="true"/>

<a:MerchantId>YOUR_MERCHANT</a:MerchantId>

<a:OrderNumber>Test|bc7396483095e39a</a:OrderNumber>

<a:Signature>t0mM0zJ1VBejLh7X94RUuO+L3ro=</a:Signature>

<a:SignatureMethod>SHA1</a:SignatureMethod>

<a:TransactionCode>64</a:TransactionCode>

<a:CustomerReference>This is a test for merchant:

88800033</a:CustomerReference>

</a:TransactionDetails>

<a:RecurringDetails i:nil="true"/>

<a:FraudDetails i:nil="true</Request>

</Authorize3DS>

</s:Body>

</s:Envelope>

<INPUT TYPE="hidden" NAME="MerRespURL" ID="MerRespURL"

VALUE="https://myserver.com">

<INPUT TYPE="hidden" NAME="CustomData" ID="CustomData" VALUE="">

<INPUT TYPE="hidden" NAME="InterfaceCode" ID="InterfaceCode"

VALUE="FACPG2.WCF">

<INPUT TYPE="hidden" NAME="BillToAddress1" ID="BillToAddress1" VALUE="1200

Whitewall Blvd.">

<INPUT TYPE="hidden" NAME="BillToAddress2" ID="BillToAddress2" VALUE="Unit

15">

<INPUT TYPE="hidden" NAME="BillToPostCode" ID="BillToPostCode"

VALUE="200341">

<INPUT TYPE="hidden" NAME="BillToFirstName" ID="BillToFirstName"

VALUE="John">

<INPUT TYPE="hidden" NAME="BillToLastName" ID="BillToLastName"

VALUE="Smith">

<INPUT TYPE="hidden" NAME="BillToCity" ID="BillToCity" VALUE="Boston">

<INPUT TYPE="hidden" NAME="BillToState" ID="BillToState" VALUE="NY">

<INPUT TYPE="hidden" NAME="BillToCountry" ID="BillToCountry" VALUE="840">

<INPUT TYPE="hidden" NAME="BillToEmail" ID="BillToEmail"

VALUE="[email protected]">

<INPUT TYPE="hidden" NAME="BillToTelephone" ID="BillToTelephone"

VALUE="211-3454-6790">

<INPUT TYPE="hidden" NAME="AuthenticationOnly" ID="AuthenticationOnly"

VALUE="Y">

</FORM>

<SCRIPT LANGUAGE="JavaScript">

Checkout();

function Checkout() {

document.frmHtmlCheckout.action =

"https://ecm.firstatlanticcommerce.com/SENTRY/PaymentGateway/Application/

DirectAuthLink.aspx";

document.frmHtmlCheckout.submit();

}

</SCRIPT>

</BODY></HTML>

Page 54: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

54

HTTP request del HTMLFormData obtenido en la respuesta SOAP de Authorize3DS

HTTP response del resultado (en este caso exitoso) del proceso Authorize3DS process dentro de un HTML form que sera auto-

posteado al MerchantResponseURL

Request Response POST https://ecm.firstatlanticcommerce.com/SENTRY/PaymentGateway/ Application/DirectAuthLink.aspx HTTP/1.1 Content-Type: application/x-www-form-urlencoded Host: ecm.firstatlanticcommerce.com Content-Length: 935 Expect: 100-continue frmHtmlCheckout=frmHtmlCheckout&Version=2.0.0&AcqID=464748&MerID= MERCHANT_ID_HERE&PurchaseAmt=000000000100& PurchaseCurrency=840&PurchaseCurrencyExponent=2& OrderID=Test%7cbc7396483095e39a& CardNo=CARD_NUMBER&CardExpDate=01%2f22&CardCVV2=234& SignatureMethod=SHA1&Signature=t0mM0zJ1VBejLh7X94RUuO%2bL3ro%3d&CaptureFlag=M&MerRespURL=https%3a%2f%2fecm.firstatlanticcommerce.com%2fFACPGTest%2freceiveInfo.aspx& CustomData=&InterfaceCode=FACPG2.WCF& BillToAddress1=1200+Whitewall+Blvd.&BillToAddress2=Unit+15& BillToPostCode=200341&BillToFirstName=John&BillToLastName=Smith&BillToCity=Boston&BillToState=NY&BillToCountry=840& BillToEmail=john.smith%40gmail.com&BillToTelephone=211-3454-6790&AuthenticationOnly=Y

HTTP/1.1 200 OK Cache-Control: no-cache,no-store, no-cache, must-revalidate Pragma: no-cache,no-cache Content-Length: 3388 Content-Type: text/html; charset=utf-8 Expires: -1 Server: X-AspNet-Version: 4.0.30319 Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline' Strict-Transport-Security: max-age=31536000; includeSubdomains=true X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Date: Mon, 21 Oct 2019 18:17:34 GMT Connection: close <HTML> <HEAD> <title>Request Result</title> </HEAD> <Body> <form id="SENTRYResponse" name="SENTRYResponse" action="https://api.pjdevelopmentpanama.woloxtest.com/v1/orders/1030/payments/credomatci/confirm" method="POST"> <noscript> <br> <br> <h1 align='center'> Processing your 3-D Secure Transaction</h1> <h2 align='center'>JavaScript is currently disabled or is not supported by your browser.</h2> <br> <h3 align='center'>Please click on the Submit button to <font color='blue'>complete</font> the processing of your 3-D secure transaction.</h3> <h4 align='center'><input type='submit' value='Submit'></h4> </noscript> <input type="hidden" name="MerID" id="MerID" value="88801117"/>

Page 55: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

55

<input type="hidden" name="AcqID" id="AcqID" value="464748"/> <input type="hidden" name="OrderID" id="OrderID" value="Test|834c6ba3448f6861"/> <input type="hidden" name="ResponseCode" id="ResponseCode" value="1"/> <input type="hidden" name="ReasonCode" id="ReasonCode" value="31"/> <input type="hidden" name="ReasonCodeDesc" id="ReasonCodeDesc" value="Authentication successful."/> <input type="hidden" name="AuthenticationResult" id="AuthenticationResult" value="Y"/> <input type="hidden" name="CAVVValue" id="CAVVValue" value="AAACAxkZhBeJEzc2ORmEEMes7/I="/> <input type="hidden" name="ECIIndicator" id="ECIIndicator" value="05"/> <input type="hidden" name="TransactionStain" id="TransactionStain" value="AgABCQEAAgEBBQEHAwEABAYjVPM="/> <input type="hidden" name="BillToFirstName" id="BillToFirstName" value="John"/> <input type="hidden" name="BillToLastName" id="BillToLastName" value="Smith"/> <input type="hidden" name="BillToAddress1" id="BillToAddress1" value="1200 Whitewall Blvd."/> <input type="hidden" name="BillToAddress2" id="BillToAddress2" value="Unit 15"/> <input type="hidden" name="BillToCity" id="BillToCity" value="Boston"/>

Redirecciones

• Después de enviar el mensaje HTTP anterior, se produce una serie de redireccionamientos y finalmente se le presenta al usuario el

Formulario de autenticación 3DS del Banco

• El estilo del formulario de autenticación 3DS del banco y el aspecto de la página no se pueden modificar.

• El usuario ingresa la contraseña de 3DS y envía el formulario HTTP al banco que luego se redirige nuevamente a FAC

• Finalmente, FAC redirige el resultado de la autenticación a MerchantResponseURL como se muestra en la página siguiente.

• El resultado más la prueba de autenticación (ECI, CAVV y TransactionStain) pueden verse resaltados en amarillo.

Page 56: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

56

Authorize3DS (SOAP) flujo de error – Cuando se retorna un error

• Este ejemplo muestra el resultado de un error en uno de los parametros de Authorize3DSRequest, concretamente en el formato de

fecha.

• El error se devuelve como un formulario HTML al MerchantResponseURL que le proporcionó el comerciante.

• Asegúrese de especificar el MerchantResponseURL correcto en el sitio del comerciante

• Al probar 3D Secure en el entorno de pruebas, la pantalla de autenticación de bancos no se presentará al cliente.

Authorize3DS SOAP Request

Authorize3DS SOAP Request devuelve un formulario HTML que comienza el proceso de autenticacion 3DS.

Authorize3DS SOAP Response (con el HTMLFormData que sera auto-posted cuando se procese en el navegador)

Request Response POST https://ecm.firstatlanticcommerce.com/PGService/Services.svc HTTP/1.1 Content-Type: text/xml; charset=utf-8 SOAPAction: "http://schemas.firstatlanticcommerce.com/gateway/ IServices/Authorize3DS" Host: ecm.firstatlanticcommerce.com Content-Length: 2384 Expect: 100-continue Accept-Encoding: gzip, deflate Connection: Keep-Alive <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <Authorize3DS xmlns="http://schemas.firstatlanticcommerce.com/gateway"> <Request xmlns:a="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:CardDetails> <a:CardCVV2>234</a:CardCVV2>

HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Server: Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline' Strict-Transport-Security: max-age=31536000; includeSubdomains=true X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Date: Wed, 23 Oct 2019 18:24:22 GMT Content-Length: 4808 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body><Authorize3DSResponse xmlns="http://schemas.firstatlanticcommerce.com/gateway"> <Authorize3DSResult xmlns:a="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:HTMLFormData>&lt;HTML&gt;&lt;BODY&gt;&lt;FORM ID="frmHtmlCheckout" NAME="frmHtmlCheckout" METHOD="POST" ACTION="https://ecm.firstatlanticcommerce.com/SENTRY/ PaymentGateway/Application/DirectAuthLink.aspx"&gt;&#xD; &lt;NOSCRIPT&gt;&#xD; &lt;BR&gt;&lt;BR&gt;&#xD;

Page 57: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

57

<a:CardExpiryDate>01/22</a:CardExpiryDate> <a:CardNumber>CARD_HERE</a:CardNumber> <a:IssueNumber i:nil="true"/> <a:StartDate i:nil="true"/> <a:DocumentNumber i:nil="true"/> <a:Installments>0</a:Installments> </a:CardDetails> <a:MerchantResponseURL>https://Merchant.com/ </a:MerchantResponseURL> <a:TransactionDetails> <a:AcquirerId>464748</a:AcquirerId> <a:Amount>000000000100</a:Amount> <a:Currency>840</a:Currency> <a:CurrencyExponent>2</a:CurrencyExponent> <a:CustomData i:nil="true"/> <a:IPAddress i:nil="true"/> <a:MerchantId>YOUR_MERCHANT</a:MerchantId> <a:OrderNumber>Test|bc7396483095e39a</a:OrderNumber> <a:Signature>t0mM0zJ1VBejLh7X94RUuO+L3ro=</a:Signature> <a:SignatureMethod>SHA1</a:SignatureMethod> <a:TransactionCode>64</a:TransactionCode> <a:CustomerReference>This is a test </a:CustomerReference> </a:TransactionDetails> <a:RecurringDetails i:nil="true"/> <a:FraudDetails i:nil="true"/> </Request> </Authorize3DS> </s:Body> </s:Envelope>

&lt;H1 ALIGN="center"&gt;Processing your Transaction&lt;/H1&gt;&#xD; &lt;H2 ALIGN="center"&gt;JavaScript is currently disabled or is not supported by your browser.&lt;/H2&gt;&lt;BR&gt;&#xD; &lt;H3 ALIGN="center"&gt;Please click on the Submit button to continue processing.&lt;/H3&gt;&#xD; &lt;INPUT TYPE="submit" value="Submit" ID="submit" NAME="submit"&gt;&#xD; &lt;/NOSCRIPT&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="Version" ID="Version" VALUE="2.0.0"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="AcqID" ID="AcqID" VALUE="464748"&gt; &#xD; &lt;INPUT TYPE="hidden" NAME="MerID" ID="MerID" VALUE="MERCHANT_HERE"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="PurchaseAmt" ID="PurchaseAmt" VALUE="000000000100"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="PurchaseCurrency" ID="PurchaseCurrency" VALUE="840"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="PurchaseCurrencyExponent" ID="PurchaseCurrencyExponent" VALUE="2"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="OrderID" ID="OrderID" VALUE="Test|bc7396483095e39a"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="CardNo" ID="CardNo" VALUE="CARD_HERE"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="CardExpDate" ID="CardExpDate" VALUE="01/22"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="CardCVV2" ID="CardCVV2" VALUE="234"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="SignatureMethod" ID="SignatureMethod" VALUE="SHA1"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="Signature" ID="Signature" VALUE="t0mM0zJ1VBejLh7X94RUuO+L3ro="&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="CaptureFlag" ID="CaptureFlag" VALUE="M"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="MerRespURL" ID="MerRespURL" VALUE="https://ecm.firstatlanticcommerce.com/FACPGTest/receiveInfo.aspx"&gt; &#xD; &lt;INPUT TYPE="hidden" NAME="CustomData" ID="CustomData" VALUE=""&gt; &#xD; &lt;INPUT TYPE="hidden" NAME="InterfaceCode" ID="InterfaceCode" VALUE="FACPG2.WCF"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToAddress1" ID="BillToAddress1" VALUE="1200 Whitewall Blvd."&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToAddress2" ID="BillToAddress2" VALUE="Unit 15"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToPostCode" ID="BillToPostCode" VALUE="200341"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToFirstName" ID="BillToFirstName" VALUE="John"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToLastName" ID="BillToLastName" VALUE="Smith"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToCity" ID="BillToCity" VALUE="Boston"&gt;&#xD;

Page 58: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

58

&lt;INPUT TYPE="hidden" NAME="BillToState" ID="BillToState" VALUE="NY"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToCountry" ID="BillToCountry" VALUE="840"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToEmail" ID="BillToEmail" VALUE="[email protected]"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="BillToTelephone" ID="BillToTelephone" VALUE="211-3454-6790"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToAddress1" ID="ShipToAddress1" VALUE="1200 Whitewall Blvd."&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToAddress2" ID="ShipToAddress2" VALUE="Unit 15"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToPostCode" ID="ShipToPostCode" VALUE="200341"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToFirstName" ID="ShipToFirstName" VALUE="John"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToLastName" ID="ShipToLastName" VALUE="Smith"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToCity" ID="ShipToCity" VALUE="Boston"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToState" ID="ShipToState" VALUE="NY"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToCountry" ID="ShipToCountry" VALUE="840"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToEmail" ID="ShipToEmail" VALUE="[email protected]"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="ShipToTelephone" ID="ShipToTelephone" VALUE="211-3454-6790"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="AuthenticationOnly" ID="AuthenticationOnly" VALUE="Y"&gt;&#xD; &lt;/FORM&gt;&#xD; &lt;SCRIPT LANGUAGE="JavaScript"&gt;&#xD; Checkout();&#xD; function Checkout() {&#xD; document.frmHtmlCheckout.action = "https://ecm.firstatlanticcommerce.com/SENTRY/PaymentGateway/ Application/DirectAuthLink.aspx";&#xD; document.frmHtmlCheckout.submit();&#xD; }&#xD; &lt;/SCRIPT&gt;&#xD; &lt;/BODY&gt;&lt;/HTML&gt;&#xD; </a:HTMLFormData><a:ResponseCode>0</a:ResponseCode> <a:ResponseCodeDescription>Success</a:ResponseCodeDescription> <a:TokenizedPAN/></Authorize3DSResult> </Authorize3DSResponse></s:Body></s:Envelope>

Page 59: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

59

HTTP request - Posting del HTMLFormData que fue obtenido en el Authorize3DS SOAP response

HTTP response del resultado (en este caso error) del proceso de Authorize3DS dentro de un form HTML que sera auto-posted a la

MerchantResponseURL

Request Response POST https://ecm.firstatlanticcommerce.com/SENTRY/ PaymentGateway/Application/DirectAuthLink.aspx HTTP/1.1 Content-Type: application/x-www-form-urlencoded Host: ecm.firstatlanticcommerce.com Content-Length: 935 Expect: 100-continue frmHtmlCheckout=frmHtmlCheckout&Version=2.0.0& AcqID=464748&MerID=MERCHANT_HERE& PurchaseAmt=000000000100& PurchaseCurrency=840&PurchaseCurrencyExponent=2& OrderID=Test%7cbc7396483095e39a&CardNo=CARD_HERE& CardExpDate=01%2f22&CardCVV2=234&SignatureMethod=SHA1& Signature=t0mM0zJ1VBejLh7X94RUuO%2bL3ro%3d&CaptureFlag=M& MerRespURL=https%3a%2f%2fecm.firstatlanticcommerce.com %2fFACPGTest%2freceiveInfo.aspx& CustomData=&InterfaceCode=FACPG2.WCF& BillToAddress1=1200+Whitewall+Blvd.&BillToAddress2=Unit+15& BillToPostCode=200341&BillToFirstName=John& BillToLastName=Smith&BillToCity=Boston&BillToState=NY& BillToCountry=840&BillToEmail=john.smith%40gmail.com& BillToTelephone=211-3454-6790& ShipToAddress1=1200+Whitewall+Blvd.& ShipToAddress2=Unit+15&ShipToPostCode=200341& ShipToFirstName=John& ShipToLastName=Smith&ShipToCity=Boston&ShipToState=NY& ShipToCountry=840&ShipToEmail=john.smith%40gmail.com& ShipToTelephone=211-3454-6790&AuthenticationOnly=Y

HTTP/1.1 200 OK Cache-Control: private,no-store, no-cache, must-revalidate Pragma: no-cache Content-Length: 1071 Content-Type: text/html; charset=utf-8 Server: Set-Cookie: ASP.NET_SessionId=hogulzw3lbk1nakzytfcztzs; path=/; HttpOnly X-AspNet-Version: 4.0.30319 Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline' Strict-Transport-Security: max-age=31536000; includeSubdomains=true X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Date: Wed, 23 Oct 2019 18:24:22 GMT Connection: close <HTML> <HEAD> <title>Request Result</title> </HEAD> <Body> <form id="SENTRYResponse" name="SENTRYResponse" action="https://Merchant.com/MerchantResponseURL" method="POST"> <noscript> <br> <br> <h1 align='center'> Processing your 3-D Secure Transaction</h1> <h2 align='center'>JavaScript is currently disabled or is not supported by your browser.</h2> <br> <h3 align='center'>Please click on the Submit button to <font color='blue'>complete</font> the processing of your 3-D secure transaction.</h3> <h4 align='center'><input type='submit' value='Submit'></h4> </noscript>

Page 60: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

60

<input type="hidden" name="OrderID" id="OrderID" value="Test|bc7396483095e39a"/> <input type="hidden" name="ResponseCode" id="ResponseCode" value="3"/> <input type="hidden" name="ReasonCode" id="ReasonCode" value="8"/> <input type="hidden" name="ReasonCodeDesc" id="ReasonCodeDesc" value="CardExpDate format is invalid"/> <script type="text/javascript" language='javascript'>document.getElementById('SENTRYResponse').submit();</script> </Body> </HTML>

Page 61: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

Authorize3DS XML flujo normal

Request Response POST https://ecm.firstatlanticcommerce.com/PGServiceXML/Authorize3DS HTTP/1.1 Content-Type: application/x-www-form-urlencoded Host: ecm.firstatlanticcommerce.com Content-Length: 2023 Expect: 100-continue Connection: Keep-Alive

<?xml version="1.0" encoding="utf-8"?> <Authorize3DSRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.firstatlanticcommerce.com/gateway/data"> <CardDetails> <CardCVV2>234</CardCVV2> <CardExpiryDate>1220</CardExpiryDate> <CardNumber>4111111111111111</CardNumber> <Installments>0</Installments> </CardDetails> <MerchantResponseURL>https://ecm.firstatlanticcommerce.com/FACPGTest/receiveInfo.aspx</MerchantResponseURL> <TransactionDetails> <AcquirerId>464748</AcquirerId> <Amount>000000000100</Amount> <Currency>840</Currency> <CurrencyExponent>2</CurrencyExponent> <MerchantId>YOUR MERCHANT HERE</MerchantId> <OrderNumber>Test|a7c6231589fc249b</OrderNumber> <Signature>Q2iroCFWQ54l6Q8XPthaRkEfpSE=</Signature> <SignatureMethod>SHA1</SignatureMethod> <TransactionCode>0</TransactionCode> <CustomerReference>This is a test</CustomerReference> </TransactionDetails> </Authorize3DSRequest>

HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html Server: X-AspNet-Version: 4.0.30319 Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline' Strict-Transport-Security: max-age=31536000; includeSubdomains=true X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Date: Tue, 10 Dec 2019 17:27:29 GMT Content-Length: 4506 <Authorize3DSResponse xmlns="http://schemas.firstatlanticcommerce.com/gateway/data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HTMLFormData>&lt;HTML&gt;&lt;BODY&gt;&lt;FORM ID="frmHtmlCheckout" NAME="frmHtmlCheckout" METHOD="POST" ACTION="https://ecm.firstatlanticcommerce.com/SENTRY/PaymentGateway/Application/DirectAuthLink.aspx"&gt;&#xD; &lt;NOSCRIPT&gt;&#xD; &lt;BR&gt;&lt;BR&gt;&#xD; &lt;H1 ALIGN="center"&gt;Processing your Transaction&lt;/H1&gt;&#xD; &lt;H2 ALIGN="center"&gt;JavaScript is currently disabled or is not supported by your browser.&lt;/H2&gt;&lt;BR&gt;&#xD; &lt;H3 ALIGN="center"&gt;Please click on the Submit button to continue processing.&lt;/H3&gt;&#xD; &lt;INPUT TYPE="submit" value="Submit" ID="submit" NAME="submit"&gt;&#xD; &lt;/NOSCRIPT&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="Version" ID="Version" VALUE="2.0.0"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="AcqID" ID="AcqID" VALUE="464748"&gt; &#xD; &lt;INPUT TYPE="hidden" NAME="MerID" ID="MerID" VALUE="88800033"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="PurchaseAmt" ID="PurchaseAmt" VALUE="000000000100"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="PurchaseCurrency" ID="PurchaseCurrency" VALUE="840"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="PurchaseCurrencyExponent" ID="PurchaseCurrencyExponent" VALUE="2"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="OrderID" ID="OrderID" VALUE="Test|a7c6231589fc249b"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="CardNo" ID="CardNo" VALUE="4111111111111111"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="CardExpDate" ID="CardExpDate" VALUE="1220"&gt;&#xD;

Page 62: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00

62

&lt;INPUT TYPE="hidden" NAME="CardCVV2" ID="CardCVV2" VALUE="234"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="SignatureMethod" ID="SignatureMethod" VALUE="SHA1"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="Signature" ID="Signature" VALUE="Q2iroCFWQ54l6Q8XPthaRkEfpSE="&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="CaptureFlag" ID="CaptureFlag" VALUE="M"&gt;&#xD; &lt;INPUT TYPE="hidden" NAME="MerRespURL" ID="MerRespURL" VALUE="https://ecm.firstatlanticcommerce.com/FACPGTest/receiveInfo.aspx"&gt; &#xD; &lt;INPUT TYPE="hidden" NAME="CustomData" ID="CustomData" VALUE=""&gt; &#xD; &lt;INPUT TYPE="hidden" NAME="InterfaceCode" ID="InterfaceCode" VALUE="FACPG2.XML"&gt;&#xD; &lt; &lt;SCRIPT LANGUAGE="JavaScript"&gt;&#xD; Checkout();&#xD; function Checkout() {&#xD; document.frmHtmlCheckout.action = "https://ecm.firstatlanticcommerce.com/SENTRY/PaymentGateway/Application/DirectAuthLink.aspx";&#xD; document.frmHtmlCheckout.submit();&#xD; }&#xD; &lt;/SCRIPT&gt;&#xD; &lt;/BODY&gt;&lt;/HTML&gt;&#xD; </HTMLFormData><ResponseCode>0</ResponseCode><ResponseCodeDescription>Success</ResponseCodeDescription><TokenizedPAN/></Authorize3DSResponse>

Page 63: First Atlantic Commerce Payment Gateway 2 Guía Rápida de … · 2020. 7. 28. · Nota: El monto de la compra deberá presentarse como una secuencia de 12 caracteres (por ej. $12.00