a) Generando una liga de pago

Construye una cadena XML , cífrala con el SDK adecuado a tu tecnología, sométela al servicio de Generación de Ligas, descrifra la respuesta con el mismo SDK y obtén una liga.

Paso 1: Cadena XML


Aquí tienes la descripción de la cadena que debes construir. Puedes copiar y editar el ejemplo.

<P>

Elemento PADRE dentro del esquema XML de la cadena.

Contiene los parámetros para identificar al comercio en Centro de Pagos, que realiza la petición.

Identificador del Comercio al que se le asociará el pago.
Para sandbox usa SNBX

Identificador de la Sucursal del Comercio a la que se le asociará el pago.
Para sandbox usa 01SNBXBRNCH

Usuario que genera la petición. Con este usuario se procesará la transacción de cobro.
Para sandbox usa SNBXUSR01

Contraseña de acceso para autenticación del usuario.
Para sandbox usa SECRETO

Contiene los parámetros con las instrucciones del comercio para registrar una intención de cobro y vincularlos a una liga de pago.

Referencia única/irrepetible del comercio para conciliar un pago con su lógica de negocio. Se sugiere número de factura o pedido.

Importe a pagar con 2 decimales separado por un punto.

Específica la moneda para la intención de cobro, si se tienen configuradas afiliaciones en pesos y dólares en la sucursal.
Valores posibles: MXN ó USD .

Valor fijo, debe ser W.

Si este elemento se recibe con el valor 0 , se enviará la notificación de cobro realizada al tarjetahabiente vía correo electrónico, con formato e imagen de Centro de Pagos.
Valores posibles: 0 ó 1 .

Si este elemento se recibe, indica las promociones a meses con las que se puede realizar el pago, cuando se tienen varias afiliaciones con promociones configuradas en la sucursal.
En todos los casos, la opción de pago de contado siempre estará disponible.
Para forzar el pago a sólo contado, deberá indicarse sólo C .

Si este elemento se recibe con el valor 1 , se solicitará la captura del correo electrónico en el formulario de pago.
Valores posibles: 0 ó 1 .

Si este elemento está presente y se recibe con una fecha en el futuro, la intención de cobro estará vigente hasta la fecha indicada.
El valor por omisión es de 3 meses a partir de la intención de cobro.

Si el elemento está presente se precargará este valor en el campo “Correo Electrónico” del formulario de pago. El tarjetahabiente podrá cambiarlo si así lo desea. Nota: el campo st_correo deberá indicar 1 .

Si el elemento está presente con el valor A, al desplegar el formulario se considerarán las reglas del enrolamiento automático.
Si el elemento está presente con el valor M, Se mostrará el checkbox para permitir el enrolamiento.

Si este elemento está presente, se incluirán los elementos hijos data en el formulario de pago y serán devueltos en la respuesta del resultado de un cobro. Si se especifica el atributo “display” con el booleano true , estos se mostrarán en el formulario de pago.

<data id="1" display="true">
  <label>Talla</label>
  <value>Grande</value>
</data>

Agrupa un par de elementos de tipo label y value, se deberá especificar el atributo “id” para diferenciarlos. Máximo 6 datos del tipo etiqueta-valor.

Ejemplo


					<?xml version="1.0" encoding="UTF-8"?>
<P>
  <business>
    <id_company>SNBX</id_company>
    <id_branch>01SNBXBRNCH</id_branch>
    <user>SNBXUSR01</user>
    <pwd>SECRETO</pwd>
  </business>
  <url>
    <reference>FACTURA999</reference>
    <amount>2500.00</amount>
    <moneda>MXN</moneda>
    <canal>W</canal>
    <omitir_notif_default>1</omitir_notif_default>
    <promociones>C,3,6,9</promociones>
    <st_correo>1</st_correo>
    <fh_vigencia>25/09/2019</fh_vigencia>
    <mail_cliente>nospam@gmail.com</mail_cliente>
    <st_cr>A</st_cr>
    <datos_adicionales>
      <data id="1" display="true">
        <label>Talla</label>
        <value>Grande</value>
      </data>
      <data id="2" display="false">
        <label>Color</label>
        <value>Azul</value>
      </data>
    </datos_adicionales>
  </url>
</P>
					


Encontrarás el XSD y ejemplos de código para validarla con tu servidor en GitHub


				

Paso 2: Cifrando la cadena


Una vez que has construido la cadena en claro, cífrala en AES-128, con el SDK adecuado a tu servidor, el cual puedes obtener en GitHUB.

Cadena usada como llave para cifrar la petición.

Para sandbox usa 5DCC67393750523CD165F17E1EFADD21

El desarrollador recibirá las credenciales productivas del administrador del comercio.

Ejemplo


								import AESCrypto
String originalString ="[USAR LA CADENA DEL EJEMPLO UNO]";
String key = "5DCC67393750523CD165F17E1EFADD21";
String encryptedString = 
  AESCrypto.encrypt(originalString, key);

							
								<?php
include('/AESCrypto.php'); 
$originalString = '[USAR LA CADENA DEL EJEMPLO UNO]';
$key = '5dcc67393750523cd165f17e1efadd21'; //Llave de 128 bits
$encryptedString = AESCrypto::encriptar($originalString, $key); 
?>
							
								using AESCrypto.cs
string originalString ="[USAR LA CADENA DEL EJEMPLO UNO]";
string key = "5DCC67393750523CD165F17E1EFADD21";
string encryptedString =
  AESCrypto.encrypt(originalString, key);
string finalString = encryptedString.Replace("%", "%25").Replace(" ", "%20").Replace("+", "%2B").Replace("=", "%3D").Replace("/", "%2F");
							
								import AESCrypto.py
