Skip to main content
Usa este flujo para iniciar pagos ecommerce con transferencia bancaria desde el API de autorización de PayIn.
POST /charges
endpoint
Este flujo utiliza el mismo endpoint base de autorización. Revisa los ambientes y la configuración general en el Overview.

Características del flujo

Tipo de flujo

Asíncrono.

Método de pago

Permite iniciar cobros ecommerce con transferencia bancaria.

Redirección

El usuario continúa el pago fuera de tu checkout.

Validación final

El resultado final debe confirmarse por backend con notificación o consulta.

Consideraciones

Este flujo requiere redirect_url para retornar al comercio cuando finalice la autorización y permite enviar callback_url para notificación host to host.
Si trabajas con redirect, revisa también las Consideraciones para métodos con Redirect.
No tomes como final la respuesta inicial del POST /charges. Confirma el resultado con Notificaciones o con Consulta.

Request

Antes de consumir este endpoint, solicita tu Access Token en Autenticación.

Headers

CampoDescripciónValorTipoObligatorio
AuthorizationToken Bearer obtenido desde autenticaciónBearer {access_token}StringSI
Content-TypeFormato del requestapplication/jsonStringSI
ALG-API-VERSIONVersión del API1709847567StringSI
Authorization: Bearer {access_token}
Content-Type: application/json
ALG-API-VERSION: 1709847567

Body

Objeto raíz del request

CampoDescripciónEjemploTipoObligatorio
actionAcción a ejecutarauthorizeStringSI
channelCanal de la operaciónecommerceStringSI
merchant_codeCódigo del comercioyour_merchant_codeStringSI
merchant_operation_numberIdentificador único de la operación en el comercio. Debe ser diferente en cada transacción.5974483StringSI
payment_methodObjeto con la información del método de pagoObjectObjectSI
payment_detailsObjeto con el detalle del pago y datos del clienteObjectObjectSI

Objeto payment_method

CampoDescripciónEjemploTipoObligatorio
method_nameNombre del método de pagoBANK_TRANSFERStringSI
method_detailsObjeto con la información específica de la transferencia bancariaObjectObjectSI

Objeto payment_method.method_details

CampoDescripciónEjemploTipoObligatorio
redirect_urlURL donde se realizará el redirect cuando finalice la autorizaciónhttps://pay-me.comStringSI
callback_urlURL donde se realizará la notificación host to host (server to server)https://pay-me.com/callbackStringNO
redirect_url debe apuntar a una ruta de tu comercio preparada para recibir el retorno del usuario. Si envías callback_url, asegúrate de que sea accesible desde backend.

Objeto payment_details

CampoDescripciónEjemploTipoObligatorio
amountMonto de la operación en centavos15000StringSI
currencyCódigo de la moneda604StringSI
billingDatos de facturaciónObjectObjectSI
shippingDatos de envíoObjectObjectSI
customerDatos del clienteObjectObjectSI
product_detailsLista de productos asociados a la operación[]ArraySI
Para billing, shipping y customer, usa la estructura ecommerce estándar con first_name, last_name, email, phone y location.

Ejemplo de request

{
  "action": "authorize",
  "channel": "ecommerce",
  "merchant_code": "your_merchant_code",
  "merchant_operation_number": "5974483",
  "payment_method": {
    "method_name": "BANK_TRANSFER",
    "method_details": {
      "redirect_url": "https://pay-me.com",
      "callback_url": "https://pay-me.com/callback"
    }
  },
  "payment_details": {
    "amount": "15000",
    "currency": "604",
    "billing": {
      "first_name": "Pedro",
      "last_name": "Miranda",
      "email": "pedro@pay-me.com",
      "phone": {
        "country_code": "+51",
        "subscriber": "999835685"
      },
      "location": {
        "line_1": "Av. Casimiro Ulloa 333",
        "line_2": "Miraflores",
        "city": "Lima",
        "state": "Lima",
        "country": "Peru"
      }
    },
    "shipping": {
      "first_name": "Pedro",
      "last_name": "Miranda",
      "email": "pedro@pay-me.com",
      "phone": {
        "country_code": "+51",
        "subscriber": "999835685"
      },
      "location": {
        "line_1": "Av. Casimiro Ulloa 333",
        "line_2": "Miraflores",
        "city": "Lima",
        "state": "Lima",
        "country": "Peru"
      }
    },
    "customer": {
      "first_name": "Pedro",
      "last_name": "Miranda",
      "email": "pedro@pay-me.com",
      "phone": {
        "country_code": "+51",
        "subscriber": "999835685"
      },
      "location": {
        "line_1": "Av. Casimiro Ulloa 333",
        "line_2": "Miraflores",
        "city": "Lima",
        "state": "Lima",
        "country": "Peru"
      }
    },
    "product_details": []
  }
}

Response

Para recibir la respuesta final de una autorización con redirect, toma en cuenta las Consideraciones para métodos con Redirect. La respuesta inicial normalmente deja la transacción en seguimiento.

