LINE Payのオンライン決済を実装する機会があったので主なハマりどころを共有します。
Transaction IDが丸められる
決済要求のためにRequest APIを呼ぶ必要があるのですが、このAPIから返ってくるTransaction IDは19桁の数値で返ってきます。
決済要求の結果として受け取った取引番号(19桁)
https://pay.line.me/documents/online_v3_ja.html#confirm-api
19桁の巨大な数値なので、そのまま受け取ってしまうと丸められてしまう可能性があります。
その後のConfirm APIにTransaction IDを渡す必要があるのですが、丸められていると当然違う値なので「決済要求情報が存在しません。」となり決済が出来ません。
丸められていることに気づくまでかなりの時間を要しました。文字列で返すなどアップデートで対応してほしいところです。
JavaScriptで書かれたLINE Payのライブラリがあるのですが、こちらではlossless-jsonを利用してこの問題に対応しているようです。
https://github.com/nkjm/line-pay
自動決済キー(RegKey)の有効期限がわからない
サブスクリプション等のユーザーの操作を必要としない決済を実現するには自動決済キー(RegKey)を取得する必要があります。
このRegKeyには有効期限があります。
有効かチェックするAPIはありますが有効期限を知る手段はありません。
また有効期限の詳細についてはドキュメントには書いて無いので問い合わせる必要があります。
RegKeyには有効期限があります。詳細についてはお問い合わせください。
https://pay.line.me/documents/online_v3_ja.html#0de93db440
問い合わせたところ
- 最後の決済から180日間でexpireされる
- ユーザは設定画面からexpireできる
という仕様らしいです。
またsandbox環境では有効期限が1日に設定されているようなのでこれにも注意が必要です。
Sandbox環境ではLINEアプリ内の決済が使えない
LINE Payを実装するのにSandbox環境でまず試すケースがほとんどだと思うのですが、環境によって挙動が変わるので注意が必要です。
LINE Payの決済はWebで決済を行うか、LINEのアプリで決済を行うか選択が出来ますが、Sandbox環境ではLINEアプリ内の決済が利用できません。
ドキュメントにも書いていないと思うのでわからなかったですが、問い合わせした時に使えないとの回答をいただきました。
Sandbox環境ではWebの決済を利用するか、テスト加盟店環境を利用する必要があります。
Sandbox環境と他の環境の挙動が違う
LINE PayのはLINEのアプリ内にサービスを開発できるLIFF(LINE Front-end Framework)を使って実装していました。
Sandbox環境はWebシミュレーターとして実装されているそうなのでLIFFでの決済画面はそのままWebの遷移となります。
しかし、Sandbox以外の環境ではLINEのアプリ内にモーダルが立ち上がり決済画面が出ます。
決済後にRequest APIのredirectUrls.confirmUrlに設定したURLにリダイレクトするのですが、これは外部のブラウザで開かれます。
LIFFはLINEのアプリ内のブラウザで完結するのでUXが良いと思っていましたが、LINE Payを使う場合は決済終了後にアプリから離脱するのは避けられないようです
1秒間隔のAPIリクエスト推奨
Check Payment Status APIは1秒間隔で呼び出すことが推奨されています。
Check Payment Status APIのリクエスト頻度は1秒を推奨します。
https://pay.line.me/documents/online_v3_ja.html#check-payment-status-api
問い合わせで聞いたところでは自動決済を行うPay Preapproved APIも1秒間隔で呼び出すことが推奨されているようです。
リソースの関係でとのことですが、1秒間隔ということはもし10,000ユーザーの課金を処理しようとすると
最低でも10000秒なので2.8時間ほどかかる計算になります。ユーザー数が多いサービスには向かない決済なのかもしれませんね。。
まとめ
LINE Payはドキュメントに書かれていないことが結構あります
また環境ごとの動作が違うのでsandboxだけで技術検証するのは避けたほうが良いです。
サポートは充実しているのでわからないことはすぐに問い合わせましょう。
https://pay.line.me/jp/developers/techsupport/sandbox/contact?locale=ja_JP