Skip to main content

Documentación

Suscripciones

Con Rapyd Collect, puede crear suscripciones (también denominadas facturación por suscripción, facturación recurrente o pagos recurrentes).

Las suscripciones funcionan bien para las empresas que ofrecen un servicio mensual. Rapyd Collect le ayuda a integrar esta funcionalidad en su sitio web o aplicación.

Este caso de uso describe una facturación mensual regular en la que el monto es siempre el mismo.

  • Para ver la facturación periódica con un monto basado en el uso o diferentes niveles de tarifas según la cantidad, consulte Planificar.

  • Para ver la facturación periódica con una fecha de finalización fija, consulte Create Subscription.

Un cliente quiere usar su servicio digital, Acme Music, en Singapur. El costo es de 3 dólares singapurenses al mes, de forma indefinida.

Parte 1: Crear un producto de tipo ‘servicio’.

Parte 2: Crear un plan para definir la estructura de precios.

Parte 3: Crear suscripción

Nota: Se necesita un perfil de cliente con un método de pago definido para crear una suscripción.

Veamos los aspectos más destacados de su flujo de trabajo.

Prerrequisito

Un perfil de cliente se crea solo una vez. Contiene métodos de pago que se pueden reutilizar para todos los pagos posteriores. Se puede utilizar para pagos periódicos y para muchos otros fines.

Parte 1: Seleccione un método de pago
643e7dbfb8223.png
  1. Su sitio web consulta a Rapyd para conocer los métodos de pago disponibles en Singapur.

  2. Rapyd devuelve una lista de métodos de pago.

  3. Su sitio web ofrece una lista de opciones a sus clientes.

Parte 2: Crear un perfil de cliente
643e7dc13588f.png
  1. El cliente selecciona su producto y un método de pago.

  2. El back-end de la página web le pide a Rapyd que cree un perfil de cliente.

  3. Rapyd crea el perfil y le asigna un ID único.

Paso 1: Crear un producto
643e7dc299474.png
  1. Usted define el producto que ofrece.

  2. El back-end de su página web le pide a Rapyd que cree un producto del tipo ‘servicio’.

  3. Rapyd crea el producto y devuelve un ID de producto.

Paso 2: Crear un plan
643e7dc3c28d2.png
  1. Usted determina la estructura de precios que desea para el pago periódico.

  2. El back-end de su página web le pide a Rapyd que cree el plan.

  3. Rapyd crea el plan y devuelve un ID del plan.

Paso 3: Crear la suscripción
643e7dc5213bb.png
  1. Usted decide los parámetros que necesita para el pago periódico.

  2. El back-end de su página web le pide a Rapyd que cree una suscripción para el cliente.

  3. Rapyd crea la suscripción y devuelve un ID de suscripción.

Al final de cada período de facturación, Rapyd recauda el monto adeudado y lo añade a su billetera.

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

Crear suscripción

subscription-with-automatic-capture-of-card-payment.svg

ID de cliente con método de pago guardado

Si ya tiene un cliente con un método de pago, puede saltar a Crear Producto.

En primer lugar, debe determinar qué métodos de pago singapurenses admiten pagos en dólares de Singapur (SGD). Ejecute 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

país

SG, el código de país de Singapur.

moneda

SGD, el código de moneda de los dólares de Singapur.

Solicitud para listar métodos de pago por país
    • Solicitud

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

      • using System;
        
         namespace RapydApiRequestSample
         {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        string country = "SG";
                        string currency = "SGD";
        
                        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=SG&currency=SGD
            );
        
            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=SG&currency=SGD');
            echo $object;
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

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

