Pago con tarjeta con verificación 3DS
El emisor de una tarjeta puede exigir a un cliente de tu sitio web de comercio electrónico que lleve a cabo un paso de seguridad adicional: la verificación segura de tres dominios (3DS).
3DS es un protocolo para verificar la identidad en transacciones en las que la tarjeta no está presente. Se redirige al cliente a otro sitio web con instrucciones para completar la verificación de la 3DS. Cuando se completa la transacción con la tarjeta, el sitio web de la 3DS redirige al cliente a una URL (que tú proporciones) en la que se indica que se ha realizado correctamente o no, y se lo notifica a Rapyd. A continuación, Rapyd actualiza
Los beneficios comunes incluyen:
Un proceso de pago más fácil y rápido se traduce en una mejor experiencia de pago para su cliente.
Obligaciones adeudadas a cualquier contracargos se transfieren del comerciante al emisor.
Reduce el riesgo de fraude y hace que los pagos sean más seguros.
Sin costes adicionales para el paso adicional de la verificación de la 3DS, que proporciona una mayor seguridad para sus transacciones.
Certificación PCI
Solo clientes con PCI-DSS La certificación puede gestionar la información de identificación personal de las tarjetas. Este método está disponible para los comerciantes que hayan firmado un acuerdo especial con Rapyd
La siguiente captura de pantalla representa un pago con tarjeta con SG (Singapur) y SGD (dólar de Singapur) para el país y la moneda, tal y como se describe en Buscar métodos de pago disponibles.
Introduce los detalles de la tarjeta.
Haga clic Haga su pedido.

Complete la verificación de la 3DS.

Redirigir a la pago exitoso página.
Puedes encontrar los métodos de pago con tarjeta específicos que aceptarás y los campos obligatorios correspondientes que los clientes deben rellenar en la sección Cómo funciona.
Paso 1: Pago con tarjeta con proceso de verificación de 3DS

El cliente completa el pago con tarjeta al finalizar la compra.
Envías a Rapyd la solicitud de pago de la 3DS con el identificador de cliente que empieza por cus_.
Rapyd recibe la solicitud y redirige al cliente a la URL de verificación de la 3DS.
Muestras la URL de la 3DS al cliente.
Paso 2: Pago con tarjeta con el proceso de pago de 3DS

