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

Su sitio web consulta a Rapyd para conocer los métodos de pago disponibles en Singapur.
Rapyd devuelve una lista de métodos de pago.
Su sitio web ofrece una lista de opciones a sus clientes.
Parte 2: Crear un perfil de cliente

El cliente selecciona su producto y un método de pago.
El back-end de la página web le pide a Rapyd que cree un perfil de cliente.
Rapyd crea el perfil y le asigna un ID único.
Paso 1: Crear un producto

Usted define el producto que ofrece.
El back-end de su página web le pide a Rapyd que cree un producto del tipo ‘servicio’.
Rapyd crea el producto y devuelve un ID de producto.
Paso 2: Crear un plan

Usted determina la estructura de precios que desea para el pago periódico.
El back-end de su página web le pide a Rapyd que cree el plan.
Rapyd crea el plan y devuelve un ID del plan.
Paso 3: Crear la suscripción

Usted decide los parámetros que necesita para el pago periódico.
El back-end de su página web le pide a Rapyd que cree una suscripción para el cliente.
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
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¤cy=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}¤cy={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¤cy=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¤cy=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}¤cy={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. |
La dirección de correo electrónico de su cliente. | |
payment_method | Un objeto que contiene lo siguiente:
|
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
idpara 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
namedel producto es Acme Music Stream.El
typedel 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 |
billing | Introduzca pag_automatically . |
subscription_items | Introduzca una matriz que contenga solo un objeto. El objeto contiene los siguientes campos:
|
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
Idde 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.