2017-10-07 1 views
0

Je construis une place de marché dans les rails 5. J'ai pu utiliser le 'stripe gem' pour mettre en place un «compte personnalisé» en utilisant stripe connect.Stripe Webhooks et rails de compte géré par bande

J'utilise également le 'stripe_event gem' pour attraper les webhooks provenant de la bande. Je peux le faire sans problème en utilisant un compte à bande standard.

Cependant, sur la base du stripe docs lors de l'utilisation bande se connecter je dois ajouter un autre account attribute quelque part. Comme l'événement étant accroché n'existe pas dans le compte stripe primaire mais dans le compte connecté.

Cela prend tout son sens Je ne sais pas comment mettre à jour ma classe pour le faire.

Stripe.api_key = Rails.configuration.stripe[:secret_key] 


class RecordAccount 
    def call(event) 
     myevent = event.data.object 

     #Look up StripeAccount in our database 
     stripe_account = StripeAccount.where(stripe_id: myevent.account).last 

     #Record Verification details and status in StripeAccount 
     u = stripe_account.update_attributes(
      verification_status: myevent.legal_entity.verification.status, 
      verification_details: myevent.legal_entity.verification.details, 
      ) 
     u.save 

    end 
end 

StripeEvent.configure do |events| 
    events.subscribe 'account.updated', RecordAccount.new 
end 

La réponse que je reçois de ce qui précède est un événement 404 - XXXX non trouvé. Ce qui est logique, mais comment le réparer. Je sais que c'est une réponse simple, je regarde l'écran depuis trop longtemps.

Répondre

0

Je n'ai pas utilisé la gemme que vous mentionnez mais j'ai eu le même problème pour les événements de compte connectés. Dans mon cas, je viens de mettre en place un point de terminaison dans mon application pour recevoir les événements du web Stripe. L'élément important est que pour les comptes connectés, vous devez utiliser la propriété "account" dans la charge utile avec l'ID d'événement, tandis que pour les événements qui concernent votre compte, vous utilisez simplement l'ID d'événement.

Voici un exemple de code de ce que je veux dire

begin 
    payload = JSON.parse(request.body.read) 
    # Verify the event by fetching it from Stripe 
    if payload['account'].present? 
     # This is for connected accounts 
     Stripe::Event.retrieve(payload['id'], stripe_account: payload['account']) 
    else 
     # Normal events 
     Stripe::Event.retrieve(payload['id']) 
    end 
    rescue Stripe::StripeError => e 
    # Handle this however you prefer 
    raise ActiveRecord::RecordNotFound.new(e) 
    end 

it helps!

+0

Vous êtes une légende de deadset! –