LoginSignup
1
1

More than 5 years have passed since last update.

Stripeでプラン情報をまとめて管理する

Posted at

プランの一括作成

stripe.plans.create()でプランを作成できるので、forEachとかでまわせば一気に複数のプランを投入できる。

var stripe_secret = "sk_test_XXXXXXX"
var stripe = require("stripe")(
  stripe_secret
)


var plans = [{
  amount: 5000,
  interval: "month",
  name: "[TypeA]Basic",
  currency: "jpy",
  id: "typea_basic",
  metadata: {
    'cat_description': '基本的なプランです。',
    'cat_name': 'TypeAプラン',
    'transfer': '50GB',
    'site_limits': '1',
    'short_name': 'Basic'
  }
},{
  amount: 50000,
  interval: "month",
  name: "[TypeA]Advanced",
  currency: "jpy",
  id: "typea_advaned",
  metadata: {
    'cat_description': 'ワンランク上のプランです。',
    'cat_name': 'TypeAプラン',
    'transfer': '100GB',
    'site_limits': '2',
    'short_name': 'Advanced'
  }
},{
  amount: 40000,
  interval: "month",
  name: "[TypeB]Advanced",
  currency: "jpy",
  id: "typeb_advaned",
  metadata: {
    'cat_description': 'ワンランク上、サイト数に特化したプランです。',
    'cat_name': 'TypeBプラン',
    'transfer': '50GB',
    'site_limits': '10',
    'short_name': 'Advanced'
  }
}]

plans.forEach(function(plan,i){
  stripe.plans.create(
    plan,
    function(err, customer) {
      if (err) {
        console.log(err)
      }
    }
  )
})

プラン一覧を取得する

stripe.plans.list()を使ってStripeに登録されているプラン情報を取得できる。

var stripe_secret = "sk_test_XXXXXXX"
var stripe = require("stripe")(
  stripe_secret
)


stripe.plans.list(
  {},
  function(err, plans) {
    if (err) {
      console.log(err)
    }
    plans.data.forEach(function(plan, i){
      console.log(plan.name)
      price = plan.amount.toString().replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,')
      console.log(price + ' ' + plan.currency.toUpperCase())
      console.log(plan.metadata.cat_description)
      console.log('')
    })
  }
)

実行結果

$ node index.js
$ node index.js 
[TypeA]Basic
5,000 JPY
基本的なプランです。

[TypeB]Advanced
40,000 JPY
ワンランク上、サイト数に特化したプランです。

[TypeA]Advanced
50,000 JPY
ワンランク上のプランです。

Tips:価格は「数字」+「通貨単位」で返ってくる

価格はplans.data[].amoutに金額が、plans.data[].currencyに通貨単位が入っています。

なので以下のようにしてやることで、40,000 JPYのように表示できます。

price = plan.amount.toString().replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,')
console.log(price + ' ' + plan.currency.toUpperCase())

作成時期で絞り込む

stripe.plan.list()はプランの作成時期で絞り込むことができます。

stripe.plans.list(
  {
    created: {
      gte: 1490092834
    }
  },
  function(err, plans) {
    if (err) {
      console.log(err)
    }
    console.log(plans)
  }
)

createdの中にはgt,gte,lt,lteの4つが使えます。
「新しいプランのみ登録可能にしたい場合」や「まだ申し込みさせたくないプランがある場合」などは、このcreatedを駆使すると良さそうです。

その他

planの中にmetadataとして追加情報を与えることができます。
「metadataの値で検索する」ということはできませんが、「一覧で表示して、そこから選んでもらう」というシンプルなモデルであればStripeのmetadataにプランの情報を詰め込んで管理するのも1つかなと思います。

検索したい場合は・・・

Stripen APIからplanのJSONを取得して、ElasticsearchやDynamoDBあたりにインデックスさせるバッチを裏側でまわしておくといいかなと思います。

個人的にはプランに関する情報は全てStripe側にもたせて、検索や比較などをさせたい時は都度APIから取った値を別サービスに放り込む形が二重管理になりにくくて良いかなという気がします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1