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

Tu 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 tu producto y un método de pago.
El back-end de su sitio web le pide a Rapyd que cree un perfil de cliente.
Rapyd crea el perfil y le asigna un identificador único.
Paso 1: Crear un producto

Tú defines el producto que ofreces.
El back-end de su sitio web le pide a Rapyd que cree un producto del tipo «servicio».
Rapyd crea el producto y devuelve un identificador de producto.
Paso 2: Crea un plan

Tú determinas la estructura de precios que deseas para el pago periódico.
El back-end de su sitio web le pide a Rapyd que cree el plan.
Rapyd crea el plan y devuelve un identificador del plan.
Paso 3: Crear la suscripción

Tú decides los parámetros que necesitas para el pago periódico.
El back-end de tu sitio web le pide a Rapyd que cree una suscripción para el cliente.
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
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¤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"; } ?>
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}¤cy={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:
|
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
idporque 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 pasoEl producto
nombrees Acme Music Stream.El producto
tipoes 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 |
facturación | Entrar pag_automatically . |
elementos_de_suscripción | Introduzca una matriz que contenga solo un objeto. El objeto contiene los siguientes campos:
|
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
Idsi la suscripción es sub_c1388d28c46c4cf853655a5a822e5e46. Cuando ejecutes este ejemplo en tu propia zona de pruebas, obtendrás un ID diferenteSe cobrarán 3,00 SGD al mes al método de pago del cliente hasta que se cancele la suscripción.