originalString ='[USAR LA CADENA DEL EJEMPLO UNO]'
key = '5DCC67393750523CD165F17E1EFADD21'
encryptedString = AESCipher(key).encrypt(originalString)
							


				

Paso 3: Servicio de Generación


Para garantizar la seguridad en la transmisión de información, Centro de Pagos cuenta con servidores HTTPS los cuales utilizan el protocolo Transport Layer Security TLS v1.2 como protocolo de transporte seguro para realizar transacciones. Por su parte, el comercio debe de contar también con servidores TLS v1.2, para garantizar el intercambio seguro de información al realizar sus transacciones.

https://wppsandbox.mit.com.mx/gen

Este endpoint de Sandbox recibe la petición con las instrucciones del comercio para registrar una intención de cobro. Como respuesta de la petición al Servicio de Generación de Ligas, obtendrás una cadena de respuesta cifrada.

La implementación se basa en el envío al servicio por POST de una cadena en el parámetro xml con la siguiente estructura:

xml=
<pgs>
  <data0>Cadena fija asignada al comercio</data0>
  <data>CadenaCifrada en AES-128</data>
</pgs>

Cadena fija, asignada al comercio.

Para sandbox usa SNDBX123

El desarrollador recibirá las credenciales productivas del administrador del comercio.

Ejemplo


								// Esta implementación utiliza http://unirest.io/java
String encodedString = 
  URLEncoder.encode("<pgs><data0>SNDBX123</data0><data>EBo2s....SBkZDVjWW</data></pgs>", "UTF-8");
HttpResponse<String> response = 
Unirest.post("https://wppsandbox.mit.com.mx/gen")
  .header("content-type", "application/x-www-form-urlencoded")
  .header("cache-control", "no-cache")
  .field("xml"  , encodedString,
"application/x-www-form-urlencoded")
  .asString();
							
								// Esta implementación utiliza HttpURLConnection
String encodedString = 
  URLEncoder.encode("<pgs><data0>SNDBX123</data0><data>EBo2s....SBkZDVjWW</data></pgs>", "UTF-8");
String postParam = "xml=" + encodedString;  
  URL obj = new URL(POST_URL);
  HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("POST");
    con.setDoOutput(true);
	OutputStream os = con.getOutputStream();
	os.write(POST_PARAMS.getBytes());
	os.flush();
	os.close();
							
								<?php
$encodedString = urlencode('<pgs><data0>SNDBX123</data0><data>1OJAHMRu...IJiYtY5OnyQ==</data></pgs>');
$request = new HttpRequest();
$request->setUrl('https://wppsandbox.mit.com.mx/gen');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'cache-control' => 'no-cache',
  'content-type' => 'application/x-www-form-urlencoded'
));

$request->setContentType('application/x-www-form-urlencoded');
$request->setPostFields(array(
  'xml' => encodedString
));

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
							
								// Esta implementación utiliza http://restsharp.org v105
string encodedString = 
  HttpUtility.UrlEncode("<pgs><data0>SNDBX123</data0><data>[USAR LA CADENA DEL EJEMPLO UNO]</data></pgs>");
string postParam = "xml=" + encodedString;
var client = new RestClient("https://wppsandbox.mit.com.mx/gen");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddQueryParameter(postParam, ParameterType.RequestBody);

IRestResponse response = client.Execute(request);
var content = response.Content;
							


				

Paso 4: Descifrando la respuesta del Servicio de Generación


Una vez obtenida la respuesta del servicio, la puedes descifrar con el SDK adecuado a tu servidor, y dentro de <nb_url> encontrarás la Liga de Cobro o URL, que debes compartir con tu cliente para recibir su pago.

Ejemplo


								import webPayPlus.AESCrypto
String originalString ="Este es el texto a procesar";
String key = "5dcc67393750523cd165f17e1efadd21";
String decryptedString = 
  AESCrypto.decrypt(originalString, key);
							
								<?php
include('/AESCrypto.php'); 
$originalString = 'Este es el texto a procesar';
$key = '5dcc67393750523cd165f17e1efadd21'; //Llave de 128 bits
$decryptedString = AESCrypto::desencriptar($originalString, $key);
?>
							
								using AESCrypto.cs
string originalString ="Este es el texto a procesar";
string key = "5DCC67393750523CD165F17E1EFADD21";
string decryptedString = 
  AESCrypto.decrypt(key, originalString);
							



					
Catálogo de valores, elemento nb_response
nb_response Descripción Solución
Vacía La petición fue procesada correctamente
La petición es invalida La estructura de cadena es inválida, contiene caracteres inválidos o no está correctamente cifrada Utiliza la validación XSD
Los datos de empresa, sucursal o usuario son inválidos Falló la autenticación o estatus de usuario/sucursal/empresa no es activo. Contactar a Centro de Atención MIT
La empresa no tiene autorizado este servicio, por favor contacte a su administrador Falló la configuración o estatus de usuario/sucursal/empresa no es correcta. Contactar a Centro de Atención MIT
No fue posible generar la referencia, por favor intente más tarde Ocurrió un error al procesar la petición (exception). Contactar a Centro de Atención MIT

Paso 5: Liga de Cobro


De la respuesta descifrada, obtienes la liga de pago en el elemento nb_url . Con la liga se puede invocar el formulario de pago por GET en un navegador web, Webview de un App, o incrustándose dentro del portal del comercio en un iframe. Así, tienes la libertad de seleccionar lo mejor que se adapte a tu tecnología. Para saber más visita ¿Cómo publicar una liga?

Ejemplo


¡Wow!
Para obtener una liga de pago, descifra la respuesta obtenida en el paso anterior.


Continúa aquí:

¿Cómo generar una liga?