Rapyd devuelve la siguiente respuesta (redactada por motivos de brevedad). Los campos se describen en Tipo de objeto del método de pago.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "865cd976-1b2f-4321-b88c-3caaa5a4499e"
            },
            "data": [
                {
                    "type": "sg_credit_cup_card",
                    "name": "UnionPay",
                    "category": "card",
                    "image": "https://iconslib.rapyd.net/checkout/sg_credit_cup_card.png",
                    "country": "sg",
                    "payment_flow_type": "",
                    "currencies": [
                        "SGD"
                    ],
                    "status": 1,
                    "is_cancelable": true,
                    "payment_options": [
                        {
                            "name": "capture",
                            "type": "boolean",
                            "regex": "",
                            "description": "Determines when the payment is processed for capture.",
                            "is_required": false,
                            "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
                        },
                        {
                            "name": "statement_descriptor",
                            "type": "string",
                            "regex": "/^[a-zA-Z0-9]{0,22}/",
                            "description": "A text description suitable for a customer's payment statement. Limited to 22 characters.",
                            "is_required": false,
                            "is_updatable": false
                        }
                    ],
                    "is_expirable": false,
                    "is_online": false,
                    "is_refundable": true,
                    "minimum_expiration_seconds": 0,
                    "maximum_expiration_seconds": 604800,
                    "virtual_payment_method_type": "card",
                    "is_virtual": false,
                    "multiple_overage_allowed": false,
                    "amount_range_per_currency": [
                        {
                            "currency": "SGD",
                            "maximum_amount": null,
                            "minimum_amount": null
                        }
                    ],
                    "is_tokenizable": false,
                    "supported_digital_wallet_providers": [],
                    "submid_required": false,
                    "is_restricted": false
                },
        //          . . .
            ]
        }

Al usar su página web o una página alojada Rapyd, muestre al cliente uno o más de estos métodos de pago. El cliente elige uno y proporciona la información requerida.

Cada método de pago tiene sus propios requisitos. Para determinar qué información debe proporcionar el cliente, ejecute Obtener los campos obligatorios para el método de pago. En este caso de uso, nuestro cliente eligió UnionPay.

Descripción de los parámetros de ruta

Parámetro de ruta

Descripción

type

sg_credit_cup_card, el ID del tipo de método de pago UnionPay.

Solicitud para obtener los campos obligatorios para el método de pago
    • Solicitud

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

      • using System;
        
        namespace RapydApiRequestSample
        {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        string type = "sg_fast_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('<path-to-your-utility-file>/utilities').makeRequest;
        
        async function main() {
          try {
            const result = await makeRequest('GET', '/v1/payment_methods/sg_fast_bank/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/sg_fast_bank/required_fields');
            echo $object;
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

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

Rapyd devuelve la siguiente respuesta. Los campos de la respuesta se describen en Tipo de objeto del método de pago.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "01ccc669-ca5d-4ff4-bc1e-88be05fae2cb"
            },
            "data": {
                "type": "sg_credit_cup_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": "boolean",
                        "regex": "",
                        "description": "Allows the client to determine whether the customer is required to complete 3DS authentication for the transaction",
                        "is_required": false,
                        "is_updatable": false
                    }
                ],
                "payment_options": [
                    {
                        "name": "capture",
                        "type": "boolean",
                        "regex": "",
                        "description": "Determines when the payment is processed for capture.",
                        "is_required": false,
                        "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
                    },
                    {
                        "name": "statement_descriptor",
                        "type": "string",
                        "regex": "/^[a-zA-Z0-9]{0,22}/",
                        "description": "A text description suitable for a customer's payment statement. Limited to 22 characters.",
                        "is_required": false,
                        "is_updatable": false
                    }
                ],
                "minimum_expiration_seconds": 0,
                "maximum_expiration_seconds": 604800
            }
        }

La respuesta muestra que este método de pago no requiere campos ni opciones de método de pago específicos.

Nota

Algunos métodos de pago requieren que los campos de la matriz ‘payment_options’ aparezcan en otros contextos. Para obtener más información, consulte la descripción de los campos en la respuesta a ‘Obtener campos obligatorios para el método de pago’.

