# API Epagos

Este repositorio contiene código JS que hace consultas a PHP para la generacion de comprobantes mediante Epagos

### Requisitos del servidor

-   PHP instalado
-   Extensión PDO habilitada

## Solicitud de pago recurrente

### Registrar el usuario (plan de pago)

Para la registracion de planes de pagos recurrentes se debe importar el siguiente JS e invocar la funcion _registrar_cuentas_cliente()_.

Si el numero de plan ya se encuentra registrado y se desea modificar el CBU se debe invocar la funcion _registrar_cuentas_cliente()_, con los nuevos datos.

La funcio _registrar_cuentas_cliente()_ registra plan de pagos en E-pagos, y lo guarda en la tabla _ppc_epagos_debito_directo_registrados_, si ya se encuentra registrado en la misma, se da debaja el existente y se crea un registro nuevo con los nuevos datos.

_Desarrollo_

```html
<script src="http://dev-sip-web08.vicentelopez.gov.ar/api-epagos/ePagos_recurrencia.js" data-api-entorno="dev"></script>
```

_Productivo_

http

```html
<script src="http://prd-sip-web07.vicentelopez.gov.ar/api-epagos/ePagos_recurrencia.js" data-api-entorno="production"></script>
```

https

```html
<script src="https://apiepagos.vicentelopez.gov.ar/api-epagos/ePagos_recurrencia.js" data-api-entorno="production"></script>
```

_Metodo de registracion_

```javascript
const btnRegistrar = async (...) => {
    await registrar_cuentas_cliente(identificador_cliente, tipo_operacion, cuit, cbu, legajo);
};
```

_Variables_

