Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
WebPayからStripeに移行した話
ニューアーチデザイニング株式会社
新妻巧朗
2016/11/30 @NAD Stripe勉強会
プロフィール
新妻巧朗
@otakumesi( )
NADでは「daddly」を開発しているエンジニアです
2016/4から社会人やってます(まだ一年目 )
好きなエディタはEmacs
1週間くらい前にOSS開発にチャレンジし始めた
今日話すこと
Stripeがどれくらい簡単に使えるか
StripeとWebPayの違い
もくじ
1. Stripeってなんぞ?
2. かんたんな決済
3. もっと複雑な決済をしてみる
4. StripeがWebPayと違っていたもの
5. daddyでの使用例
6. 終わりに
もくじ
1. Stripeってなんぞ?
2. かんたんな決済
3. もっと複雑な決済をしてみる
4. StripeがWebPayと違っていたもの
5. daddyでの使用例
6. 終わりに
Stripeとは
米Stripe社が開発・運用しているオンライン決済サービス
StripeInc.
米国サンフランシスコに本社を置く企業
2016/10/4、日本で正式サービスを開始
Stripeの特徴
開発者フレンドリーなAPI
豊富で読みや...
もくじ
1. Stripeってなんぞ?
2. かんたんな決済
3. もっと複雑な決済をしてみる
4. StripeがWebPayと違っていたもの
5. StripeConnect
6. daddyでの使用例
7. 終わりに
2. かんたんな決済
Stripeで決済をしてみる
それぞれのパラメータの紹介
WebPayとの比較
ライブラリの紹介
こんな感じの決済をしてみる
Stripe
$ curl https://api.stripe.com/v1/charges 
-u "$STRIPE_API_SECRET": 
-d amount=9504 
-d currency=jpy 
-d source="$ST...
2. かんたんな決済
Stripeで決済をしてみる
それぞれのパラメータの紹介
WebPayとの比較
ライブラリの紹介
パラメータの詳細
$ curl https://api.stripe.com/v1/charges 
-u "$STRIPE_API_SECRET": 
-d amount=9504 
-d currency=jpy 
-d source="$...
sourceについて
source 内容
Customer お客様の情報
Card クレカの情報
Token 決済のワンタイムトークン
すべて、カード情報を保持しているオブジェ
クトかカード情報そのもの
Tokenについて
1回きりの決済
カード情報の登録
APIやライブラリにカード情報を投げて生成できるのだが......
Stripe.jsを利用して生成するのが良い
Stripe.js
クレカ情報送信のためのJavaScriptライブラリ
クレカ情報を内部に保存しないことを保証する
Ajaxでクレカ情報を送信し、そのinputのname属性をdata‑
stripe属性に置き換えることで、バックエンドでクレ...
2. かんたんな決済
Stripeで決済をしてみる
それぞれのパラメータの紹介
WebPayとの比較
ライブラリの紹介
ちなみにWebPayのAPIはこんな感じ
$ curl "https://api.webpay.jp/v1/charges" 
-u "$WEBPAY_API_SECRET": 
-d "amount=9504" 
-d "currency=j...
比べてみる
Stripe
WebPay
$ curl https://api.stripe.com/v1/charges 
-u "$STRIPE_API_SECRET": 
-d amount=9504 
-d currency=jpy 
-...
あんまり違いがないので移行が簡単
2. かんたんな決済
Stripeで決済をしてみる
それぞれのパラメータの紹介
Stripe.jsってなんぞ?
WebPayとの比較
ライブラリの紹介
RESTfulなAPIだけではなく、ライブラリも充実している
公式でライブラリが開発されている言語・環境
Ruby
Python
PHP
Java
Node
Go
iOS
Android
さらに……
サードパーティ製のライブラリがある言語・環境(Github調べ)
Elixir
Erlang
Haskell
Scala
Clojure
.NET Framework(C#)
Cordova
... 他多数
コード例①
Ruby
Stripe.api_key = STRIPE_API_KEY
Stripe::Charge.create(
:amount => 9504,
:currency => "jpy",
:source => STRIPE_T...
コード例②
PHP
StripeStripe::setApiKey(STRIPE_API_TOKEN);
StripeCharge::create([
"amount" => 9504,
"currency" => "jpy",
"source...
もくじ
1. Stripeってなんぞ?
2. かんたんな決済
3. もっと複雑な決済をしてみる
4. StripeがWebPayと違っていたもの
5. daddyでの使用例
6. 終わりに
PHP
パラメータ名 内容
destination 入金先。StripeアカウントのIDを指定すると、間接
的に対象の口座へ入金してくれる。
application_fee 利用料。間接的に入金する際のアプリケーション手
数料を設定できる。
S...
つまり・・・
通常の決済にパラメータを2つ追加するだけでこれができる
あまりのカンタンさに思わず笑顔
※このような形式のサービスを行うためには、後述する
StripeConnectへの対応が必要になります。
もくじ
1. Stripeってなんぞ?
2. かんたんな決済
3. もっと複雑な決済をしてみる
4. StripeがWebPayと違っていたもの
5. daddyでの使用例
6. 終わりに
異なっていたモノ
オブジェクトの仕様
エラー・例外の名前
Stripe.js
StripeConnect
異なっていたモノ
オブジェクトの仕様
エラー・例外の名前
Stripe.js
StripeConnect
WebPayで想定されていた運用
主催者への払い出しは運用が入金を行うため手間がかかる
主催者の口座番号は自社のDBで保存していてリスキー
Stripeに変更したことで......
主催者への払い出しはStripe側に任せることができる
主催者の口座番号はStripeが保存し管理する(Accountというオ
ブジェクトとして扱う)
PHP
StripeCharge::create([
"amount" => 9504,
"currency" => "jpy",
"source" => STRIPE_TOKEN,
"description" => "Charge for s...
StripeConnect
StripeConnectってなんぞ?
Accountについて
StandAlone
StripeConnectとは
C2Cプラットフォームサービスでの決済を
Stripeで行える仕組みを提供するサービス
販売側ユーザーの管理をAccountという形
でStripeに任せるためのプラットフォーム
StripeConnect
StripeConnectってなんぞ?
Accountについて
StandAlone
Accountの登録
サイトのユーザーをStripeのAccountとして利用するには、そのユ
ーザーのStripeアカウントと連結させる必要がある
口座情報などの入金に必要な情報を登録する必要があり、登録する
ための方法が以下の管理方式によっ...
StripeConnect
StripeConnectってなんぞ?
Accountについて
StandAlone
StandAlone
OAuth接続時の画面でStripeに登録・ログインしてもらう
レスポンスのAccountの識別IDを管理するだけでよい
支払いの受け取りなどの操作はStripeでやっていただく
特別に準備しなければならないものはない
つまり、支払いに関する・・・
あれこれを開発する必要がなくなる
Stripeを利用することで
本質的な機能の開発に集中できた
カンタンに作れて管理もカンタン!
もくじ
1. Stripeってなんぞ?
2. かんたんな決済
3. もっと複雑な決済をしてみる
4. StripeがWebPayと違っていたもの
5. daddyでの使用例
6. 終わりに
『daddly』では実際にどういう風に使っているか
Charge、CustomerといったStripeのオブジェクト
にあわせたモデルを作って、Stripeをバックエンドに
してアプリケーション内のモデルの関連させて利用し
ている。
DBに登録...
実際に使用している部分(ごく一部)
PHP(CodeIgniter)
class Charge_model extends CI_Models {
...
function create($charge) {
$stripe_response ...
もくじ
1. Stripeってなんぞ?
2. かんたんな決済
3. もっと複雑な決済をしてみる
4. StripeがWebPayと違っていたもの
5. daddyでの使用例
6. 終わりに
終わりに
Stripeは開発者に優しい設計
StripeConnectは開発にかかる時間を減らして、本
質的なビジネスロジックに専念させてくれる
みなさんもぜひStripeを使ってみてはいかが
でしょうか
Upcoming SlideShare
Loading in …5
×

WebPayからStripeに移行した話

2,023 views

Published on

[daddly] Stripe勉強会 開発編 2016/11/30
2016/11/30にニューアーチデザイニング株式会社で開催した「Stripe勉強会」の開発編資料です。

Published in: Software

WebPayからStripeに移行した話

  1. 1. WebPayからStripeに移行した話 ニューアーチデザイニング株式会社 新妻巧朗 2016/11/30 @NAD Stripe勉強会
  2. 2. プロフィール 新妻巧朗 @otakumesi( ) NADでは「daddly」を開発しているエンジニアです 2016/4から社会人やってます(まだ一年目 ) 好きなエディタはEmacs 1週間くらい前にOSS開発にチャレンジし始めた
  3. 3. 今日話すこと Stripeがどれくらい簡単に使えるか StripeとWebPayの違い
  4. 4. もくじ 1. Stripeってなんぞ? 2. かんたんな決済 3. もっと複雑な決済をしてみる 4. StripeがWebPayと違っていたもの 5. daddyでの使用例 6. 終わりに
  5. 5. もくじ 1. Stripeってなんぞ? 2. かんたんな決済 3. もっと複雑な決済をしてみる 4. StripeがWebPayと違っていたもの 5. daddyでの使用例 6. 終わりに
  6. 6. Stripeとは 米Stripe社が開発・運用しているオンライン決済サービス StripeInc. 米国サンフランシスコに本社を置く企業 2016/10/4、日本で正式サービスを開始 Stripeの特徴 開発者フレンドリーなAPI 豊富で読みやすいドキュメント(しかし、英語ばかり ) だけど、読みやすい簡単な英語
  7. 7. もくじ 1. Stripeってなんぞ? 2. かんたんな決済 3. もっと複雑な決済をしてみる 4. StripeがWebPayと違っていたもの 5. StripeConnect 6. daddyでの使用例 7. 終わりに
  8. 8. 2. かんたんな決済 Stripeで決済をしてみる それぞれのパラメータの紹介 WebPayとの比較 ライブラリの紹介
  9. 9. こんな感じの決済をしてみる
  10. 10. Stripe $ curl https://api.stripe.com/v1/charges -u "$STRIPE_API_SECRET": -d amount=9504 -d currency=jpy -d source="$STRIPE_SOURCE" -d description="Charge for sample.user@mail.jp" ※ FF15の定価は9504円らしい このコードを実行するとsourceに関連付けられてるクレカ から APIkeyに関連付けられてるStripe口座に入金 がされる POSTを投げるで カンタンに決済が完了してしまう
  11. 11. 2. かんたんな決済 Stripeで決済をしてみる それぞれのパラメータの紹介 WebPayとの比較 ライブラリの紹介
  12. 12. パラメータの詳細 $ curl https://api.stripe.com/v1/charges -u "$STRIPE_API_SECRET": -d amount=9504 -d currency=jpy -d source="$STRIPE_SOURCE" -d description="Charge for sample.user@mail.jp" パラメータ名 内容 イメージ amount 金額 currency 通貨 ¥, $, €... source 支払元 description 説明、コメント
  13. 13. sourceについて source 内容 Customer お客様の情報 Card クレカの情報 Token 決済のワンタイムトークン すべて、カード情報を保持しているオブジェ クトかカード情報そのもの
  14. 14. Tokenについて 1回きりの決済 カード情報の登録 APIやライブラリにカード情報を投げて生成できるのだが...... Stripe.jsを利用して生成するのが良い
  15. 15. Stripe.js クレカ情報送信のためのJavaScriptライブラリ クレカ情報を内部に保存しないことを保証する Ajaxでクレカ情報を送信し、そのinputのname属性をdata‑ stripe属性に置き換えることで、バックエンドでクレカの inputをPOSTデータとして取得できないようにし、response 返ってきたTokenのIDをvalueにしたinput作成し挿入する(こ れがsourceになる) PCIDSSを満たす要件の一つ セキュアであることを保証している
  16. 16. 2. かんたんな決済 Stripeで決済をしてみる それぞれのパラメータの紹介 WebPayとの比較 ライブラリの紹介
  17. 17. ちなみにWebPayのAPIはこんな感じ $ curl "https://api.webpay.jp/v1/charges" -u "$WEBPAY_API_SECRET": -d "amount=9504" -d "currency=jpy" -d "card=$WEBPAY_CARD_TOKEN" -d "description=Charge for sample.user@mail.sample.jp"
  18. 18. 比べてみる Stripe WebPay $ curl https://api.stripe.com/v1/charges -u "$STRIPE_API_SECRET": -d amount=9504 -d currency=jpy -d source="$STRIPE_SOURCE" -d description="Charge for sample.user@mail.sample.jp" $ curl "https://api.webpay.jp/v1/charges" -u "$WEBPAY_API_SECRET": -d "amount=9504" -d "currency=jpy" -d "card=$WEBPAY_CARD_TOKEN" -d "description=Charge for sample.user@mail.sample.jp"
  19. 19. あんまり違いがないので移行が簡単
  20. 20. 2. かんたんな決済 Stripeで決済をしてみる それぞれのパラメータの紹介 Stripe.jsってなんぞ? WebPayとの比較 ライブラリの紹介
  21. 21. RESTfulなAPIだけではなく、ライブラリも充実している 公式でライブラリが開発されている言語・環境 Ruby Python PHP Java Node Go iOS Android
  22. 22. さらに…… サードパーティ製のライブラリがある言語・環境(Github調べ) Elixir Erlang Haskell Scala Clojure .NET Framework(C#) Cordova ... 他多数
  23. 23. コード例① Ruby Stripe.api_key = STRIPE_API_KEY Stripe::Charge.create( :amount => 9504, :currency => "jpy", :source => STRIPE_TOKEN, # obtained with Stripe.js :description => "Charge for sample.user@mail.sample.jp" )
  24. 24. コード例② PHP StripeStripe::setApiKey(STRIPE_API_TOKEN); StripeCharge::create([ "amount" => 9504, "currency" => "jpy", "source" => STRIPE_TOKEN, // obtained with Stripe.js "description" => "Charge for sample.user@mail.sample.jp" ]);
  25. 25. もくじ 1. Stripeってなんぞ? 2. かんたんな決済 3. もっと複雑な決済をしてみる 4. StripeがWebPayと違っていたもの 5. daddyでの使用例 6. 終わりに
  26. 26. PHP パラメータ名 内容 destination 入金先。StripeアカウントのIDを指定すると、間接 的に対象の口座へ入金してくれる。 application_fee 利用料。間接的に入金する際のアプリケーション手 数料を設定できる。 StripeCharge::create([ "amount" => 9504, "currency" => "jpy", "source" => STRIPE_TOKEN, "description" => "Charge for sample.user@mail.sample.jp" "destination" => ACCOUNT_ID, "application_fee" => AMOUNT_OF_FEE, ]);
  27. 27. つまり・・・
  28. 28. 通常の決済にパラメータを2つ追加するだけでこれができる
  29. 29. あまりのカンタンさに思わず笑顔
  30. 30. ※このような形式のサービスを行うためには、後述する StripeConnectへの対応が必要になります。
  31. 31. もくじ 1. Stripeってなんぞ? 2. かんたんな決済 3. もっと複雑な決済をしてみる 4. StripeがWebPayと違っていたもの 5. daddyでの使用例 6. 終わりに
  32. 32. 異なっていたモノ オブジェクトの仕様 エラー・例外の名前 Stripe.js StripeConnect
  33. 33. 異なっていたモノ オブジェクトの仕様 エラー・例外の名前 Stripe.js StripeConnect
  34. 34. WebPayで想定されていた運用 主催者への払い出しは運用が入金を行うため手間がかかる 主催者の口座番号は自社のDBで保存していてリスキー
  35. 35. Stripeに変更したことで...... 主催者への払い出しはStripe側に任せることができる 主催者の口座番号はStripeが保存し管理する(Accountというオ ブジェクトとして扱う)
  36. 36. PHP StripeCharge::create([ "amount" => 9504, "currency" => "jpy", "source" => STRIPE_TOKEN, "description" => "Charge for sample.user@n-a-d.jp", "destination" => ACCOUNT_ID, "application_fee" => AMOUNT_OF_FEE, ]); ここでAccountのIDを取得するのにStripeConnectが必要になる
  37. 37. StripeConnect StripeConnectってなんぞ? Accountについて StandAlone
  38. 38. StripeConnectとは C2Cプラットフォームサービスでの決済を Stripeで行える仕組みを提供するサービス 販売側ユーザーの管理をAccountという形 でStripeに任せるためのプラットフォーム
  39. 39. StripeConnect StripeConnectってなんぞ? Accountについて StandAlone
  40. 40. Accountの登録 サイトのユーザーをStripeのAccountとして利用するには、そのユ ーザーのStripeアカウントと連結させる必要がある 口座情報などの入金に必要な情報を登録する必要があり、登録する ための方法が以下の管理方式によって分かれる Accountの管理方式 Account 内容 StandAlone OAuthでユーザーのStripeアカウントと連携して、API で操作をおこなう。 Managed APIを通して顧客のための専用Stripeアカウントの作成 するなど、多くの管理をできる。
  41. 41. StripeConnect StripeConnectってなんぞ? Accountについて StandAlone
  42. 42. StandAlone OAuth接続時の画面でStripeに登録・ログインしてもらう レスポンスのAccountの識別IDを管理するだけでよい 支払いの受け取りなどの操作はStripeでやっていただく 特別に準備しなければならないものはない
  43. 43. つまり、支払いに関する・・・ あれこれを開発する必要がなくなる
  44. 44. Stripeを利用することで 本質的な機能の開発に集中できた
  45. 45. カンタンに作れて管理もカンタン!
  46. 46. もくじ 1. Stripeってなんぞ? 2. かんたんな決済 3. もっと複雑な決済をしてみる 4. StripeがWebPayと違っていたもの 5. daddyでの使用例 6. 終わりに
  47. 47. 『daddly』では実際にどういう風に使っているか Charge、CustomerといったStripeのオブジェクト にあわせたモデルを作って、Stripeをバックエンドに してアプリケーション内のモデルの関連させて利用し ている。 DBに登録してるのはStripeから返されるオブジェク トのIDだけ
  48. 48. 実際に使用している部分(ごく一部) PHP(CodeIgniter) class Charge_model extends CI_Models { ... function create($charge) { $stripe_response = $this->_handleStripeError(function () use($charge) { // 実際に書き換えたのこの部分と$chargeの中身になる部分 StripeCharge::create($charge); }); ...(DBにinsertしたり...) } ... function refund() { ... } }
  49. 49. もくじ 1. Stripeってなんぞ? 2. かんたんな決済 3. もっと複雑な決済をしてみる 4. StripeがWebPayと違っていたもの 5. daddyでの使用例 6. 終わりに
  50. 50. 終わりに Stripeは開発者に優しい設計 StripeConnectは開発にかかる時間を減らして、本 質的なビジネスロジックに専念させてくれる みなさんもぜひStripeを使ってみてはいかが でしょうか

×