Skip to main content

Documentación

Cancelar un pago

Detenga un pago antes de que se complete.

Rapyd ofrece un método rápido y sencillo para cancelar los pagos antes de que se completen. La cancelación de un pago es relevante para métodos de pago como el efectivo, transferencias bancarias y los redireccionamientos bancarios en línea, tal y como se describe en los siguientes casos:

Este caso de uso se aplica a los métodos de pago en los que is_cancelable = verdadero en la respuesta a Listar los métodos de pago por país.

Si is_cancelable = falso o el pago ya se ha completado, debe realizar un reembolso en su lugar. Un caso de uso que describe ese escenario es Reembolsos.

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

Este flujo de trabajo describe un artículo comprado en tu sitio web por 555.99 PHP (pesos filipinos) mediante un redireccionamiento bancario y luego cancelado antes de completarse.

customer-cancel-bank.jpg
  1. El cliente selecciona el pago bancario en línea en la pantalla de checkout.

  2. Recibe una URL única del sitio web del banco donde redirige a su cliente para que complete el pago.

  3. El cliente va a la URL del banco redirigida, pero decide cancelar.

process-cancel.jpg
  1. El back-end de su sitio web solicita a Rapyd que cancele el pago del cliente.

  2. Rapyd procesa la cancelación y le notifica que se ha realizado correctamente.

  3. Envía una confirmación al cliente.

En su página de pago, permite al cliente especificar los métodos de pago. En primer lugar, debe decidir qué métodos de pago va a aceptar.

Para eso, utilizar Listar 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

country

Ingrese PH como el código de país para Filipinas.

currency

Ingrese PHP como el código de moneda para los pesos filipinos.

Solicitud de lista de métodos de pago por país

Solicita la lista de todos los métodos de pago disponibles en PHP (pesos filipinos).

    • Solicitud

      • // Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/country?country=PH&currency=PHP
        
        // Message body absent
    • .NET Core

      • using System;
        
         namespace RapydApiRequestSample
         {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        string country = "PH";
                        string currency = "PHP";
        
                        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('../../../../../Utilities/JS/utilities').makeRequest;
        
        async function main() {
          try {
            const result = await makeRequest('GET', '/v1/payment_methods/country?country=PH&currency=PHP');
        
            console.log(result);
          } catch (error) {
            console.error('Error completing request', error);
          }
        }
    • PHP

      • <?php
        $path = $_SERVER['DOCUMENT_ROOT'];
        $path .= "/code_race_2020/Utilities/PHP/utilities.php";
        include($path);
        
        try {
            $object = make_request('get', '/v1/payment_methods/country?country=PH&currency=PHP');
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        country = 'PH'
        currency = 'PHP'
        results = make_request(method='get',
                               path=f'/v1/payment_methods/country?country={country}&currency={currency}')
        pprint(results)
Respuesta de lista de métodos de pago por país

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "6e17b56c-e3cf-40dd-abc5-80b3688d05e8"
            },
            "data": [{
                    "type": "ph_bancnet_bank",
                    "name": "Bancnet Online Payments Philippines",
                    "category": "bank_redirect",
                    "image": "",
                    "country": "ph",
                    "payment_flow_type": "redirect_url",
                    "currencies": [
                        "PHP"
                    ],
                    "status": 1,
                    "is_cancelable": true,
                    "payment_options": [{
                            "name": "description",
                            "type": "string",
                            "regex": "",
                            "description": "the description field must be filled in.",
                            "is_required": true,
                            "is_updatable": false
                        }
                    ],
                    "is_expirable": false,
                    "is_online": false,
                    "minimum_expiration_seconds": null,
                    "maximum_expiration_seconds": null
                }
            ]
        }

La sección datos de esta respuesta muestra:

  • ph_bancnet_bank es un método de pago aceptable en la categoría redireccionamiento_bancario.

  • El valor de is_cancelable es verdadero.

Una respuesta real suele incluir muchos métodos de pago.

Debe averiguar qué campos debe llenar el cliente para el método de pago.

Para ello, utilizar los 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

type

Ingrese ph_bancnet_bank como tipo de método de pago.

Solicitud de obtener los campos obligatorios del método de pago

