[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)..},
    {...}
  ]
}
广告
将在 10 秒后关闭
bannerAds