-   identificador_cliente -> Numero de plan **Number**
-   tipo_operacion -> [Numero de tipo de operacion](#tipos-de-operaciones) **Number**
-   cuit -> [Numero de Cuit](#cbu-y-cuit-para-testing) **String**
-   cbu -> [Numero de CBU](#cbu-y-cuit-para-testing) **String**
-   legajo -> [Numero de Legajo] -> **Number**

---

### Store Procedures Planes de Pagos registrados

-   **sp_datos_plan(xn_plan integer)**

    Obtener datos de la cuenta de comercio con el numero de plan

    -   n_cuit
    -   d_nombre
    -   d_apellido
    -   c_cuenta
    -   email
    -   telefono

-   **sp_get_clientes_registrados_epagos_dd(xn_plan INTEGER, xc_cuenta INTEGER, xc_sistema SMALLINT)**

    Obtener plan de pago registrado, se puede consultar por n_plan o por c_cuenta y c_sistema.

    -   Consulta por Numero de Plan: xn_plan igual al numero de plan, xc_cuenta y xc_sistema se envian como null
    -   Consulta por Numero de Cuenta: xn_plan se envia como null, xc_cuenta es el numero de cuenta y el xc_sistema es el sistema al que pertenece ese c_cuenta

-   **sp_baja_clientes_registrados_epagos_dd(xn_plan integer)**

    Baja de pago por recurrencia de debito directo al n_plan enviado

## Solicitud de Pago

Genera una solicitud de pago por Epagos y retorna QR tanto a la billetera virtual de Epagos como el QR 3.0 interoperable. Se debe importar el siguiente JS e invocar la funcion _solicitud_pago()_
Epagos tiene un monto minimo para poder generar el QR 3.0 de $900 (05/09/2024).Validar que "qr_imagen_T30" exista en la respuesta.

_Desarrollo_

```html
<script src="http://dev-sip-web08.vicentelopez.gov.ar/api-epagos/ePagos.js" data-api-entorno="dev"></script>
```

_Productivo_

http

```html
<script src="http://prd-sip-web07.vicentelopez.gov.ar/api-epagos/ePagos.js" data-api-entorno="production"></script>
```

https

```html
<script src="https://apiepagos.vicentelopez.gov.ar/api-epagos/ePagos.js" data-api-entorno="production"></script>
```

_Metodo de solicitud de pago_

```javascript
const btnSolicitud = async (...) => {

    const obj = {
        tasa: "ABL",
        cuenta: 12341,
        fechaV: "2023-07-05",
        valor: 20.2,
        email: null,
        nombre: "ema",
        recibo: 111,
        opc_pdf: false,
        opc_generar_pdf: false,
        opc_devolver_qr: true,
        id_sistema:"QR DDJJ",
        id_ext_4:"AA409IS"
    };

    await solicitud_pago(obj);
};
```

_Variables_

-   tasa -> Tasa del comprobrante generado Ej: ABL, SEH **String**
-   cuenta -> Numero de Cuenta **Number**
-   fechaV -> Fecha de vencimiento (YYYY-MM-DD) **String**
-   valor -> Monto a pagar (separador de miles sea .) **Number**
-   email -> Email **String**
-   nombre -> Nombre **String**
-   recibo -> Numero de comprobrante **Number**
-   opc_pdf -> Si retorna pdf **Boolean**
-   opc_generar_pdf -> Si genera pdf **Boolean**
-   opc_devolver_qr -> Si retorna QR **Boolean**
-   id_sistema -> id para busqueda en Epagos **String**
-   id_ext_4 -> id externa 4 (opcional).veh. rod. -> dominio **String**

## Solicitud de Pago (API POST)

Este endpoint permite a los usuarios generar una solicitud de pago a través de Epagos. Al recibir una solicitud POST con el Content-Type `application/json`, el sistema procesa la información proporcionada para retornar los QR, tanto a la billetera virtual de Epagos como el QR 3.0 interoperable.
Epagos tiene un monto minimo para poder generar el QR 3.0 de $900 (05/09/2024).Validar que "qr_imagen_T30" exista en la respuesta.
QR billetera de epagos "fp[0].qr_imagen"
QR 3.0 interoperable "fp[0].qr_imagen_T30" (es el qr codificado)

_Desarrollo_

`http://dev-sip-web08.vicentelopez.gov.ar/api-epagos/api/solicitud_pago.php`

_Productivo_

`https://apiepagos.vicentelopez.gov.ar/api-epagos/api/solicitud_pago.php`

_Realizar una consulta por POST con el siguiente objeto_

```javascript
{
        "tasa": "ABL",
        "cuenta": 12341,
        "fechaV": "2024-09-12",
        "valor": 2000.2,
        "email": null,
        "nombre": "ema",
        "recibo": 10746554597,
        "opc_pdf": false,
        "opc_generar_pdf": false,
        "opc_devolver_qr": true,
        "id_sistema": "QR DDJJ"
}
```

_Variables_

-   tasa -> Tasa del comprobrante generado Ej: ABL, SEH **String**
-   cuenta -> Numero de Cuenta **Number**
-   fechaV -> Fecha de vencimiento (YYYY-MM-DD) **String**
-   valor -> Monto a pagar (separador de miles sea .) **Number**
-   email -> Email **String**
-   nombre -> Nombre **String**
-   recibo -> Numero de comprobrante **Number**
-   opc_pdf -> Si retorna pdf **Boolean**
-   opc_generar_pdf -> Si genera pdf **Boolean**
-   opc_devolver_qr -> Si retorna QR **Boolean**
-   id_sistema -> id para busqueda en Epagos **String**
-   id_ext_4 -> id externa 4 (opcional).veh. rod. -> dominio **String**

_Respuesta_

```javascript
{
        "id_resp": "02002",
        "respuesta": "Pago pendiente",
        "id_transaccion": 5384080,
        "token": "533e15d592588d6c72203f886353e00d",
        "id_organismo": 109,
        "numero_operacion": "10746554597",
        "convenio": 109,
        "fp": [
            {
                "codigo_pago_fp": "437066506",
                "codigo_barras_fp": "9690001090100000005384080202409120001677269007",
                "fechavenc_fp": "2024-09-12",
                "importe_fp": 2000.2,
                "pdf": "",
                "codigo_barras_imagen": null,
                "qr_imagen": "iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAMAAAAKE...",
                "qr_imagen_T30": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAIbAQMAAAB46c7+AAAABlB...",
                "qr_texto_T30": "...",
                "respuesta_entidad_cobro": "Boleta Generada",
                "codigo_pmc": "000001426240000",
                "codigo_link": "00000142624",
                "url_qr": "https://postsandbox.epagos.com.ar/?hash=ceba70d5123975f4d5702a47530c973a",
                "cuit_cuenta": null,
                "cbu_cuenta": null,
                "barras_adicionales": []
            }
        ]
    }
```

---

## Totem Checkout

Redirecciona al checkout de la billetera de Epagos, para ser utilizada por el Totem.
Llama una funcion asíncrona de js que realica la consulta, si falla retorna el error y si es correcta redirecciona a la billetera de Epagos

_Desarrollo_

```html
<script src="http://dev-sip-web08.vicentelopez.gov.ar/api-epagos/ePagos_checkout.js" data-api-entorno="dev"></script>
```

_Productivo_

http

```html
<script src="https://prd-sip-web07.vicentelopez.gov.ar/api-epagos/ePagos_checkout.js" data-api-entorno="production"></script>
```

https

```html
<script src="https://apiepagos.vicentelopez.gov.ar/api-epagos/ePagos_checkout.js" data-api-entorno="production"></script>
```

_Metodo de solicitud de pago_

```javascript
const obj = {
    importe: 12312313.1,
    comprob: "10746554597",
    app_id: "Totem Checkout",
    tasa: "ABL",
    cuenta: "12345",
    url_ok: "https://postsandbox.epagos.net/tests/ok.php",
    url_error: "https://postsandbox.epagos.net/tests/error.php",
};

btnPagar.addEventListener("click", async () => {
    await ePagosCheckout(obj);
});
```

_Variables_

-   importe -> Monto a pagar (separador de miles sea .) **Number**
-   comprob -> Numero de comprobrante **String**
-   app_id -> id para busqueda en Epagos **String**
-   tasa -> Tasa del comprobrante generado Ej: ABL, SEH **String**
-   cuenta -> Numero de Cuenta o Dominio **String**
-   url_ok -> URL de retorno en pago OK **String**
-   url_error -> URL de retorno en caso error **String**

---

## Solicitud de Pago por Lote

Genera una solicitud de pago por Epagos y retorna QR tanto a la billetera virtual de Epagos como el QR 3.0 interoperable. Se debe importar el siguiente JS e invocar la funcion _solicitud_pago_lote()_

_Desarrollo_

```html
<script src="http://dev-sip-web08.vicentelopez.gov.ar/api-epagos/ePagos.js" data-api-entorno="dev"></script>
```

_Productivo_

http

```html
<script src="http://prd-sip-web07.vicentelopez.gov.ar/api-epagos/ePagos.js" data-api-entorno="production"></script>
```

https

```html
<script src="https://apiepagos.vicentelopez.gov.ar/api-epagos/ePagos.js" data-api-entorno="production"></script>
```

_Metodo de solicitud de pago_

```javascript
const btnSolicitud = async (...) => {

    let array = [
                    { tasa: "ABL", cuenta: 12341, fechaV: "2023-06-16", valor: 1523.2, email: null, nombre: "ema", recibo: 111, opc_pdf: false, opc_generar_pdf: false, opc_devolver_qr: true,id_sistema:"QR DDJJ" },
                    { tasa: "SGH", cuenta: 3412, fechaV: "2023-06-16", valor: 120.65, email: null, nombre: "jhon", recibo: 222, opc_pdf: false, opc_generar_pdf: false, opc_devolver_qr: true,id_sistema:"QR DDJJ" },
                    { tasa: "ABL", cuenta: 124567, fechaV: "2023-06-16", valor: 1457.1, email: null, nombre: "nikolay", recibo: 333, opc_pdf: false, opc_generar_pdf: false, opc_devolver_qr: true,id_sistema:"QR DDJJ" },
                ];

    await solicitud_pago_lote(array);
};
```

_Variables_

-   tasa -> Tasa del comprobrante generado Ej: ABL, SEH **String**
-   cuenta -> Numero de Cuenta **Number**
-   fechaV -> Fecha de vencimiento (YYYY-MM-DD) **String**
-   valor -> Monto a pagar (separador de miles sea .) **Number**
-   email -> Email **String**
-   nombre -> Nombre **String**
-   recibo -> Numero de comprobrante **Number**
-   opc_pdf -> Si retorna pdf **Boolean**
-   opc_generar_pdf -> Si genera pdf **Boolean**
-   opc_devolver_qr -> Si retorna QR **Boolean**
-   id_ext_4 -> id externa 4 (opcional).veh. rod. -> dominio **String**

## Descargar Archivo

Esta función _descargarArchivo(Base64, string)_ permite descargar un archivo PDF decodificado a partir de una cadena Base64. Puedes proporcionar un nombre personalizado para el archivo, o se asignará uno por defecto si no se especifica.

```javascript
descargarArchivo(pdfBase64, "nombre del archivo");
```

### CBU y CUIT para Testing

| CBU                    | Alias          | CUIT        | Tipo persona |
| ---------------------- | -------------- | ----------- | ------------ |
| 3220002204000040970011 | prueba.debin   | 20123456781 | Física       |
| 3220001101000040970011 | prueba.debin.2 | 27123456781 | Física       |
| 3220001101000040970011 | prueba.debin.2 | 30111111110 | Jurídica     |
| 0070314530004001400167 | prueba.debin.3 | 20004940548 | Física       |

### Tipos de Operaciones

| ID  | Tipo | Sigla   | Nombre                                                         |
| --- | ---- | ------- | -------------------------------------------------------------- |
| 1   | M    | TSG     | Tasa de servicios generales                                    |
| 2   | M    | TISH    | Tasa de Inspección de Seguridad e Higiene                      |
| 3   | M    | TCRVM   | Tasa de Conservación de la Red Vial Municipal                  |
| 4   | M    | ROD     | Patente                                                        |
| 5   | M    | CEM     | Tasa de Cementerio                                             |
| 6   | M    | COM     | Tasa de Comercio                                               |
| 7   | M    | COM_PUB | Tasa de Comercio - Publicidad y Propaganda                     |
| 8   | M    | COM_SEG | Tasa de Comercio - Tasa de Seguridad                           |
| 9   | M    | COM_HAB | Tasa de Comercio - Tasa de Habilitación                        |
| 10  | M    | COM_ANT | Tasa de Comercio - Tasa por Inspección de Seguridad de Antenas |
| 11  | M    | TASAS   | Tasas Varias                                                   |
| 12  | M    | INF     | Infracciones                                                   |
| 13  | M    | INF_TRA | Infracciones - Tránsito                                        |
| 14  | M    | INF_COM | Infracciones - Comercio                                        |
| 15  | M    | CONTRA  | Contravenciones Varias                                         |
| 16  | M    | DER_OFI | Derechos de oficina                                            |
| 17  | M    | CONTRIB | Contribuciones Varias                                          |
| 18  | M    | CONTRAC | Contracargo descontado                                         |
| 19  | M    | SANIT   | Sanitario                                                      |
| 20  | M    | SERV    | Servicio                                                       |
| 21  | M    | PDP     | PLAN DE PAGO                                                   |
