> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pay-me.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Funcionalidad Débito Automática

> Inicializa y muestra el formulario de débito automático de Pay-me Flex

<Warning>
  Esta funcionalidad se encuentra en desarrollo. La documentación, parámetros y flujos pueden cambiar antes de su disponibilidad final.
</Warning>

## Inicializar componente Débito Automático

Cuando se crea una nueva instancia del componente es necesario un objeto de configuración con las propiedades **nonce**, **payload** y **settings**.

### Parámetros

<AccordionGroup>
  <Accordion title="Datos de la afiliación">
    | Campo                       | Tipo              | Obligatorio | Descripción                                                     |
    | --------------------------- | ----------------- | ----------- | --------------------------------------------------------------- |
    | `action`                    | String            | SI          | Acción a ejecutar. Valores: `subscribe` / `update_subscription` |
    | `merchant_affiliation_code` | String            | SI          | Código de afiliación generado por el comercio.                  |
    | `merchant_code`             | String            | SI          | Código del comercio que inicia la afiliación.                   |
    | `type`                      | String            | SI          | Tipo de afiliación. Solo se permite `MANUAL`.                   |
    | `frequency`                 | String            | NO          | Frecuencia de los cobros de la afiliación.                      |
    | `amount`                    | String            | NO          | Monto de los cobros en centavos.                                |
    | `maxAmount`                 | String            | NO          | Monto máximo para los pagos recurrentes en centavos.            |
    | `currency`                  | String (ISO 4217) | SI          | Moneda de los cobros. Ej.: `604` = PEN.                         |
  </Accordion>

  <Accordion title="Datos del beneficiario">
    | Campo                                      | Tipo              | Obligatorio | Descripción                                 |
    | ------------------------------------------ | ----------------- | ----------- | ------------------------------------------- |
    | `beneficiary.first_name`                   | String            | SI          | Nombres del beneficiario.                   |
    | `beneficiary.last_name`                    | String            | SI          | Apellidos del beneficiario.                 |
    | `beneficiary.email`                        | String            | SI          | Correo electrónico del beneficiario.        |
    | `beneficiary.phone.country_code`           | String            | SI          | Código de país del teléfono. Ej.: `51`.     |
    | `beneficiary.phone.subscriber`             | String            | SI          | Número de teléfono del beneficiario.        |
    | `beneficiary.identity_document.type`       | String            | NO          | Tipo de documento de identidad. Ej.: `DNI`. |
    | `beneficiary.identity_document.identifier` | String            | NO          | Número del documento de identidad.          |
    | `beneficiary.identity_document.country`    | String (ISO-3166) | NO          | País de emisión del documento. Ej.: `PE`.   |
    | `beneficiary.location.line_1`              | String            | SI          | Dirección principal.                        |
    | `beneficiary.location.line_2`              | String            | NO          | Dirección complementaria.                   |
    | `beneficiary.location.city`                | String            | SI          | Ciudad de residencia.                       |
    | `beneficiary.location.state`               | String            | SI          | Departamento o región.                      |
    | `beneficiary.location.country`             | String (ISO-3166) | SI          | Código ISO del país. Ej.: `PE`.             |
  </Accordion>

  <Accordion title="Campos adicionales">
    | Campo                              | Tipo   | Obligatorio | Descripción                                                           |
    | ---------------------------------- | ------ | ----------- | --------------------------------------------------------------------- |
    | `additional_fields.FACTURACION_ID` | String | NO          | ID del cliente o contrato para facturación.                           |
    | `additional_fields.PLAN`           | String | NO          | Nombre o código del plan al que se afilia el beneficiario.            |
    | `wallet.user_id`                   | String | NO          | ID del usuario en el wallet para asociar una tarjeta a la afiliación. |
  </Accordion>
</AccordionGroup>

### Flujos disponibles

<CardGroup cols={3}>
  <Card title="authorize" icon="credit-card">
    Muestra un formulario de pago con los diferentes métodos habilitados para el comercio.
  </Card>

  <Card title="subscribe" icon="user-plus">
    Muestra el formulario de afiliación para registrar un nuevo débito automático.
  </Card>

  <Card title="update_subscription" icon="pen-to-square">
    Muestra un formulario para actualizar una afiliación existente.
  </Card>
