Skip to main content

Documentación

Reembolso a varias cuentas

Cuando varios vendedores participan en una sola transacción, puede enviar un reembolso desde un vendedor.

Rapyd proporciona un método rápido y sencillo para procesar reembolsos parciales de una compra realizada por un cliente en su sitio web de comercio electrónico.

Puede hacer reembolsos parciales varias veces por la misma compra.

Los reembolsos se realizan al método de pago utilizado en la transacción de pago original. En este caso de uso, el cliente pagó con tarjeta a varios vendedores (billetaras) y un vendedor específico (billetera) realizó un reembolso parcial.

Certificación PCI

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

El cliente utiliza una tarjeta para comprar un altavoz y un teléfono a dos vendedores del sitio web de su plataforma. Más adelante, el cliente solicita un reembolso parcial al vendedor del altavoz, ya que el altavoz no era del color exacto que se anunciaba.

El back-end de su sitio web le pide a Rapyd que procese el reembolso parcial desde la billetera del vendedor del altavoz. Cuando el dinero se devuelve a la tarjeta del cliente, Rapyd le notifica que el reembolso parcial se ha completado correctamente.

Encontrar los métodos de pago por transferencia bancaria específicos que aceptará y los campos obligatorios correspondientes que los clientes deben llenar se describe en la sección Cómo funciona.

process-payment.jpg
  1. Un cliente del sitio web de su plataforma compra dos productos de dos vendedores diferentes.

  2. El back-end del sitio web solicita a Rapyd que procese la transacción.

  3. Rapyd procesa el pago.

process-refund-multiple-accounts.jpg

El cliente llena todos los campos requeridos por la página Solicitud de reembolso de su sitio web para recibir un reembolso parcial de un vendedor. Tiene el ID de la transacción y el monto que debe reembolsar.

  1. El cliente solicita al comercio por un reembolso parcial.

  2. El back-end de su sitio web solicita a Rapyd que procese el reembolso parcial del cliente.

  3. Rapyd procesa la transacción de reembolso, le notifica que se ha realizado correctamente y luego envía la confirmación del reembolso al cliente.

Prerrequisitos

Para ejecutar los ejemplos de este caso de uso, debe crear los siguientes ID en su propio sandbox:

  • 'ewallet' - Ejecute Crea un monedero para la billetera del vendedor del teléfono. Use el «ID» que obtiene en la respuesta. Repita el procedimiento para la billetera del vendedor del altavoz.

Encuentre los campos obligatorios que los clientes deben llenar para cada método de pago. Ver Obtener los campos obligatorios del método de pago .

El cliente realiza estas compras en el sitio web de su plataforma:

  • Un altavoz de un vendedor por USD 50,00 (dólares estadounidenses).

  • Un teléfono de otro vendedor por 200 USD (dólares estadounidenses).

Solicita a Rapyd que procese el pago.

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

Descripción de los parámetros del cuerpo

Parámetro del cuerpo

Descripción

amount

Introducir 250 como monto total del pago.

currency

Introducir USD como el código para dólares estadounidenses.

payment_method

Introducir un objeto 'payment_method' que tenga los siguientes campos:...cvv - Introducir 123.name - Introducir Usuario de prueba.

  • type - Introducir us_debit_visa_card como el tipo de método de pago.

  • fields - Introducir un objeto que tenga los siguientes campos. Los campos se definen en la respuesta «Obtener los campos obligatorios del método de pago» para us_debit_visa_card.

    • number - Introducir 4111111111111111 .

    • expiration_month - Introducir 10

    • expiration_year - Introducir 20

    • cvv- Introducir 123.

    • name - Introducir Test User .

ewallets

Introducir una matriz de los siguientes objetos: Primer objeto:

  • ewallet - Introducir el «ID» de la billetera que recibió cuando creó la billetera del vendedor del altavoz en su sandbox. Para los fines de esta lección de caso de uso, estamos usando ewallet_090e1ef18c3aa754fd43cce9ee454858, que es el ID de la billetera que hemos creado en nuestro sandbox.

  • amount - Introducir 50 como monto a pagar al vendedor del altavoz

Segundo objeto:

  • ewallet - Introducir el «ID» de la billetera que recibió cuando creó la billetera del vendedor del altavoz en su sandbox. Para los fines de esta lección de caso de uso, estamos usando ewallet_11078019438f943986c1fcfbaba05e13, que es el ID de la billetera que hemos creado en nuestro sandbox.

  • amount - Introducir 200 como monto a pagar al vendedor del teléfono.