Solicita el conjunto de campos obligatorios para un pago ph_bancnet_bank.

    • Solicitud

      • // Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/ph_bancnet_bank/required_fields
        
        // Message body absent
    • .NET Core

      • using System;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        string type = "ph_bancnet_bank";
        
                        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('../../../../../Utilities/JS/utilities').makeRequest;
        
        async function main() {
          try {
            const result = await makeRequest('GET', '/v1/payment_methods/ph_bancnet_bank/required_fields');
        
            console.log(result);
          } catch (error) {
            console.error('Error completing request', error);
          }
        }
    • PHP

      • <?php
        $path = $_SERVER['DOCUMENT_ROOT'];
        $path .= "/code_race_2020/Utilities/PHP/utilities.php";
        include($path);
        
        try {
            $object = make_request('get', '/v1/payment_methods/ph_bancnet_bank/required_fields');
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        payment_method = 'ph_bancnet_bank'
        results = make_request(method='get',
                               path=f'/v1/payment_methods/{payment_method}/required_fields')
        pprint(results)
Respuesta de obtener los campos obligatorios del método de pago

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "7cb8b5ad-c445-4009-8d27-a9550656ff56"
            },
            "data": {
                "type": "ph_bancnet_bank",
                "fields": [],
                "payment_method_options": [],
                "payment_options": [
                    {
                        "name": "description",
                        "type": "string",
                        "regex": "",
                        "description": "the description field must be filled in.",
                        "is_required": true,
                        "is_updatable": false
                    }
                ],
                "minimum_expiration_seconds": null,
                "maximum_expiration_seconds": null
            }
        }

La sección data de esta respuesta muestra que el campo description es necesario para un pago ph_bancnet_bank.

Cuando su cliente realiza el pago en su sitio web, le pide a Rapyd que procese el pago bancario.

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

Ingrese 555,99 como el importe del pago.

currency

Ingrese PHP como el código de moneda para los pesos filipinos.

description

Ingrese Pago bancario en línea.

complete_payment_url

Reemplace el ejemplo https://success_example.net con la URL real de su sitio web donde desea que el banco redirija al cliente si el pago se realiza correctamente.

error_payment_url

Reemplace el ejemplo https://error_example.net con la URL real de su sitio web donde desea que el banco redirija al cliente si el pago falla.

payment_method

Introduzca un objeto con el siguiente campo: type - ph_bancnet_bank

Crear solicitud de pago

Solicita a Rapyd que procese el pago del cliente de 555.99 PHP (pesos filipinos) como un pago bancario redirigido.

    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/payments
        
        // Message body:
        {
            "amount": 555.99,
            "currency": "PHP",
            "description": "Online bank payment",
            "complete_payment_url": "https://success_example.net",
            "error_payment_url": "https://error_example.net",
            "payment_method": {
                "type": "ph_bancnet_bank"
            }
        }
    • .NET Core

      • using System;
        using System.Text.Json;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            amount = 555.99,
                            currency = "PHP",
                            description = "Online bank payment",
                            complete_payment_url = "https:success_example.net",
                            error_payment_url = "https:error_example.net",
                            payment_method = new {
                                type = "ph_bancnet_bank",
                            }
                        };
        
                        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);
                    }
                }
            }
        }
    • PHP

      • <?php
        $path = $_SERVER['DOCUMENT_ROOT'];
        $path .= "/code_race_2020/Utilities/PHP/utilities.php";
        include($path);
        
        $body = [
            "amount" => "555.99",
            "currency" => "PHP",
            "description" => "Online bank payment",
            "complete_payment_url" => "https://success_example.net",
            "error_payment_url" => "https://error_example.net",
            "payment_method" => [
                "type" => "ph_bancnet_bank"
            ]
        ];
        
        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": 555.99,
            "currency": "PHP",
            "description": "Online bank payment",
            "complete_payment_url": "https://success_example.net",
            "error_payment_url": "https://error_example.net",
            "payment_method": {
                "type": "ph_bancnet_bank"
            }
        }
        
        results = make_request(method='post',
                               path='/v1/payments',
                               body=payment_body)
        pprint(results)
