Skip to main content
Usa este flujo para iniciar pagos ecommerce con PagoEfectivo 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 PagoEfectivo.

Código de pago

El API devuelve un CIP y una URL de pago para que el usuario complete la operación fuera del 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.
El usuario puede completar el pago después de la sesión inicial usando el CIP o la URL generada por PagoEfectivo. Complementa este flujo con Notificaciones o con Consulta.
No tomes como final la respuesta inicial del POST /charges. Generar el CIP no equivale a recibir el pago. 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 pagoPAGOEFECTIVOStringSI
method_detailsObjeto con la información específica de PagoEfectivoObjectObjectSI

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": "PAGOEFECTIVO",
    "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

La respuesta inicial normalmente deja la transacción en seguimiento. Confirma el resultado final con notificaciones o con consulta antes de actualizar la orden.

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 actualCódigo CIP generado exitosamenteStringSI
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
processor_responseResultado devuelto por la procesadora con datos del CIPObjectObjectNO
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. Cuando el CIP fue generado correctamente, la transacción normalmente queda en PENDIENTE hasta que el usuario complete el pago o expire.

Objeto transaction.payment_method

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

Objeto transaction.payment_method.method_details

CampoDescripciónEjemploTipoObligatorio
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.processor_response

CampoDescripciónEjemploTipoObligatorio
cipCódigo CIP de PagoEfectivo1508405StringNO
cip_urlURL de PagoEfectivo con el detalle e indicaciones de pagohttps://pre1a.payment.pagoefectivo.pe/72217FA5-4580-4B16-A345-24F028F53356.htmlStringNO
result_messageMensaje del resultado de la autorizaciónObjectObjectNO

Objeto transaction.processor_response.result_message

CampoDescripciónEjemploTipoObligatorio
codeCódigo del resultado de la autorización100StringNO
descriptionDescripción del resultado de la autorizaciónSolicitud exitosa.StringNO

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": "Código CIP generado exitosamente",
    "amount": "15000",
    "currency": "604",
    "payment_method": {
      "method_name": "PAGOEFECTIVO",
      "method_details": {
        "callback_url": "https://pay-me.com/callback"
      }
    },
    "expiration_date": {
      "utc_time": "2024-03-12T22:49:36.018Z",
      "unix_time": 1711585037
    },
    "processor_response": {
      "cip": "1508405",
      "cip_url": "https://pre1a.payment.pagoefectivo.pe/72217FA5-4580-4B16-A345-24F028F53356.html",
      "result_message": {
        "code": "100",
        "description": "Solicitud exitosa."
      }
    },
    "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.
  • No asumas que un CIP generado significa pago completado; interpreta PENDIENTE como un estado intermedio.
  • Usa callback_url si tu operación necesita confirmación server to server.
  • Conserva transaction_id, merchant_operation_number, cip, cip_url y la fecha de expiración para seguimiento, soporte y conciliación.

Errores comunes

Pago asumido como exitoso

Generar el CIP no equivale a recibir el pago. El usuario todavía debe completar el abono en el canal habilitado por PagoEfectivo.

CIP expirado

Si el usuario intenta pagar después de expiration_date, deberás generar una nueva operación en lugar de reutilizar la anterior.

Siguiente paso

Api de Consulta con PagoEfectivo

Verifica cómo consultar una operación iniciada con PagoEfectivo.