Crear solicitud de pago

Solicita a Rapyd que procese el pago.

    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/payments
        
        // Message body:
        {
                "amount": 250,
                "currency": "USD",
                "payment_method": {
                        "type": "us_debit_visa_card",
                        "fields": {
                                "number": "4111111111111111",
                                "expiration_month": "10",
                                "expiration_year": "20",
                                "cvv": "123",
                                "name": "Test User"
                        }
                },
                "ewallets": [
                        {
                                "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                                "amount": 50
                        }, 
            {
                                "ewallet": "ewallet_11078019438f943986c1fcfbaba05e13",
                                "amount": 200
                        }
                ]
        }
    • .NET Core

      • using System;
        using System.Text.Json;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            amount = 250,
                            currency = "USD",
                            payment_method = new
                            {
                                type = "us_visa_card",
                                number = "4111111111111111",
                                expiration_month = "10",
                                expiration_year = "20",
                                cvv = "123",
                                name = "John Doe",
                            },
                            ewallets = new Object[]
                            {
                                new
                                {
                                    ewallet = "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                                    amount = 50
                                },
                                new
                                {
                                    ewallet = "ewallet_11078019438f943986c1fcfbaba05e13",
                                    amount = 200
                                },
                            },
                        };
        
                        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);
                    }
                }
            }
        }
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        payment_body = {
            "amount": 250,
            "currency": "USD",
            "payment_method": {
                "type": "us_visa_card",
                "fields": {
                    "number": "4111111111111111",
                    "expiration_month": "10",
                    "expiration_year": "20",
                    "cvv": "123",
                    "name": "John Doe"
                }
            },
            "ewallets": [
                {
                    "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                    "amount": 50
                },
                {
                    "ewallet": "ewallet_11078019438f943986c1fcfbaba05e13",
                    "amount": 200
                }
            ]
        }
        
        create_payment_response = make_request(method='post', path='/v1/payments', body=payment_body)
        pprint(create_payment_response)
Crear respuesta de pago

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "d584c716-0e2d-47aa-a85d-8e8d99f4ee45"
            },
            "data": {
                "id": "payment_a257811affe292c98c8bb6693e8b8cf0",
                "amount": 250,
                "original_amount": 250,
                "is_partial": false,
                "currency_code": "USD",
                "country_code": "US",
                "status": "CLO",
                "description": "",
                "merchant_reference_id": "",
                "customer_token": "cus_8aeff2ec08a57b44e4442786276d4ef2",
                "payment_method": "card_d25e29a0cdb7866766bb2c2528cd49e3",
                
        //  ...
                  
                "created_at": 1581246669,
                "metadata": {},
                "failure_code": "",
                "failure_message": "",
                "paid": true,
                "paid_at": 1581246670,
                
        //  ...          
                  
                "ewallets": [
                    {
                        "ewallet_id": "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                        "amount": 50,
                        "percent": 20,
                        "refunded_amount": 0
                    },
                    {
                        "ewallet_id": "ewallet_11078019438f943986c1fcfbaba05e13",
                        "amount": 200,
                        "percent": 80,
                        "refunded_amount": 0
                    }
                ],
                "payment_method_options": {},
                "payment_method_type": "us_debit_visa_card",
                "payment_method_type_category": "card",
               
        //    ...
                  
            }
        }

La sección datos de esta respuesta muestra que:

  • El id del pago es payment_a257811affe292c98c8bb6693e8b8cf0. Cuando ejecute este ejemplo en su sandbox, obtendrá una ID diferente, que necesitará para un paso posterior en este caso de uso.

  • El amount es 250.

  • La currency es USD.

  • El objeto ewallets indica:

    • Una monto de 50 se paga a ewallet_id ewallet_090e1ef18c3aa754fd43cce9ee454858.

    • Una monto de 200 se paga a ewallet_id ewallet_11078019438f943986c1fcfbaba05e13.

Utilizará el id del pago y ewallet_id del vendedor del altavoz cuando solicite a Rapyd que reembolse parcialmente el pago al vendedor del altavoz.

El cliente solicita un reembolso parcial al vendedor del altavoz porque el altavoz no era del color exacto que se anunciaba, y sus condiciones de servicio permiten un reembolso parcial del diez por ciento en tales circunstancias.

Cuando el cliente solicita un reembolso parcial en su sitio web, le solicita a Rapyd que procese el reembolso.

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

Descripción de los parámetros del cuerpo

