Faixa Webhook on Rails
-
09-12-2019 - |
Pergunta
Eu sei que há outra questão que existe, semelhante a esta, mas eu não acho que foi solicitado/respondeu muito bem.
Basicamente, eu tenho um trabalho trilhos aplicativo onde os usuários podem se inscrever para a minha assinatura, insira informações de cartão de crédito, etc.Isso é tudo trabalho.Mas eu preciso para lidar com a situação onde um usuário do cartão é recusado em algum ponto durante esse assinatura recorrente.
Os tipos de eventos que eles enviam estão aqui: https://stripe.com/docs/api?lang=ruby#event_types.
Eu estou tendo problemas para acessar a carga.objecto falhou em meu aplicativo.
O docs no webhooks também estão aqui: https://stripe.com/docs/webhooks, e qualquer ajuda seria muito apreciada.
Solução
Você precisa criar um controlador basicamente para aceitar e processar pedidos.É muito para a frente, apesar de não ser tão direto para envolver sua mente em torno inicialmente.Aqui está um exemplo do meu 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
O def receptor é a visão que você tem de apontar para o webhooks para sobre a faixa de interface.A vista recebe o json, e eu estou usando-o para atualizar o perfil do usuário no caso de um pagamento, falha ou êxito.
Outras dicas
É muito mais fácil agora usando a gema stripe_event
:
Esta é uma situação de teste menor que ideal ...
Stripe precisa de uma maneira de "forçar" os webhooks para fins de teste.Atualmente, a assinatura mais curta que você pode fazer é por 1 semana (no modo de teste);Seria muito mais útil se você pudesse configurá-lo por 1 minuto, 1 hora, ou mesmo simplesmente fazer com que o retorno de chamada ocorra em tempo real, para que você possa testar seu sistema de resposta de API.
Testes locais são ótimos, mas nada substitui o mundo real, ao vivo, na Internet, webhooks / retornos de retorno.Ter que esperar uma semana (!) Sério retarda projetos.