Stripe WebHook en rieles
-
09-12-2019 - |
Pregunta
Sé que hay otra pregunta que existe similar a esta, pero no creo que se le pregunte / respondió muy bien.
Básicamente, tengo una aplicación de rieles de trabajo donde los usuarios pueden inscribirse en mi suscripción, ingrese la información de la tarjeta de crédito, etc. Eso está funcionando.Pero necesito manejar la situación en la que se rechaza la tarjeta de un usuario en algún momento durante esta suscripción recurrente.
Los tipos de eventos que envían están aquí: https://stripe.com/docs/ api? lang= ruby # event_types .
Tengo problemas para acceder a la carga. Objeto favorecido en mi aplicación.
Los documentos en los webhooks también están aquí: https://stripe.com/docs/webhooks ,y cualquier ayuda sería muy apreciada.
Solución
Debe crear un controlador para aceptar básicamente y manejar las solicitudes.Es bastante sencillo, aunque no tan directo para envolver tu mente alrededor inicialmente.Aquí hay un ejemplo de mis 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
El receptor DEF es la opinión de que tiene que señalar los WebHOOKS en la interfaz de la raya.La vista recibe al JSON, y lo estoy usando para actualizar el perfil del usuario en caso de que un pago falle o tenga éxito.
Otros consejos
Ahora es mucho más fácil usar la gema stripe_event
:
Esta es una situación de prueba menos que ideal ...
La raya necesita una forma de "forzar" a los efectos web para fines de prueba.Actualmente, la suscripción más corta que puede hacer es de 1 semana (en modo de prueba);Sería mucho más útil si pudiera configurarlo durante 1 minuto, 1 hora, o incluso simplemente hacer que la devolución de llamada se realice en tiempo real, por lo que puede probar su sistema de respuesta API.
Las pruebas locales son excelentes, pero nada reemplaza al mundo real, en vivo, a través de Internet, WebHOOKS / Callbacks.Tener que esperar una semana (!) En serio ralentiza los proyectos.