# Implementación forma de pago ## Aplicación de cobro (VB6) Secuencia recibida de cobro exitoso. **Patrón Forma de pago** (F)|importe|divisa|pista!... **Identificadores para cada forma de pago** - ```E .-``` Efectivo. - ```C .-``` Cheques. - ```D .-``` Depósito o transferencia. - ```T .-``` Tarjeta de crédito o débito. - ```W .-``` Cashback. - ```X .-``` Cancelar transacción. - ```DT .-``` Datos extras(opcional). Cada secuencia de cobro exitoso está delimitada por un carácter (!) La pista en las tarjetas de crédito puede contener un carácter (:) para delimitar el tipo de tarjeta y el número de autorización u otros datos. Una cadena de respuesta vacía significa que debe omitirse el cobro alternativo y continuar. Una cadena de respuesta con una X significa que la transacción debe cancelarse. El parámetro `TIPO_CAMBIO` de cada forma de pago son opcional, si se omite toma el tipo de cambio de la divisa. ### Ejemplos ```E|50.00|MXN!T|80.10|MXN|VISA:8874554445544!T|20.25|MXN|AMX:98773999!W|100|MXN|774478754744``` **Efectivo** F|IMPORTE|DIVISA ```E|290|MXN``` **Cheques** F|IMPORTE|DIVISA|BANCO:EMISOR:BENEFICIARIO:NUMERO:TIPO_CAMBIO F|IMPORTE|DIVISA|BANCO:EMISOR:BENEFICIARIO:NUMERO // Sin tipo de cambio. ```C|290|MXN|3:JUAN:PEDRO:12597:1``` **Depósitos** F|IMPORTE|DIVISA|BANCO:REFERENCIA:TIPO_CAMBIO F|IMPORTE|DIVISA|BANCO:REFERENCIA // Sin tipo de cambio. ```D|290|MXN|3:REF0013:1``` **Tarjeta** F|IMPORTE|DIVISA|TIPO:NUMERO_AUTORIZACION:NUMERO:CVV:NOMBRE:DOMICILIO:TIPO_CAMBIO F|IMPORTE|DIVISA|TIPO:NUMERO_AUTORIZACION:NUMERO:CVV:NOMBRE:DOMICILIO // Sin tipo de cambio. ```T|290|MXN|0001:1205:12345:123:JUAN:COLONIA CENTRO:1``` **Cashback** Códigos de categorías identificados(``,003,categoría de la configuración). F|IMPORTE|DIVISA|REFERENCIA ```W|100|MXN|774478754744``` **Vale** ID|IMPORTE|DIVISA|REFERENCIA:NOTAS:TIPO_CAMBIO ID|IMPORTE|DIVISA|REFERENCIA:NOTAS // Sin tipo de cambio. V|290|MXN|REF0012:Cobro con vales **Datos extras** DT|CATEGORIA|REFERENCIA|FECHA|NOTAS ```DT|5|REF909913|2025-01-30|COBRO DE PRODUCTO``` Ejemplo de datos extras(DT) ```E|290|MXN!DT|5|REF909912|2025-01-30|COBRO DE PRODUCTO``` Nota: ``` Sí se omite(DT), se toman automáticamente los datos: Categoría: Se asigna la categoría configurada en Maxicomercio(Categoría predeterminada de ingreso). Referencia: Se asigna una referencia automática. Notas: Se asigna "Cobro documento + Referencia". Fecha: Se asigna la fecha actual. ``` **Efectivo y Cheques** F|IMPORTE|DIVISA!F|IMPORTE|DIVISA|BANCO:EMISOR:BENEFICIARIO:NUMERO:TIPO_CAMBIO ```E|200|MXN!C|90|MXN|3:JUAN LÓPEZ:PEDRO JUÁREZ:12597:1``` **Tarjeta y Cashback** F|IMPORTE|DIVISA|TIPO:NUMERO_AUTORIZACION:NUMERO:CVV:NOMBRE:DOMICILIO:TIPO_CAMBIO!F|IMPORTE|DIVISA|REFERENCIA ```T|290|MXN|0001:1205:12345:123:NOMBRE:DOMICILIO:1!W|100|MXN|REF002345``` **Tarjeta X 3** - T1= ```T|150|MXN|0001:12056:123456:123:TARJETA 1:DOMICILIO 1:1``` - T2= ```T|90|MXN|0001:120567:123457:321:TARJETA 2:DOMICILIO 2:1``` - T3= ```T|50|MXN|0001:120568:123456:131:TARJETA 3:DOMICILIO 3:1``` Línea completa: ```T|150|MXN|0001:12056:123456:123:TARJETA 1:DOMICILIO 1:1!T|90|MXN|0001:120567:123457:321:TARJETA 2:DOMICILIO 2:1!T|50|MXN|0001:120568:123456:131:TARJETA 3:DOMICILIO 3:1``` ### pos.js Función que realiza la invocación de la aplicación intermedia `evTPVCobrar`. ``` function getCad(cadena) { var indice = cadena.indexOf('!!!'); if (indice !== -1) { var parteDespuesDeSecuencia = cadena.substring(indice + 3); return parteDespuesDeSecuencia; } else { return ""; } } function replaceArgs(cadena) { //Reemplazar aquí todos los símbolos necesarios. var c=cadena.toString().replace('|','_'); c=c.replace('!','_'); return c; } function evTPVCobrar(referencia,importe,divisa, pista) { Application.MainForm.ClearConsole(); var args='"'+replaceArgs(referencia)+"|"+replaceArgs(importe)+"|"+replaceArgs(divisa)+"|"+replaceArgs(pista)+'"'; var command = "globalpay.bat " + args; Application.MainForm.ExecInConsole(command); var response = Application.MainForm.txtConsole.Text; var res=getCad(response); return res; } ``` ### Aplicación intermedia "AppGlobalPay.exe" Esta aplicación implementa las formas de pago ya antes mencionado. Todo carácter | o (!) será reemplazado por un carácter _ en las secuencias. Secuencia de inicio de cobro (esto lo envía el sistema informando(punto de venta): `referencia|saldo a cobrar|divisa|una pista`). ``` A02444875|250.35|MXN|Venta 00001 ``` Para ejecutar esta aplicación desde código javascript se utiliza un archivo `globalpay.bat` ya que por alguna razón las funciones de vb6 solo ejecutan aplicaciones de consola. Contenido del archivo `globalpay.bat`, recibe un argumento "referencia|importe|divisa|pista". ``` appglobalpay.exe %1 ``` **Patrón de retorno por consola de cada forma de pago** - *Efectivo .-* F|IMPORTE|DIVISA - *Tarjetas .-* F|IMPORTE|DIVISA|TIPO:NUMERO_AUTORIZACION:NUMERO:CVV:NOMBRE:DOMICILIO - *Depósitos .-* F|IMPORTE|DIVISA|BANCO:REFERENCIA - *Vales .-* F|IMPORTE|DIVISA|REFERENCIA:NOTAS - *Cheques .-* F|IMPORTE|DIVISA|BANCO:EMISOR:BENEFICIARIO:NUMERO La aplicación `AppGlobalPay.exe` devuelve las formas pagos elegidas con los siguientes símbolos al inicio `!!!`, esto con el fin de poder recuperar las formas de pago elegidas desde la función de javascript `getCad`. **Ejemplo** ``` Console.WriteLine("!!!E|290|MXN!T|290|MXN|0001:1205:12345:123:JUAN:COLONIA CENTRO"); // Al obtener el resultado de la consola desde la función `evTPVCobrar` da como resultado `C:\app\AppGlobalPay.exe!!!E|290|MXN!T|290|MXN|0001:1205:12345:123:JUAN:COLONIA CENTRO`. // C:\app\AppGlobalPay.exe = Ruta de la ubicación de la aplicación. ```