Crea el perfil del cliente con todos los parámetros obligatorios para el cliente y para el método de pago seleccionado. Para nuestro ejemplo, utilizaremos Crear cliente con los siguientes parámetros:

Descripción de los parámetros corporales

Parámetro del cuerpo

Descripción

name

El nombre de su cliente.

email

La dirección de correo electrónico de su cliente.

payment_method

Un objeto que contiene lo siguiente:

  • type: cadena: el código del método de pago, en este caso, sg_credit_cup_card.

  • fields: objeto: los campos obligatorios para el método de pago, tal y como se muestra en la matriz fields en la respuesta a Obtener los campos obligatorios del método de pago.

Nota

Si está creando un método de pago con tarjeta y no tiene autorización PCI, debes crear el cliente sin el método de pago y, a continuación, añadir el método de pago mediante Crear un token de tarjeta, luego establezca ese método de pago como predeterminado con Actualizar cliente.

Crear solicitud de cliente
    • Solicitud

      • // Request URL: post https://sandboxapi.rapyd.net/v1/customers
        
        // Message body
        {
            "name": "John Doe",
            "email": "johndoe@rapyd.net",
            "payment_method": {
                "type": "sg_credit_cup_card",
                "fields": {
                    "number": "4111111111111111",
                    "expiration_month": "10",
                    "expiration_year": "23",
                    "cvv": "123",
                    "name": "John Doe"
                },
                "complete_payment_url": "https://complete.rapyd.net/",
                "error_payment_url": "https://error.rapyd.net/"
            }
        }
        
    • .NET Core

      • using System;
         using System.Text.Json;
        
         namespace RapydApiRequestSample
         {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            name = "John Doe",
                            email = "johndoe@rapyd.net",
                            payment_method = new Object[]
                            {
                                new
                                {
                                    type = "sg_credit_cup_card",
                                    fields = new Object[]
                                    {
                                        new
                                        {
                                            number = "4111111111111111",
                                            expiration_month = "10",
                                            expiration_year = "23",
                                            cvv = "123",
                                            name = "John Doe"
                                        }
                                    }
                                    complete_payment_url = "https://complete.rapyd.net/",
                                    error_payment_url = "https://error.rapyd.net/"
                                }
                            }
                        };
        
                        string request = JsonSerializer.Serialize(requestObj);
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", "/v1/customers", 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 = {
              name: 'John Doe',
              email: 'johndoe@rapyd.net',
              payment_method: [
                {
                  type: 'sg_credit_cup_card',
                  fields: [
                    number: '4111111111111111',
                    expiration_month: '10',
                    expiration_year: '23',
                    cvv: '123',
                    name: 'John Doe'
                  ],
                  complete_payment_url: 'https://complete.rapyd.net/',
                  error_payment_url: 'https://error.rapyd.net/'
                }
              ]
            };
            const result = await makeRequest('POST', '/v1/customers', 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 = [
            "name" => "John Doe",
            "email" => "johndoe@rapyd.net",
            "payment_method" => array(array(
                "type" => "sg_credit_cup_card",
                "fields" => array(array(
                    "number" => "4111111111111111",
                    "expiration_month" => "10",
                    "expiration_year" => "23",
                    "cvv" => "123",
                    "name" => "John Doe"
                )),
                "complete_payment_url" => "https://complete.rapyd.net/",
                "error_payment_url" => "https://error.rapyd.net/"
            ))
        ];
        
        try {
            $object = make_request('post', '/v1/customers', $body);
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        customer = {
            "name": "John Doe",
            "email": "johndoe@rapyd.net",
            "payment_method": {
                "type": "sg_credit_cup_card",
                "fields": {
                    "number": "4111111111111111",
                    "expiration_month": "10",
                    "expiration_year": "23",
                    "cvv": "123",
                    "name": "John Doe"
                },
                "complete_payment_url": "https://complete.rapyd.net/",
                "error_payment_url": "https://error.rapyd.net/"
            }
        }
        result = make_request(method='post',
                              path='/v1/customers',
                              body=customer)
        pprint(result)
Crear una respuesta al cliente

Rapyd devuelve la siguiente respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "acc384b0-1430-4d7d-a2b0-327be9da975a"
            },
            "data": {
                "id": "cus_81da79bf18af36e64b49c1c374faa524",
                "delinquent": false,
                "discount": null,
                "name": "John Doe",
                "default_payment_method": "card_c01d1b10f309884f381cfc499cdfb1ec",
                "description": "",
                "email": "johndoe@rapyd.net",
                "phone_number": "",
                "invoice_prefix": "",
                "addresses": [],
                "payment_methods": {
                    "data": [
                        {
                            "id": "card_c01d1b10f309884f381cfc499cdfb1ec",
                            "type": "sg_credit_cup_card",
                            "category": "card",
                            "metadata": null,
                            "image": "https://iconslib.rapyd.net/checkout/sg_credit_cup_card.png",
                            "webhook_url": "",
                            "supporting_documentation": "",
                            "next_action": "3d_verification",
                            "name": "John Doe",
                            "last4": "1111",
                            "acs_check": "unchecked",
                            "cvv_check": "unchecked",
                            "bin_details": {
                                "type": null,
                                "brand": null,
                                "level": null,
                                "country": null,
                                "bin_number": "411111"
                            },
                            "expiration_year": "23",
                            "expiration_month": "10",
                            "fingerprint_token": "ocfp_e599f990674473ce6283b245e9ad2467",
                            "redirect_url": "https://sandboxcheckout.rapyd.net/3ds-payment?token=payment_178af04b589334ee6406eee7a430e028"
                        }
                    ],
                    "has_more": false,
                    "total_count": 1,
                    "url": "/v1/customers/cus_81da79bf18af36e64b49c1c374faa524/payment_methods"
                },
                "subscriptions": null,
                "created_at": 1668353979,
                "metadata": {},
                "business_vat_id": "",
                "ewallet": "",
                "network_reference_id": 962926,
                "complete_payment_url": "https://complete.rapyd.net/",
                "error_payment_url": "https://error.rapyd.net/"
            }
        }

