1. すべてのプラットフォームで動かせるOAuth決済基盤は少ない
OS/ブラウザサポート状況を掴むのは意外と面倒なので、まずはそこをまとめました。- Amazon Pay: たぶんあらゆる環境で動く
- Facebook Pay: たぶんあらゆる環境で動く
- Google Pay: たぶんあらゆる環境で動く
- Google Pay + Payment Request API: Desktop/AndroidのChromeで動作
- Microsoft Pay: Windows/Edgeのみで動作
- Apple Pay: iOS/macOS/watchOS/Safariのみで動作
- Alipay: 正確には不明だが2017年の情報ではChromeは非対応
- WeChat Pay: QRコードなのでデスクトップでは特殊な操作が必要
2. 巨大プラットフォーマーのOAuth決済は結構お金が掛かる
ではGoogle Payが最強なのかというとそうでもない。 最初に調べた時は記載されていないので気付けなかったけど、いざ中の人とやり取りすると実は、みたいなところが色々ありました。 実際掛かる手数料をGoogle Pay以外も含めて、確認が取れているものだけまとめると、こんな感じになります。- Amazon Pay: カード決済基盤に月額3,000円、決済手数料4〜4.5%
- Google Pay: 決済手数料なし、ただしGoogle Playのmerchant IDを通じて販売
- Google Playのmerchant IDは登録手数料25ドル
- 取引手数料は初年度30%、2年目以降 (他にも色々条件あり) 15%
- Apple Pay: Developer Programに登録が必要なので年間99ドル
- iOSアプリでなければ決済手数料30%は取られない
Google PayにはStripeでそのような記載がなかったので、掛からないのかと思ってしまいました。 merchant IDがどのように結び付くのかで調べるべきだったようですね。やり取りの結果、手数料が掛かるとわかりました。 Microsoft Payのmerchant IDももしかしてMicrosoft Store (収益分配率95%) に依存するのかなあと思ったけど、こちらはStripeのドキュメントには追加手数料は掛からないと書いてある。む、難しい…。
3. 自社にカード情報を送信しないで済むOAuth/ログインID決済が良いかも
Google Payは手軽にあらゆる環境をサポートできるので便利ですが、他の決済基盤より高いし、少しレスポンスが悪い問題があります。 またGoogle Payに頼り過ぎになってしまう問題も出てくるでしょう。 無料でもう少し頑張る方法がないかという事になるのですが、実はいくつかの選択肢がある。 Stripe CheckoutとPAY.JP Checkoutです。Stripe CheckoutはログインID決済なのでメールアドレスとクレジットカード番号を収集しないといけないのですが、 それらをStripeが管理してくれる仕組みを用意してくれている。 ログインIDの決済を利用すると基本的に自社サーバ内にデータを保持する必要がありますが、そこをStripeが担保してくれるので手軽に信頼性が高まる。これは嬉しい。 自社に機密情報を持たないで済むぶんだけ若干セキュアなのかなあ。
PAY.JP CheckoutはOAuthなのでカード番号の送信も不要になります。 その場でOAuthでログインしてカード番号を受信して補完し、そして決済するという仕組み。面白い。 たぶんこちらのほうがよりセキュアな仕組みになっていると思います。
これらのサービスは手数料も安いし、APIもオープン、申請も自動化されており、どのような環境でも動くUIを提供してくれており、なおかつ決済が非常にスムーズという、非常に素晴らしい機能を提供してくれています。 私は強大なプラットフォーマーのOAuthのほうが強いかもと最初は思ったけど、こちらのほうが良いかも知れない。 このレベルでサービスを提供してくれれば是非とも使いたくなります。
4. Payment Request APIの実装は全然楽じゃなかった
Payment Request APIを使った決済処理の実装は、実装が一緒で済むから楽そうだと思ったのですが、そんな事はなかった。 実際に実装してみてわかったのは、確かにPayment Request APIの仕様に準拠する部分は実装が楽なのですが、ブラウザに依存する部分の実装はバラバラで、全然楽じゃありません。 コードではnew PaymentRequest()
あたりですかね。
どうせ各ブラウザでしか表示できないUIをサポートするために、仕様が微妙に異なる実装をブラウザ毎に書くのはかなりストレスです。
この問題、またしてもStripeは解決策を用意してくれていて、 Payment Request APIを使う決済処理基盤に対して、Stripe Request Buttonという統一的な仕様とUIを用意してくれている。 基本的には素晴らしいものなのですが、完璧なものという訳でもないんですよねえ。 第一の理由は、そのものの問題ではなく、ストアのロイヤリティがバラバラなせいで利益を圧迫する可能性がある事です。 統一的なUIで表示すると当然ながら価格は同一にしないといけないけど、〜30%のロイヤリティを適当に取られるのは割と面倒だし、勝手に利益率が下がる可能性を抱えるのもちょっとなあ。 といってストアごとに実装するかと言われると面倒過ぎ、Payment Request APIは現状があるべき姿なのかよくわからない。
第二の理由は動かない事があるため。 これはたぶんChrome 70の挙動がめちゃくちゃ変わったのが原因で、Chrome 70以降からブラウザをインストールした人にはボタンが表示されないバグが出てしまっている気がする。 ちょっと正確なバグはよくわからないので、私は偉い人が解決してくれるのを待っている。 他にも例えばMac+Chrome (70-?) でたぶん動かないし、iOSのChromeでもたぶん動かないような問題を認識している。 このようにPayment Request APIは理想は素晴らしいものの、現実では意外とうまく動かない事がわかってきました。つらい。 正直とても対応する気にはなれないし、すべての環境で動くものを使って、時代の流れに身を任せようと思ってます。
このような理由から、私はPayment Request APIには力を入れてません。 デスクトップのPayment Request APIは最初触った時にはなかなかイケていただけに、残念な感じです。 あとちょっと気になるのが、Chromeの chrome://flags です。 これを見るとPayment Request APIではなく、PWA+少額決済に関する本気度を感じられると思うので、一度見てみると良いと思います。 逆にマイクロソフトは自社モバイルOSからiOSやAndroidに乗り換えを推奨しており、Payment Request APIに依存するMicrosoft Payの扱いも少し不安ではある。
5. ブラウザにクレジットカード情報を入れられなくなるかも?
クレジットカードの入力をなくす方法は、OAuthによる決済や、ログインIDによる決済以外にも、ブラウザにカード情報を保存する方法も、選択肢として一応は考えられます。 私はこれも結構便利かなと思っていたのですが、Chrome 70からクレジットカード情報はブラウザ内に記憶しなくなくなりました。 おまけにGoogle Payに登録しているクレジットカードは使えなくなったので、basic-cardの指定は想像以上に使いにくいものに変わってしまった。セキュリティ的には良い改善と思うけど、basic-cardを毎回入力するのはさすがにちょっとね。 今は他のブラウザでは使えるものもあると思いますが、将来的にはもしかすると、ブラウザに記憶はできなくなる事も想定しておく必要がありそうです。
このような実装上の様々な問題はあったものの無事、決済処理の実装は完了し、サービスもリリースする事ができました。 今後もユーザを増やすために、なるべく無料で、より多くの決済基盤に対応していきたいと思っています。 Stripe CheckoutやPAY.JP Checkout的なものをどこかの会社が作ってくれればすぐに採用する予定です。
今のところはAlipayが次の候補に上がりそうだけど、ブラウザのサポート状況を見てという感じである。どこに書いてあるんだろう。 あとAlipayは手数料無料を謳ってるけど、Stripe経由だと手数料は掛かるはず。 手数料を無料にはできないのかな。この辺はきちんと調査していないので、いずれ調査したい。
以上で少額決済全体を俯瞰するお話は終わりですが、Google Pay API + Payment Request APIの実装方法はこちらにまとめておきました。 よろしければこちらもどうぞ。
0 件のコメント:
コメントを投稿