Question

Je sais qu'il existe une autre question similaire à celle-ci, mais je ne pense pas qu'elle ait été très bien posée/réponse.

Fondamentalement, j'ai une application Rails fonctionnelle où les utilisateurs peuvent souscrire à mon abonnement, saisir les informations de carte de crédit, etc.Tout cela fonctionne.Mais je dois gérer la situation où la carte d'un utilisateur est refusée à un moment donné au cours de cet abonnement récurrent.

Les types d'événements qu'ils envoient sont ici : https://stripe.com/docs/api?lang=ruby#event_types.

J'ai du mal à accéder à l'objet charge.failed dans mon application.

Les documents sur les webhooks sont également ici : https://stripe.com/docs/webhooks, et toute aide serait très appréciée.

Était-ce utile?

La solution

Vous devez créer un contrôleur pour accepter essentiellement et gérer les demandes.C'est assez simple, bien que pas aussi simple pour envelopper votre esprit d'abord.Voici un exemple de mes hameçons_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

Le récepteur DEF est la vue que vous devez signaler les webhooks sur l'interface à rayures.La vue reçoit le JSON et je l'utilise pour mettre à jour le profil de l'utilisateur dans le cas où un paiement échoue ou réussit.

Autres conseils

C'est beaucoup plus facile maintenant en utilisant le stripe_event gemme:

https://github.com/integrallis/stripe_event

Il s'agit d'une situation de test inférieure à ...

Stripe a besoin d'un moyen de "forcer" Webhooks à des fins de test.Actuellement, l'abonnement le plus court que vous pouvez faire est pendant 1 semaine (en mode test);Il serait beaucoup plus utile que vous puissiez la définir pendant 1 minute, 1 heure, ou même simplement que le rappel se produise en temps réel, vous pouvez donc tester votre système d'intervention de l'API.

Les tests locaux sont excellents, mais rien ne remplace le monde réel, en direct, sur Internet, webhooks / rappels.Avoir à attendre une semaine (!) Sérieusement ralentit des projets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top