Para definir un tipo de producto servicios, ejecute Crear producto con los siguientes parámetros:

Descripción de los parámetros del cuerpo

Parámetro del cuerpo

Descripción

name

Introduzca el nombre de su producto, Acme Music Stream.

type

Introducir servicios.

Crear solicitud de producto
    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/products
        
        // Message body: 
        {
          "name": "Acme Music Stream",
          "type": "services"
        }
    • .NET Core

      • using System;
         using System.Text.Json;
        
         namespace RapydApiRequestSample
         {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            name = "Acme Music Stream",
                            type = "services",
                        };
        
                        string request = JsonSerializer.Serialize(requestObj);
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", "/v1/products", 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 = {
              name: 'Acme Music Stream',
              type: 'services'
            };
            const result = await makeRequest('POST', '/v1/products', 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 = [
            "name" => "Acme Music Stream",
            "type" => "services"
        ];
        
        try {
            $object = make_request('post', '/v1/products', $body);
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        product = {
            "name": "Acme Music Stream",
            "type": "services"
        }
        
        results = make_request(method='post',
                               path=f'/v1/products',
                               body=product)
        pprint(results)
Crear respuesta de producto

Rapyd devuelve la siguiente respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "1f5c173f-fc9a-4d11-9fd3-de91419b5ab7"
            },
            "data": {
                "id": "product_3f22f9ef6eb18894e95127e5bb8e0c9d",
                "active": true,
                "attributes": [],
                "created_at": 1668432691,
                "description": "",
                "images": [],
                "metadata": {},
                "name": "Acme Music Stream",
                "package_dimensions": {
                    "height": 0,
                    "length": 0,
                    "weight": 0,
                    "width": 0
                },
                "shippable": false,
                "skus": [],
                "statement_descriptor": "",
                "type": "services",
                "unit_label": "",
                "updated_at": 1668432691
            }
        }

