Payjpのカード決済機能の導入中にエラーが出現
Payjp::InvalidRequestError
今回はこちらについてやっていこうと思います。
(ちなみにapi_key = ENV[〜〜]の記述は環境変数となっています。ご自身で設定してる値になります。)
まずエラーの内容の把握
InvalidRequestErrorとは:
無効なリクエスト、という意味。
ではその下の
Missing required param to chargeとは:
missing_paramというのが必要なパラメータがセットされていないと出るもの
すなわち、この場合chargeに必要なパラメータがないよ。という意味になります。
慣れている人からすればすんなり解決できるのでしょうが、よくわからなかったので、そのまま下に進むと
という記述。
ここでステータスコードについてのおさらい
ステータスコード | 内容 |
---|---|
100~ | 処理を継続中 |
200~ | 成功 |
300~ | リダイレクト |
400~ | クライアント側のエラー |
500~ | サーバー側のエラー |
厳密にはもっと細かいですが大雑把にはこんな感じ
今回はステータスコード400ということでクライアント側が問題なのでは?と仮説を立てた。
まず仮説1つ目はform_withのmodelやurlの記載ミス
仮説2つ目は・・・・・
なんて数時間過ごした結果全て無駄なことでした。
原因
ステータスコードより見なければいけないところがありました。
amount: user_order_params[:price],
card: user_order_params[:token],
currency: 'jpy'
の部分。
出品者が定めた金額を支払って購入する設定なので、金額を直接入力し送信したわけではないためにこちらのuser_order_paramsにはpriceの情報はありません。
ここがエラーの原因となってました。
解決法
今実装している機能において、priceという値はitemsテーブルという場所に保存するようになっています。
よって、
amount: user_order_params[:price],
↓
amount: @item.price,
これで無事解決しました。
終わりに
最後駆け足になってしまいましたが、理由は修正後にこの記事を書いていることにあります。
簡単にいうと、記事を書くために無理にエラー文を出して、元のコードがわからなくなったら困るからです。
次回は修正経過もきっちりとメモしたり、画像キャプチャですしながら進めたいです。
という反省でした。