0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pay.jpを利用する際のJavaScriptの注意点

Posted at

概要

フリマアプリを制作した際、Pay.jpを利用してクレジットカード機能を実装する際にかなりハマったことがあったので書き記したいと思います。

やりたかったこと

カード情報をJavaScriptでPay.jpに送信し、トークンを取得します。

間違えたコード

card.js
const card = {
      number: formData.get("buy_record_delivery[number]"),
      month: formData.get("buy_record_delivery[exp_month]"),
      year: `20${formData.get("buy_record_delivery[exp_year]")}`,
      cvc: formData.get("buy_record_delivery[cvc]"),
    };

間違えたコードを実行した結果

https://api.pay.jp/vi/tokens 400

コンソール上でエラーが出ました。URLをクリックすると下記の通りになりました。

{
 "error": {
   "code": "invalid_param_key",
   "message": "Invalid param key to token",
   "param": "card[month], card[year]",
   "status": 400,
   "type": "client_error"
  }
}

上記のエラー内容とログ内容を考察すると、カード情報の番号とセキュリティコードはPay.jpに送られているが、有効期限の月と年が送れていない為エラーになっていることがわかった。しかし、なぜ送れるデータと送れないデータがあるのかがわからずハマりました。

修正したコード

card.js
const card = {
      number: formData.get("buy_record_delivery[number]"),
      exp_month: formData.get("buy_record_delivery[exp_month]"),
      exp_year: `20${formData.get("buy_record_delivery[exp_year]")}`,
      cvc: formData.get("buy_record_delivery[cvc]"),
    };

monthをexp_manthに、yearをexp_yearに変更することで全てのカード情報を送信することができました。

まとめ

Pay.jpにカード情報を送る際には、monthやyearだけだと有効期限ではなくただの「month」「year」と認識されてしまうようです。exp_month(year)とすることで有効期限と認識されるとのことで、気付くのに時間がかかりました。

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?