La sección data de esta respuesta muestra que:

  • El producto id para su producto es product_3f22f9ef6eb18894e95127e5bb8e0c9d. Cuando ejecute este ejemplo en su propia zona de pruebas, obtendrá un ID diferente, que necesitará para el siguiente paso.

  • El name del producto es Acme Music Stream.

  • El type del producto es servicios.

El plan define la estructura de precios de su producto. Puede definir diferentes planes para el mismo producto, por ejemplo, básico o premium, con tarifas diferentes. Para este caso práctico, ejecute Crear plan con los siguientes parámetros:

Descripción de los parámetros de cuerpo

Parámetro del cuerpo

Descripción

amount

Introduzca 3.00 como monto mensual del plan.

currency

Introduzca SGD como código de moneda del dólar de Singapur.

interval

Introduzca mes como intervalo del ciclo de facturación.

product

Introduzca el ID que recibió al crear el producto en su sandbox. En este caso, estamos usando product_3f22f9ef6eb18894e95127e5bb8e0c9d, que es para el producto que creamos en nuestra sandbox.

nickname

Introduzca Transmisión básica como nombre del plan.

usage_type

Introduzca licenciado como tipo de uso. Al cliente se le factura una tarifa fija, incluso cuando no se utiliza el servicio.

Para ver otras opciones, consulte Create Plan.

Crear solicitud de plan
    • Solicitud

      • // Request URL: POST https://sandboxapi.rapyd.net/v1/plans
        
        // Message body
        {
            "currency": "SGD",
            "interval": "month",
            "product": "product_3f22f9ef6eb18894e95127e5bb8e0c9d",
            "amount": 3,
            "nickname": "Basic Streaming",
            "usage_type": "licensed"
        }
        
    • .NET Core

      • using System;
         using System.Text.Json;
        
         namespace RapydApiRequestSample
         {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            currency = "SGD",
                            interval = "month",
                            product = "product_3f22f9ef6eb18894e95127e5bb8e0c9d",
                            amount = 3,
                            nickname = "Basic Streaming",
                            usage_type = "licensed",
                        };
        
                        string request = JsonSerializer.Serialize(requestObj);
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", "/v1/plans", 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 = {
              currency: 'SGD',
              interval: 'month',
              product: 'product_3f22f9ef6eb18894e95127e5bb8e0c9d',
              amount: 3,
              nickname: 'Basic Streaming',
              usage_type: 'licensed'
            };
            const result = await makeRequest('POST', '/v1/plans', 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 = [
            "currency" => "SGDSGD",
            "interval" => "month",
            "product" => "product_3f22f9ef6eb18894e95127e5bb8e0c9d",
            "amount" => 3,
            "nickname" => "Basic Streaming",
            "usage_type" => "licensed"
        ];
        
        try {
            $object = make_request('post', '/v1/plans', $body);
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        # Create Plan request
        plan = {
            "currency": "SGD",
            "interval": "month",
            "product": "product_3f22f9ef6eb18894e95127e5bb8e0c9d",
            "amount": 3,
            "nickname": "Basic Streaming",
            "usage_type": "licensed"
        }
        result = make_request(method='post',
                              path='/v1/plans',
                              body=plan)
        pprint(result)
Crear respuesta al plan

Rapyd devuelve la siguiente respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "935d04de-51b9-4869-a68c-76692ce5387a"
            },
            "data": {
                "id": "plan_5487c8a5be1dd847de7da4ce8feebfab",
                "aggregate_usage": "sum",
                "amount": 3,
                "billing_scheme": "per_unit",
                "created_at": 1668432810,
                "currency": "SGD",
                "interval": "month",
                "interval_count": 1,
                "metadata": {},
                "product": {
                    "id": "product_3f22f9ef6eb18894e95127e5bb8e0c9d",
                    "active": true,
                    "attributes": [],
                    "created_at": 1668432691,
                    "description": "",
                    "images": [],
                    "metadata": {},
                    "name": "Acme Music Stream",
                    "package_dimensions": {
                        "height": 0,
                        "length": 0,
                        "weight": 0,
                        "width": 0
                    },
                    "shippable": false,
                    "skus": [],
                    "statement_descriptor": "",
                    "type": "services",
                    "unit_label": "",
                    "updated_at": 1668432691
                },
                "nickname": "Basic Streaming",
                "tiers": [],
                "tiers_mode": "",
                "transform_usage": {
                    "divide_by": 1,
                    "round": "up"
                },
                "trial_period_days": 0,
                "usage_type": "licensed"
            }
        }

