# 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.
```