Guía para desarrolladores
Sitio de VEXPayReferencia de API
Explorar documentación

Acepta un pago con tarjeta mediante VPOS

Envía los datos de la tarjeta desde un flujo de servidor que cumpla con los requisitos de PCI.

Crea un pago

curlbash
curl --request POST "${API_URL}/v1/payments/vpos" \
  --header "content-type: application/json" \
  --header "x-api-key: ${VEXPAY_API_KEY}" \
  --data '{
    "usdAmount": 24.00,
    "cardNumber": "4111111111111111",
    "expirationMonth": 12,
    "expirationYear": 2030,
    "cvv": "123",
    "cardHolderName": "CLIENTE PRUEBA",
    "cardHolderId": "V12345678",
    "accountType": 0,
    "cardType": 1,
    "externalRef": "order_demo_1043"
  }'

accountType acepta 0, 10 o 20. cardType acepta 1, 2 o 3. cardPin es opcional (4 dígitos); si se omite, el gateway envía 0000. La tarifa de débito o crédito se determina por la tarjeta y el tipo de cuenta que elige el comprador: accountType 10 o 20 paga la tarifa de débito y accountType 0 la de crédito, pero una tarjeta que VEXPay sabe que es de crédito siempre paga la tarifa de crédito. Sin accountType, VEXPay se guía por la tarjeta, y una tarjeta que no puede identificar paga la tarifa de crédito (ver Precios).

Tarjeta de prueba

Con una clave Test, las tarjetas reales se rechazan y nunca se cobran. Tienes dos tipos de tarjeta de prueba: esta tarjeta Débito Maestro, que va al ambiente de pruebas del banco y siempre se aprueba, y los escenarios de tarjetas de prueba de abajo, que devuelven cada aprobación y rechazo. Ambas aparecen en tu portal, en Sandbox.

CampoValor
Marca de la tarjetaDébito Maestro
cardNumber6276093058088765
expirationMonth / expirationYear12 / 2025
cvv467
cardPin1234
cardHolderNameJulian Esteves
cardHolderIdV23000760
accountType20
cardType3
curlbash
curl --request POST "${API_URL}/v1/payments/vpos" \
  --header "content-type: application/json" \
  --header "x-api-key: TU_CLAVE_API_TEST" \
  --data '{
    "vesAmount": 32.95,
    "cardNumber": "6276093058088765",
    "expirationMonth": 12,
    "expirationYear": 2025,
    "cvv": "467",
    "cardPin": "1234",
    "cardHolderName": "Julian Esteves",
    "cardHolderId": "V23000760",
    "accountType": 20,
    "cardType": 3,
    "externalRef": "test_card_1"
  }'

Escenarios de tarjetas de prueba. Como las tarjetas de prueba de Stripe: con una clave Test, VEXPay responde estos números sin llegar al banco, para que pruebes cada resultado que tu checkout debe manejar. Usa cualquier vencimiento futuro y cualquier CVV. Envía cardPin 1234 o ningún PIN.

cardNumberEscenarioResultado
4242424242424242Aprobada (tarjeta de crédito)Pago COMPLETED
4000056655665556Aprobada (tarjeta de débito)Pago COMPLETED
4000000000009995Fondos insuficientes422 G51
4000000000005506PIN incorrecto422 G55
4000000000000382Intentos de PIN excedidos422 G38
4000000000000069Tarjeta caducada422 G54
4000000000009987Tarjeta extraviada422 G41
4000000000009979Tarjeta robada422 G43
4100000000000019Sospecha de fraude422 G59
4000000000000366Tarjeta restringida422 G36
4000000000000580Transacción no permitida422 G58
4000000000000002Referirse al banco emisor422 G02
4000000000000119Falla del sistema del banco422 G96
4000000000000689Respuesta tardía del banco422 G68
4000000000000259Aprobada y luego contracargadaCOMPLETED, luego payment.chargeback
  • Un rechazo se comporta igual que en Live: HTTP 422 con el código del banco en code, el pago FAILED con el mismo failureCode y un webhook payment.failed.
  • Una aprobación se completa como un cobro Live: payment.completed, el crédito en tu ledger y la comisión de ese tipo de tarjeta (la de débito usa tu tarifa de débito; las demás, tu tarifa de crédito).
  • En cualquier tarjeta de prueba, un vencimiento pasado se rechaza con G54 y un cardPin distinto de 1234, con G55.
  • 4000000000000259 se completa y luego recibe un contracargo total en cerca de un minuto: se envían payment.chargeback y payment.reversed, y se debita tu saldo Test.
  • Los rechazos cuentan para la protección contra pruebas de tarjetas: tras 3 tarjetas distintas fallidas para un mismo cardHolderId en 24 horas, ese pagador recibe 429 CARD_VELOCITY_BLOCKED durante las siguientes 24 horas. Usa un cardHolderId distinto en cada prueba.
  • Los checkouts y links de pago en Test muestran una lista "Tarjetas de prueba" que llena el formulario de tarjeta.