概要
laravel cashierのhasDefaultPaymentMethod()
の仕様を調べていたところ若干不安になる仕様だったのでまとめる。
メソッドの仕様
当該のメソッドはvendor/laravel/cashier/src/Concerns/ManagesPaymentMethods.php
に定義されている。
/**
* Determines if the customer currently has a default payment method.
*
* @return bool
*/
public function hasDefaultPaymentMethod()
{
return (bool) $this->pm_type;
}
ようはpm_typeに値が入っていればtrue、入っていなければfalseが返るっぽい。
じゃあpm_typeの出処はどこなのかというとusersテーブルのpm_typeのカラムっぽい。
ただ、このカラムの値はどうやら「最終支払いの支払い方式を保存する」というものらしい。ようはSetup IntentなどでクレカIDと顧客を紐付ける処理を行ったときにpm_typeは特に更新されないっぽい。
このとき何が問題かというと、下記のようなケースで「true」になって欲しいのに「false」になる。
「Setup Intentを使ってクレカを登録した。支払い前にデフォルト支払い方法が設定されているか確認したくてhasDefaultPaymentMethod()
を実行した。
hasDefaultPaymentMethod
という名前が誤解を招いている気がする。
所感
hasDefaultPaymentMethod()
ではなくhasPaymentMethod()
を使ったほうがいいかも。
参考文献