</CardGroup>

***

## Mostrar Pay-me Flex Débito Automático

Este es el paso final. Se indica dentro de qué **elemento del DOM** se debe mostrar el formulario y las funciones **callback** para ejecutarse durante el proceso.

### Callbacks

<CardGroup cols={3}>
  <Card title="responseCallback" icon="circle-check">
    Se ejecuta cuando el componente entrega una respuesta del proceso.
  </Card>

  <Card title="trackingCallback" icon="chart-line">
    Se ejecuta por cada evento disparado durante el proceso.
  </Card>

  <Card title="onErrorCallback" icon="circle-xmark">
    Se ejecuta cuando hay un error durante el proceso.
  </Card>
</CardGroup>

<Warning>
  No uses `meta.status.code` como validador de pago autorizado o denegado. Este código solo indica el resultado del procesamiento del servicio. Para una autorización, valida el estado de la transacción y confirma el resultado desde backend antes de cerrar la orden.
</Warning>

### Casos de uso

<Tabs>
  <Tab title="Autorización con Wallet">
    ```json theme={"system"}
        {
            "action": "authorize",
            "channel": "ecommerce",
            "merchant_code": "your_merchant_code",
            "merchant_operation_number": "976867",
            "payment_details": {
                "amount": "387000",
                "currency": "604",
                "billing": {
                    "first_name": "Mateo",
                    "last_name": "Zayas Meza",
                    "email": "Mateo_ZayasMeza85@yahoo.com",
                    "phone": { "country_code": "51", "subscriber": "945831902" },
                    "location": {
                        "line_1": "Poblado Concepción 7",
                        "line_2": "Puerta 249",
                        "city": "LIMA",
                        "state": "LIMA",
                        "country": "PE"
                    }
                },
                "wallet": { "user_id": "72661927" }
            }
        }
    ```
  </Tab>

  <Tab title="Formulario de afiliación">
    ```json theme={"system"}
        {
            "action": "subscribe",
            "merchant_affiliation_code": "122947_RPS_USER",
            "merchant_code": "your_merchant_code",
            "type": "MANUAL",
            "currency": "604",
            "beneficiary": {
                "first_name": "Pilar",
                "last_name": "Ordóñez Tirado",
                "email": "Pilar.OrdonezTirado61@gmail.com",
                "phone": { "country_code": "51", "subscriber": "965097539" },
                "identity_document": {
                    "type": "DNI",
                    "identifier": "38216803",
                    "country": "PE"
                },
                "location": {
                    "line_1": "Colonia Victor Manuel 2498",
                    "city": "LIMA",
                    "state": "LIMA",
                    "country": "PE"
                }
            },
            "additional_fields": {
                "FACTURACION_ID": "133445",
                "PLAN": "POST PAGO 250"
            }
        }
    ```
  </Tab>

  <Tab title="Afiliación con Wallet">
    ```json theme={"system"}
        {
            "action": "subscribe",
            "merchant_affiliation_code": "023007_RPS_USER",
            "merchant_code": "your_merchant_code",
            "type": "MANUAL",
            "currency": "604",
            "beneficiary": {
                "first_name": "Mónica",
                "last_name": "Duarte Deleón",
                "email": "Monica.DuarteDeleon89@nearbpo.com",
                "phone": { "country_code": "51", "subscriber": "944169494" },
                "identity_document": {
                    "type": "DNI",
                    "identifier": "41134394",
                    "country": "PE"
                },
                "location": {
                    "line_1": "Ferrocarril Pilar Quintairos 45",
                    "city": "LIMA",
                    "state": "LIMA",
                    "country": "PE"
                }
            },
            "additional_fields": {
                "FACTURACION_ID": "133445",
                "PLAN": "POST PAGO 250"
            },
            "wallet": { "user_id": "72661927" }
        }
    ```
  </Tab>

  <Tab title="Actualizar afiliación">
    ```json theme={"system"}
        {
            "action": "update_subscription",
            "merchant_affiliation_code": "10011_LEVIS",
            "merchant_code": "your_merchant_code"
        }
    ```
  </Tab>

  <Tab title="Actualizar afiliación con Wallet">
    ```json theme={"system"}
        {
            "action": "update_subscription",
            "merchant_affiliation_code": "10011_LEVIS",
            "merchant_code": "your_merchant_code",
            "wallet": { "user_id": "72661927" }
        }
    ```
  </Tab>
