Я тестирование веб-перехватчики в полоской, я отправить событие с сайта 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.
Вот данные из 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"}
В любом случае, даже если это нули, это не нужно сделать исключение, не так ли? Если да, то как это проверить?
Но он говорит, что «Stripe :: Event имеет недопустимый ID: ноль», а не «evt_00000000000000». –
Правильная ошибка должна быть «Stripe :: InvalidRequestError: Нет такого события: evt_00000000000000» –
Хорошо, что ошибка должна быть из-за того, что здесь вы неправильно разбираете параметры. Я бы посоветовал вам проверить, что находится в 'request' first – koopajah