LoginSignup
5
4

More than 3 years have passed since last update.

PayjpでのInvalidRequestErrorについて

Last updated at Posted at 2021-01-20

Payjpのカード決済機能の導入中にエラーが出現

Image from Gyazo

Payjp::InvalidRequestError
今回はこちらについてやっていこうと思います。
(ちなみにapi_key = ENV[〜〜]の記述は環境変数となっています。ご自身で設定してる値になります。)

まずエラーの内容の把握

InvalidRequestErrorとは:
無効なリクエスト、という意味。

ではその下の
Missing required param to chargeとは:
missing_paramというのが必要なパラメータがセットされていないと出るもの

すなわち、この場合chargeに必要なパラメータがないよ。という意味になります。

慣れている人からすればすんなり解決できるのでしょうが、よくわからなかったので、そのまま下に進むと

Image from Gyazo

という記述。

ここでステータスコードについてのおさらい

ステータスコード 内容
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,

これで無事解決しました。

終わりに

最後駆け足になってしまいましたが、理由は修正後にこの記事を書いていることにあります。
簡単にいうと、記事を書くために無理にエラー文を出して、元のコードがわからなくなったら困るからです。

次回は修正経過もきっちりとメモしたり、画像キャプチャですしながら進めたいです。
という反省でした。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4