Inyo

Pruebas en Sandbox

El sandbox le permite llevar una transacción a través de todo su ciclo de vida sin movimiento real de dinero. Dos herramientas lo hacen posible: datos de prueba que activan comportamientos de cumplimiento específicos, y un endpoint de forzado de eventos que simula los callbacks externos (webhooks del gateway, notificaciones de la red de payout) que normalmente hacen avanzar una transacción.


Forzar transiciones de estado

Endpoint: POST /organizations/{tenant}/fx/transactions/{transactionId}/events
Autenticación: Nivel de agente
Disponibilidad: Solo sandbox/staging — este endpoint no existe en producción.

curl --request POST \
  --url https://{FQDN}/organizations/$TENANT/fx/transactions/$TRANSACTION_ID/events \
  --header 'Content-Type: application/json' \
  --header "x-api-key: $API_KEY" \
  --header "x-agent-id: $AGENT_ID" \
  --header "x-agent-api-key: $AGENT_KEY" \
  --data '{
  "event": "payment_authorized",
  "message": "Optional description"
}'

Eventos disponibles

EventoVálido desde el estadoQué simula
payment_authorizedWaitingChallenge3dsEl callback 3DS del gateway. Reanuda el flujo — despacha la integración del payout. Úselo cuando la transacción esté atascada esperando el 3DS.
ach_settledWaitingSettlementEl callback de liquidación ACH. Mueve la transacción a través de PaymentSettledPaymentCaptured y activa la confirmación del payout.
payment_capturedReviewApprovedUna confirmación de captura de tarjeta. Activa la confirmación del payout.
payout_paidPayoutAccepted, PayoutReleased, WaitingPayoutLa red de payout confirmando que el beneficiario recibió los fondos. Mueve la transacción a PaidCompleted.
payout_voidPayoutAccepted, PayoutHold, PayoutReleased, WaitingPayoutLa red de payout anulando la transacción. Según la configuración del tenant, se revierte automáticamente o queda en PendingReversalApproval.
hold_releasedPayoutHoldLa red de payout liberando una retención de cumplimiento. Reanuda el flujo.
cancelledCualquier estado cancelableCancelación iniciada por el cliente (anula el pago y cancela el payout).
refundedEstados reembolsablesMarca la transacción como reembolsada.

Si la transacción no está en un estado válido para el evento, el endpoint devuelve un error explicando el estado actual.

Flujo de prueba típico (Tarjeta + 3DS)

  1. Cree la transacción → estado WaitingChallenge3ds, paymentStatus: ActionRequired
  2. Fuerce el 3DS: { "event": "payment_authorized" }
  3. La transacción progresa automáticamente → PayoutAcceptedManualReviewReviewApprovedPaymentCapturedWaitingPayout
  4. Fuerce la entrega: { "event": "payout_paid" }
  5. La transacción llega a Completed

Flujo de prueba típico (ACH)

  1. Cree la transacción → progresa a WaitingSettlement
  2. Fuerce la liquidación: { "event": "ach_settled" }
  3. La transacción progresa automáticamente → PaymentSettledPaymentCapturedWaitingPayout
  4. Fuerce la entrega: { "event": "payout_paid" }
  5. La transacción llega a Completed

Escenarios de prueba de cumplimiento

Ciertos valores en los datos del remitente activan comportamientos de cumplimiento específicos en el sandbox:

ParámetroValorResultadoEstado de cumplimientoEstado del payout
address.zipcode99999Transacción RECHAZADARejectedCancelled
phoneNumber+14155550000Transacción RECHAZADARejectedCancelled
firstName + lastNameBLOCK LIST MATCHTransacción RECHAZADARejectedCancelled
firstName + lastNameOFAC MATCHTransacción retenida para verificaciónPendingPending (estado PayoutHold)

Retención en la red de payout

Use el nombre de remitente JULIO SOLANO para activar una retención de cumplimiento en la red de payout:

{ "firstName": "JULIO", "lastName": "SOLANO", "...": "..." }

La transacción llega a PayoutHold después de la integración del payout. Libérela con el evento forzado hold_released (o la libera la red/backoffice).

Flujo esperado:

... → ProcessingPayout → PayoutHold → [hold released] → PayoutReleased → ...

Rechazo en la red de payout (datos del receptor faltantes)

Use el código postal 96738 en la dirección de facturación del remitente para activar una falla de validación de datos del receptor en la red de payout:

{ "address": { "zipcode": "96738", "...": "..." } }

El rechazo depende de que falten datos del beneficiario (país, ciudad, estado). Si el destinatario tiene datos de dirección completos, la transacción se acepta sin importar el código postal.

Rechazo del pago

Use un token de tarjeta que el sandbox del gateway rechace, o un token vencido. La transacción llega a PaymentDeclinedCancelled.

Rechazo de 3DS

Cuando sea redirigido a la página de desafío 3DS, elija "Decline" (donde el sandbox lo ofrezca). El gateway reporta la falla y la transacción pasa a PaymentDeclinedCancelled.


Tarjetas de prueba

Use tarjetas de prueba del sandbox para simular escenarios de 3DS. La lista completa está en tarjetas de prueba del Payments Gateway. Las más comunes:

Número de tarjetaMarcaComportamiento 3DS
4462030000000000VISADesafío 3DS
4035874000424977VISASin fricción (sin desafío)
5425230000004415MastercardDesafío 3DS
4000000000000002VISARechazada

Tokenícelas mediante el SDK del gateway, luego pase el token como paymentMethod.token al crear una cuenta de fondeo.


Consulta de estado por polling

Después de crear una transacción, consulte GET /organizations/{tenant}/fx/transactions/{transactionId} y observe:

CampoQué esperar
complianceStatusPendingApproved (después de la integración del payout)
payoutStatusPendingProcessingCompleted
paymentStatusActionRequirednull (después de que el 3DS se completa)
receiptDivulgaciones regulatorias (disponibles desde la creación)

Para el rastro de auditoría completo de transiciones, use GET /fx/transactions/{transactionId}/status — vea Transacción. En producción, prefiera los webhooks en lugar del polling.