Crear respuesta de pago

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "afc7c939-35d7-41d7-bfe7-a4166a4afd26"
            },
            "data": {
                "id": "payment_1b24b2d6cde2fc949e68dd43672e6194",
                "amount": 0,
                "original_amount": 555.99,
        
                //     ...
        
                "currency_code": "PHP",
                "country_code": "ph",
                "status": "ACT",
                "description": "Online bank payment",
        
                //     ...
        
                "customer_token": "cus_b16c679b8f4adc19e9bae0c17b4ae9ce",
                "payment_method": "other_e834a5e5f5de12fa98ea08d1be874919",
        
                //     ...
        
                "redirect_url": "https://sandbox.rapyd.net/complete-bank-payment?token=payment_1b24b2d6cde2fc949e68dd43672e6194&complete_payment_url=https://success_example.net&error_payment_url=https://error_example.net",
                "complete_payment_url": "https://success_example.net",
                "error_payment_url": "https://error_example.net",
        
                //     ...
        
                "paid": false,
        
                //     ...
        
                "payment_method_type": "ph_bancnet_bank",
                "payment_method_type_category": "bank_redirect",
        
                //     ...
        
            }
        }

La sección data de esta respuesta muestra:

  • El id del pago es payment_1b24b2d6cde2fc949e68dd43672e6194. Cuando ejecute este ejemplo en su entorno de pruebas (sandbox), obtendrá un ID diferente, el cual será necesario en un paso posterior de este caso de uso.

  • El original_amount es 555.99.

  • El currency_code es PHP (Pesos filipinos).

  • El status es ACT (activo). Esto significa que el proceso de pago está activo pero no está completo.

  • Se incluyen estas URL:

    • redirect_url - Redirige al cliente a esta URL única del sitio web del banco para completar el pago.

    • complete_payment_url y error_payment_url - Rapyd ofrece estas URL al banco para redirigir al cliente a su sitio web en función de si la compra se ha realizado correctamente.

  • El valor de paid es falso ya que el cliente completó el pago.

Su sitio web redirige al cliente al sitio web del banco para completar el pago, pero el cliente decide cancelar la compra.

Cuando su usuario solicita la cancelación de la compra, le pide a Rapyd que procese la cancelación.

Para eso, utiliza Cancelar el pago con el siguiente parámetro:

Descripción de los parámetros de ruta

Parámetro de ruta

Descripción

payment

Introduzca el valor del id que recibió al crear el pago incompleto en su entorno de pruebas (sandbox). En nuestro ejemplo, utilizamos el identificador de pago que recibimos en nuestro entorno de pruebas (sandbox): payment_1b24b2d6cde2fc949e68dd43672e6194

Cancelar solicitud de pago

Le pide a Rapyd que procese la cancelación.

    • Solicitud

      • // Request URL: DELETE https://sandboxapi.rapyd.net/v1/payments/payment_1b24b2d6cde2fc949e68dd43672e6194
        
        // Message body absent
    • .NET Core

      • using System;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        string payment = "payment_1b24b2d6cde2fc949e68dd43672e6194";
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("DELETE", $"/v1/payments/{payment}");
        
                        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 result = await makeRequest(
              'DELETE',
              '/v1/payments/payment_1b24b2d6cde2fc949e68dd43672e6194'
            );
        
            console.log(result);
          } catch (error) {
            console.error('Error completing request', error);
          }
        }
    • PHP

      • <?php
        $path = $_SERVER['DOCUMENT_ROOT'];
        $path .= "/code_race_2020/Utilities/PHP/utilities.php";
        include($path);
        
        try {
            $object = make_request('delete', '/v1/payments/payment_1b24b2d6cde2fc949e68dd43672e6194');
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
Cancelar respuesta de pago

Veamos la respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "e4c3ef95-d698-42ef-9284-568eefd17986"
            },
            "data": {
                "id": "payment_1b24b2d6cde2fc949e68dd43672e6194",
                "amount": 0,
                "original_amount": 555.99,
        
                //              ...
        
                "currency_code": "PHP",
                "country_code": "ph",
                "status": "CAN",
                "description": "Online bank payment",
        
                //              ...
        
                "customer_token": "cus_b16c679b8f4adc19e9bae0c17b4ae9ce",
                "payment_method": "other_e834a5e5f5de12fa98ea08d1be874919",
        
                //              ...
        
                "paid": false,
        
                //              ...
        
                "payment_method_type": "ph_bancnet_bank",
                "payment_method_type_category": "bank_redirect",
        
                //              ...
        
            }
        }

La sección datos de esta respuesta muestra:

  • El original_amount es 555.99.

  • El status es CAN (Cancelado). Esto significa que el proceso de cancelación se ha completado.

  • El valor de paid es falso ya que la transacción original no se pagó.

Su sitio web muestra al cliente una confirmación de que la cancelación se ha completado.

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