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 importe es siempre el mismo.

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

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

Un cliente quiere usar tu 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.

Requisito previo

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. Tu 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 tu producto y un método de pago.

  2. El back-end de su sitio web le pide a Rapyd que cree un perfil de cliente.

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

Paso 1: Crear un producto
643e7dc299474.png
  1. Tú defines el producto que ofreces.

  2. El back-end de su sitio web le pide a Rapyd que cree un producto del tipo «servicio».

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

Paso 2: Crea un plan
643e7dc3c28d2.png
  1. Tú determinas la estructura de precios que deseas para el pago periódico.

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

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

Paso 3: Crear la suscripción
643e7dc5213bb.png
  1. Tú decides los parámetros que necesitas para el pago periódico.

  2. El back-end de tu sitio web le pide a Rapyd que cree una suscripción para el cliente.

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

Al final de cada período de facturación, Rapyd cobra el importe adeudado y lo añade a tu monedero.

Los siguientes diagramas de secuencia de mensajes describen cómo se intercambia la información entre Rapyd, el comerciante 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 tienes un cliente con un método de pago, puedes saltar a Crear producto.

En primer lugar, debes determinar qué métodos de pago singapurenses admiten pagos en dólares de Singapur (SGD). Corre 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 de lista de 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";
        }
        ?>
    • Pitón

      • 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)
        
Lista de métodos de pago por país Respuesta

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

    • 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 tu sitio web o una página alojada en Rapyd, muestras 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 el método de pago: campos obligatorios. En este caso de uso, nuestro cliente eligió UnionPay.

Descripción de los parámetros de ruta

Parámetro de ruta

Descripción

tipo

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

Obtener el método de pago Campos obligatorios Solicitud
    • 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";
        }
        ?>
    • Pitón

      • 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 el método de pago Campos obligatorios Respuesta

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

    • 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, consulta la descripción de los campos en la respuesta a «Obtener campos obligatorios sobre el método de pago

Crea el perfil del cliente con todos los parámetros necesarios 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 corporal

Descripción

nombre

El nombre de su cliente.

correo electrónico

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

método_pago

Un objeto que contiene lo siguiente:

  • tipo - cadena - El código del método de pago, en este caso, sg_credit_cup_card.

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

Nota

Si estás creando un método de pago con tarjeta y no tienes 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 Crea un token de tarjeta, luego establece 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";
        }
        ?>
    • Pitón

      • 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)
Crea 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, corre Crear producto con los siguientes parámetros:

Descripción de los parámetros corporales

Parámetro corporal

Descripción

nombre

Introduce el nombre de tu producto, Acme Music Stream.

tipo

Entrar 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";
        }
        ?>
    • Pitón

      • 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
            }
        }

El datos la sección de esta respuesta muestra que:

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

  • El producto nombre es Acme Music Stream.

  • El producto tipo es servicios.

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

Descripción de los parámetros corporales

Parámetro corporal

Descripción

cantidad

Entrar 3.00 como importe mensual del plan.

moneda

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

intervalo

Entrar mes como intervalo del ciclo de facturación.

producto

Introduce el identificador que recibiste al crear el producto en tu sandbox. En este caso, estamos usando product_3f22f9ef6eb18894e95127e5bb8e0c9d, que es para el producto que creamos en nuestra caja de pruebas.

apodo

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

tipo_de_uso

Entrar licenciado como tipo de uso. Al cliente se le factura una tarifa plana, 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";
        }
        ?>
    • Pitón

      • 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ó una ID para el Streaming básico planificarlo y vincularlo al producto. El identificador del plan es plan_5487c8a5be1dd847de7da4ce8feebfab. Cuando ejecutas este ejemplo en tu propia zona de pruebas, obtienes un ID diferente, que necesitarás 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, consulta Subscription. Este caso de uso utiliza la API, pero puedes crear la suscripción con una página alojada. Crear una suscripción mediante Crear una suscripción por página alojada.

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

Descripción de los parámetros corporales

Parámetro corporal

Descripción

cliente

Introduce el ID que recibiste cuando creaste el cliente en tu sandbox. En este caso, estamos usando cus_81da79bf18af36e64b49c1c374faa524que es el identificador del cliente que hemos creado en nuestra zona de pruebas. 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.

facturación

Entrar pag_automatically .

elementos_de_suscripción

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

  • planificar - Introduce el «identificador» del plan que recibiste cuando lo creaste en tu entorno de pruebas. En este caso, estamos usando plan_5487c8a5be1dd847de7da4ce8feebfab, que es el ID del plan que hemos creado para nuestra zona de pruebas.

  • cantidad - Ingresar 1, ya que su cliente se está suscribiendo a una instancia de este plan (por ejemplo).

Crear solicitud de suscripción

Solicita a Rapyd que cree una suscripción para tu 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";
        }
        ?>
    • Pitón

      • 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 si la suscripción es sub_c1388d28c46c4cf853655a5a822e5e46. Cuando ejecutes este ejemplo en tu propia zona de pruebas, obtendrás 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.