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.

Foi útil?

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:

https://github.com/integrallis/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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top