Skip to main content

Documentación

Pago en dos pasos

Autorice una tarjeta y capture fondos una vez que se complete el pedido.

Es posible que prefiera obtener una autorización de tarjeta mientras se ensambla o procesa el pedido del cliente en su sitio web. El pago en dos pasos primero autoriza la tarjeta y, cuando se envíe el pedido, pídale a Rapyd capturar el pago.

Certificación PCI

Solo clientes con la certificación PCI-DSS pueden gestionar la información de identificación personal de las tarjetas. Este método está disponible para los comercios que hayan firmado un acuerdo especial con Rapyd.

Puede encontrar los métodos de pago específicos que aceptará y los campos obligatorios correspondientes que los clientes deben llenar en la sección Cómo funciona.

customer-purchase-goods.jpg
  1. Al usar su sitio web o aplicación, un cliente agrega muebles al carrito de compras y realiza el pago.

  2. Su página web muestra los métodos de pago disponibles.

  3. El cliente selecciona «tarjeta».

  4. Su página web solicita los detalles de la tarjeta.

  5. El cliente proporciona los detalles y hace clic en Pagar ahora.

authorize-payment.jpg
  1. El back-end de su página web solicita a Rapyd la autorización de la tarjeta.

  2. Rapyd procesa la solicitud de autorización, devuelve una confirmación y un identificador de pago.

  3. Usted notifica al cliente que la compra se ha realizado correctamente.

capture-payment.jpg
  1. Prepara y empaca su producto para su entrega.

  2. El back-end de su página web le pide a Rapyd que compruebe el pago, especificando el ID de pago.

  3. Rapyd procesa la solicitud de comprobación y devuelve el estado actualizado de la transacción.

Los siguientes diagramas de secuencia de mensajes describen cómo se intercambia la información entre Rapyd, el comercio y la red de tarjetas.

Pago con tarjeta en dos pasos

payment-with-late-capture---success.svg

Decida qué métodos de pago aceptará para que su cliente pueda especificar sus métodos de pago en su página de pago.

Utilice Listar los métodos de pago por país con los siguientes parámetros:

  • EE. UU. y USD se muestran como ejemplo de país y moneda.

Descripción de los parámetros de consulta

Parámetro de consulta

Descripción

country

Introduzca US como código del país.

currency

Introduzca USD como código de la moneda.

Cuando su cliente paga los muebles, usted solicita una autorización de tarjeta para el pago de 115,65 USD (dólares estadounidenses).

Para eso, utilizará Crear pago con los siguientes parámetros:

Descripción de los parámetros de cuerpo

Parámetro de cuerpo

Descripción

amount

Introduzca 115.65 como el monto de pago.

currency

Introduzca USD como código de moneda.

capture

Introduzca falso como el valor. Esto le indica a Rapyd que cree solo una autorización de tarjeta. El pago autorizado se comprobará más adelante.

ewallet

Introduzca el ID de la billetera que recibió cuando creó la billetera empresarial de Four Star Furniture en su sandbox. Para los fines de esta lección de casos de uso, estamos usando ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414, que es el identificador de monedero que hemos creado en nuestra sandbox.

payment_method

Introduzca el objeto 'payment_method' con los siguientes campos:

  • type: Introduzca el tipo de método de pago que desea usar para la prueba. Para los fines de esta lección de casos de uso, estamos usando us_debit_visa_card .

  • fields: Introduzca un objeto que contenga todos los campos obligatorios, como se muestra en la respuesta cuando usted ejecutó Obtener el método de pago: campos obligatorios. Para los fines de esta lección de casos de uso, utilizamos los campos obligatorios para us_debit_visa_card.

Pídale a Rapyd que procese el pago de 115,65 USD (dólares estadounidenses) del cliente como autorización de tarjeta.

    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/payments
        
        // Message body: 
        {
                "amount": 115.65,
                "currency": "USD",
                "payment_method": {
                        "type": "us_debit_visa_card",
                        "fields": {
                                "number": "4111111111111111",
                                "expiration_month": "10",
                                "expiration_year": "25",
                                "cvv": "123",
                                "name": "Test User"
                        }
                },
                "ewallet": "ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414",
                "capture": false
        }
    • .NET Core

      • using System;
        using System.Text.Json;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            amount = 115.65,
                            capture = false,
                            currency = "USD",
                            ewallet = "ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414",
                            payment_method = new
                            {
                                type = "us_visa_card",
                                fields = new
                                {
                                    number = "4111111111111111",
                                    expiration_month = "10",
                                    expiration_year = "25",
                                    cvv = "123",
                                    name = "John Doe",
                                }
                            },
                        };
        
                        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: 115.65,
              currency: 'USD',
              payment_method: {
                type: 'us_visa_card',
                fields: {
                  number: '4111111111111111',
                  expiration_month: '10',
                  expiration_year: '20',
                  cvv: '123',
                  name: 'John Doe'
                }
              },
              ewallet: 'ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414',
              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" => "115.65",
            "currency" => "USD",
            "ewallet" => "ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414",
            "payment_method" => [
                "type" => "us_visa_card"
            ]
        ];
        
        try {
            $object = make_request('post', '/v1/payments', $body);
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        payment_body = {
            "amount": 115.65,
            "currency": "USD",
            "payment_method": {
                "type": "us_visa_card",
                "fields": {
                    "number": "4111111111111111",
                    "expiration_month": "10",
                    "expiration_year": "25",
                    "cvv": "123",
                    "name": "John Doe"
                }
            },
            "ewallet": "ewallet_452c8cd682f347b4abee9bbee04eac03",
            "capture": False
        }
        
        create_payment_response = make_request(method='post',
                                               path='/v1/payments',
                                               body=payment_body)
        pprint(create_payment_response)

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "7b0f7ce9-ed39-4eb5-ae1d-4210ad865072"
            },
            "data": {
                "id": "payment_fc109dbe553a223401d86156e3adea8c",
                "amount": 0,
                "original_amount": 115.65,
                "is_partial": false,
                "currency_code": "USD",
                "country_code": "us",
                "status": "ACT",
                "description": "",
                "merchant_reference_id": "",
                "customer_token": "cus_bd1338e2b5980deb6e3eae9eb785fdce",
                "payment_method": "card_164f3fd242091eba09f4b8c1f4a75597",
                "expiration": 0,
                "captured": false,
        
         //     ...         
        
                "paid": false,
                "paid_at": 0,
        
         //     ...         
        
                "ewallet_id": "ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414",
                "ewallets": [
                    {
                        "ewallet_id": "ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414",
                        "amount": 115.65,
                        "percent": 100,
                        "refunded_amount": 0
                    }
                ],
                "payment_method_options": {},
                "payment_method_type": "us_debit_visa_card",
                "payment_method_type_category": "card",
        
         //     ...         
        
            }
        }

