POST /merchant/api/verify
Envía client_id y client_secret para obtener un access_token temporal.
Integra Buyesia Pay con la API REST actual, crea transacciones en USDT y procesa confirmaciones firmadas por webhook.
https://www.pay.buyesia.com
La integración se apoya en dos llamadas principales para autenticar y crear la transacción, más un webhook firmado para confirmar eventos de pago.
POST /merchant/api/verifyEnvía client_id y client_secret para obtener un access_token temporal.
POST /merchant/api/transaction-infoCrea la intención de cobro y devuelve approvedUrl para redirigir al checkout.
X-Webhook-SignatureValida la firma HMAC del payload antes de marcar el pago como confirmado.
Todas las solicitudes privadas requieren autenticación mediante credenciales de comercio generadas desde el panel de administración.
Envía client_id y client_secret para validar el merchant y obtener data.access_token.
curl -X POST https://www.pay.buyesia.com/merchant/api/verify \
-H "Content-Type: application/json" \
-d '{
"client_id": "tu_client_id",
"client_secret": "tu_client_secret"
}'
{
"status": "success",
"message": "Client Verified",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.demo"
}
}
Buyesia Pay ofrece sandbox y live con el mismo contrato de API, pero con credenciales y comportamiento operativo distintos.
| Entorno | Uso | Credenciales | Procesa pagos reales |
|---|---|---|---|
| Sandbox | Desarrollo y pruebas | test_* |
No - Simula el pago sin mover fondos |
| Live | Producción | Credenciales live del comercio | Sí - Procesa pagos reales |
Crea una transacción para que tu cliente complete el checkout alojado y luego redirige al approvedUrl devuelto por la API.
Requiere Authorization: Bearer {access_token}. La moneda base es USDT y los parámetros de retorno deben ser URLs públicas válidas.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
amount |
number | Sí | Monto mayor a 0. |
currency |
string | Sí | Código de moneda. Siempre USDT. |
successUrl |
string | Sí | URL del merchant a la que se redirige al completar el pago. |
cancelUrl |
string | Sí | URL del merchant para pagos cancelados o interrumpidos. |
order_no |
string | Sí | Identificador externo de tu orden. |
item_name |
string | Sí | Nombre o descripción visible del producto o servicio. |
webhook_url |
string | No | URL para eventos transaction.created, payment.success y transaction.failed. |
metadata |
object | No | Objeto libre que se reenvía en el webhook. |
curl -X POST https://www.pay.buyesia.com/merchant/api/transaction-info \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"amount": 100.00,
"currency": "USDT",
"successUrl": "https://tu-sitio.com/success",
"cancelUrl": "https://tu-sitio.com/cancel",
"order_no": "ORD-2026-1001",
"item_name": "Suscripcion Pro",
"webhook_url": "https://tu-sitio.com/webhook",
"metadata": {
"customer_id": "cus_128",
"plan": "pro"
}
}'
{
"status": "success",
"message": "Transaction Info Created Successfully!",
"data": {
"approvedUrl": "https://www.pay.buyesia.com/merchant/checkout/sandbox/demo_token_123",
"checkout_token": "demo_token_123",
"grant_id": 18354021,
"token": "Cj2mMNt5sE7P9dZrQa4K",
"amount": "100.00",
"currency": "USDT",
"order_no": "ORD-2026-1001",
"item_name": "Suscripcion Pro",
"status": "pending",
"payment_method": null,
"metadata": {
"customer_id": "cus_128",
"plan": "pro"
}
}
}
Recibe notificaciones en tiempo real cuando ocurren eventos en tu cuenta y valida siempre la firma del payload antes de procesarlo.
transaction.created - Transacción creada exitosamentepayment.success - Pago completado exitosamentetransaction.failed - Transacción fallida{
"event": "payment.success",
"payload": {
"transaction_id": "f8e4af91-9946-469f-b3cf-7b5b8a35d4e3",
"order_no": "ORD-2026-1001",
"item_name": "Suscripcion Pro",
"metadata": {
"customer_id": "cus_128",
"plan": "pro"
},
"amount": 100,
"currency": "USDT",
"status": "success",
"timestamp": "2026-03-29T09:45:18+00:00"
},
"timestamp": 1774777518
}
$rawBody = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$clientSecret = 'tu_client_secret';
$expectedSignature = hash_hmac('sha256', $rawBody, $clientSecret);
if (!hash_equals($expectedSignature, $signature)) {
http_response_code(401);
echo json_encode(['error' => 'Firma invalida']);
exit;
}
$payload = json_decode($rawBody, true);
$event = $payload['event'] ?? null;
$data = $payload['payload'] ?? [];
if ($event === 'payment.success') {
// Marca tu orden como pagada usando $data['order_no'] o $data['transaction_id']
}
http_response_code(200);
echo json_encode(['received' => true]);