20

これに似た別の質問があることは知っていますが、あまりよく尋ねられたり答えられたりしたとは思いません。

基本的に、ユーザーがサブスクリプションにサインアップしたり、クレジットカード情報を入力したりできるレールアプリが機能しています。それですべて機能しています。しかし、この定期的なサブスクリプション中のある時点でユーザーのカードが拒否された状況を処理する必要があります。

彼らが送信するイベントのタイプはこちら: https://stripe.com/docs/api?lang=ruby#event_types .

アプリで charge.failed オブジェクトにアクセスできません。

Webhook に関するドキュメントもここにあります: https://stripe.com/docs/webhooks

4

3 に答える 3

40

基本的にリクエストを受け入れて処理するには、コントローラーを作成する必要があります。それはかなり簡単ですが、最初は頭を悩ませるほど簡単ではありません。これが私の 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 レシーバーは、ストライプ インターフェイスで Webhook をポイントする必要があるビューです。ビューは json を受け取り、支払いが失敗または成功した場合にユーザーのプロファイルを更新するために使用しています。

于 2012-03-10T21:25:49.030 に答える
10

stripe_eventgemを使用すると、はるかに簡単になります。

https://github.com/integrallis/stripe_event

于 2013-05-08T17:05:12.013 に答える