El cliente completa la verificación 3DS del pago con tarjeta.
El sitio web de la 3DS redirige al cliente a una URL correcta o errónea.
Rapyd procesa el pago y envía la respuesta.
Aparece la página de éxito de la compra.
Los siguientes diagramas de secuencia de mensajes describen cómo se intercambia la información entre Rapyd, el comerciante, los clientes del comerciante y la red de tarjetas.
Pago con tarjeta con verificación 3DS: éxito
Pago con tarjeta con verificación 3DS: error
Comportamiento de pruebas especiales en Sandbox
Para usar el caja de arena para simular un pago que requiere la autenticación con la 3DS, defina el «importe» entre 1000,00 y 1999.99.
Capa 3DS para tarjetas
La capa 3DS no está disponible en todas las regiones. Se activa automáticamente cuando existe un mandato reglamentario, como PSD2 lo requiere.
Para obtener más información sobre cómo prevenir transacciones fraudulentas, consulta Rapyd Protect.
Comprueba qué métodos de pago con tarjeta se aceptan en el país del cliente. Para hacerlo, usa Enumere los métodos de pago por país con los siguientes parámetros:
Descripción de los parámetros de consulta
Parámetro de consulta | Descripción |
|---|---|
país | Entrar SG como código de país. |
moneda | Entrar SGD como código de divisa. |
Solicitud de lista de métodos de pago por país
Solicita una lista de todos los métodos de pago SG disponibles.
Solicitud
// Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/country?country=SG¤cy=SGD // Message body absent
.NET Core
using System; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { string result = RapydApiRequestSample.Utilities.MakeRequest("GET", "/v1/payment_methods/country?country=SG¤cy=SGD"); Console.WriteLine(result); } catch (Exception e) { Console.WriteLine("Error completing request: " + e.Message); } } } }
JavaScript
const makeRequest = require('<path-to-your-utility-file>/utilities').makeRequest; async function main() { try { const result = await makeRequest('GET', '/v1/payment_methods/country?country=SG¤cy=SGD'); console.log(result); } catch (error) { console.error('Error completing request', error); } }
PHP
<?php $path = $_SERVER['DOCUMENT_ROOT']; $path .= "/<path-to-your-utility-file>/utilities.php"; include($path); try { $object = make_request('get', '/v1/payment_methods/country?country=SG¤cy=SGD'); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Pitón
from pprint import pprint from utilities import make_request country = 'SG' currency = 'SGD' results = make_request(method='get', path=f'/v1/payment_methods/country?country={country}¤cy={currency}') pprint(results)
Lista de métodos de pago por país Respuesta
List Payment Methods by Country describe los campos de la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "cfa35a73-aa0b-4e7e-839c-4c3b6149edd7" }, "data": [{ "type": "sg_debit_cup_card", "name": "Union Pay Debit", "category": "card", "image": "https://iconslib.rapyd.net/checkout/sg_debit_cup_card.png", "country": "sg", "payment_flow_type": "card", "currencies": [ "SGD" ], "status": 1, "is_cancelable": false, "payment_options": [{ "name": "customer", "type": "customer", "regex": "", "description": "make sure a customer was created with first_name, last_name and email", "is_required": true, "is_updatable": false } ], "is_expirable": true, "is_online": false, "minimum_expiration_seconds": 600, "maximum_expiration_seconds": 604800 } ] }
El datos La sección de la respuesta muestra que una tarjeta Visa es un método de pago aceptable.
Lista de métodos de pago y respuesta
Una respuesta completa de la API muestra muchos métodos de pago.
Tienes que averiguar qué campos tienes que rellenar para el método de pago. Para ello, utilice el Campos obligatorios para obtener el método de pago con el siguiente parámetro:
Descripción de los parámetros de ruta
Parámetro de ruta | Descripción |
|---|---|
tipo | Entrar sg_debit_cup_card como tipo de método de pago. |
Obtener el método de pago Campos obligatorios Solicitud
Solicite el conjunto de campos obligatorios para una tarjeta Visa.
Solicitud
// Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/sg_debit_cup_card/required_fields // Message body absent
.NET Core
using System; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { string result = RapydApiRequestSample.Utilities.MakeRequest("GET", "/v1/payment_methods/sg_debit_cup_card/required_fields"); Console.WriteLine(result); } catch (Exception e) { Console.WriteLine("Error completing request: " + e.Message); } } } }
JavaScript
const makeRequest = require('<path-to-your-utility-file>/utilities').makeRequest; async function main() { try { const result = await makeRequest('GET', '/v1/payment_methods/sg_debit_cup_card/required_fields'); console.log(result); } catch (error) { console.error('Error completing request', error); } }
PHP
<?php $path = $_SERVER['DOCUMENT_ROOT']; $path .= "/<path-to-your-utility-file>/utilities.php"; include($path); try { $object = make_request('get', '/v1/payment_methods/sg_debit_cup_card/required_fields'); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Pitón
from pprint import pprint from utilities import make_request payment_method = 'sg_debit_cup_card' results = make_request(method='get', path=f'/v1/payment_methods/{payment_method}/required_fields') pprint(results)
Obtener el método de pago Campos obligatorios Respuesta
Get Payment Method Required Fields describe los campos de la respuesta.
Respuesta
{ “status”: { “error_code”: “”, “status”: “SUCCESS”, “message”: “”, “response_code”: “”, “operation_id”: “3b7a2391-6612-478e-b79e-38d7f8d33ff9” }, “data”: { “type”: “sg_debit_cup_card”, “fields”: [ { “name”: “name”, “type”: “string”, “regex”: “”, “is_required”: true, “instructions”: “card holder name” }, { “name”: “number”, “type”: “string”, “regex”: “”, “is_required”: true, “instructions”: “card number” }, { “name”: “expiration_month”, “type”: “string”, “regex”: “”, “is_required”: true, “instructions”: “expiration month as string, 01-12" }, { “name”: “expiration_year”, “type”: “string”, “regex”: “”, “is_required”: true, “instructions”: “expiration year in to digits as string, 18-99” }, { “name”: “cvv”, “type”: “string”, “regex”: “”, “is_required”: true, “instructions”: “card cvv” } ], “payment_method_options”: [ { “name”: “3d_required”, “type”: “string”, “regex”: “”, “description”: “”, “is_required”: false, “is_updatable”: false } ], “payment_options”: [ { “name”: “description”, “type”: “string”, “regex”: “”, “description”: “the description field must be filled in.“, “is_required”: true, “is_updatable”: false }, { “name”: “complete_payment_url”, “type”: “string”, “regex”: “”, “description”: “the complete_payment_url field must be filled in.“, “is_required”: true, “is_updatable”: false }, { “name”: “error_payment_url”, “type”: “string”, “regex”: “”, “description”: “the error_payment_url field must be filled in.“, “is_required”: true, “is_updatable”: false } ], “minimum_expiration_seconds”: 600, “maximum_expiration_seconds”: 604800 } }
La respuesta muestra que para una tarjeta de débito SG UnionPay, debes proporcionar:
nombrenúmeromes_caducidadaño_caducidadcvv
Asegúrese de que su cliente complete estos campos.
En este punto, el cliente debería haber completado lo siguiente:
Has seleccionado Visa como opción de pago.
Rellene los campos obligatorios para pagar con la tarjeta.
Cuando tu cliente confirme el pago con la tarjeta, pide a Rapyd que procese el pago con tarjeta.
Para eso, llamarás Crear pago con los siguientes parámetros:
Descripción de los parámetros corporales
Parámetro corporal | Descripción |
|---|---|
método_pago | Introduzca un objeto con los siguientes campos:
|
cantidad | Entrar 1.001 como importe del pago. |
moneda | Entrar SGD como código de divisa. |
capturar | Entrar verdadero como el valor. Esto le indica a Rapyd que cobrará el pago por ti lo antes posible |
error_payment_url | Reemplazar |
URL de pago completa | Reemplazar |
opciones_método_de_pago |
|
Crear solicitud de pago
Solicita a Rapyd que procese el pago con tarjeta de tu cliente de 1.001 SGD.
Solicitud
// Request URL: POST https://sandboxapi.rapyd.net/v1/payments // Message body: { "amount": 1001, "currency": "SGD", "payment_method": { "type":"sg_debit_cup_card", "fields": { "number": "4111111111111111", "expiration_month": "12", "expiration_year": "29", "cvv": "737", "name":"Cardholder Name", } }, "payment_method_options": { "3d_required": "true" }, "error_payment_url": "https://error.example.net", "complete_payment_url": "https://complete.example.net", "capture": true }
.NET Core
using System; using System.Text.Json; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { var requestObj = new { amount = 1001, currency = "SGD", payment_method = new { type = "sg_debit_cup_card", fields = new { number = "4111111111111111", expiration_month = "12", expiration_year = "29", cvv = "737", name = "Cardholder Name" } }, error_payment_url = "https:error.example.net", complete_payment_url = "https:complete.example.net", payment_method_options = new { 3d_required = true }, capture = true }; string request = JsonSerializer.Serialize(requestObj); string result = RapydApiRequestSample.Utilities.MakeRequest("POST", "/v1/payments", request); Console.WriteLine(result); } catch (Exception e) { Console.WriteLine("Error completing request: " + e.Message); } } }
JavaScript
const makeRequest = require('<path-to-your-utility-file>/utilities').makeRequest; async function main() { try { const body = { amount: 1001, currency: 'SGD', payment_method: { type: 'sg_debit_cup_card', fields: { number: '4111111111111111', expiration_month: '12', expiration_year: '29', cvv: '737', name: 'Cardholder Name' } }, error_payment_url: 'https://error.example.net', complete_payment_url: 'https://complete.example.net', "payment_method_options": { "3d_required": true }, capture: true }; const result = await makeRequest('POST', '/v1/payments', body); console.log(result); } catch (error) { console.error('Error completing request', error); } }
PHP
<?php $path = $_SERVER['DOCUMENT_ROOT']; $path .= "/<path-to-your-utility-file>/utilities.php"; include($path); $body = [ 'amount' => 1001, 'currency' => 'SGD', 'payment_method' => [ 'type' => 'sg_debit_cup_card', 'fields' => [ 'number' => '4111111111111111', 'expiration_month' => '12', 'expiration_year' => '29' 'cvv' => '737', 'name' => 'Cardholder Name' ] ], 'error_payment_url' => urldecode('https://error_example.net'), 'complete_payment_url' => urldecode('https://complete_example.net') 'payment_method_options'=> [ '3d_required => true ], 'capture' => true ]; try { $object = make_request('post', '/v1/payments', $body); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Pitón
const makeRequest = require('<path-to-your-utility-file>/utilities').makeRequest; from pprint import pprint from utilities import make_request payment_body = { 'amount': 1001, 'currency': 'SGD', 'payment_method': { 'type': 'sg_debit_cup_card', 'fields': { 'number': '4111111111111111', 'expiration_month': '10', 'expiration_year': '29', 'cvv': '123', 'name': 'Cardholder Name' } }, 'error_payment_url': 'https://error_example.net', 'complete_payment_url': 'https://complete_example.net', 'payment_method_options': { '3d_required: true }, 'capture': true } results = make_request(method='post', path='/v1/payments', body=payment_body) pprint(results)
Crear respuesta de pago
Crear pago describe los campos de la respuesta.
Respuesta
{ { "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "74d80a88-90a0-44d7-b08f-31f2b2739eef" }, "data": { "id": "payment_2bb5e3d9376663dbecb0086298ffc08c", "amount": 0, "original_amount": 1001, "is_partial": false, "currency_code": "SGD", "country_code": "SG", "status": "ACT", "description": "", "merchant_reference_id": "", "customer_token": "cus_56fe83bb28b1e36a9552d68dfa16e3ff", "payment_method": "card_0540e5a4c9b8a4fc6a85bb6c6731c423", "payment_method_data": { "id": "card_0540e5a4c9b8a4fc6a85bb6c6731c423", "type": "sg_debit_cup_card", "category": "card", "metadata": null, "image": "", "webhook_url": "", "supporting_documentation": "", "next_action": "3d_verification", "name": "Cardholder Name", "last4": "1111", "acs_check": "unchecked", "cvv_check": "unchecked", "bin_details": { "type": null, "brand": null, "level": null, "issuer": null, "country": null, "bin_number": "411111" }, "expiration_year": "29", "expiration_month": "12", "fingerprint_token": "ocfp_2a694038316f52122bbbb3ae926cfda9" }, "auth_code": null, "expiration": 1692306562, "captured": true, "refunded": false, "refunded_amount": 0, "receipt_email": "", "redirect_url": "https://sandboxcheckout.rapyd.net/3ds-payment?token=payment_2bb5e3d9376663dbecb0086298ffc08c", "complete_payment_url": "https://rapyd.net", "error_payment_url": "https://docs.rapyd.net", "receipt_number": "", "flow_type": "", "address": null, "statement_descriptor": "Test Business", "transaction_id": "", "created_at": 1691701762, "metadata": {}, "failure_code": "", "failure_message": "", "paid": false, "paid_at": 0, "dispute": null, "refunds": null, "order": null, "outcome": null, "visual_codes": {}, "textual_codes": {}, "instructions": [], "ewallet_id": "ewallet_db4ad4a76278f94c4a83dd9b28b483ed", "ewallets": [ { "ewallet_id": "ewallet_db4ad4a76278f94c4a83dd9b28b483ed", "amount": 1001, "percent": 100, "refunded_amount": 0 } ], "payment_method_options": { "3d_required": true }, "payment_method_type": "sg_debit_cup_card", "payment_method_type_category": "card", "fx_rate": 1, "merchant_requested_currency": null, "merchant_requested_amount": null, "fixed_side": "", "payment_fees": null, "invoice": "", "escrow": null, "group_payment": "", "cancel_reason": null, "initiation_type": "customer_present", "mid": "", "next_action": "3d_verification", "error_code": "", "remitter_information": {}, "save_payment_method": true } }
El datos la sección de la respuesta muestra:
cantidades 1001monedaes SGDA tu cliente invitado se le asigna automáticamente un identificador de cliente. Al método de pago se le asigna un identificador de método de pago. Ambos identificadores son únicos para esta transacción.
capturadoes cierto - el pago con tarjeta se cobrará lo antes posible.redireccionar_urleshttps://redirect.example.net, que es la URL a la que rediriges a tu cliente invitado para que complete el proceso de pago.pagadoes falso yestadoes ACTUAR (activo), lo que indica que aún estamos esperando a que tu cliente invitado termine el proceso de la 3DS.
En este punto, has redirigido al cliente a https://redirect.example.net, que es un sitio de verificación de la 3DS. Este sitio puede gestionar la verificación de la 3DS por sí mismo o puede redirigir al cliente al sitio web de su propia tarjeta. El cliente sigue las instrucciones de autenticación que aparecen en la pantalla, lo que puede implicar copiar el número de un correo electrónico o un SMS a la página web. Cuando el proceso se completa correctamente, Rapyd te envía un webhook con los detalles de la transacción completada
Vamos a echar un vistazo a Webhook con pago completado.
Webhook
{ "id": "wh_7f18c2b90892652fe7ff2cb7d0537732", "type": "PAYMENT_COMPLETED", "data": { "id": "payment_2bb5e3d9376663dbecb0086298ffc08c", // ... "paid": true, // ... "amount": 1001, "status": "CLO", // ... "currency_code": "SGD", // ... "customer_token": "cus_56fe83bb28b1e36a9552d68dfa16e3ff", "payment_method": "card_0540e5a4c9b8a4fc6a85bb6c6731c423", // ... "payment_method_type_category": "card" }, "trigger_operation_id": "", "status": "NEW", "created_at": 1691701778 }
El datos la sección del webhook muestra:
pagadoes cierto yestadoes CLO (cerrado), lo que indica que el dinero se ha pagado.cantidades 1.001código_monedaes SGDEl
customer_tokenypayment_methodson los mismos que en la respuesta de creación de pago.