携帯公式サイト課金状態不整合対応

キャリア側の課金DBとこちらのDBの課金状態に不整合が発生する。良く耳にする話である。これは、単にユーザーが課金ボタンを押したあとにphpの処理が終わらないうちにバックボタンを押してしまいphp側でデータベースに課金状態を書き込む前に処理が終了してしまっているケースである場合が多い。

通常、phpは接続が中断されると処理も中止されてしまうが、ignore-user-abortを設定することで、接続が切断されても処理を実行しつづけることができる。これを設定することで、課金状態の不整合はだいぶ防げます。尚、この関数はむやみに使うとWEBサーバー(Apache等)のプロセスを食いつぶす可能性があるので、必要なところだけで設定してください。

ignore-user-abortを使わず、接続状態connection-statusをみて条件分岐し、場合によって課金のキャンセル処理といった処理をするのが理想ですが、こちらは処理が煩雑になります。

参考