Pagos (Pay In)
Este módulo permite a los Proveedores de Pago (Payment Providers) procesar solicitudes de depósito o pago iniciadas por usuarios de Pago46. Al igual que en los retiros, este flujo utiliza un mecanismo de bloqueo (locking) para evitar que una misma orden sea cobrada dos veces por distintos proveedores simultáneamente.
Todas las rutas descritas a continuación son relativas a la URL base de la API: /api/v1
Registro de Redes de Pago
Antes de procesar transacciones, los proveedores deben registrar las redes de pago que utilizan. Cada red debe tener un identificador único (provider_network_id) que se utilizará en todas las transiciones de estado.
Ejemplo de IDs de Red:
01oxxo_networkseven_eleven_mxfarmacia_abcnetwork_123
Para registrar tus redes de pago, contacta al equipo de integración de Pago46. Los IDs que proporciones serán los que deberás usar en las solicitudes de cobro.
Ciclo de Vida de la Orden
El proceso asegura que el dinero sea recolectado y conciliado correctamente antes de liberar el servicio al usuario final.
- Consulta (Check): El proveedor escanea o ingresa el código del usuario para ver el monto a cobrar y validar que el estado sea
READY. - Bloqueo (Start Payment): El proveedor "toma" la orden. El estado cambia a
PAYMENT_STARTED. Esto asegura la intención de cobro. - Confirmación (Confirm Payment): Una vez que el usuario entrega el efectivo y este ingresa a la caja, el proveedor confirma la transacción (estado
COMPLETED).
1. Verificar Orden
Cuando el cliente se acerca a la caja para pagar, debes consultar el código para informar el monto exacto a cobrar.
Endpoint: GET /providers/orders/pay-in/{code}/
| Parámetro | Ubicación | Descripción |
|---|---|---|
code | Path | El código de pago generado por el usuario (numérico o QR). |
- Request
- Response (200 OK) - Order Ready
curl -X GET "https://api.sandbox.pago46.io/api/v1/providers/orders/pay-in/9876543210/" \
-H "Provider-Key: <TU_PROVIDER_KEY>" \
-H "Message-Date: <TIMESTAMP>" \
-H "Message-Hash: <HMAC_SIGNATURE>"
{
"order_type": "LocalCurrencyOrder",
"price": "500.00",
"price_currency": "MXN",
"created": "2023-11-25T14:00:00Z",
"status": "READY",
"expiry": "2023-11-26T14:00:00Z",
"description": "Compra en Mercado 46"
}
Verifica siempre que el status sea READY. Si la orden está EXPIRED o COMPLETED, no debes recibir dinero del usuario.
2. Iniciar Cobro (Bloqueo)
Antes de recibir el dinero, debes informar a Pago46 que estás atendiendo esta orden. Esto previene que el usuario intente pagar el mismo código en otro proveedor simultáneamente.
Endpoint: POST /providers/orders/pay-in/{code}/start-payment/
- Request
- Response (200 OK)
- Error (403 Forbidden) - Order Already In Progress
curl -X POST "https://api.sandbox.pago46.io/api/v1/providers/orders/pay-in/9876543210/start-payment/" \
-H "Provider-Key: <TU_PROVIDER_KEY>" \
-H "Message-Date: <TIMESTAMP>" \
-H "Message-Hash: <HMAC_SIGNATURE>" \
-H "Content-Type: application/json" \
-d '{
"order_type": "LocalCurrencyOrder",
"provider_network_id": "network_123",
"price": "500.00",
"price_currency": "MXN"
}'
{
"order_type": "LocalCurrencyOrder",
"price": "500.00",
"price_currency": "MXN",
"status": "PAYMENT_STARTED",
"modified": "2023-11-25T14:05:00Z"
}
{
"detail": "You do not have permission to perform this action."
}
| Campo | Tipo | Descripción |
|---|---|---|
order_type | string | Tipo de orden (LocalCurrencyOrder o ForeignCurrencyOrder). |
provider_network_id | string | ID de la red de pago utilizada por el proveedor. Requerido para órdenes LocalCurrencyOrder. |
price | string | Monto exacto que se está cobrando. Debe coincidir con el price de la orden. Requerido para órdenes LocalCurrencyOrder. |
price_currency | string | Código de moneda (ej. MXN, USD). Debe coincidir con el price_currency de la orden. Requerido para órdenes LocalCurrencyOrder. |
Como proveedor, debes suministrar el provider_network_id que identifica la red específica utilizada para procesar esta transacción. Esto permite a Pago46 mantener un registro detallado de qué red procesó cada pago y proporcionar esta información al usuario final.
Una vez recibas el estado PAYMENT_STARTED, puedes proceder a solicitar y recibir el dinero del cliente con seguridad.
3. Confirmar Cobro (Finalización)
Una vez que el dinero está seguro en tu caja, confirma la transacción. En este momento, Pago46 notificará al comercio original (Merchant) para que libere el producto o servicio al usuario.
Endpoint: POST /providers/orders/pay-in/{code}/confirm-payment/
- Request
- Response (200 OK)
curl -X POST "https://api.sandbox.pago46.io/api/v1/providers/orders/pay-in/9876543210/confirm-payment/" \
-H "Provider-Key: <TU_PROVIDER_KEY>" \
-H "Message-Date: <TIMESTAMP>" \
-H "Message-Hash: <HMAC_SIGNATURE>" \
-H "Content-Type: application/json" \
-d '{
"order_type": "LocalCurrencyOrder",
"provider_network_id": "network_123",
"price": "500.00",
"price_currency": "MXN"
}'
{
"order_type": "LocalCurrencyOrder",
"price": "500.00",
"price_currency": "MXN",
"status": "COMPLETED",
"paid": "2023-11-25T14:06:00Z"
}
Cancelación
Si el usuario decide no pagar en el último momento o hay un problema con el efectivo, debes liberar la orden para que vuelva a estar disponible (o se cancele definitivamente, según las reglas de expiración de la orden).
Endpoint: POST /providers/orders/pay-in/{code}/cancel-payment/
curl -X POST "https://api.sandbox.pago46.io/api/v1/providers/orders/pay-in/9876543210/cancel-payment/" \
-H "Provider-Key: <TU_PROVIDER_KEY>" \
-H "Message-Date: <TIMESTAMP>" \
-H "Message-Hash: <HMAC_SIGNATURE>" \
-H "Content-Type: application/json" \
-d '{
"order_type": "LocalCurrencyOrder",
"provider_network_id": "network_123",
"price": "500.00",
"price_currency": "MXN"
}'
Resumen de Estados
| Estado | Descripción | Acción Requerida del Proveedor |
|---|---|---|
READY | La orden está pendiente de pago. | Verificar monto y llamar a start-payment. |
PAYMENT_STARTED | La orden está en proceso de cobro. | Recibir dinero y llamar a confirm-payment. |
COMPLETED | El dinero fue recaudado exitosamente. | Entregar comprobante al usuario. |
CANCELLED | La orden fue cancelada. | No recibir dinero. |