2020/06/16
PythonでStripeのSubscriptionを実装してみた
概要
WebサイトにStripeを使った決済を導入することになりました。
以前の記事では、クライアント側の実装を中心に実施しましたが、
今回はサーバーサイドがメインです。
サーバーはPythonで実装しているため、Pythonの本家のSDKを使って実装してみました。
実装内容
install
% poetry add stripe
config
.env
にSTRIPE_SECRET_KEY
という変数名で、stripeのシークレットキーを定義しておきます。- 事前にStripeの価格(Price)と商品(Product)を作成しておき、価格のIDを
.env
に定義しておきます。
実装
流れとしては以下になります。
基本的に本家のドキュメントサイトを参考にして作っています
- 顧客(Customer)データを登録します。
- (クライアント側で作った)PaymentMethodを顧客に紐付ける
- 定期購入(Subscription)データを作り、そこに顧客を紐づける
顧客(Customer)データの登録
stripe.api_key = STRIPE_SECRET_KEY # Stripeのsecret key
stripe_customer = stripe.Customer.create(email=email, name=name)
# stripe_customer["id"] などをDBに保存しておきます。
PaymentMethodを顧客に紐付ける
# Attach the payment method to the customer
stripe.PaymentMethod.attach(
payment_method_id, # client側で作ったものをhttpのformなどで渡す
customer=customer_id # 前述で作った、stripe_customer["id"]
)
# Set the default payment method on the customer
stripe.Customer.modify(
customer_id, # 前述で作った、stripe_customer["id"]
invoice_settings={
"default_payment_method": payment_method_id, # client側で作ったものをhttpのformなどで渡す
},
)
定期購入(Subscription)データを作り、そこに顧客を紐づける
# Create the subscription with first fee(additional invoice items)
# ここでは初回購入時の手数料(一回限りの料金)を追加しています。
add_invoice_items = [{
"price": STRIPE_PRICE_ID_FEE, # 事前に作成した価格のID(一回のみ請求のもの)
"quantity": 1
}]
items = [{
"price": STRIPE_PRICE_ID_MONTHLY # 事前に作成した価格のID(月額課金用)
}]
subscription = stripe.Subscription.create(
customer=customer_id,
items=items,
add_invoice_items=add_invoice_items,
expand=["latest_invoice.payment_intent"],
)
こちらを連結させると、ユーザーがクレジットカードを使ってSubscriptionを簡単に作成することができました。
以上になります。
関連する記事
[Python]ハイフンなし電話番号からハイフン付きに復元
Pythonでハイフンなしの日本の電話番号をハイフン付きのものに変換する
[Python]BeautifulSoup4でhtmlの解析
BeautifulSoup4というPythonのライブラリを使って、特定のURLのコンテンツを取得し、タイトルや説明文を取得できるようにしました。
[Python]銀行コードと支店コードの取扱
Pythonで銀行コード、支店コードデータを取り扱う便利なライブラリzengin-codeを導入しました。
Sendgridを使ってメールの受信を行う
Inbound Email Parse Webhookという機能を利用してメールを受信したらWebhookを呼び出すようにしました