</Tabs>

### Response de afiliación

<AccordionGroup>
  <Accordion title="Datos de la afiliación">
    | Campo                                   | Tipo              | Obligatorio | Descripción                                    |
    | --------------------------------------- | ----------------- | ----------- | ---------------------------------------------- |
    | `success`                               | Boolean           | SI          | Indica si el proceso se realizó correctamente. |
    | `affiliation.affiliation_id`            | String (UUID)     | SI          | ID de la afiliación generado por el sistema.   |
    | `affiliation.merchant_affiliation_code` | String            | SI          | Código de afiliación generado por el comercio. |
    | `affiliation.merchant_code`             | String (UUID)     | SI          | Código del comercio.                           |
    | `affiliation.state`                     | String            | SI          | Estado de la afiliación. Ej.: `ACTIVE`.        |
    | `affiliation.type`                      | String            | SI          | Tipo de afiliación. Ej.: `MANUAL`.             |
    | `affiliation.frequency`                 | String            | NO          | Frecuencia de los cobros.                      |
    | `affiliation.amount`                    | String            | NO          | Monto de la afiliación en centavos.            |
    | `affiliation.max_amount`                | String            | NO          | Monto máximo permitido.                        |
    | `affiliation.currency`                  | String (ISO 4217) | SI          | Moneda de los cobros.                          |
  </Accordion>

  <Accordion title="Datos del beneficiario">
    | Campo                                                  | Tipo   | Obligatorio | Descripción                   |
    | ------------------------------------------------------ | ------ | ----------- | ----------------------------- |
    | `affiliation.beneficiary.first_name`                   | String | SI          | Nombres del beneficiario.     |
    | `affiliation.beneficiary.last_name`                    | String | SI          | Apellidos del beneficiario.   |
    | `affiliation.beneficiary.email`                        | String | SI          | Correo electrónico.           |
    | `affiliation.beneficiary.phone.country_code`           | String | SI          | Código del país del teléfono. |
    | `affiliation.beneficiary.phone.subscriber`             | String | SI          | Número de teléfono.           |
    | `affiliation.beneficiary.identity_document.type`       | String | NO          | Tipo de documento.            |
    | `affiliation.beneficiary.identity_document.identifier` | String | NO          | Número de documento.          |
    | `affiliation.beneficiary.identity_document.country`    | String | NO          | País del documento.           |
    | `affiliation.beneficiary.location.line_1`              | String | SI          | Dirección principal.          |
    | `affiliation.beneficiary.location.city`                | String | SI          | Ciudad.                       |
    | `affiliation.beneficiary.location.state`               | String | SI          | Departamento o región.        |
    | `affiliation.beneficiary.location.country`             | String | SI          | País.                         |
  </Accordion>

  <Accordion title="Datos de la tarjeta">
    | Campo                               | Tipo   | Obligatorio | Descripción                                                                                    |
    | ----------------------------------- | ------ | ----------- | ---------------------------------------------------------------------------------------------- |
    | `affiliation.card.token`            | String | SI          | Token de la tarjeta afiliada.                                                                  |
    | `affiliation.card.brand`            | String | SI          | Marca de la tarjeta. Ej.: VISA, MSCD.                                                          |
    | `affiliation.card.bin`              | String | SI          | BIN de la tarjeta.                                                                             |
    | `affiliation.card.last_pan`         | String | SI          | Últimos 4 dígitos de la tarjeta.                                                               |
    | `affiliation.card.issuer_name`      | String | NO          | Nombre del emisor de la tarjeta.                                                               |
    | `affiliation.card.card_holder_name` | String | SI          | Nombre del titular de la tarjeta.                                                              |
    | `meta.status.code`                  | String | SI          | Código de resultado técnico del procesamiento. No valida si un pago fue autorizado o denegado. |
    | `meta.status.message_ilgn[].locale` | String | SI          | Idioma del mensaje de respuesta.                                                               |
    | `meta.status.message_ilgn[].value`  | String | SI          | Descripción del resultado.                                                                     |
  </Accordion>
</AccordionGroup>
