シンのおもちゃ箱 - API研究所

APIやアプリケーションを使ってみて、その実装手順や所要時間、実装したうえでの感想などを書いてます。

Rails + WebPayを使って決済処理を実装してみる

Rails + WebPayを使って決済処理を実装してみる

目的

  • RubyOnRailsとWebPayのAPIを使って、決済処理を実装する

WebPayとは

概要
  • 簡単に決済処理を実現できるAPIである
  • カード情報という超機密情報を自分のサーバーに送らなくて済むので、悩みが減る
  • Paypalなど他のサービスと比較して、料金も安い
  • 似たサービスとして、カナダやイギリスでサービスを展開しているStripeがある
  • Railsで用いるgemはstripeのものである

作業(3h)

  1. WebPay・StripeのAPIドキュメントを眺める(2h)
  2. railsにgemを追加(1min)
  3. フォーム画面(view)とjsを作成する(30min)
  4. 決済処理アクション作成(30min)
1. WebPay・StripeのAPIドキュメントを眺める(2h)
  1. フォームに値を入れる
  2. Javascriptで入力した情報をStripeのAPIに投げると、ワンタイムトークンが返ってくる
  3. そのワンタイムトークンを自分のサーバーに投げて、決済を行う

注意) Stripeのデモの中でPUBLISH_KEYなどを先頭につけてサーバーを起動している箇所があるが、そのままやっても、トークンエラーになって先に進めない


× PUBLISHABLE_KEY=pk_foo SECRET_KEY=sk_bar rails s
○ PUBLISHABLE_KEY=pk_test_6pRNASCoBOKtIshFeQd4XMUh SECRET_KEY=sk_test_BQokikJOvBiI2HlWgH4olfQ2 rails s

2. railsにgemを追加(1min)
  • Gemfileに下記を追加してbundle install

gem 'stripe', :git => 'https://github.com/stripe/stripe-ruby'

3. フォーム画面(view)とjsを作成する(30min)
  • 下記のようなコードを記述。WebPayの開発者用ページに記載されているのをちょっと変更しただけ
  • 購入のリンクを押せば、tokenという名前のパラメータだけがフォームのactionに指定されたurlに送られる




<%= form_tag({action: :charging}, {id: "payment-form"}) do %>
<%= label_tag :credit_name %>
<%= text_field_tag :credit_name, "",{id: "card-name"} %>
<%= label_tag :credit %>
<%= text_field_tag :credit, "",{id: "card-number"} %>
<%= label_tag :expy %>
<%= text_field_tag :expm, "", {id: "card-expiry-month"} %>/
<%= text_field_tag :expy, "", {id: "card-expiry-year"} %>
<%= label_tag :cvc %>
<%= text_field_tag :cvc, "", {id: "card-cvc"} %>
<%= link_to "購入", "#", {id: "purchase-submit"} %><% end %>

4. 決済処理アクション作成(30min)
  • 3で送信したtokenを使って顧客情報と課金を行う
  • 顧客情報のidを保存しておけば、次からtokenを得る必要がなくなる

Stripe.api_key  = "test_secret_eHn4TTgsGguBcW764a2KA8Yd"
Stripe.api_base = "https://api.webpay.jp"

# 顧客情報作成
customer = Stripe::Customer.create(
:card => params[:token]
)

# 顧客情報を用いて請求
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @product.price,
:currency => 'jpy'
)

# Customerモデルに顧客情報を保存(webpay_idというカラムがあると想定)
user = Customer.new(:webpay_id: customer.id)
user.save

結果・感想

  • 超簡単に決済処理を実現することができた
  • しかし、StripeにはStripe.jsというものがあり、フォームすら作る必要がない。WebPayも早くそうなってほしい
  • 決済処理は簡単にできたが、一番大変なのはその後の運用フローやら管理者用画面の作成だろうと思う。運用用のツールもいろいろ用意されているらしい
  • 総じて簡単!!!その一言


vimconf2013に行ってきました。

vimの勉強会に行ってきました。

vimからgitを使う

How to use git from vim @vim conf2013

- gitをvimから使うために、デフォルトの方法。pluginを使った方法などを紹介していた。
- gitって複雑なので、自分用にaliasとか設定しないと効率が悪くなってしまう。それを解消する一つの手段を提供していただいた感じ

vimのpatch作成術

How to write patches for Vim


- pluginではなく、vim自体を変えるpatchを本家に送り続け、一年で70個以上採用されたらしい。
- でも、自分のレベルが低すぎて、内容が頭に入らなかった。patchを作りたい人はきっと参考になるはず。

vimのruntimepath


Do You Know about Vim Runtime Files? // Speaker Deck


- vimをインストールしたときから、勝手に入っているpluginとその使い方の紹介
- 実践的で、わかりやすかったので、勉強会中にいろいろ試したりした

neocomplete
http://sssslide.com/www.slideshare.net/Shougo/neocompletevim
- 補完機能を提供するpluginの発表。neocomplecacheという前世代のものがあるので、それとの差異を説明していた。
- 発表者のキャラが強烈だった。この人の書いたpluginを使いこなせば、効率化は必至。

以上。それぞれの概要と個人的な感想でした。