OmiseのWebhookをテスト環境で試すためのアプリを用意しました
はじめに
こんにちは、タイから帰国してOmise Japanでの勤務を2月からスタートしました。
Omiseでは開発本拠がタイのバンコクにあるため、日本でのエンジニア向け情報発信が滞っていましたが、帰国を機に、個人のブログでエンジニア視点で記事を書くことにしました。
今回は、ピティナ開発ブログ さまで取り上げられていた、OmiseのWebhookについて記事を書いてみます。
OmiseのWebhookとは
OmiseのWebhookは、新規のChargeやCustomerなどを作成、更新などが行われたタイミングに、指定のURLへPOSTリクエストでJSONをリクエストボディにて送信します。
試しにゲストアカウントのテスト環境で、トークンを使ったChargeオブジェクトの作成してみると、 Chargeが作成されたタイミングでWebhookにて通知されるイベントオブジェクトは下記のようなフォーマットになります。
テスト環境のWebhookを送る先のURLはこちらの設定画面から追加できます。
設定画面の編集ボタンをクリックし、エンドポイント(送信先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でエンドポイントに設定します。
こちらのアプリではOmiseのWebhookを/omise/webhook
で受け取るようにしていますので、ngrokからコピーしてきたURLを下記のようにしてください。
このあとにトークンでChargeを作成するなど実行すると、このアプリがomise-webhook/log/api/event/
にJSONオブジェクトをファイルに保存してくれます。
レスポンスの確認などで使ってくだされば幸いです。
あとがき
新規に決済を取り入れる際に、決済事業社がこのようなアプリの提供まで行わないとユーザーにとって非常に不便だと感じました。 ライブラリと数行のコードで決済が完了するようなフレーズも聞いたりしますが、実際に実装する側の気持ちになることで、より便利に使いやすく成長していけるのではないかと思います。
そのため、Omiseをご利用のユーザーさまには、こちらの場でも構いませんので、Omiseの利用を考えられるようになるフィードバックをいただけると幸いです。