Objeto transaction

CampoDescripciónEjemploTipoObligatorio
transaction_idIdentificador único de la transacción5hk8rwa3h3cq9oyfs3a28v1msStringSI
channelCanal por el cual se realizó la transacciónecommerceStringSI
stateEstado actual de la transacciónPENDIENTEStringSI
state_reasonObservación o descripción del estado actualUrl generada para continuar con el pagoStringSI
continue_urlURL para continuar el flujo del pago fuera del checkouthttps://api.dev.alignet.io/payment/continue/card/81vrxn30vja1gwcfsdng4i5g5StringNO
amountMonto de la transacción15000StringSI
currencyCódigo de la moneda de la operación604StringSI
payment_methodObjeto con información del método de pago usado en la transacciónObjectObjectSI
expiration_dateFecha en la que expirará la transacciónObjectObjectNO
additional_fieldsDatos adicionales enviados en el requestObjectObjectNO
lifecycleHistorial de estados por los que pasó la transacciónArrayArraySI
state puede devolver valores como PENDIENTE o INVALIDO. continue_url y expiration_date suelen estar presentes cuando la transacción queda en estado PENDIENTE.

Objeto transaction.payment_method

CampoDescripciónEjemploTipoObligatorio
method_nameNombre del método de pago usado en la transacciónBANK_TRANSFERStringSI
method_detailsObjeto que contiene el detalle del método de pago usado en la transacciónObjectObjectSI

Objeto transaction.payment_method.method_details

CampoDescripciónEjemploTipoObligatorio
redirect_urlURL donde se realizará el redirect cuando finalice la autorizaciónhttps://pay-me.comStringSI
callback_urlURL donde se realizará la notificación host to host (server to server)https://pay-me.com/callbackStringNO

Objeto transaction.expiration_date

CampoDescripciónEjemploTipoObligatorio
utc_timeFecha de expiración en UTC2024-03-12T22:49:36.018ZStringNO
unix_timeFecha de expiración en unix time1711585037IntegerNO

Objeto transaction.lifecycle

CampoDescripciónEjemploTipoObligatorio
stateEstado registrado en el historialPENDIENTEStringSI
dateFecha del cambio de estadoObjectObjectSI
En lifecycle puedes recibir estados como REGISTRADO, PENDIENTE e INVALIDO.

Objeto transaction.lifecycle[].date

CampoDescripciónEjemploTipoObligatorio
utc_timeFecha en UTC2024-03-12T22:49:36.018ZStringSI
unix_timeFecha en unix time1710282940IntegerSI

Ejemplo de response

{
  "success": "true",
  "action": "authorize",
  "merchant_code": "your_merchant_code",
  "merchant_operation_number": "2391645",
  "transaction": {
    "transaction_id": "5hk8rwa3h3cq9oyfs3a28v1ms",
    "channel": "ecommerce",
    "state": "PENDIENTE",
    "state_reason": "Url generada para continuar con el pago",
    "continue_url": "https://api.dev.alignet.io/payment/continue/card/81vrxn30vja1gwcfsdng4i5g5",
    "amount": "15000",
    "currency": "604",
    "payment_method": {
      "method_name": "BANK_TRANSFER",
      "method_details": {
        "redirect_url": "https://pay-me.com",
        "callback_url": "https://pay-me.com/callback"
      }
    },
    "expiration_date": {
      "utc_time": "2024-03-12T22:49:36.018Z",
      "unix_time": 1711585037
    },
    "processor_response": null,
    "additional_fields": null,
    "lifecycle": [
      {
        "state": "REGISTRADO",
        "date": {
          "utc_time": "2024-03-12T22:49:36.018Z",
          "unix_time": 1710282940
        }
      },
      {
        "state": "PENDIENTE",
        "date": {
          "utc_time": "2024-03-12T22:49:36.018Z",
          "unix_time": 1710282940
        }
      }
    ]
  },
  "meta": {
    "status": {
      "code": "00",
      "message_ilgn": [
        {
          "locale": "es_PE",
          "value": "Procesado correctamente"
        }
      ]
    }
  }
}

Buenas prácticas

  • Confirma el resultado final por backend antes de actualizar la orden.
  • Asegúrate de enviar un merchant_operation_number único por transacción.
  • Implementa el manejo del retorno del usuario a redirect_url sin asumir que el pago terminó correctamente.
  • Usa callback_url si tu operación necesita confirmación server to server.
  • Conserva transaction_id, merchant_operation_number y continue_url para seguimiento, soporte y conciliación.

Errores comunes

Confirmación prematura

No marques una orden como pagada solo porque el usuario regresó a tu sitio o porque recibiste una respuesta inicial PENDIENTE.

Redirect incompleto

Si redirect_url no está correctamente implementado, el usuario puede completar el flujo bancario sin que tu comercio procese bien el retorno.

Siguiente paso

Api de Consulta con Transferencia Bancaria

Verifica cómo consultar el estado de una operación por transferencia bancaria.