La sección de datos de esta respuesta muestra que Rapyd creó un ID para el plan Streaming básico y vincularlo al producto. El ID del plan es plan_5487c8a5be1dd847de7da4ce8feebfab. Cuando ejecute este ejemplo en su propio sandbox, obtiene un ID diferente, que necesitará para el siguiente paso.

El último paso del proceso es crear la suscripción en sí. Aquí, se vinculan todos los elementos necesarios (el cliente, el producto, el plan) y se configura la suscripción para que continúe indefinidamente. Para cancelar la suscripción en un momento específico, consulte Subscription. Este caso de uso utiliza la API, pero puede crear la suscripción con una página alojada. Crear una suscripción mediante Crear una suscripción por página alojada.

Ejecute Crear suscripción con los siguientes parámetros:

Descripción de los parámetros del cuerpo

Parámetro del cuerpo

Descripción

customer

Introduzca el ID que recibió cuando creó el cliente en su sandbox. En este caso, estamos usando cus_81da79bf18af36e64b49c1c374faa524 que es el identificador del cliente que hemos creado en nuestra sandbox. Como no mencionamos explícitamente ningún método de pago, la API utilizará el método de pago predeterminado del cliente.

Para usar un método de pago que no sea el predeterminado, configure payment_method. Subscription.

billing

Introduzca pag_automatically .

subscription_items

Introduzca una matriz que contenga solo un objeto. El objeto contiene los siguientes campos:

  • plan : Introduzca el ‘ID’ del plan que recibió cuando lo creó en su sandbox. En este caso, estamos usando plan_5487c8a5be1dd847de7da4ce8feebfab, que es el ID del plan que hemos creado para nuestra sandbox.

  • quantity: Introduzca 1, ya que su cliente se está suscribiendo a una instancia de este plan (por ejemplo).

Crear solicitud de suscripción

