#ruby #ruby-on-rails-4 #rspec #stripe-payments #webmock
#ruby #ruby-on-rails-4 #rspec #stripe-платежи #webmock
Вопрос:
Я пытаюсь издеваться над Stripe следующим образом:
stub_request(:post, "https://api.stripe.com/v1/tokens").with(
:body => {"card" => {"number" => "4242424242424242", "exp_month"=> "12", "exp_year" => "2018", "cvc" => "123"}}
).
to_return(:status => 200, :headers => {}, :body => {
"id" => "tok_14CgP22eZvKYlo2CkgJ6ymLE",
"livemode" => false,
"created" => 1404517660,
"used" => false,
"object" => "token",
"type" => "card",
"card" => {
"id" => "card_14CgP22eZvKYlo2CcdUNvicW",
"object" => "card",
"last4" => "4242",
"brand" => "Visa",
"funding" => "credit",
"exp_month" => 12,
"exp_year" => 2018,
"fingerprint" => "Xt5EWLLDS7FJjR1c",
"country" => "US"
}
})
Я получаю no implicit conversion of Hash into String
ошибку при вызове:
token = Stripe::Token.create(:card => {
:number => params["number"],
:exp_month => params["expiry_month"],
:exp_year => params["expiry_year"],
:cvc => params["cvc"]})
Это из-за хэша в body
в to_return
, но я не знаю, как избежать ошибки.
Если я добавляю .to_s
к хэшу, я получаю:
Недопустимый объект ответа из API: «{«id»=>»tok_14CgP22eZvKYlo2CkgJ6ymLE», «livemode»=> false, «created»=> 1404517660, «used»=> false, «object»=>»token», «type»=>»card», «card»=>{«id»=>»card_14CgP22eZvKYlo2CcdUNvicW», «object»=>»card», «last4″=>»4242″, » бренд»=>»Visa», «финансирование»=>»credit», «exp_month»=> 12, «exp_year»=> 2018, «отпечаток пальца» =>»Xt5EWLLDS7FJjR1c», «страна» => «US»}}» (код ответа HTTP был 200)
Если я добавляю .to_json
в конец, Stripe::Token
проходит, но я получаю stack error too deep
ошибку, когда пытаюсь каким-либо образом использовать полученный token
результат.
Что вы рекомендуете?
Комментарии:
1. Какой бит кода возвращается
Invalid response object from API
?:body
вstub_request
должна быть строка.to_json
звучит как правильная вещь, но какую ошибку это выдает?2. Ошибка была от
token = Stripe::Token.create(:card => { :number => params["number"], :exp_month => params["expiry_month"], :exp_year => params["expiry_year"], :cvc => params["cvc"]})
.3. С помощью
.to_json
,Stripe::Token
не выдал ошибку, но вызов результирующегоtoken
выдает.
Ответ №1:
Возможно, ваша заглушка возвращается некорректно. Это может помочь сделать вашу заглушку немного менее конкретной. Например:
body = {
"id" => "tok_14CgP22eZvKYlo2CkgJ6ymLE",
"livemode" => false
# snip...
}
stub_request(:post, "https://api.stripe.com/v1/tokens")
.to_return(:status => 200, :body => body.to_json)
Однако трудно точно определить, какие ошибки выдаются, поэтому я могу дать только смутные идеи, которые могут помочь. Какую ошибку выдает вам вызов token
?
Комментарии:
1. К сожалению, это выдает
stack error too deep
ошибку.2. Даже при изменении на mocking? Можете ли вы обновить вопрос с остальной частью вашего кода?