見出し画像

Webページを開くたびに一意の値を生成する仕組み

私が構築したECサイトでは、クレジットカード等の各種決済にペイジェントを利用している。

リンクタイプという種類のもので、決済に飛ぶバナーをクリックすると、予め仕込んでおいた情報の金額や手段の決済ページが表示されるというものだ。

ECサイトからペイジェントに接続する際にハッシュ関数を生成する必要があるのだが、そこでは取引IDという一意の値を使用しなければならない。

決済代行業者への接続なんてやった事が無く、右も左も分からない状態でペイジェントの仕様書を読んでいた。提供されたハッシュ生成用プログラムのサンプルには、java・php・perl等があったのでphpにした。

明確な理由は無い。なんとなく出来そうという直感だ。

phpで書かれたサンプルを開くと、取引IDを指定する項目があった。仕様書によると、決済の個別管理にも使用するので、ここは一意の値でなければならないとの事だ。データベースの主キーになるという事か。

htmlはただのマークアップ言語なので、値を生成する事は出来ないだろう。出来るのかもしれないが、動的処理はjavaやphpを組み込んで部分的に処理しているイメージだ。

駄目元でペイジェントに取引IDの生成方法を問い合わせてみた所、「取引IDは加盟店で生成して下さい。サポート出来ない」という返答だった。そりゃそうだ。ペイジェントは一切悪くない。

さて困った。
いくつか方法を考えてみた。

  1. 指定した形式の文字列をユーザに入力してもらう
    →重複の可能性があるし、何よりユーザに負担を強いるので却下

  2. 一意の文字列を山ほど登録したデータベースを用意して、そこを順に参照する
    →データベースのレコードが尽きる可能性を気にしなければならないし、もっと簡単な方法がある気がするので却下

重複せず無限に尽きない文字列を決済のたびに自動生成しなければならない。

答えは思いもよらぬ所から降ってきた。

実は当時、同時並行でcssが効かない問題という悩みも抱えていた。サイト構築の最中は、style.cssを修正するたびにアップロードして、ページのF5更新で反映を確認する。という作業を幾度となく行う。

cssを書き換えても見栄えが変化しないので、キャッシュを読んでいるせいではないか?と疑っていた。(実際には記述が悪かっただけでキャッシュ要因ではなかったのだが)

cssの強制的な更新について調べている時に、リンクにパラメータを付加すれば別ファイルと認識されて毎度リフレッシュされるという記事を読んだ。htmlの中でcssファイルへのリンクを記述するのだが、リンクの最後にphpで生成した日時の値をパラメータで付加する事で、読み込むファイルは変わらないのだが、Webサーバが別ファイルと認識する。という訳だ。

<link rel="stylesheet" href="/css/style.css?<?php echo date("YmdHis"); ?>">

このように記述する事で、ページを開いた際にはこうなる。

<link rel="stylesheet" href="/css/style.css?yyyymmddhhmmss">

この手法を考えた奴は天才かと思った瞬間、取引ID生成問題とこの解決方法がリンクし、私の脳に衝撃が走った。私もまた天才の一人だったのだと誤解してしまう程の衝撃だった。

かつて岡田 斗司夫は言った。
知識量が臨界点を超えると、それぞれが勝手にリンクし始めて面白いアイディアが浮かぶ

実際には大した事でも無いのに、「こういう事ね。岡田さん」と勝手に納得してしまった。全く関係無い会話の中から、別問題の解決の糸口を発見する探偵になったような気分だった。お手柄だよ今泉君というやつだ。

ページを開いた瞬間の日時を取得する。
この手法であれば、私の脳内会議で却下された案の弱点である重複と枯渇のリスクを回避出来る。また、決済の日時も特定出来るので、問い合わせや決済トラブルの解消にも役立つ。

index.phpに以下のように記述した。

<?php
  $trading_id = date("YmdHis");

【ハッシュ関数生成プログラム】

?>

かくして一つの課題が解消された。何か難問を抱えて行き詰ってしまった時は、あえて別の事に精を出してみると功を奏する事もある。という教訓を得た。

この記事が気に入ったらサポートをしてみませんか?