La sección data de esta respuesta muestra:

  • El pago id es payment_fc109dbe553a223401d86156e3adea8c. Cuando ejecute este ejemplo en su propia sandbox, obtendrá un ID diferente, que necesitará para un paso posterior en este caso práctico.

  • amount es 0, lo que indica que todavía no se ha recibido ningún dinero.

  • original_amount es 115.65

  • currency_code es USD

  • El status es ACT (activo). Esto indica que el pago aún no se ha comprobado.

  • El customer_token es cus_bd1338e2b5980deb6e3eae9eb785fdceque es un identificador de cliente único solo para esta transacción. Como la solicitud no especificaba un cliente existente guardado en el sistema, se trata al cliente como un cliente invitado.

  • El payment_method es un ID de método de pago único solo para esta transacción.

  • captured es falso porque se trata únicamente de una autorización de tarjeta.

Ha preparado y empaquetado su pedido vendido. Antes de enviarlo, debe comprobar el pago con tarjeta que se autorizó anteriormente.

Para eso, use Comprobar pago con los siguientes parámetros:

Descripción de los parámetros de ruta

Parámetro de ruta

Descripción

payment

Introduzca el ‘ID’ de pago que recibió cuando creó el pago en su sandbox. Para los fines de esta lección de casos de uso, estamos usando payment_fc109dbe553a223401d86156e3adea8c, que es el identificador de pago que hemos creado en nuestra sandbox.

Descripción de los parámetros de cuerpo

Parámetro de cuerpo

Descripción

amount

Introduzca 115.65 como monto del pago.

Como usted está comprobando la cantidad total que se autorizó anteriormente, el parámetro amount es opcional.

Pídale a Rapyd que compruebe todos los pagos de 115,65 USD (dólares estadounidenses) de su cliente.

    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/payments/payment_fc109dbe553a223401d86156e3adea8c/capture
        
        // Message body: 
        {
           "amount": 115.65
        }
    • .NET Core

      • using System;
        using System.Text.Json;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        string payment = "payment_9d59d89e3ce3519647f0d22f5d37e23c";
        
                        var requestObj = new
                        {
                            amount = 115.65,
                        };
        
                        string request = JsonSerializer.Serialize(requestObj);
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", $"/v1/payments/{payment}/capture", 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: 115.65
            };
            const result = await makeRequest(
              'POST',
              '/v1/payments/payment_fc109dbe553a223401d86156e3adea8c/capture',
              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);
        
        try {
            $capturePayment = make_request('post', '/v1/payments/payment_fc109dbe553a223401d86156e3adea8c');
            var_dump($capturePayment);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        capture_payment_body = {
            "amount": 115.65
        }
        capture_payment_response = make_request(method='post',
                                                path='/v1/payments/payment_fc109dbe553a223401d86156e3adea8c/capture',
                                                body=capture_payment_body)
        
        pprint(capture_payment_response)

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "8053816d-3d99-47cd-a216-ccc35e38ccce"
            },
            "data": {
                "id": "payment_fc109dbe553a223401d86156e3adea8c",
                "amount": 115.65,
                "original_amount": 115.65,
                "is_partial": false,
                "currency_code": "USD",
                "country_code": "us",
                "status": "CLO",
                "description": "",
                "merchant_reference_id": "",
                "customer_token": "cus_bd1338e2b5980deb6e3eae9eb785fdce",
                "payment_method": "card_164f3fd242091eba09f4b8c1f4a75597",
                "expiration": 0,
                "captured": true,
        
         //     ...         
        
                "paid": true,
                "paid_at": 1590485097,
        
         //     ...         
        
                "ewallet_id": "ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414",
                "ewallets": [
                    {
                        "ewallet_id": "ewallet_8915a7fdeff7be5b7c1a7fa5f0b81414",
                        "amount": 115.65,
                        "percent": 100,
                        "refunded_amount": 0
                    }
                ],
                "payment_method_options": {},
                "payment_method_type": "us_debit_visa_card",
                "payment_method_type_category": "card",
        
         //     ...         
        
            }
        }

La sección data de esta respuesta muestra que el status ha cambiado a CLO (cerrado) y el amount ha cambiado al monto total de la compra.