Stripe Connectを2年程使ってみた話

この記事はトレタ Advent Calendar 2019 の8日目の記事です。

こんにちは！トレタに就職して1ヶ月半の榊原です！
今季の話は入社して間もないトレタは一切関係なく、別の企業で2年程度使用していたStripeの話をしていこうと思います。
内容は今年の8月頃までの内容を元にしているので、現在は変更があった場合はご指摘いただけると幸いです。


## Stripeとは
インターネットビジネスのための、オンライン決済代行サービスです。
類似サービスだと、Pay.jpやベリトランス、Softbank paymentなどがあります。

PayPayやLinePayとは違ってオンライン決済を中心としているサービスです。

Stripeは最近採用している企業が増えてきて、ユーザコミュニティも活発になってきています。
> https://www.facebook.com/groups/1826257457627959/

## 何ができるの？
ECサイトのお金周りで必要なことはほぼ全てできます。
簡単なところで言うと、
* BtoC 向けの決済
* BtoBtoC 向けの決済、入金
* サブスクリプションサービス向けの定期支払い
* クーポン機能の標準搭載
* 領収書を自動で生成できる
などなど

手軽に決済サービスを開発する事ができます。

今回はStripe Connectのお金の流れを図式化している記事やドキュメントがなさそうだったので
BtoBtoC向けの「Stripe Connect」について書かせていただきます。

## Stripe Connect
### Stripe Connectとは
BtoCの様な、自分たちのサービスからユーザに対してのお金のやり取りだけでなく
BtoBtoCやCtoBtoCの、シェアリングエコノミーやクラウドファンディングでよく用いられるサービス形態に用いられる決済方法です。
<img width="429" alt="スクリーンショット 2019-12-09 23.34.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104622/14c3f892-7a3e-e20e-6148-daba9bce162e.png">


## 登場人物
登場人物はBtoBtoCのサービスを想定して
* 自社サービス
* ユーザ
* 企業
の3つで、それぞれ白の四角で図式化しました。

また、背景の色は
紫色の背景: Stripeのサービス上での出来事
黄色の背景: リアル世界での出来事
です。

<img width="540" alt="スクリーンショット 2019-12-09 23.33.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104622/1c56658e-ef12-c28e-1691-bfd1899d73ad.png">


## 実際のお金の流れ
### 想定するストーリ
想定するストーリーは企業は出品した500円の品をユーザが購入するという流れです。

詳細に記述すると下記の様な事があります。
* ユーザが500円で企業の商品を購入します
* 自社サービス上での決済なので、手数料を1回辺り150円とります
* 企業には一月に一回銀行口座に入金をします


### 決済の流れ
<img width="528" alt="スクリーンショット 2019-12-09 23.34.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104622/b9f42ba1-bd58-8694-87ef-7bd599537b2f.png">


それぞれ一つの処理を行った時や、ユーザなどにはそれぞれIDが発行されます。
例えば決済(Charge)の場合は`ch_[乱数]`
ユーザーID(Customer)の場合は `cus_[乱数]`
の様な物が生成されます。
下記のフローにはにはそれを含めた形で説明してます。

#### ①ユーザが500円で企業の商品を購入
1. ユーザアカウント `cus_oooo` にお金をチャージして、そのお金の情報が格納されているトークン `tok_oooo` を発行します。
2. ユーザアカウント `cus_oooo` から自社サービスに決済する `ch_oooo`
3. この時3.6%の決済手数料が発生します
4. 結果的に自社サービスの口座には482円が入ります。

#### ②自社サービスが企業に送金
1. 企業にお金を送金 `tr_ooooo` します。この時は決済時と違い入力した金額の満額が企業のStripeの口座に入ります。
2. 決済手数料は0.02%です。これは毎月2日に引かれます


#### ③企業は自分の銀行口座にお金を入金
1. 週1回や月1回、銀行口座に自動で入金 `po_oooo` できます
2. この時の手数料は振り込み一回辺り150円です。これも入金の度に自社サービスのStripe口座から引かれます。

## 注意点
ここでいくつか注意点がありますがここでは3つ紹介します。
* 自動入金の場合、月末締めができない
* 企業は代表の氏名や住所が必要
* 自社サービスのStripe口座にはお金を入金できない
* 標準ではJCBで決済はできない
* 引き落とし時の明細を日本語表記するやり方が公式ドキュメントに載っていない

### 自動入金の場合、月末締めができない
自動入金の場合Stripeは入金日は指定はできますが、締め日(時間)を指定できません。

重要なのは、
**入金日の4日前の19時頃〜22時頃が締めになることです**

つまり企業に毎月5日入金にした場合は(仮に20時15分に締めだった場合)
12月1日の20時15分までが12月5日に入金されて
それ以降の時間は1月5日に入金されます。

入金サイクルをStripeに任せず、自社で金額指定の入金APIを叩けば上記の注意点は回避できます。

### 企業は代表者の氏名や住所が必要
どこの決済代行も同じだと思いますが、
企業の場合は登記簿藤本のカラーコピーされた物と代表者の氏名、住所が必要です
個人の場合は本人の免許証などの身分証明書、氏名、住所が必要です。

※ユーザは上記の内容は必要ありません

### 自社サービスのStripe口座にはお金を入金できない
使用する機会は少ないかもしれませんが、
自社サービスのStripe口座にお金は入金することができない、かつ自社のStripe口座よりも多く企業に送金ができないので
Stripe口座にお金があまり入っていない時に、過剰なユーザへのディスカウントをしすぎると
企業へは通常通りの送金を行う事はできない可能性があるので注意しましょう。

### 引き落とし時の明細を日本語表記するやり方が公式ドキュメントに載っていない
Rubyの場合は決済時に下記の様に記述すれば日本語表記になります

```
# アメリカの場合
charge = Stripe::Charge.create({
  :amount => 1000,
  :currency => "jpy",
  :source => "tok_visa",
  :statement_descriptor => "Custom descriptor",
}, :stripe_account => "{CONNECTED_STRIPE_ACCOUNT_ID}")
```

```
# 日本の場合
charge = Stripe::Charge.create({
  :amount => 1000,
  :currency => "jpy",
  :source => "tok_visa",
  :alternate_statement_descriptors => {
    "kana":"ﾃｽﾄ",
    "kanji":"てすと",
  }
  }, :stripe_account => "{CONNECTED_STRIPE_ACCOUNT_ID}")
```

## メリット
厳選すると、下記の事が大きかったと思います。
* Stripeの導入がとっても簡単
* ダッシュボードも直感的で使いやすく、決済以外はほぼダッシュボードで済ませれる
* コミュニティが盛ん

Stripeはコミュニティが盛んかつ、カスタマーサクセスの人にも気軽に聞く事ができるため、困った時にすぐに聞く事ができる環境というのが一番大きいです。

## 最後に
Stripeはとても簡単に、複雑なお金の流れを含んだサービスを開発する事ができます。
注意点は多少あるものの、困った時にすぐに聴ける環境も大きいです。

前まではJCB決済はできませんでしたが、申請すれば使用可能になったので
JCBが使えなかったから使用をためらっていた人もぜひ、新しくサービスを作る際はStripeの導入を検討してみてください！