1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

laravel Cashier(Stripe)クレカ情報登録のテストですごい詰まった

Posted at

概要

laravel Cashier(Stripe)のクレカ情報登録時の一連の実装の確認部分で信じられないくらい詰まったので簡単にまとめる。

情報

一般的にわかりやすいようにクライアント送信ツールを「Postman」と書いているが実際に筆者が使っているのは「Thunder Client」である。

クレカ情報登録処理の流れ。

laravelはAPIサーバーとして使っているのでフロントエンドと一体となってクレカ情報は登録する。

詰まった作業

バックエンドのみでPostmanのようなリクエスト送信ツールを使ってクレカ情報が登録できるか手動のテストをしたかった。
上記でいうと「支払い方法ユーザー紐づけAPI実行」がちゃんと動作するかテストしたかった。

お膳立てをしていく途中で詰まる

試したいAPIを実行するために「setupIntentIDを取得(client secret取得API実行)」 → 「テストのクレカ情報登録(ターミナルから命令)」 → 「試したいAPI実行(支払い方法ユーザー紐づけAPI)」というふうに試そうと思った。

  1. 手動でPostmanから「client secret取得API実行」しsetupIntentIdを取得する。

  2. 下記の方法のcURLの例を使ってテスト用クレジットカードの登録を試みた。(これが間違いの発端)

    https://stripe.com/docs/api/payment_methods/create?lang=curl

  3. ターミナルで上記を実行したところ下記のエラーが出る。簡単に言うと「クレカ情報を平文で送ることはNGだよ、どうしてもやりたいなら下記リンクから方法を調べてね」

    "error": {
        "message": "Sending credit card numbers directly to the Stripe API is generally unsafe. We suggest you use test tokens that map to the test card you are using, see https://stripe.com/docs/testing. To enable raw card data APIs in test mode, see https://support.stripe.com/questions/enabling-access-to-raw-card-data-apis.",
        "request_log_url": "https://dashboard.stripe.com/test/logs/req_Jt4lXSHTkoy0HV?t=1701707620",
        "type": "invalid_request_error"
    }
    
  4. 当該リンク先を読むと平文で送信したいならサポートにリクエストしてほしい旨が書かれている。テスト環境 + テストクレカ情報でもNGとのことなのでこの方法はなんかおかしそう。

テスト用クレカのPAYMENTMETHODからpaymentMethodIdを確認し解決へ、、、

下記にStripeのテスト用クレカ情報がある。これはすでにpayment methodとしてStripeに登録済みのもの。

自分の今回テストしたいAPI(支払い方法ユーザー紐づけAPI)はsetupIntentIdpaymentMethodIdをリクエストボディで受け取る。この場合PAYMENTMETHODに記された記載をそのままpaymentMethodIdに渡してもそもそも「pm_から始まる文字列であること」などのバリデーションルールを指定しているので通らない。

下記をターミナルで実行してPAYMENTMETHODからpaymentMethodIdを取得してみる。

stripe payment_methods retrieve pm_card_jp

下記のように出力された。

$ stripe payment_methods retrieve pm_card_jp
{
  "id": "pm_1OJfNdEwNfmSaNN2Mg1gsEhy",
  "object": "payment_method",
  "billing_details": {
    "address": {
      "city": null,
      "country": null,
      "line1": null,
      "line2": null,
      "postal_code": null,
      "state": null
    },
    "email": null,
    "name": null,
    "phone": null
  },
・
・
・

これでpm_から始まるpaymentMethodIdを確認することができた。これで「支払い方法ユーザー紐づけAPI」が実行できそう。

無事APIが実行されて下記のようにクレカ情報がテスト環境のStripe画面上でも確認する事ができた。

顧客_–DokuPro_test–Stripe__テスト.png

教訓

Stripeのテスト用クレカ情報は自分でクレカ登録しようとせず、すでにpayment methodとして登録済みのPAYMENTMETHODを使ってターミナルで$ stripe payment_methods retrieve PAYMENTMETHODを実行してpm_から始まるpaymentMethodIdを取得して使おう。

参考文献

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?