RailsにストライプWebHook
-
09-12-2019 - |
質問
私はこれに似た別の質問があることを知っていますが、私はそれが非常によく尋ねられたとは思わないとは思わない。
基本的に私はユーザーが購読にサインアップできる作業用Railsアプリを持っています、クレジットカード情報などを入力してください。しかし、私はこの繰り返し購読の間にユーザーのカードがある時点でユーザーのカードが拒否された状況を処理する必要があります。
送信されたイベントの種類はここにあります。 https://tripe.com/docs/ API?lang= ruby#event_types
私は私のアプリでQailedオブジェクトにアクセスするのに問題があります。
Webhookのドキュメントもここにあります。 https://tripe.com/docs/webhooks 、そしてあらゆる助けが大いに理解されるでしょう。
解決
基本的に要求を受け入れて処理するためのコントローラを作成する必要があります。最初にあなたの心を包むのにまっすぐなことではありませんが、それはかなり簡単です。これが私のhooks_controller.rbの例です:
class HooksController < ApplicationController
require 'json'
Stripe.api_key = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def receiver
data_json = JSON.parse request.body.read
p data_json['data']['object']['customer']
if data_json[:type] == "invoice.payment_succeeded"
make_active(data_event)
end
if data_json[:type] == "invoice.payment_failed"
make_inactive(data_event)
end
end
def make_active(data_event)
@profile = Profile.find(User.find_by_stripe_customer_token(data['data']['object']['customer']).profile)
if @profile.payment_received == false
@profile.payment_received = true
@profile.save!
end
end
def make_inactive(data_event)
@profile = Profile.find(User.find_by_stripe_customer_token(data['data']['object']['customer']).profile)
if @profile.payment_received == true
@profile.payment_received = false
@profile.save!
end
end
end
.
DEF受信者は、WebHooksをストライプインタフェースに指す必要があるビューです。このビューはJSONを受信し、支払いが失敗した、または成功した場合にユーザーのプロファイルを更新するために使用しています。
他のヒント
stripe_event
GEMを使用するのははるかに簡単です。
これは理想的なテストの状況よりも少ないです...
ストライプはテスト目的でウェブフックを「強制的に」する方法を必要とします。現在、あなたがすることができる最短の購読は1週間(テストモード)です。1分、1時間、または単にリアルタイムでコールバックが発生するためにそれを設定できる場合は、はるかに役立ちますので、APIレスポンスシステムをテストできます。
現地のテストは素晴らしいですが、インターネット上のライブ、Webhooks /コールバックを介して、Real-World、Liveに代わるものは何もありません。週に待たなければならない(!)プロジェクトを真剣に遅くする。