るいすときのこの物語

オタクエンジニアの雑記

個人サービスに定額課金を超手軽に導入する「Stripe」


f:id:rarirureluis:20181228193424p:plain

概要

個人サービスで開発しているサービスに定額課金を試しに導入してみたくて、Stripe を使ってみたら最高に簡単に導入できたので紹介したいと思います。
uploader.xzy.pw

Stripe

決済プラットフォームです。PayPal もそうです。
今回 PayPal を使わなかった理由は、何となく。

PayPal は非公式の Golang SDK がありますが、Stripe は公式で OSS として公開されてる。
github.com

顧客の作成

func createCustomer(email, source string) (string, error) {
	stripe.Key = "sk_live_VYX..."

	params := &stripe.CustomerParams{
		Description: stripe.String("EasyUploader 500yen/monthly"),
		Email:       stripe.String(email),
	}
	params.SetSource(source)

	cstm, err := customer.New(params)
	if err != nil {
		return "", err
	}

	return cstm.ID, nil
}

定額課金プランと顧客を紐付ける

func createSubscription(email, source string) (*stripe.Subscription, error) {
	customerID, err := createCustomer(email, source)
	if err != nil {
		return nil, err
	}

	stripe.Key = "sk_live_VYX..."

	item := []*stripe.SubscriptionItemsParams{
		{
			Plan: stripe.String("plan_DxSjmnGEQEFA33"),
		},
	}

	params := &stripe.SubscriptionParams{
		Customer: stripe.String(customerID),
		Items:    item,
	}

	sbscrptn, err := sub.New(params)
	if err != nil {
		return nil, err
	}

	return sbscrptn, err
}

定額課金をキャンセル

func unSubscription(subscriptionID string) (error) {
	stripe.Key = "sk_live_VYX..."

	_, err := sub.Cancel(subscriptionID, nil)
	return err
}

subscriptionID は DB に保存しておいて、そっから持ってくる。