Tarjeta archivada con verificación 3DS
Para mejorar la seguridad, 3D Secure requiere que los clientes proporcionen detalles adicionales al usar la tarjeta registrada para pagos en línea.
Algunos emisores de Europa y Asia requieren 3D Secure para la verificación de la tarjeta. Por este motivo, cuando un cliente usa su tarjeta por primera vez en tu sitio web y decide guardar la información de su tarjeta para futuras compras, debe confirmar la transacción con 3D Secure. Una vez que el cliente haya verificado su tarjeta y se haya guardado correctamente como un token, no necesitará volver a verificarla para futuras compras.
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 por el paso adicional de 3DS verificación que proporciona una mayor seguridad para sus transacciones.
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: Autorizar la tarjeta

Su cliente realiza el pago con un artículo, visita la página de pago con una lista de métodos de pago y elige la tarjeta.
Su sitio web o aplicación solicita los detalles de la tarjeta a Rapyd y los presenta al cliente.
El cliente completa los campos obligatorios y, a continuación, selecciona Registrarse o Pagar.
Su sitio web envía la solicitud a Rapyd para procesar el pago con tarjeta.
Rapyd procesa la solicitud de autenticación de 0$ y envía un URL de redireccionamiento a un sitio de procesamiento de 3DS.
Paso 2: Asegure y complete la transacción de autenticación de 0$

