1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rails6で、Stripe Connectでプラットフォームでオンライン決済の導入方法

Posted at

###今回初めて投稿することになったきっかけ
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上でのステータス遷移

some_model.rb

      # 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,
      )

github_stripe/stripe-ruby

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?