Parámetro del cuerpo

Descripción

payment

Introducir el «ID» del pago que recibió cuando creó el pago en su sandbox. Para los fines de esta lección de caso de uso, estamos usando payment_a257811affe292c98c8bb6693e8b8cf0, que es el ID del pago que creamos en nuestro sandbox.

ewallets

Introducir un objeto ewallets que tiene los siguientes campos:

  • ewallet - Introducir el «ID» de la billetera que recibió cuando creó la billetera del vendedor del altavoz en su sandbox. Para los fines de esta lección de caso de uso, estamos usando ewallet_090e1ef18c3aa754fd43cce9ee454858, que es el ID de la billetera que hemos creado en nuestro sandbox.

  • amount - Introducir 5 como monto a reembolsar al cliente.

Crear solicitud de reembolso

Solicita a Rapyd que procese el reembolso de la transacción anterior.

    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/refunds
        
        // Message body:
        {
            "payment": "payment_a257811affe292c98c8bb6693e8b8cf0",
            "ewallets": [
                {
                    "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                    "amount": 5
                }
            ]
        }
        
    • .NET Core

      • using System;
        using System.Text.Json;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            payment = "payment_a257811affe292c98c8bb6693e8b8cf0",
                            ewallets = new Object[]
                            {
                                new {
                                    ewallet = "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                                    amount = 5,
                                }
                            }
                        };
        
                        string request = JsonSerializer.Serialize(requestObj);
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", "/v1/refunds", request);
        
                        Console.WriteLine(result);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Error completing request: " + e.Message);
                    }
                }
            }
        }
    • JavaScript

      • const makeRequest = require('../../../../../Utilities/JS/utilities').makeRequest;
        
        async function main() {
          try {
            const body = {
              payment: 'payment_a257811affe292c98c8bb6693e8b8cf0',
              ewallets: [
                {
                  ewallet: 'ewallet_090e1ef18c3aa754fd43cce9ee454858',
                  amount: 5
                }
              ]
            };
            const result = await makeRequest('POST', '/v1/refunds', body);
        
            console.log(result);
          } catch (error) {
            console.error('Error completing request', error);
          }
        }
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        refund_body = {
            "payment": "payment_a257811affe292c98c8bb6693e8b8cf0",
            "ewallets": [
                {
                    "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                    "amount": 5
                }
            ]
        }
        
        create_refund_results = make_request(method='post',
                                             path='/v1/refunds',
                                             body=refund_body)
        
        pprint(create_refund_results)
Crear respuesta de reembolso

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "5356d170-951e-44d1-8bd5-fc5c6f110319"
            },
            "data": {
                "id": "refund_61a4c85a7cf7a7e631e454784ec4c579",
                "amount": 5,
                "payment": "payment_a257811affe292c98c8bb6693e8b8cf0",
                "currency": "USD",
                "failure_reason": "",
                "metadata": {},
                "reason": "",
                "status": "Completed",
                "receipt_number": 0,
                "created_at": 1581247161,
                "updated_at": 1581247161,
                "merchant_reference_id": "",
                "payment_created_at": 1581246669,
                "payment_method_type": "us_debit_visa_card",
                "ewallets": [
                    {
                        "ewallet": "ewallet_090e1ef18c3aa754fd43cce9ee454858",
                        "amount": 5
                    }
                ],
                "proportional_refund": false
            }
        }

La sección datos de esta respuesta muestra:

  • El id del reembolso es refund_61a4c85a7cf7a7e631e454784ec4c579.

  • El amount es 5.

  • El currency es USD.

  • El status es Completado. Esto significa que el proceso de reembolso está completo.

  • En el objeto ewallets: La billetera cobrada es ewallet_090e1ef18c3aa754fd43cce9ee454858, la billetera del vendedor del altavoz.

Nota

Si el pago se realizó en efectivo o mediante una redirección bancaria, completar el proceso de reembolso requiere los mismos pasos adicionales que el método de pago original. Para simular la acción del cliente, ejecute Reembolso completo.

Rapyd envía un webhook para notificarle que la transacción de reembolso se ha completado.

Su sitio web muestra al cliente una confirmación de que se ha completado el reembolso parcial.

Visualizar los detalles de las transacciones

Para ver los detalles del pago y el reembolso, utilizar Recuperar el pago.

¿Busca información técnica más detallada?

¿Desea ver los métodos y objetos de la API de Rapyd que utilizará? Ver Merchant API Reference para obtener más detalles técnicos.