Su sitio web redirige al cliente al sitio de procesamiento de la 3DS y este sigue las instrucciones para la transacción de autenticación.
El sitio de procesamiento de 3DS notifica a Rapyd el resultado de la transacción y redirige al cliente a tu página de éxito o fracaso.
Rapyd envía los detalles de la transacción completada, incluido el token de la tarjeta, a tu sitio web.
Tu sitio web guardará el token de la tarjeta.
Comprueba qué métodos de pago se aceptan en el país de tu cliente.
Nota: Con fines ilustrativos, en los códigos de muestra se utilizan GB y GBP para el país y la moneda.
Capa de tarjetas 3DS
3DS la capa no está disponible en todas las regiones. Se activa automáticamente cuando un mandato reglamentario, como PSD2 lo requiere.
Para obtener más información sobre cómo prevenir transacciones fraudulentas, consulta Rapid Protect.
Para hacer eso, 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 GB como código de país. |
moneda | Entrar GBP 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 disponibles en Gran Bretaña.
Solicitud
// Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/country?country=GB¤cy=GBP // Message body absent
.NET Core
using System; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { string country = "GB"; string currency = "GBP"; string result = RapydApiRequestSample.Utilities.MakeRequest("GET", $"/v1/payment_methods/country?country={country}¤cy={currency}"); 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=GB¤cy=GBP'); 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=GB¤cy=GBP'); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Pitón
from pprint import pprint from utilities import make_request country = 'GB' currency = 'GBP' 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
Objeto de tipo de método de pago describe los campos de la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "cfa35a73-aa0b-4e7e-839c-4c3b6149edd7" }, "data": [{ "type": "gb_visa_card", "name": "Visa", "category": "card", "image": "https://iconslib.rapyd.net/checkout/gb_visa_card.png", "country": "gb", "payment_flow_type": "card", "currencies": [ "GBP" ], "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 gb_visa_card como tipo de método de pago. |
Obtener el método de pago Campos obligatorios Solicitud
Debe solicitar el conjunto de campos obligatorios para una tarjeta Visa.
Solicitud
// Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/gb_visa_card/required_fields // Message body absent
Netcore
using System; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { string type = "gb_visa_card"; string result = RapydApiRequestSample.Utilities.MakeRequest("GET", $"/v1/payment_methods/{type}/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/gb_visa_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/gb_visa_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 = 'gb_visa_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
Objeto de tipo de método de pago describe los campos de la respuesta.
Respuesta
{ “status”: { “error_code”: “”, “status”: “SUCCESS”, “message”: “”, “response_code”: “”, “operation_id”: “3b7a2391-6612-478e-b79e-38d7f8d33ff9” }, “data”: { “type”: “gb_visa_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 obtener una tarjeta Visa de Gran Bretaña, debes proporcionar:
nombrenúmeromes_caducidadaño_caducidadcvv
Asegúrese de que su cliente complete estos campos.
En este momento, 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.
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» en un valor comprendido entre 1000,00 y 1999.99.
Cuando su cliente confirme el pago con la tarjeta, debe asegurarse de que Rapyd verifique la tarjeta llamando Crea un 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 0.00 como importe del pago. |
moneda | Entrar GBP como código de divisa. |
capturar | Entrar falso como valor, ya que la cantidad es 0. Esto le indica a Rapyd que cobrará el pago por ti lo antes posible |
error_payment_url | Reemplazar |
URL de pago completa | Reemplazar |
Crear solicitud de pago
Le pides a Rapyd que verifique la tarjeta de tu cliente.
Solicitud
// Request URL: POST https://sandboxapi.rapyd.net/v1/payments // Message body: { "amount": 0.00, "currency": "GBP", "payment_method": { "type":"gb_visa_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", "capture": false }
.net.core
using System; using System.Text.Json; namespace RapydApiRequestSample { class Program { static void Main(string[] args) { try { var requestObj = new { amount = 0.00, currency = "GBP", payment_method = new { type = "gb_visa_card", fields = new { 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", capture = false }; 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: 0.00, currency: 'GBP', payment_method: { type: 'gb_visa_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', capture: false }; 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' => 0.00, 'currency' => 'GBP', 'payment_method' => [ 'type' => 'gb_visa_card', 'fields' => [ 'number' => '4111111111111111', 'expiration_month' => '10', 'expiration_year' => '29' 'cvv' => '123', 'name' => 'Cardholder Name' ] ], 'error_payment_url' => urldecode('https://error_example.net'), 'complete_payment_url' => urldecode('https://complete_example.net') 'payment_method_options'=> [ '3d_required => ], 'capture' => false, '' ]; try { $object = make_request('post', '/v1/payments', $body); var_dump($object); } catch (Exception $e) { echo "Error: $e"; } ?>
Pitón
from pprint import pprint from utilities import make_request payment_body = { 'amount': 0.00, 'currency': 'GBP', 'payment_method': { 'type': 'gb_visa_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': false } results = make_request(method='post', path='/v1/payments', body=payment_body) pprint(results)
Crear respuesta de pago
Echemos un vistazo a la respuesta. Objeto de pago describe los campos de la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "5dd15363-e0a2-48b5-878e-30296b50a6b2" }, "data": { "id": "payment_b151373c6124a05dbf8614be3948e297", "amount": 0, "original_amount": 0.00, "is_partial": false, "currency_code": "GBP", "country_code": "gb", "status": "ACT", "description": "test2", "merchant_reference_id": "", "customer_token": "cus_57153838f4eb9052e87649a462aedd6e", "payment_method": "card_f372e6e5a780424104ac850cffeab03e", "expiration": 1600169279, "captured": false, "refunded": false, "refunded_amount": 0, "receipt_email": "", "redirect_url": "https://redirect.example.net/, "complete_payment_url": "http://www.rapyd.net", "error_payment_url": "http://www.rapyd.net/error.html", "receipt_number": "", "flow_type": "", "address": null, "statement_descriptor": "rapyd 3ds testing", "transaction_id": "", "created_at": 1599564479, "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_f7d6a6bfade1cabb06f3e264d8f1899b", "ewallets": [ { "ewallet_id": "ewallet_f7d6a6bfade1cabb06f3e264d8f1899b", "amount": 0.00, "percent": 100, "refunded_amount": 0 } ], "payment_method_options": { "3d_required": true }, "payment_method_type": "gb_visa_card", "payment_method_type_category": "card", "fx_rate": "", "merchant_requested_currency": null, "merchant_requested_amount": null, "fixed_side": "", "payment_fees": null, "invoice": "", "escrow": null, "group_payment": "", "initiation_type": "customer_present" } }
El datos la sección de la respuesta muestra:
cantidades 0,00monedaes GBPA 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 falso - el importe del pago con tarjeta es 0.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 seguimos esperando a que tu cliente invitado finalice 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 en la página web.
Cuando el proceso se complete correctamente, Rapyd le envía un webhook con detalles de la transacción completada.
Vamos a echar un vistazo a Webhook: pago completado.
Webhook
{ "id": "wh_7f18c2b90892652fe7ff2cb7d0537732", "type": "PAYMENT_COMPLETED", "data": { "id": "payment_b151373c6124a05dbf8614be3948e297", // ... "paid": true, // ... "amount": 0.00, "status": "CLO", // ... "currency_code": "GBP", // ... "customer_token": "cus_57153838f4eb9052e87649a462aedd6e", "payment_method": "card_f372e6e5a780424104ac850cffeab03e", // ... "payment_method_type_category": "card" }, "trigger_operation_id": "", "status": "NEW", "created_at": 1551173303 }
El datos la sección del webhook muestra:
pagadoes cierto yestadoes CLO (cerrado), lo que indica que el dinero se ha pagado.cantidades 0,00código_monedaes GBPEl
customer_tokenypayment_methodson los mismos que en la respuesta de creación de pago.
Solicitud
JSON
https://sandboxapi.rapyd.net/v1/customers/cus_57153838f4eb9052e87649a462aedd6e { “default_payment_method”: "card_f372e6e5a780424104ac850cffeab03e" }
Respuesta
Respuesta
{ “status”: { “error_code”: “”, “status”: “SUCCESS”, “message”: “”, “response_code”: “”, “operation_id”: “e3fb342e-9562-42ed-9bf6-056a2609270c” }, “data”: { “id”: “cus_57153838f4eb9052e87649a462aedd6e”, “delinquent”: false, “discount”: null, “name”: “payment_2e7e75edbde869e04aa12155c0be13be”, “default_payment_method”: “card_f372e6e5a780424104ac850cffeab03e”, “description”: “”, “email”: “”, “phone_number”: “”, “invoice_prefix”: “”, “addresses”: [], “payment_methods”: { “data”: [ { “id”: “card_f372e6e5a780424104ac850cffeab03e”, “type”: “gb_credit_visa_card”, “category”: “card”, “metadata”: null, “image”: “https://iconslib.rapyd.net/checkout/sg_credit_visa_card.png”, “name”: “testing”, “last4”: “4977", “cvv_check”: “unchecked”, “bin_details”: { “brand”: null }, “expiration_year”: “24", “expiration_month”: “12", “fingerprint_token”: “” } ], “has_more”: false, “total_count”: 1, “url”: “/v1/customers/cus_abb5c09d9c5bf8c0c8cb00b14ec5c892/payment_methods” }, “subscriptions”: null, “created_at”: 1594894949, “metadata”: {}, “business_vat_id”: “”, “ewallet”: “” } }
Cuando tu cliente paga con la tarjeta almacenada, envías el pago a Rapyd para su procesamiento.
Para enviar el pago del cliente, usa Crear pago con los siguientes parámetros:
Descripción de los parámetros corporales
Parámetro corporal | Descripción |
|---|---|
cantidad | Introduce 9,99 como importe del pago. |
moneda | Entrar GBP como código de divisa. |
cliente | Ingresa el «customer_id» que recibiste en la respuesta de creación de pago (por ejemplo, «customer_token»: «cus_57153838f4eb9052e87649a462aedd6e») |
Crear solicitud de pago
Solicita a Rapyd que procese el pago de tu cliente por 9,99 GBP (libra esterlina) (como se muestra en este código de ejemplo a continuación).
Solicitud
// Request URL: POST https://sandboxapi.rapyd.net/v1/payments // Message body: { "amount": 9.99, "currency": "GBP", "customer": "cus_8ded332b08966abf51bdc28c106acb7c" }
Crear respuesta de pago
Crear pago describe los campos de la respuesta.
Respuesta
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "4e44e8c1-ee8c-411a-a2de-a2a2ae0122d3" }, "data": { "id": "payment_7b4cb9456f1ff73132831fc2e35d88be", "amount": 9.99, "original_amount": 9.99, "is_partial": false, "currency_code": "GBP", "country_code": "GB", "status": "CLO", // ... "customer_token": "cus_57153838f4eb9052e87649a462aedd6e", "payment_method": "card_f372e6e5a780424104ac850cffeab03e", "expiration": 0, "captured": true, // ... "created_at": 1581248060, // ... "paid": true, "paid_at": 1581248060, // ... "payment_method_type": "gb_visa_card", "payment_method_type_category": "card", // ... } }
La respuesta (en el código de ejemplo anterior) muestra que Rapyd procesó correctamente el pago en función del importe, la moneda y el identificador del cliente. Una suma de 9,99 GBP se pagó con la tarjeta del cliente.
Siempre obtendrás una respuesta similar. La única diferencia será la fecha y el identificador de pago, y el importe si no es idéntico.
Puedes ver que el pago se ha realizado correctamente, ya que el estado (debajo de los datos) es CERRAR (cerrado). Crear pago enumera los posibles valores de estado.
En este punto, puedes informar al cliente de que la compra se ha completado.