Подтвердить что ты не робот

Полосатый Webhook на Rails

Я знаю, что существует еще один вопрос, похожий на этот, но я не думаю, что его спросили/ответили очень хорошо.

В основном у меня есть приложение для работы с рельсами, где пользователи могут зарегистрироваться для моей подписки, ввести информацию о кредитной карте и т.д. Это все работает. Но мне нужно обработать ситуацию, когда пользовательская карта в какой-то момент отклоняется во время этой повторяющейся подписки.

Типы событий, которые они отправляют, находятся здесь: https://stripe.com/docs/api?lang=ruby#event_types.

У меня возникли проблемы с доступом к объекту charge.failed в моем приложении.

Документы на webhooks также находятся здесь: https://stripe.com/docs/webhooks, и любая помощь будет очень оценена.

4b9b3361

Ответ 1

Вам нужно создать контроллер, чтобы в принципе принимать и обрабатывать запросы. Это довольно прямолинейно, хотя и не так прямо, чтобы сначала обернуть ваш разум. Вот пример моего 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

Дефектный приемник - это представление, на которое вы должны указывать веб-узлы на интерфейсе полосы. В представлении принимается json, и я использую его для обновления профиля пользователя в случае неудачного или успешного выполнения платежа.

Ответ 3

Это более чем идеальная ситуация с проверкой...

Для целей тестирования Stripe нужен способ "заставить" веб-камеры. В настоящее время самая короткая подписка, которую вы можете сделать, составляет 1 неделю (в тестовом режиме); было бы намного полезнее, если бы вы могли установить его на 1 минуту, 1 час или даже просто вызвать обратный вызов в реальном времени, чтобы вы могли протестировать свою систему ответа API.

Локальные тесты отличные, но ничто не заменяет реальный мир, жить, через Интернет, веб-хосты/обратные вызовы. Ожидание недели (!) Серьезно замедляет проекты.