REQUISITOS
- Estar registrado en Pagofacil.net y tener acceso al sistema Manager de Pago Fácil: http://manager.pagofacil.net/
- Jquery 1.9.x (de no contar con él se puede descargar de la página oficial o cargar directamente de la siguiente página. https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
- Descargar librería para cifrar y descifrar comunicaciones. Se puede descargar de la siguiente pagina https://github.com/PagoFacil/integracion-pagofacil/tree/desarrollo/3D-Secure.
Si en esta página no encuentra una librería para el lenguaje de programación de su proyecto. Puede usar librerías externas que cumplan el método de cifrado de AES-128.
Solicitar la llave de cifrado al equipo de PagoFácil.net por medio de un correo a [email protected] con el tema Solicitud llave 3D secure.
INTRODUCCIÓN
¿Qué significa 3DSecure?
3DSecure es llamado “Verified by Visa” en Visa, y “SecureCode” en Mastercard.
Este sistema evita los fraudes de tipo CNP (Card No Present), es decir los pagos fraudulentos con tarjeta de crédito sin presencia real de la tarjeta (por ejemplo, número de tarjetas robadas).
El objetivo es:
- Disminuir las estafas a las tiendas en línea.
- Dar seguridad a los clientes en sus pagos.
Por lo general un pago en línea con tarjeta de crédito/débito necesita:
- El número de la tarjeta de crédito/débito.
- La fecha de caducidad.
- El criptograma visual (número de seguridad).
Con 3DSecure, se nos solicitará información suplementaria para validar el pago, aun teniendo el plástico de alguien ajeno, está protegida la operación validando información del titular.
MÉTODOS DE INTEGRACIÓN
FORMULARIO Y URL
1. Insertar en tu página el Script (JavaScript) de Pago Fácil, el cual se encuentra en:
https://pagofacil.net/ws/public/jscripts/pagofacil-3dsecure.js
De la siguiente forma:
<script src=”https://pagofacil.net/ws/public/jscripts/pagofacil-3dsecure.js” type=”text/javascript”></script>
2. Crear un formulario web con los siguientes campos:
Campos de la petición:
CAMPO | DESCRIPCIÓN | OBLIGATORIO | TIPO | LONGITUD |
---|---|---|---|---|
nombre | En este campo vendrá el nombre del tarjetahabiente. | Si | varchar | 50 |
apellidos | En este campo vendrán los apellidos del tarjetahabiente. | Si | varchar | 50 |
numeroTarjeta | Número del plástico de la tarjeta de crédito sin guiones o espacios. | Si | varchar | 16 |
mesExpiracion | El mes en el cual el plástico expira MM | Si | int | 2 |
anyoExpiracion | El año en el cual el plástico expira YY | Si | int | 2 |
cvt | Código de verificación de tarjeta, usualmente impreso en el área de firma de la tarjeta, utilizado para validar que la tarjeta usada en la compra pertenezca a la persona que generó la orden | Si | int | 3 |
En este campo vendrá el correo de la persona a la que se le enviará el correo con el resumen de la transacción | Si | varchar | 20 | |
calleyNumero | Campo para registro de la calle y numero del tarjetahabiente | Si | varchar | 45 |
cp | Código postal de la dirección donde vive el tarjetahabiente | Si | varchar | 9 |
colonia | Campo para registro de la colonia del tarjetahabiente | Si | varchar | 30 |
municipio | Campo para registro del municipio del tarjetahabiente | Si | varchar | 30 |
estado | Campo para registro del estado del tarjetahabiente | Si | varchar | 45 |
pais | Campo para registro del país del tarjetahabiente | Si | varchar | 50 |
telefono | Campo para registro del teléfono del tarjetahabiente | Si | varchar | 10 |
celular | Campo para registro del celular del tarjetahabiente | Si | varchar | 10 |
monto | El monto (MXP) del cargo a la tarjeta | Si | decimal | |
idServicio | Este identificador le indica al motor de PagoFácil que servicio será el que se consumirá: 3=ThirdParty (ssl) | Si | int | 1 |
idSucursal | En caso de contar con varias sucursales se podrá utilizar este identificador para distinguir las transacciones | Si | varchar | 60 |
idUsuario | Sera el identificador de la empresa ante Pago Fácil | Si | varchar | 60 |
httpUserAgent | Identificador de Browser | Si | varchar | 150 |
idPedido | Campo para que el establecimiento pueda ligar la transacción con algún identificador de su producto o servicio. Nota: Es importante que sea único este identificador. | No | varchar (alfanumérico sin espacios) | 60 |
Param1, param2, param3 | Variable opcional para uso interno del comercio | No | varchar | 60 |
Para indicar si la transacción usa meses sin intereses:
plan | MSI => Meses sin intereses
NOR => Normal |
No | varchar | 3 |
mensualidades | Indica el número de mensualidades en formato de 2 caracteres numéricos, ejemplo, 03, 06, 09, 12 | No | varchar | 2 |
3. Incluir un Javascript que ejecute la siguiente función enviarPagoFacil3dSecure para el correcto funcionamiento de nuestro formulario. Esto se realizará con el objeto de tipo formulario que tenga los datos a enviar
<script type=”text/javascript”>
$(“#3ds-form”).enviarPagoFacil3dSecure();
</script>
Nota: La llamada de ejemplo descrita anteriormente está hecha para el ambiente de testing, una vez que se desea pasar a producción es necesario agregar el argumento “producción” a la función enviarPagoFacil3dSecure, quedando de la siguiente forma:
$(“#3ds-form”).enviarPagoFacil3dSecure(“produccion”);
Ejemplo de formulario HTML
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js' type='text/javascript' ></script> <script src='https://pagofacil.net/ws/public/jscripts/pagofacil-3dsecure.js' type='text/javascript' ></script> <form method="POST" id="3ds-form" name="3ds-form"> <input name="idSucursal" type="hidden" value="ApiKeySucursal" /> <input name="idUsuario" type="hidden" value="ApiKeyUsuario" /> <input name="idPedido" type="hidden" value="X" /> <input name="idServicio" type="hidden" value="3" /> Nombre: <input id="nombre" name="nombre" type="text" value="" /> Apellidos: <input id="apellidos" name="apellidos" type="text" value="" /> Email: <input id="email" name="email" type="text" value="" /> Calle y Num.: <input id="calleyNumero" name="calleyNumero" type="text" value="" /> CP: <input id="cp" name="cp" type="text" value="" /> Colonia: <input id="colonia" name="colonia" type="text" value="" /> Municipio: <input id="municipio" name="municipio" type="text" value="" /> Estado: <input id="estado" name="estado" type="text" value="" /> Pais: <input id="pais" name="pais" type="text" value="" /> Telefono: <input id="telefono" name="telefono" type="text" value="" /> Celular: <input id="celular" name="celular" type="text" value="" /> No. Tarjeta: <input id="numeroTarjeta" name="numeroTarjeta" type="text" value="" /> Mes Exp. <input id="mesExpiracion" name="mesExpiracion" type="text" value="" /> Año Exp. <input id="anyoExpiracion" name="anyoExpiracion" type="text" value="" /> CVV: <input id="cvt" name="cvt" type="text" value="" /> Monto: <input id="monto" name="monto" type="text" value="" /> Plan: <input id="plan" name="plan" type="text" value="" /> Menualidades: <input id="mensualidades" name="mensualidades" type="text" value="" /> Param1: <input id="param1" name="param1" type="hidden" value="" /> Param2: <input id="param2" name="param2" type="hidden" value="" /> Param3: <input id="param3" name="param3" type="hidden" value="" /> <input type="hidden" name="httpUserAgent" value="" /> <input type="submit" name="Enviar" /> </form> <script type="text/javascript"> $("#3ds-form").enviarPagoFacil3dSecure("");//Metodo contenido en el archivo -pagofacil3ds.js- </script>
- Cuando se envía el formulario este lo redirigirá al portal de Pago Fácil en el cual validaremos la información de la transacción.
2.- Una vez validada la información por parte de Pago Fácil, se redirecciona al portal bancario emisor de la tarjeta en el cual se llevará a cabo el proceso de autenticación, en caso de ser necesario, se solicitará algún dato que permita autenticar al tarjetahabiente.
3.- Una vez que se autenticó la tarjeta, el banco redirige a los servidores de Pago Fácil para generar la transacción bancaria.
4.- Finalmente, en los servidores de Pago Fácil se solicita procesar la transacción al banco y una vez obtenido el resultado, se tienen 2 opciones:
a) PagoFácil muestra el resultado de la transacción.
b) El cliente proporciona a PagoFácil una URL a la cual se le envía por POST la respuesta completa encriptada. Ejemplo:
array(1) { ["response"]=> string(1112) "+I9LgWvnoZ7YAjtYfTSRuUXHOvlIKv4/ff93Iupas5MJxmwcj/BCV6C8oU9Jrd4he2Y7Quw175CHqFNiYgKn4/9yrqIcYWKv+nJ2VS+Tk/WPC7xXDIQjArU9lKjfE8MOcA+ShysyDYymwl/0prFZ4NZ/5WsYWqAM1aEMPjhplxRt+QCp2BmMeq9hcWYtQDofQ2kzJeY/LQUAg3O0hpQPuABKWPNJNM4KC6vE43zUdIGxZ/Hi9qvWUkMdm37fzE0/aj8sIb4/bsosINhdDcl1JuUHHORU/QolMA62PqkBjlZ9akrD5LJT1QzEorIJ8sSdLzAHp4iQXRJRzS82+imTwDoUGpqdA7rdWs2/x7Rf67HL0w65PwAwKVfG/uun8dT2ZxYs3ePrVuIAOUF2uA3r0u41t1Z1cUJ0Wj22n0g4dFTrDqU1Zs7QEiK5+ciQDnVclyYbs9CRdaCS5BsgN1CGO7JNrs2jk29THw+hGbg8arwL2IPo8aQtrOwDjQmia804bnQ0lHTjqTUcvyXmBfPnKImUPkv552JkkmKN9egxxg0N1njJg+jZ90yCDRi/4l5gvXKpWM/EgA6/Q3ffLJTsFOnkY/cG80lUxYFxX+du3EeppE6yfz9D5iunlLWVkkzHW0lFoGSVo7kit+JAoU49NJh2Llfb8EODLmyc3MD4STaxXd/KNjv2g==" }
Nota: Esta configuración se debe realizar desde el sistema de Manager, por tal motivo es uno de los requisitos. La siguiente imagen muestra el módulo dónde se debe configurar dicha opción:
Solicitar por email a [email protected] la configuración de URL de redireccionamiento y llave de cifrado.
- Para esta segunda opción, es necesario descifrar la respuesta enviada, utilizando la librería y la llave de cifrado proporcionada por el equipo de PagoFácil.net, una vez descifrada la respuesta solo resta realizar una decodificación JSON. Haciendo la decodificación:
{
"transaccion": {
"autorizado": "0",
"transaccion": "n/a",
"autorizacion": "n/a",
"texto": "Error Reglas de Negocio",
"error": {
"ModalidadPagoNoPermitida": "Para esta Modalidad de Pago [18 MSI], el monto minimo es de [$1800.00]. Estas intentando realizar una transaccion por [$200]"
},
"empresa": "Sin determinar",
"TransIni": "16:38:49 pm 30/11/2018",
"TransFin": "16:38:50 pm 30/11/2018",
"param1": "",
"param2": "",
"param3": "",
"param4": "",
"param5": "",
"TipoTC": "",
"data": {
"idSucursal": "32e3d2ab24db2863c81541b27a3edde99e6bad23",
"idUsuario": "b2a0bbf2bbd56a6c7395c5536f69c50223f7d8ba",
"idServicio": "3",
"nombre": "Omar",
"apellidos": "Alvarez",
"numeroTarjeta": "",
"cvt": "",
"mesExpiracion": "",
"anyoExpiracion": "",
"monto": "200",
"email": "[email protected]",
"telefono": "5513372748",
"celular": "5513374890",
"calleyNumero": "atole france 311",
"colonia": "polanco",
"cp": "11560",
"municipio": "miguel hidalgo",
"estado": "distrito federal",
"pais": "mexico",
"idPedido": "TEST_TX",
"httpUserAgent": "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0",
"ip": "127.0.0.1",
"transFechaHora": "1543617529",
"plan": "MSI",
"mensualidades": "18",
"bin": "375457"
}
}
}
RESPUESTA DE LA TRANSACCIÓN
En el Url designada por el cliente se devolverán los siguientes datos los cuales dan respuesta a la transacción realizada:
CAMPO | DESCRIPCIÓN | TIPO | LONGITUD |
---|---|---|---|
autorizado | Este campo nos indicara si la transacción fue exitosa (1) o declinada (0) | bool | 1 |
autorizacion | Contendrá el no de autorización del banco | int | 1 |
transaccion | Identificador de PagoFacil para la transacción realizada | varchar | 50 |
texto | Describe si una transacción tuvo un error o fue exitosa | varchar | 100 |
error | Campo opcional, se muestra cuando un error ocurre, contiene un array con los errores en formato ‘campo’=>’error’ | array | |
empresa | Nos indica el identificador de la empresa que se está transaccionando. | varchar | 40 |
transIni | Indica la hora en que la transacción se llevó acabo | datetime | 2 |
transFin | Indica la hora en que la transacción termino | datetime | 2 |
param1, param2, param3, param4, param5 | Variable opcional para uso interno del comercio | varchar | 60 |
tipoTC | Indica el tipo de tarjeta con el que se está realizando la transacción | varchar | 30 |
data | Arreglo de datos que contiene los datos enviados en la petición | Array |