Update2017/4/20決済サービスをStripeに移行しましたEngineeringAuthorkakinokiこんにちは、Webエンジニアの柿木です。スペースマーケットでは、これまで、決済サービスにWebPayを利用していたのですが、WebPayのサービス終了に伴い、Stripeへの移行を行いました。Stripeは、スタートアップから大企業まで様々な企業で導入が進んでいるオンライン決済サービスです。APIで簡単に決済の仕組みを実現できます。(APIリファレンスもすごく見やすい)今回はStripeの実装方法ではなく、主に、どのようにStripeへの移行を進めたかについて、プロジェクト全体の話を書いていきます。Stripe選定の理由まずは、数ある決済サービスの中で、スペースマーケットがStripeをどういった理由で選んだかについてです。Stripeを選定した理由には、以下のようなものがありました。AMEXが利用可能Connectを利用して、ホストへの自動支払いができるStripeにはConnectという自動支払いの仕組みがあります。その仕組みを使って、スペースマーケットでもホストへの売上の入金を自動化したかったというのが1つめの理由です。自動支払いについては、既にスペースマーケットにも組み込まれていますが、詳細については、次回のブログで紹介したいと思います。WebPayからの移行コストが低いWebPayで利用されているライブラリのベースはStripeということもあり、エンドポイントやデータ構造、SDKの使い方も似ていて、WebPayユーザにとっては移行しやすい決済サービスでした。サービス継続力の見込み昨年の大型資金調達もあり、今後、Stripeは全世界にサービスを拡大していくと考えられます。スペースマーケットとしては、サービスの重要な部分である決済について、安定して利用できる決済サービスを選択したいという思いがありました。AMEXが利用可能WebPay上で、スペースマーケットが利用可能なクレジットカードは、VisaとMasterだけだったのですが、Stripeに移行することでAMEXにも対応できるようになりました。(他の事業内容によっては、WebPayでもAMEXを利用できたようです)Stripe移行の流れ続いて、Stripeへの移行の流れについて説明します。移行にあたり、やるべきことは大きく分けて2つでした。Card)ゲストとクレジットカードのデータはスペースマーケットではなく、決済サービス側の管理となります。Stripe間でデータ移行を行ってくれます。スペースマーケットでは、移行した決済サービス上のCustomerとスペースマーケットのゲスト情報との紐付けを行う必要がありました。決済審査に必要なホストのデータ(Account)CtoC決済を行うスペースマーケットでは、スペースを利用される側のホストの情報も決済サービスに登録しておく必要があります。Stripeでは、Accountというオブジェクトで登録します。Stripeに移行する既存のホストは、既にWebPayの店子審査を受けたホストですが、Stripeに登録するには、再度Stripeの審査を全て通す必要がありました。そのため、専用のrakeタスクを作成し、一括で登録作業を行いました。StripeとWebPayでは審査項目が異なるため、Stripe向けの審査項目を追加し、差分データについては、全ホストに対し、情報の登録を促しました。決済部分は、以下の2つを要件として定義しました。(移行予定は当面ないが)今後の移行や他の決済サービス併用にも柔軟に対応できる上記要件から、実装方法としては、決済向けのClassをStrategyパターンのようにし、決済を行いたいサービスを呼び出し元で切り替えました。することで、メソッドの中に決済の処理を溶け込ませて、if分岐で決済サービスを分けるような事態を避けることができました。シンプルに振る舞いを分けられるので、移行期間中の分岐も、今後のサービスの拡張にも柔軟に対応できるようになりました。審査向けの項目の削除と追加を行いました。WebPay時代から利用していたWebhookのハンドラーも実装し、審査状況を随時スペースマーケット側に反映するようにしました。Stripeの審査も含めた全体の掲載審査の仕組みは以下のようなイメージとなりました。Webhookを利用可能なサービスは多くありますが、精度が悪く、よく失敗してしまうものもあるようです。その点、StripeのWebhookはきちんと動作してくれて、安定した連携に貢献してくれています。段階リリース上記の移行の流れを3段階のリリース内容に落とし込み、順次リリースを行なっていきました。Connectを利用して、自動支払いを行う移行計画については、Stripeの方にも相談に乗って頂き、手厚いサポートを受けることができました。段階的にリリースすることで、データメンテナンス以外のサービス停止が不要で、順調に移行することができました。移行プロジェクトとしては、以下のような課題がありました。全社員に情報提供が漏れないよう考慮しながらプロジェクトを進めるWebPayのAPIが停止するので、納期を絶対に遅らせられないWebPayのAPI停止が4末に迫っていたので、納期を遅らせることは絶対できません。自動支払いの仕組みを早期に導入し、経理チームの負担を軽減させたいという思いもありました。心がけたのは、段階リリースのSTEP2までは、とにかく早く的確にリリースすること。やるべきタスクをリスト化、Googleスプレッドシートでスケジュールと役割分担をささっと作って、すぐに設計・実装に取りかかりました。色々なツールや開発手法を駆使してもよかったのですが、PJメンバが私をいれて2人と少ないこともあり、マネジメントには時間をかけず、設計・実装に集中してプロジェクトを進めました。決済周りは、どんな細かなバグも出せない決済は、金額の大小に関わらず、どんな細かなバグも出すことを許されません。スペースマーケットの決済は、様々なプロセスを経ながら最終的な金額の合意が得られるため、ECなどの決済と比較すると処理が複雑と言えます。↓キャンセルポリシーに基づき、ホストによる一部払い戻しなどのパターンもあります。シナリオテストで全体を網羅しました。テスト自体のレビューも行ってもらい、リリース前にプロジェクト外のメンバにもテストをしてもらうことで、品質を担保しました。既述の通り、既存ホストの情報はStripeに再登録が必要だったのですが、メールとプッシュ通知による全体連絡だけでは、ホストの自発的な再登録を促せませんでした。そのため、営業チームにホストへのフォローを依頼しました。連絡を行なってもらいながら、ホストが登録作業で詰まっているポイントをヒアリングしてもらい、登録フォームの修正を行いながら情報を集めました。全社員に情報共有が漏れないよう配慮スペースマーケットでは、ディレクターをたてず、エンジニア自身がプロジェクトをドライブしていきます。規約変更や仕様変更など、Stripeに関わる情報を社内に常に共有できる場が必要でしたが、実装をしながらマネジメントに時間を割くことはなかなか難しいです。そのため、Stripe専用のTrelloボードを作成し、Slackと連携させることで全社に情報を展開するという方法を取りました。Slackだけだと情報が流れてしまうので、既出の質問を複数人からもらうというような状態が発生してしまいます。Trelloのボードにカードを残すことで、まずそこに自分が欲しい情報がないかを確認し、その上で質問などをもらうようにしました。まとめStripe自体がとても簡単に決済の処理を実現できるので、仕様のキャッチアップには時間を多くかける必要がありませんでした。そのおかげで、スペースマーケット側で取り組むべき作業に集中でき、プロジェクトをきちんと最後まで進めることができました。日本でもStripeコミュニティが発足し、これからどんどんサービスとして盛り上がっていきそうで楽しみです。Connectを利用した自動支払いの導入について書きたいと思います。AuthorkakinokiエンジニアとPMをしています。お酒が好きですが、肝臓が悲鳴をあげだしたので、適度な付き合い方を模索しています。