Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Теперь гораздо проще использовать stripe_event драгоценный камень:

https://github.com/integrallis/stripe_event

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

Slipe нуждается в способе «заставить» веб-капусты для целей тестирования.В настоящее время кратчайшая подписка, которую вы можете сделать, находится в течение 1 недели (в тестовом режиме);Это было бы намного полезно, если бы вы могли установить его в течение 1 минуты, 1 час или даже просто привести к возникновению обратного вызова в режиме реального времени, поэтому вы можете проверить свою систему ответа API.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top