Consigue tus credenciales de comercio
Regístrate, añade tu sitio y envíalo a moderación. Una vez aprobado, tu ID de comercio y tu contraseña secreta están en el panel.
Desarrolladores
Solicitudes HTTP firmadas contra endpoints simples. Usa la página de pago alojada o pide los datos de pago en JSON y construye tu propio checkout: en ambos casos el resultado te llega como un único webhook firmado.
# Solicita los datos de pago - la firma se construye con tu contraseña de comercio # hash = md5(id : summ : password : sistems : order_id) HASH=$(printf '%s' "5:100.00:$PAYOU_PASSWORD:card_RUB:4444" | md5sum | cut -d' ' -f1) curl -G https://payou.pro/api/new/api.php \ --data-urlencode id=5 \ --data-urlencode sistems=card_RUB \ --data-urlencode summ=100.00 \ --data-urlencode order_id=4444 \ --data-urlencode user_code=1 \ --data-urlencode user_email=[email protected] \ --data-urlencode hash="$HASH"
Regístrate, añade tu sitio y envíalo a moderación. Una vez aprobado, tu ID de comercio y tu contraseña secreta están en el panel.
Construye el hash con tu ID de comercio, el importe, tu secreto, el método y el ID de pedido, y llama al endpoint. El importe es una cadena decimal con punto.
Payou envía el resultado a tu URL con una firma. Verifícala, responde MERCHANT_ORDER_ID|success y acredita el pedido una sola vez.
AUTENTICACIÓN
Las solicitudes se firman; no se autentican con un token de portador. El hash es md5 sobre tu ID de comercio, el importe, tu contraseña secreta, el método y tu ID de pedido, así que el secreto nunca viaja. Los pagos salientes usan una clave de API aparte, firmada con HMAC-SHA256.
IMPORTES
El importe se envía como una cadena decimal con punto como separador: 100.00, nunca 100,00. Esa misma cadena entra en la firma, así que una diferencia de formato rompe el hash en lugar del pago.
ORDER ID
order_id es tu propio identificador. Es lo que consulta el endpoint de estado, lo que te devuelve el webhook y aquello contra lo que concilias, así que tiene que ser único de tu lado.
WEBHOOKS
Payou envía por POST a tu URL los campos AMOUNT, status, intid, MERCHANT_ORDER_ID y SIGN como application/x-www-form-urlencoded. Verifica SIGN y responde MERCHANT_ORDER_ID|success: cualquier otro cuerpo se considera no entregado.
ESTADO
Dos consultas: una por el id de transacción de Payou y otra por tu order_id. Ambas responden con id, order_id, status, paysys y summ, así que un proceso de conciliación no necesita nada más.
PRODUCCIÓN
No existe un host de pruebas aparte. Integras contra los endpoints del entorno de producción con una cuenta de comercio que se habilita tras la moderación.
Toda la superficie que necesitas para una primera integración. Las llamadas de pago se firman con tu contraseña de comercio; los pagos salientes usan una clave de API aparte y HMAC-SHA256.
| Método | Endpoint | Función |
|---|---|---|
| GET | /sci/v1/ | Página de pago alojada: envía aquí al pagador |
| GET | /api/new/api.php | Datos de pago en JSON, para tu propio checkout |
| GET | /api/status | Estado del pago por id de transacción de Payou |
| GET | /api/status2 | Estado del pago por tu order_id |
| POST | /api/new/confirm_payment.php | El pagador confirma o cancela un pago |
| POST | /api/payout_create.php | Crea un pago saliente a una tarjeta o cuenta |
API
El país y el método son parámetros de la misma llamada, no integraciones separadas. La ruta que hay detrás la elige la capa.
Solicitud
# Solicita los datos de pago - la firma se construye con tu contraseña de comercio # hash = md5(id : summ : password : sistems : order_id) curl -G https://payou.pro/api/new/api.php \ --data-urlencode id=5 \ --data-urlencode sistems=card_RUB \ --data-urlencode summ=100.00 \ --data-urlencode order_id=4444 \ --data-urlencode user_code=1 \ --data-urlencode hash="$HASH"
Respuesta
# HTTP 200 · application/json { "id": "3874512", "card": "0000 0000 0000 0000", "wallet_owner": "CARDHOLDER NAME", "sbp_bank": "BANK NAME", "amount": "100.00" }
Respuesta de demostración. No se mueven fondos reales.
La documentación es abierta: no hace falta una llamada comercial para empezar a leer ni para desarrollar contra los endpoints.