Нашивки на рельсы - PullRequest
       35

Нашивки на рельсы

19 голосов
/ 09 марта 2012

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

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

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

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

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

Ответы [ 3 ]

39 голосов
/ 11 марта 2012

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

10 голосов
/ 08 мая 2013

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

https://github.com/integrallis/stripe_event

0 голосов
/ 09 апреля 2014

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

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

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

...