Skip to main content

Documentación

Pago con FX

Pague a sus empleados en la moneda correcta. | Empresarial

Rapyd facilita que los empleadores paguen a sus empleados en moneda extranjera. El empleador tiene la opción de confirmar la FX tasa antes de que se complete el pago.

Los casos de uso comunes pueden incluir:

  • Una plataforma de conciertos paga a un banco extranjero de un trabajador en la moneda que prefiera por un proyecto terminado

  • Su empresa comienza a contratar trabajadores a través de las fronteras y se ofrece a pagar en su moneda

Actualización: puede realizar un pago con FX con el lado del remitente fijo

En el ejemplo actual, mostramos un pago de divisas con un valor fijo beneficiario cantidad. La API de pago de Rapyd también permite fijar el importe del remitente (débito).

Por ejemplo, el remitente quiere pagar 1000 USD y el beneficiario recibirá la cantidad equivalente de BGN (lev búlgaro), según el tipo de cambio actual.

Nota: Para completar el pago con FX sin necesidad de realizar una segunda llamada a la API, puedes configurar confirmar_automáticamente para cierto.

Su plataforma de conciertos utiliza la cartera de cliente, que está en USD (dólares estadounidenses). Uno de los trabajadores vive en Bulgaria y necesita que le paguen en BGN (lev búlgaro)

payout-with-fx.jpg
  1. Solicitas el pago del salario de la cuenta en USD de tu monedero a la cuenta bancaria en BGN del empleado con Crea un pago.

  2. Rapyd procesa la solicitud y te envía el tipo de cambio.

  3. Confirmas el tipo de cambio con Confirma el pago con FX.

  4. Rapyd procesa el pago a la cuenta bancaria de los empleados y te envía una respuesta.

  5. Recibirás la confirmación de pago. Cuando el banco confirme la recepción de los fondos, también recibirás un webhook

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

Crea un pago con FX - Confirmación automática

create-payout-with-automatic-confirmation-of-exchange-rate---success.svg

Crea un pago con FX - Confirmación manual

create-payout-with-manual-confirmation-of-exchange-rate---success.svg

El siguiente diagrama de estados finitos resume los estados de los pagos con FX.

payout.svg

Descripción de los estados

Estado

Descripción

Creado

Se creó el pago.

Pendiente

El pago se está procesando. Se debe confirmar el tipo

Confirmación

El beneficiario ha recibido los fondos de pago.

Completado

El pago se ha completado. El beneficiario ha recibido los fondos del pago.

Cancelado

Se canceló el pago.

Error

El pago no se ha creado o el pago ha fallado.

Expirado

El pago ha caducado.

Prerrequisitos

Para ejecutar los ejemplos de este caso de uso, debe ejecutar las siguientes llamadas a la API:

Nota: Si no es necesaria la confirmación de la tarifa, puedes realizar toda la operación de pago automáticamente. Establecer confirmación_automática a verdadero.

Nota: Puede comprobar el tipo de cambio actual con Obtenga el tipo de cambio.

El administrador de nóminas solicita un pago en USD (dólares estadounidenses) por enviar 2000 BGN (lev búlgaro) a la cuenta bancaria del empleado.

Para eso, usas Crea Payout con los siguientes parámetros:

Descripción de los parámetros corporales

Parámetro corporal

Descripción

beneficiario

Complete el objeto «beneficiario» con los siguientes detalles:

tipo_de_pago - prioridad

dirección - 456 Second Street

ciudad - Plovdiv

nombre_de_pila - Prueba

apellido_nombre - Empleado

iban - BG80BNBG96611020345678

bic_swift - BUINGSF

país_beneficiario

Entrar BG como código de país del beneficiario.

tipo_de_entidad_beneficiaria

Entrar individual como el tipo de entidad para el beneficiario.

confirmar_automáticamente

Entrar falso para indicar que se requiere una confirmación manual.

descripción

Entrar Salario como la descripción.

monedero electrónico

Introduce el «identificador» de la cartera que recibiste cuando creaste la cartera en tu entorno de pruebas. Para los fines de esta lección de casos de uso, estamos usando ewallet_82dd0417a86aebb564da2f96936ce2d2, que es el identificador de la cartera que hemos creado en nuestra zona de pruebas.

importa_desembolso

Entrar 2000 como la cantidad de moneda a comprar, en unidades del buy_currency.

