質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

4271閲覧

【Ruby】cURLでは通るのにfaradayだとAPIに弾かれる

KazuyaHara

総合スコア6

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2015/03/26 17:20

決済サービスのSPIKEのAPIとやりとりをするための実装をrubyで書いていますが、cURLではうまくいく内容がfaraday経由だとうまく通らず400が返ってきてしまいます。

lang

1curl "https://api.spike.cc/v1/tokens" \ 2 -u "sk_test_myapikey:" \ 3 -d "card[number]=4444333322221111" \ 4 -d "card[exp_month]=3" \ 5 -d "card[exp_year]=2016" \ 6 -d "card[cvc]=111" \ 7 -d "card[name]=TARO SPIKE" \ 8 -d "currency=JPY" \ 9 -d "email=foo@example.com"

lang

1require "faraday" 2require "faraday_middleware" 3require "json" 4 5conn = Faraday.new(:url => 'https://api.spike.cc') do |builder| 6 builder.request :url_encoded 7 builder.response :logger 8 builder.adapter :net_http 9 builder.authorization :Bearer, 'sk_test_myapikey:' 10end 11 12json_body = { 13 "card" => { 14 "number" => "4444333322221111", 15 "exp_month" => "3", 16 "exp_year" => "2016", 17 "cvc" => "111", 18 "name" => "TARO SPIKE"}, 19 "currency" => "JPY", 20 "email" => "foo@example.com" 21}.to_json 22 23response = conn.post do |req| 24 req.url '/v1/tokens' 25 req.body = json_body 26end

コードに問題ありそうでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SPIKE のSANDBOX 公開鍵が使えず確認できなかったので推測だけで書きます。

lang

1json_body = { 2 "card" ={ 3 "number" ="4444333322221111", 4 "exp_month" ="3", 5 "exp_year" ="2016", 6 "cvc" ="111", 7 "name" ="TARO SPIKE"}, 8 "currency" ="JPY", 9 "email" ="foo@example.com" 10}.to_json

の部分がまずいような気がします。card[number]=444433332222111{"card":{"number":"4444333322221111"}} が等価だと思えません。

card[number] などを素直に文字列として扱って

lang

1json_body = { 2 "card[number]" => "4444333322221111", 3 "card[exp_month]" => "3", 4 "card[exp_year]" => "2016", 5 "card[cvc]" => "111", 6 "card[name]" => "TARO SPIKE", 7 "currency" => "JPY", 8 "email" => "foo@example.com" 9}.to_json

としてみてはいかがでしょうか。

投稿2015/03/27 03:56

riocampos

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問