Solicite a Rapyd que cree una suscripción para su cliente.

    • Solicitud

      • // Request URL: POST /v1/payments/subscriptions/
        
        // Message body: 
        {
                "customer": "cus_81da79bf18af36e64b49c1c374faa524",
                "billing": "pay_automatically",
                "subscription_items": [
            {
                                "plan": "plan_5487c8a5be1dd847de7da4ce8feebfab",
                                "quantity": 1
                        }
                ]
        }
    • .NET Core

      • using System;
         using System.Text.Json;
        
         namespace RapydApiRequestSample
         {
            class Program
            {
                static void Main(string[] args)
                {
                    try
                    {
                        var requestObj = new
                        {
                            customer = "cus_81da79bf18af36e64b49c1c374faa524",
                            billing = "pay_automatically",
                            subscription_items = new Object[]
                            {
                                new
                                {
                                    plan = "plan_5487c8a5be1dd847de7da4ce8feebfab",
                                    quantity = 1
                                }
                            }
                        };
        
                        string request = JsonSerializer.Serialize(requestObj);
        
                        string result = RapydApiRequestSample.Utilities.MakeRequest("POST", "/v1/payments/subscriptions", 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 = {
              customer: 'cus_81da79bf18af36e64b49c1c374faa524',
              billing: 'pay_automatically',
              subscription_items: [
                {
                  plan: 'plan_5487c8a5be1dd847de7da4ce8feebfab',
                  quantity: 1
                }
              ]
            };
            const result = await makeRequest('POST', '/v1/payments/subscriptions', 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 = [
            "customer" => "cus_81da79bf18af36e64b49c1c374faa524",
            "billing" => "pay_automatically",
            "subscription_items" => array(array(
                "plan" => "plan_5487c8a5be1dd847de7da4ce8feebfab",
                "quantity" => 1
            ))
        ];
        
        try {
            $object = make_request('post', '/v1/payments/subscriptions', $body);
            var_dump($object);
        } catch (Exception $e) {
            echo "Error: $e";
        }
        ?>
    • Python

      • from pprint import pprint
        
        from utilities import make_request
        
        subscription = {
            "customer": "cus_81da79bf18af36e64b49c1c374faa524",
            "billing": "pay_automatically",
            "subscription_items": [
                {
                    "plan": "plan_5487c8a5be1dd847de7da4ce8feebfab",
                    "quantity": 1
                }
            ]
        }
        result = make_request(method='post',
                              path='/v1/payments/subscriptions',
                              body=subscription)
        pprint(result)
Crear respuesta de suscripción

Rapyd devuelve la siguiente respuesta.

    • Respuesta

      • {
            "status": {
                "error_code": "",
                "status": "SUCCESS",
                "message": "",
                "response_code": "",
                "operation_id": "423028d6-5bc5-429d-9d59-049a3967ccfa"
            },
            "data": {
                "id": "sub_c1388d28c46c4cf853655a5a822e5e46",
                "billing": "pay_automatically",
                "billing_cycle_anchor": 1668432892,
                "created_at": 1668432892,
                "customer_token": "cus_81da79bf18af36e64b49c1c374faa524",
                "days_until_due": 30,
                "metadata": {},
                "tax_percent": 0,
                "cancel_at_period_end": false,
                "canceled_at": null,
                "current_period_end": 1671024892,
                "current_period_start": 1668432892,
                "discount": null,
                "ended_at": null,
                "subscription_items": {
                    "data": [
                        {
                            "id": "subi_b4b55ddb6c854be912cceeb4d95ed1a4",
                            "created": 1668432892,
                            "metadata": null,
                            "quantity": 1,
                            "plan": {
                                "id": "plan_5487c8a5be1dd847de7da4ce8feebfab",
                                "aggregate_usage": "sum",
                                "amount": 3,
                                "billing_scheme": "per_unit",
                                "created_at": 1668432810,
                                "currency": "SGD",
                                "interval": "month",
                                "interval_count": 1,
                                "metadata": {},
                                "product": "product_3f22f9ef6eb18894e95127e5bb8e0c9d",
                                "nickname": "Basic Streaming",
                                "tiers": [],
                                "tiers_mode": "",
                                "transform_usage": {
                                    "divide_by": 1,
                                    "round": "up"
                                },
                                "trial_period_days": 0,
                                "usage_type": "licensed"
                            }
                        }
                    ],
                    "has_more": false,
                    "total_count": 0,
                    "url": "/v1/subscription_items?subscription=sub_c1388d28c46c4cf853655a5a822e5e46"
                },
                "status": "active",
                "trial_end": null,
                "trial_start": null,
                "payment_method": "card_c01d1b10f309884f381cfc499cdfb1ec",
                "payment_fields": null,
                "payout_fields": null,
                "type": "payment"
            }
        }

La sección de datos de esta respuesta muestra:

  • El Id de la suscripción es sub_c1388d28c46c4cf853655a5a822e5e46. Cuando ejecute este ejemplo en su propia sandbox, obtendrá un ID diferente.

  • Se cobrarán 3,00 SGD al mes, al método de pago del cliente hasta que se cancele la suscripción.