divisa_de_pago

Entrar BGN como moneda de pago. Un código ISO 4217 de tres letras para la divisa que se va a comprar

tipo_de_método de pago

Entrar bg_general_bank como tipo de método. Enumere los tipos de métodos de pago y Obtenga los campos obligatorios de pago.

remitente

Rellene el objeto «remitente» con los siguientes detalles:

primer nombre - Prueba

apellido_nombre - ¿Gerente?

dirección - 123 First Street

ciudad - Sofía

fecha_de_nacimiento - 22/02/1980

país del remitente

Entrar BG como código de país para Bulgaria.

divisa del remitente

Entrar USD como moneda del remitente.

tipo_de_entidad_remitente

Entrar empresa como tipo de entidad remitente.

Le pides a Rapyd que procese el pago del administrador de nóminas de 2000 BGN (lev búlgaro) a la cuenta bancaria del empleado.

Crear solicitud de pago
    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/payouts
        
        // Message body: 
        {
            "beneficiary": {
                "payment_type": "priority",
                "address": "456 Second Street",
                "city": "Plovdiv",
                "first_name": "Test",
                "last_name": "Employee",
                "iban": "DE3376599444263666923298",
                "bic_swift": "BUINBGSF"
            },
            "beneficiary_country": "BG",
            "beneficiary_entity_type": "individual",
            "confirm_automatically": false,
            "description": "Salary",
            "ewallet": "ewallet_82dd0417a86aebb564da2f96936ce2d2",
            "payout_amount": "2000",
            "payout_currency": "BGN",
            "payout_method_type": "bg_general_bank",
            "sender": {
                "first_name": "Test",
                "last_name": "Manager",
                "address": "123 First Street",
                "city": "Sofia",
                "date_of_birth": "22/02/1980"
            },
            "sender_country": "BG",
            "sender_currency": "USD",
            "sender_entity_type": "company"
        }
    • .NET Core

      • using System;
        using System.Text.Json;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            beneficiary = new
                            {
                                payment_type = "priority",
                                address = "456 Second Street",
                                city = "Plovdiv",
                                first_name = "John",
                                last_name = "Doe",
                                iban = "DE3376599444263666923298",
                                bic_swift = "BUINBGSF"
                            },
                            beneficiary_country = "BG",
                            beneficiary_entity_type = "individual",
                            confirm_automatically = false,
                            description = "Salary",
                            ewallet = "ewallet_82dd0417a86aebb564da2f96936ce2d2",
                            payout_amount = "2000",
                            payout_currency = "BGN",
                            payout_method_type = "bg_general_bank",
                            sender = new
                            {
                                first_name = "Jane",
                                last_name = "Doe",
                                address = "123 First Street",
                                city = "Sofia",
                                date_of_birth = "22/02/1980"
                            },
                            sender_country = "BG",
                            sender_currency = "USD",
                            sender_entity_type = "company"
                        };
        
                        string request = JsonSerializer.Serialize(requestObj);
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", "/v1/payouts", 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 = {
              beneficiary: {
                payment_type: 'priority',
                address: '456 Second Street',
                city: 'Plovdiv',
                first_name: 'John',
                last_name: 'Doe',
                iban: 'DE3376599444263666923298',
                bic_swift: 'BUINBGSF'
              },
              beneficiary_country: 'BG',
              beneficiary_entity_type: 'individual',
              confirm_automatically: false,
              description: 'Salary',
              ewallet: 'ewallet_82dd0417a86aebb564da2f96936ce2d2',
              payout_amount: '2000',
              payout_currency: 'BGN',
              payout_method_type: 'bg_general_bank',
              sender: {
                first_name: 'Jane',
                last_name: 'Doe',
                address: '123 First Street',
                city: 'Sofia',
                date_of_birth: '22/02/1980'
              },
              sender_country: 'BG',
              sender_currency: 'USD',
              sender_entity_type: 'company'
            };
            const result = await makeRequest('POST', '/v1/payouts', 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 = [
            "beneficiary" => array(
                "payment_type" => "priority",
                "address" => "456 Second Street",
                "city" => "Plovdiv",
                "first_name" => "John",
                "last_name" => "Doe",
                "iban" => "DE3376599444263666923298",
                "bic_swift" => "BUINBGSF"
            ),
            "beneficiary_country" => "BG",
            "beneficiary_entity_type" => "individual",
            "confirm_automatically" => false,
            "description" => "Salary",
            "ewallet" => "ewallet_82dd0417a86aebb564da2f96936ce2d2",
            "payout_amount" => "2000",
            "payout_currency" => "BGN",
            "payout_method_type" => "bg_general_bank",
            "sender" => array(
                "first_name" => "Jane",
                "last_name" => "Doe",
                "address" => "123 First Street",
                "city" => "Sofia",
                "date_of_birth" => "22/02/1980"
            ),
            "sender_country" => "BG",
            "sender_currency" => "USD",
            "sender_entity_type" => "company"
        ];
        
        try {
            $object = make_request('post', '/v1/payouts', $body);
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Pitón

      • from pprint import pprint
        
        from utilities import make_request
        
        beneficiary_fields = {
            "payment_type": "priority",
            "address": "456 Second Street",
            "city": "Plovdiv",
            "first_name": "John",
            "last_name": "Doe",
            "iban": "DE3376599444263666923298",
            "bic_swift": "BUINBGSF"
        }
        
        sender_fields = {
            "first_name": "Jane",
            "last_name": "Doe",
            "address": "123 First Street",
            "city": "Sofia",
            "date_of_birth": "22/02/1980"
        }
        
        payout_body = {
            "beneficiary": beneficiary_fields,
            "beneficiary_country": "BG",
            "beneficiary_entity_type": "individual",
            "confirm_automatically": False,
            "description": "Salary",
            "ewallet": "ewallet_82dd0417a86aebb564da2f96936ce2d2",
            "payout_amount": "2000",
            "payout_currency": "BGN",
            "payout_method_type": "bg_general_bank",
            "sender": sender_fields,
            "sender_country": "BG",
            "sender_currency": "USD",
            "sender_entity_type": "company"
        }
        result = make_request(method='post', path='/v1/payouts', body=payout_body)
        pprint(result)
Crear respuesta de pago

Echemos un vistazo a la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "77745716-89fc-4313-abbe-162a4d25f12f"
            },
            "data": {
                "id": "payout_56010c333d71789b6110fd36bc5066ca",
                "payout_type": "bank",
                "payout_method_type": "bg_general_bank",
                "amount": 2000,
                "payout_currency": "BGN",
                "sender_amount": 1191.1,
                "sender_currency": "USD",
                "status": "Confirmation",
                "sender_country": "BG",
                "sender": {
                    "last_name": "Manager",
                    "first_name": "Test",
                    "country": "BG",
                    "entity_type": "company",
                    "address": "123 First Street",
                    "name": "Test Manager",
                    "date_of_birth": "22/02/1980",
                    "city": "Sofia",
                    "currency": "USD"
                },
                "beneficiary_country": "BG",
                "beneficiary": {
                    "last_name": "Employee",
                    "first_name": "Test",
                    "country": "BG",
                    "entity_type": "individual",
                    "address": "456 Second Street",
                    "name": "Test Employee",
                    "city": "Plovdiv",
                    "currency": "BGN",
                    "bic_swift": "BUINBGSF",
                    "iban": "DE3376599444263666923298",
                    "payment_type": "priority"
                },
                "fx_rate": 0.59555,
                "instructions": {
                          
        //              ...       
                  
                },
                "ewallets": [
                    {
                        "ewallet_id": "ewallet_82dd0417a86aebb564da2f96936ce2d2",
                        "amount": 1191.1,
                        "percent": 100
                    }
                ],
                "metadata": {},
                "description": "Salary"
                  
        //              ...       
                  
           }
        }

