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
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.pago46.com/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.pago46.com/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"
}'
{
"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."
}
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.pago46.com/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"
}'
{
"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.pago46.com/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"
}'
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. |