2015-02-15 3 views
2

Я тестирование веб-перехватчики в полоской, я отправить событие с сайта Stripe, вот мой код:Тестирование Stripe в - всегда ошибка

require 'json' 

class StripeWebHooksController < ApplicationController 
    protect_from_forgery except: :webhook 

    def webhook 
    data_json = JSON.parse(request.body.read) 
    event = Stripe::Event.retrieve(data_json['id']) 
    #.... 

Он всегда бросает исключение:

Stripe::InvalidRequestError (Could not determine which URL to request: Stripe::Event instance has invalid ID: nil) На веб-сайте Stripes он говорит, что id по умолчанию является 00000, тогда как в production.log это не нули, он имеет реальный id.

enter image description here

Вот данные из Stripe.com:

{ 
    "created": 1326853478, 
    "livemode": false, 
    "id": "evt_00000000000000", 
    "type": "charge.succeeded", 
    "object": "event", 
    "request": null, 
    "pending_webhooks": 1, 
    "api_version": "2015-02-10", 
    "data": { # and so on.... 

А вот от production.log:

[- 8b95acf0-96ab-0132-4be7-42010af08843] Parameters: {"id"=>"evt_15VG6eKl7JrIRpD6md9wpwUu", "created"=>1423721144, "livemode"=>false, "type"=>"invoice.created", "data"=>{"object"=>{"date"=>1423721144, "id"=>"in_15VG6eKl7JrIRpD6Nnd5hqm3", "period_start"=>1423721144, "period_end"=>1423721144, "lines"=>{"object"=>"list", "total_count"=>1, "has_more"=>false, "url"=>"/v1/invoices/in_15VG6eKl7JrIRpD6Nnd5hqm3/lines", "data"=>[{"id"=>"sub_5gdNIr16MzaeUe", "object"=>"line_item", "type"=>"subscription", "livemode"=>false, "amount"=>28000, "currency"=>"cad", "proration"=>false, "period"=>{"start"=>1423721144, "end"=>1426140344}, "subscription"=>nil, "quantity"=>1, "plan"=>{"interval"=>"month", "name"=>"accelerated_test", "created"=>1423705393, "amount"=>28000, "currency"=>"cad", "id"=>"accelerated_test", "object"=>"plan", "livemode"=>false, "interval_count"=>1, "trial_period_days"=>nil, "metadata"=>{}, "statement_descriptor"=>nil, "statement_description"=>nil}, "description"=>nil, "metadata"=>{}}]}, "subtotal"=>28000, "total"=>28000, "customer"=>"cus_5gdN3daWCJVNzg", "object"=>"invoice", "attempted"=>true, "closed"=>true, "forgiven"=>false, "paid"=>true, "livemode"=>false, "attempt_count"=>1, "amount_due"=>28000, "currency"=>"cad", "starting_balance"=>0, "ending_balance"=>0, "next_payment_attempt"=>nil, "webhooks_delivered_at"=>nil, "charge"=>"ch_15VG6eKl7JrIRpD6nHI4iIdx", "discount"=>nil, "application_fee"=>nil, "subscription"=>"sub_5gdNIr16MzaeUe", "tax_percent"=>nil, "metadata"=>{}, "statement_descriptor"=>nil, "description"=>nil, "receipt_number"=>nil, "statement_description"=>nil}}, "object"=>"event", "pending_webhooks"=>1, "request"=>"iar_5gdNTJThO2GckT", "api_version"=>"2014-11-20"} 

В любом случае, даже если это нули, это не нужно сделать исключение, не так ли? Если да, то как это проверить?

ответ

4

Проблема заключается в том, что кнопка Test Webhook отправляет фальшивое событие, поэтому вы не можете получить его через API. Вам нужно добавить какой-то конкретный код, чтобы при идентификаторе события "evt_00000000000000" вы не вызывали Stripe::Event.retrieve(data_json['id'])

Если вы хотите протестировать веб-камеры, просто создайте клиентов или зарядите их в тестовом режиме в своей учетной записи, и события будут отправлены автоматически.

+0

Но он говорит, что «Stripe :: Event имеет недопустимый ID: ноль», а не «evt_00000000000000». –

+0

Правильная ошибка должна быть «Stripe :: InvalidRequestError: Нет такого события: evt_00000000000000» –

+0

Хорошо, что ошибка должна быть из-за того, что здесь вы неправильно разбираете параметры. Я бы посоветовал вам проверить, что находится в 'request' first – koopajah

Смежные вопросы