■クレジットカード支払いで不具合的な挙動をする
PAYJPを利用してカードの支払を実装しているのですが、一点不具合というか挙動が微妙なところがあったので回避方法です。
▼今回利用している機能は「定期課金の更新機能」です
こちらで公式に書かれている、定期課金の更新機能を利用していました。
月の途中で定期課金プランの変更を行うと、今までのプランの課金を日割り計算して自動で返金、新しいプランを日割り計算して再課金。というとっても便利な機能です。
APIの詳細なドキュメントはこちらです。
https://pay.jp/docs/api/#定期課金を更新
▼不具合の内容
以下のパターンに当てはまる時に少し困ることがありました。
・定期課金を開始している状態の顧客
・この顧客のカードが利用できない状態になっていた。利用枠上限まで達したなど。
・月の途中で上記「定期課金の更新機能」を使ってプランを変更した
上記の行動をユーザがとったとき、「定期課金の更新機能」を使うとPAYJPでは以下のような挙動を取ります。
・今までのプランを解約
・今までの料金を確定して、本日以降の金額を返金
・定期支払を新しいプランに変更
・本日以降の金額の日割りを課金
・カードの課金ができない状態なので失敗
ここで問題になったのは、
今までのプランを解約して、返金まで完了。新しいのを課金しようとしてエラー
となって、「定期支払処理以外で支払いなしの定期課金が存在する変な状態。ほぼ強制解約状態」になっている。ということでした。
運用側からすると、返金はされていて、次の支払いがない状態なので「解約」状態になります。
ユーザからすると、カードの支払に失敗したら強制的に解約されて困った状態。
そして、プランの状態もActiveの状態で判定もめんどうくさい状態でこまった。
というのが不具合な挙動です。
PAYJPに問い合わせしたところ、不具合っぽいので調整します、とのことでした。ありがとうございます。
▼直近の回避方法
ただ、PAYJPの修正リリースには結構時間がかかるようで調整が必要です。どうやって回避しようかいろいろ考えた結果、以下のような回避をしました。これが一番簡単なはず。
・プラン更新のときの実装
1.新規に「日割りあり」定期課金を作成する
→ この時支払いに失敗したら例外で停止。今までの定期課金は残るし、新規に定期課金も作成されない
2.上記成功したら今までの定期課金を「今までのやつ返金あり」で削除
→ 削除します。顧客情報に支払いの情報が保持されているので、定期を消しても一応確認できるので、良しとします。
結構めんどうな回避を想像していましたが、簡単にできたような気もします。大丈夫かな。
修正されるのを待つばかりです。