test stripe secret docs developer balancetransaction ruby-on-rails webhooks stripe-payments

ruby-on-rails - secret - stripe ruby



Webhook de la raya en los carriles (3)

Ahora es mucho más fácil usar la gema stripe_event :

https://github.com/integrallis/stripe_event

Sé que hay otra pregunta similar a esta, pero no creo que se haya hecho o respondido muy bien.

Básicamente, tengo una aplicación de Rails en funcionamiento donde los usuarios pueden registrarse para mi suscripción, ingresar la información de la tarjeta de crédito, etc. Eso es todo. Pero necesito manejar la situación en la que la tarjeta de un usuario se rechaza 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 al objeto charge.failed en mi aplicación.

Los documentos en webhooks también están aquí: https://stripe.com/docs/webhooks , y cualquier ayuda sería muy apreciada.


Esta es una situación de prueba menos que ideal ...

Stripe necesita una forma de "forzar" los webhooks para propósitos de prueba. Actualmente, la suscripción más corta que puede hacer es por 1 semana (en modo de prueba); sería mucho más útil si pudiera configurarlo para 1 minuto, 1 hora, o simplemente para que la devolución de llamada se produzca en tiempo real, de modo que pueda 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 (!) Ralentiza seriamente los proyectos.


Necesitas crear un controlador para aceptar y manejar básicamente las solicitudes. Es bastante sencillo, aunque no tan sencillo para envolver tu mente inicialmente. Aquí hay un ejemplo de mi 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 vista a la que tiene que apuntar los webhooks en la interfaz de banda. La vista recibe el json y lo estoy usando para actualizar el perfil del usuario en caso de que un pago falle o tenga éxito.