Skip to main content

Documentación

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
authorize-card.jpg
  1. 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.

  2. Su sitio web o aplicación solicita los detalles de la tarjeta a Rapyd y los presenta al cliente.

  3. El cliente completa los campos obligatorios y, a continuación, selecciona Registrarse o Pagar.

  4. Su sitio web envía la solicitud a Rapyd para procesar el pago con tarjeta.

  5. 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$
secure-complete-auth.jpg
  1. 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.

  2. 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.

  3. Rapyd envía los detalles de la transacción completada, incluido el token de la tarjeta, a tu sitio web.

  4. 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&currency=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}&currency={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&currency=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&currency=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}&currency={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:

  • nombre

  • número

  • mes_caducidad

  • año_caducidad

  • cvv

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:

  • tipo - us_debit_visa_card

  • campos - Introduzca un objeto con los siguientes campos:

    • número - 4 1111111

    • mes_caducidad - 10

    • año_caducidad - 29

    • cvv - 123

    • nombre - Nombre del titular de la tarjeta

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 https://error.example.net en el ejemplo con la URL de tu sitio web real a la que quieres que el sitio de la 3DS redirija al cliente en caso de que se produzca un error en el pago.

URL de pago completa

Reemplazar https://complete.example.net en el ejemplo, con la URL de tu sitio web real a la que quieres que el sitio de la 3DS redirija al cliente si el pago se realiza correctamente.

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:

  • cantidad es 0,00

  • moneda es GBP

  • A 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.

  • capturado es falso - el importe del pago con tarjeta es 0.

  • redireccionar_url es https://redirect.example.net, que es la URL a la que rediriges a tu cliente invitado para que complete el proceso de pago.

  • pagado es falso y estado es 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:

  • pagado es cierto y estado es CLO (cerrado), lo que indica que el dinero se ha pagado.

  • cantidad es 0,00

  • código_moneda es GBP

  • El customer_token y payment_method son 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.