読者です 読者をやめる 読者になる 読者になる

決済API と Ruby 🍣 時々 Rails

Omise JapanのLead Developerです。OmiseやRubyのことをメインに書きます。

OmiseのWebhookをテスト環境で試すためのアプリを用意しました

はじめに

こんにちは、タイから帰国してOmise Japanでの勤務を2月からスタートしました。

Omiseでは開発本拠がタイのバンコクにあるため、日本でのエンジニア向け情報発信が滞っていましたが、帰国を機に、個人のブログでエンジニア視点で記事を書くことにしました。

今回は、ピティナ開発ブログ さまで取り上げられていた、OmiseのWebhookについて記事を書いてみます。

OmiseのWebhookとは

OmiseのWebhookは、新規のChargeやCustomerなどを作成、更新などが行われたタイミングに、指定のURLへPOSTリクエストでJSONをリクエストボディにて送信します。

試しにゲストアカウントのテスト環境で、トークンを使ったChargeオブジェクトの作成してみると、 Chargeが作成されたタイミングでWebhookにて通知されるイベントオブジェクトは下記のようなフォーマットになります。

テスト環境のWebhookを送る先のURLはこちらの設定画面から追加できます。

f:id:akinrt:20170203223819p:plain

設定画面の編集ボタンをクリックし、エンドポイント(送信先URL)を入力して更新することで、次回からのイベントオブジェクト生成時に送信先URLへPOSTリクエストが送信されるようになります。

※ OmiseのWebhookでは、有効なSSL証明証のあるHTTPSのURLがご利用いただけます。

参考ドキュメント: Omise: WebHooks

OmiseのWebhookが送信されるタイミングは?

2017年2月3日現在では、下記のイベントオブジェクトが生成されたタイミングになります。

Charge

イベント名 タイミング
charge.create Chargeが作成された後
charge.update Chargeが更新された後
charge.capture Chargeがキャプチャ(実売上)された後
charge.reverse Chargeが取り消された後
charge.complete 3D-SecureかInternet Bankingを使ったChargeが完了した後

Customer

イベント名 タイミング
customer.create Customerが作成された後
customer.update Customer更新された後
customer.destroy Customerが削除された後
customer.update.card CustomerのCardが更新された後

Card

イベント名 タイミング
card.update Cardが更新された後
card.destroy Cardが削除された後

Dispute

イベント名 タイミング
dispute.create Dispute(チャージバック)の要請を開始した後
dispute.update Disputeが更新された後
dispute.close Disputeの結果がでた後

Recipient

イベント名 タイミング
recipient.create Recipientが作成された後
recipient.update Recipientが更新された後
recipient.destroy Recipientが削除された後
recipient.activate Recipientが有効になった後
recipient.deactivate Recipientが無効になった後
recipient.verify Recipientが承認された後

Refund

イベント名 タイミング
refund.create Refundが作成された後

Transfer

イベント名 タイミング
transfer.create Transferが作成された後
transfer.update Transferが更新された後
transfer.destroy Transferが削除された後
transfer.send Transferのリクエストが送信された後
transfer.pay Transfer(振込)が完了した後
transfer.fail Transferのリクエスト後に振込が失敗したことが判明した後

OmiseのWebhookをテスト環境で試してみよう

ビズチーム経由で多くのユーザーさまからWebhookの挙動を確認するのがめんどくさいとの声を聞きましたので、個人的にomise-webhookを作成しました。

Rubyが好きなのでSinatraを使ったアプリを作り、ngrokを使ってHTTPSのURLをエンドポイントにすることで、ローカル上でアプリを起動してOmiseのWebhookより送信されるJSONのデータをログとして保管する機能を有しています。

git clone、homebrew、homebrew-cask、ruby v2.3.1があるような環境を想定していますので、ご利用になる際には、これらの設定が整っている状態にしてください。

git clone git@github.com:akinrt/omise-webhook.git
cd omise-webhook

# bundlerをインストール
gem install bundler

# 必要なgemのインストール
bundle install --path vendor/bundle

# ngrokのインストール
brew cask install ngrok

# .envをつくる
touch .env

.env には、Omiseのテスト環境の秘密鍵が必要になりますので、こちらから取得して設定してください。

# .env
OMISE_TEST_SECRET_KEY=skey_test_xxxREPLACE_THIS_KEY_WITH_YOURS

ここまでくれば、あとはアプリケーションとngrokを起動して、エンドポイントに設定するHTTPSのURLを確認します。

# アプリの起動
bundle exec ruby app.rb

# 別ウインドウでngrokの起動
ngrok http 3000

ngrokが下記のイメージのようなHTTPSのURLを発行しますので、これをOmiseでエンドポイントに設定します。

f:id:akinrt:20170203233233p:plain

こちらのアプリではOmiseのWebhookを/omise/webhookで受け取るようにしていますので、ngrokからコピーしてきたURLを下記のようにしてください。

f:id:akinrt:20170203233406p:plain

このあとにトークンでChargeを作成するなど実行すると、このアプリがomise-webhook/log/api/event/にJSONオブジェクトをファイルに保存してくれます。 レスポンスの確認などで使ってくだされば幸いです。

あとがき

新規に決済を取り入れる際に、決済事業社がこのようなアプリの提供まで行わないとユーザーにとって非常に不便だと感じました。 ライブラリと数行のコードで決済が完了するようなフレーズも聞いたりしますが、実際に実装する側の気持ちになることで、より便利に使いやすく成長していけるのではないかと思います。

そのため、Omiseをご利用のユーザーさまには、こちらの場でも構いませんので、Omiseの利用を考えられるようになるフィードバックをいただけると幸いです。