###今回初めて投稿することになったきっかけ
stripeに日本語の情報が少なかったので、少しでも誰かの役に立てばと思いシェアさせていただきます。
間違っている箇所・改良点などあれば教えていただければ幸いです。
###Stripeとは
オンライン決済(今回はクレカ)を提供しているグローバル企業
インターネット向け決済インフラ スタートアップから大規模企業まで、あらゆる規模の多数の企業が Stripe ソフトウェアと API を使用して支払いを受け付け、入金し、オンラインでビジネスを管理しています。 Stripe はサンフランシスコとダブリンに本社を置き、ロンドン、パリ、シンガポール、東京などにオフィスを開設しています。 [Stripe公式サイト(日本語)](https://stripe.com/jp)####サポート
日本語のサポートは、メール(24h以内の返信)のみ。現在電話サポートはなし
英語でならチャットサポートがある
※Stripe公式API(英語のみ)
####開発環境
ruby: 2.6.5
rails: 6.0.0
mysql: 5.7
gem: stripe
stripe connectのアカウントタイプ: Express
API通信のため、https環境(thin, ngrokなど)
###Stripe Connectでプラットフォームをつくると何ができるか
アマゾンのように、出店している会社とユーザーとの取引から、簡単にオンライン決済でマージンを取ることができる
(destination_chargeという方法)
####構想
プラットフォーム型のサービス(例:amazon, メルカリ, 楽天, etc...)
イメージは、以下のレンタカーのポータルサイトのような感じ
https://www.expedia.co.jp/Car-Rentals-In-Portal.d55910.Travel-Guide-Cars
プラットフォーム(がいて、各出店者がそこに登録して商品を展開している
####API keyの設定(テスト環境と本番環境で)
####stripe上でのステータス遷移
# stripe connectアカウント作成(email,nameで)
stripe_account = Stripe::Account.create({
type: 'express',
country: 'JP',
email: params[:email],
capabilities: {
card_payments: {requested: true},
jcb_payments: {requested: true},
transfers: {requested: true},
},
business_profile: {
name: params[:stripe_name], # Stripeでの表示名(法人名がわかりやすいか)
},
})
# カード情報をトークンに(stripeが用意しているtestカード情報)
Stripe::Token.create({
card: {
number: '4242424242424242',
exp_month: 3,
exp_year: 2022,
cvc: '314',
},
})
# customer作成
customer = Stripe::Customer.create({ object: "customer", name: reservation.name })
# customerにカード情報追加
Stripe::Customer.create_source(
customer.id,
{source: card_token.id },
)
# 更新したcustomerを再代入
customer = Stripe::Customer.retrieve(customer.id)
# 仮払い作成
payment_intent = Stripe::PaymentIntent.create({
payment_method_types: ['card'],
amount: 1000,
currency: 'jpy',
application_fee_amount: 123, # 洗家の手数料
customer: customer.id,
payment_method: customer.default_source # card_id
transfer_data: {
destination: company.stripe_id,
},
})
# この段階で、paymentIntent.status = requires_confirmation
Stripe::PaymentIntent.confirm(
payment_intent.id,
)
# この段階で、paymentIntent.status = requires_capture
Stripe::PaymentIntent.capture(
payment_intent.id,
)