[nodejs][stripe] 使用 Node.js 实现 Stripe(创建定期订阅支付)
我们假设客户已经完成注册,现在让我们创建一个订阅(定期支付计划)。
客户的注册方式在以下链接中进行了解,请一并阅读。
使用 Node 来使用 Stripe(注册客户信息)。
请提供参考网址
-
- API Reference
-
- Subscriptions Quickstart
-
- Upgrading and Downgrading Plans
-
- Stripe Subscription (定期支払い)101 – Part 1
- 日本正式リリースしたStripeを使ってサブスクリプション型決済システムを実装する
使用方法
由于示例代码的错误处理可能较为简单,请根据需要进行适当修改。
创建定期支付计划
让我们制定一个定期支付计划。很简单。
每月1500日元的定期支付计划可以像这样创建。
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var params = {
amount: 1500, // 金額
interval: "month", // インターバル
name: "Micro Plan", // プラン名称
currency: "jpy", // 通貨
id: "micro" // プランID
};
stripe.plans.create(params, function(err, plan) {
console.log(plan);
});
{
"id": "micro",
"object": "plan",
"amount": 1500,
"created": 1488801118,
"currency": "jpy",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
},
"name": "Micro Plan",
"statement_descriptor": null,
"trial_period_days": null
}
如果你认为只需要创建一次计划,并且不需要编写代码,那么你可以在Stripe仪表盘中创建。但是,Stripe仪表盘只能导出计划信息到CSV文件,不能导入,所以在测试环境和正式环境都需要创建,这样比较麻烦,所以最好还是用脚本来编写好。
将定期支付计划与客户进行绑定。
当顾客签订了定期支付计划后,从首次账单日开始,我们将按照设定的间隔定期向顾客的信用卡进行收费。
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var params = {
customer: 'cus_xxxxxxxxxxxxxx', // stripe の customer id
plan: 'micro', // stripe.plans.create() で作成した plan の ID
tax_percent: 8.0 // 消費税率
};
// プランの存在確認(別にしなくてもいいかもだけど、一応)
stripe.plans.retrieve(params.plan, function(err, plan) {
if (err) {
console.log(err);
} else {
// サブスクリプションの作成
stripe.subscriptions.create(params, function(err, subscription){
console.log(subscription);
});
}
});
{
"id": "sub_xxxxxxxxxxxxxx",
"object": "subscription",
"application_fee_percent": null,
"cancel_at_period_end": false,
"canceled_at": null,
"created": 1488879267,
"current_period_end": 1491557667,
"current_period_start": 1488879267,
"customer": "cus_xxxxxxxxxxxxxx",
"discount": null,
"ended_at": null,
"items": {
"object": "list",
"data": [
{
"id": "si_xxxxxxxxxxxxxxxxxxxxxxxx",
"object": "subscription_item",
"created": 1488879268,
"plan": {
"id": "micro",
"object": "plan",
"amount": 1500,
"created": 1488801118,
"currency": "jpy",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
},
"name": "Micro",
"statement_descriptor": null,
"trial_period_days": null
},
"quantity": 1
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/subscription_items?subscription=sub_xxxxxxxxxxxxxx"
},
"livemode": false,
"metadata": {
},
"plan": {
"id": "micro",
"object": "plan",
"amount": 1500,
"created": 1488801118,
"currency": "jpy",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
},
"name": "Micro",
"tax_percent": 8,
"statement_descriptor": null,
"trial_period_days": null
},
"quantity": 1,
"start": 1488879267,
"status": "active",
"tax_percent": null,
"trial_end": null,
"trial_start": null
}
将subscription.id存储在某个地方。
在之后,可以用来进行订阅计划更改或取消。
更改定期付款计划。
当你想从每月1500日元的Micro计划更改为每月3000日元的Small计划时,你可以使用subscriptions.update()进行合约变更。
如果有差额产生,他们会在下次账单时自动进行按比例结算或相互抵消。
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var subscription_id = 'sub_xxxxxxxxxxxxxx';
var params = {
plan: 'small', // stripe.plans.create() で作成した plan の ID
tax_percent: 8.0 // 消費税率
};
// プランの存在確認
stripe.plans.retrieve(params.plan, function(err, plan) {
if (err) {
console.log(err);
} else {
// サブスクリプションの更新
stripe.subscriptions.update(subscription_id, params, function(err, subscription){
console.log(subscription);
});
}
});
回复是一个订阅对象,但由于与创建时相同,所以省略。
取消定期付款计划
遗憾地,当发生合同解除时,解约程序会是这样的。
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var subscription_id = 'sub_xxxxxxxxxxxxxx';
var customer_id = 'cus_xxxxxxxxxxxxxx';
// サブスクリプションの存在確認
stripe.subscriptions.retrieve(subscription_id, function(err, subscription) {
if (err) {
// サブスクリプション探したけど、なんかエラーあったで
console.log(err);
} else if (subscription.customer != customer_id ) {
// 別のお客さんのサブスクリプションやで、勝手に解約しないで
} else {
// サブスクリプションの解約
stripe.subscriptions.del(subscription_id, function(err,confirmation){
console.log(confirmation);
});
}
});
获取客户已订阅的定期付款计划清单
要选择有效的定期付款计划,可以按以下方式处理。
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var params = {
customer: 'cus_xxxxxxxxxxxxxx',
status: 'active'
};
stripe.subscriptions.list(params, function(err, subscriptions){
console.log(subscriptions);
});
{
"object": "list",
"url": "/v1/subscriptions",
"has_more": false,
"data": [
{..(subscription)..},
{...}
]
}