El datos la sección de esta respuesta muestra:

  • El Id si el objeto de «pago» es payout_56010c333d71789b6110fd36bc5066ca. Cuando ejecutes este ejemplo en tu propia zona de pruebas, obtendrás un ID diferente, que necesitarás para un paso posterior en este caso práctico

  • El fx_rate es 0.59555.

Cuando recibas la respuesta, dispones de poco tiempo para aprobar el tipo de cambio. El tiempo exacto varía de un método de pago a otro.

Confirme la solicitud de pago

Para confirmar el pago, usa Confirme el pago con FX con los siguientes parámetros:

Descripción de los parámetros de ruta

Parámetro de ruta

Descripción

ID de pago

Introduce el «identificador» de pago que recibiste cuando creaste el pago en tu entorno de pruebas. Para los fines de esta lección de casos de uso, estamos usando payout_56010c333d71789b6110fd36bc5066ca, que es el identificador del pago que hemos creado en nuestra zona de pruebas.

    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/payouts/confirm/payout_56010c333d71789b6110fd36bc5066ca
        
        // Message body absent.
    • .NET Core

      • using System;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
        
                        string payout = "payout_56010c333d71789b6110fd36bc5066ca";
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", $"/v1/payouts/confirm/{payout}");
        
                        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 = {};
            const result = await makeRequest(
              'POST',
              '/v1/payouts/confirm/payout_56010c333d71789b6110fd36bc5066ca',
              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 {
            $object = make_request('post', '/v1/payouts/confirm/payout_56010c333d71789b6110fd36bc5066ca');
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Pitón

      • from pprint import pprint
        
        from utilities import make_request
        
        payout = 'payout_56010c333d71789b6110fd36bc5066ca'
        results = make_request(method='post',
                               path=f'/v1/payouts/confirm/{payout}')
        pprint(results)
Confirme la respuesta de pago

Echemos un vistazo a la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "bb05d0a9-295d-4cad-958c-e20dd8dbe461"
            },
            "data": {
                "id": "payout_89a8df5e8716b9785f4f1de42e453bac",
                "payout_type": "bank",
                "payout_method_type": "bg_general_bank",
                "amount": 2000,
                "payout_currency": "BGN",
                "sender_amount": 1191.1,
                "sender_currency": "USD",
                "status": "Created",
                "sender_country": "BG",
                "sender": {
                    "id": "sender_4bc400c5c08fd6e6d4655d5ddef73e4e",
                    "last_name": "Manager",
                    "first_name": "Test",
                    "country": "BG",
                    "entity_type": "company",
                    "address": "123 First Street",
                    "name": "Test Manager",
                    "date_of_birth": "22/02/1980",
                    "city": "Sofia",
                    "currency": "USD"
                },
                "beneficiary_country": "BG",
                "beneficiary": {
                    "id": "beneficiary_97f8a3c6955967280a11223f7c3114ca",
                    "last_name": "Employee",
                    "first_name": "Test",
                    "country": "BG",
                    "entity_type": "individual",
                    "address": "456 Second Street",
                    "name": "Test Employee",
                    "city": "Plovdiv",
                    "currency": "BGN",
                    "bank_name": "Test Employee",
                    "bic_swift": "BUINBGSF",
                    "iban": "DE3376599444263666923298",
                    "payment_type": "priority"
                },
                "fx_rate": 0.59555,
                "instructions": {
                  
        //              ...       
                  
                   }
                ],
                "ewallets": [
                    {
                        "ewallet_id": "ewallet_82dd0417a86aebb564da2f96936ce2d2",
                        "amount": 1191.1,
                        "percent": 100
                    }
                ],
                "metadata": {},
                "description": "Salary",
                "created_at": 1583676917,
                  
        //              ...       
                  
            }
        }

El datos la sección de esta respuesta muestra:

  • estado - Creado - Esto indica que el proceso de pago ha comenzado.

  • cantidad - La cantidad de dinero que se transferirá a la cuenta bancaria del empleado, 2000 BGN.

  • divisa_de_pago - La moneda enviada a la cuenta bancaria del empleado, BGN.

  • divisa del remitente - La moneda de su cuenta de eWallet, USD.

  • creado en - La hora en que se creó el pago, en tiempo de Unix.

El carteras el objeto muestra la siguiente información:

  • ewallet_id - El identificador del monedero de tu empresa.

  • cantidad - El importe de USD tomado de tu billetera, 1191,10 USD.

Simulación de la finalización de un pago

El caja de arena no simula directamente la acción del beneficiario que recibe los fondos de pago. Puede simular esta acción con el procedimiento descrito en Desembolso completo. Para ello, necesitarás el ID de pago y el importe de pago que generaste en tu

Cuando se simula la finalización de un pago, Rapyd envía un webhook. Configura tu sistema para recibir webhooks Definición de un endpoint de webhook

Después de simular que el banco del empleado finaliza la recepción de su salario, Rapyd le envía Webhook: pago completado. Para indicar que el pago se completó, el estado el campo cambia a Completado.

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

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