条纹网络挂接on Rails的

问题描述:

我知道有存在类似这样的一个问题,但我不认为有人问/回答得很好。条纹网络挂接on Rails的

基本上我有一个工作轨道应用程序,用户可以注册我的订阅,输入信用卡信息等。这一切工作。但我需要处理情况,用户的卡本定期订阅期间的某个点下降的情况。

他们发送的事件类型在这里:https://stripe.com/docs/api?lang=ruby#event_types

我无法访问我的应用程序中的charge.failed对象。

webhooks上的文档也在这里:https://stripe.com/docs/webhooks,任何帮助将不胜感激。

+0

[使用条纹webhooks与Rails]可能的重复(http://*.com/questions/9371566/using-stripe-webhooks-with-rails) – Hauleth 2012-10-29 06:50:31

您需要创建一个控制器来基本接受和处理请求。这是非常简单的,尽管最初并不是那么简单。这里是我的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和我用它来更新用户在支付失败或成功的事件概貌。

+0

不错!我认为你是对的,这是一个有点吓人最初但一旦我想通了这没什么大不了的。我的控制器实际上看起来有点像这样(虽然不是很漂亮)。谢谢! – Zach 2012-03-11 04:51:54

+2

非常有帮助!仅供参考JSON解析的结果不是无关紧要的哈希,因此您可能需要改为使用event_json = JSON :: parse(request.body.read).with_indifferent_access。 – runako 2012-05-10 21:12:00

+10

对于最好的[安全]实践,使用事件ID('data_json ['id']')来检索Stripe :: Event对象,然后从中获取数据,因为它肯定是合法的。 - 如[Stripe的webhooks参考页面](https://stripe.com/docs/webhooks)所述。 – anxiety 2012-07-13 20:28:40

要容易得多,现在使用stripe_event宝石:

https://github.com/integrallis/stripe_event

这是一个不太理想的检测情况看...

条纹需要一种方式来“强制”网络挂接用于测试目的。目前,您可以制作的最短订阅时间为1周(在测试模式下);这将是大有帮助,如果你可以将其设置为1分钟,1个小时,甚至根本就导致实时出现回调,这样你就可以测试你的API响应系统。

本地测试非常棒,但是没有任何东西可以取代现实世界,通过互联网,webhooks /回调来生活。不得不等待一周(!)会严重影响项目进度。

+0

现在,最低限度是1天,但仍然认同你。 – Francisco 2016-06-09 15:59:01