PHPでECサイトを自作しています。山火事のように広がる可能性のある一般的な「10%OFF」をすべての人に送信することなく、過去の顧客にクーポン コードを提供したいと考えています。すべてのコードを一意にして、既知の割引値にマップしたいと考えています。
データベースにすべての可能な組み合わせをシードすることなく、その場でクーポンコード (文字列) を評価できるプラグイン/フレームワーク/簡単な機能はありますか?
PHPでECサイトを自作しています。山火事のように広がる可能性のある一般的な「10%OFF」をすべての人に送信することなく、過去の顧客にクーポン コードを提供したいと考えています。すべてのコードを一意にして、既知の割引値にマップしたいと考えています。
データベースにすべての可能な組み合わせをシードすることなく、その場でクーポンコード (文字列) を評価できるプラグイン/フレームワーク/簡単な機能はありますか?
私が働いていた会社のために、「クーポンコード」ジェネレーターを作成しました。これにより、データベースにロードする費用をかけずに、何百万もの自己検証コードを生成できました。
コードは次のように計算されました。
16 文字以上のソルトを作成して保存します。
カウンターを 0 からコード数 - 1 までループします。カウンターごとに:
a. カウンターとソルトのハッシュを生成します。md5(counter + salt)
b. カウンターとハッシュ値としてクーポンコードを生成する
次に、クーポン コードを受信すると、カウンターを抽出し、カウンター + ソルトをハッシュして、コードで見つかったハッシュと比較します。それらが同じ場合、コードが有効であることがわかります。
コードを使用して販売が生成された場合は、その使用がテーブルに記録されるため、再度使用することはできません。
印刷メディアの場合、大文字の base-32 値 (2-9、AH、JN、PZ) を使用してクーポン コードを生成しました。メールと URL には、変更された base-64 値を使用しました ( urlsafe_b64encode()を参照) 。
残念ながら、NDA の下にあるため、実際のコードを提供することはできません。幸運を!
DB をチェックせずにクーポンの種類を判別できるようにクーポン コードを構成することができます (または、クーポンの種類だけでいっぱいのテーブルにこれらを保存することができます (以下を参照)。その方法で、保存する必要はありません)。可能性のあるすべての組み合わせ)、クーポンが以前に使用されたかどうかを確認するために使用できる一意の番号を最後に追加します。例えば:
d8h7bb0778719945
->d8h7bb
はクーポン タイプ (このタイプの他のすべてのクーポンで同じ) で0778719945
あり、一意の番号です (タイプに関係なく、すべてのクーポンで異なります)。
最初に購入する商品にクーポンの種類が有効かどうかを確認してください。0778719945
そうである場合は、クーポン データベースをチェックして、それが請求されているかどうかを確認します。
ご自身で書かれているので、こちらがおすすめです。
クーポンを適用するときに、サインインしているユーザーの注文履歴をチェックして、以前に注文したかどうかを確認する、新しいクーポン タイプを作成します。
クーポン テーブルに、次のフィールドrequireSignIn
と を追加しますrequirePastOrders
。これらのフィールドを設定して 1 つのクーポンを作成します。顧客がそのクーポンを適用しようとするときは、必要なチェックを行って、ログインしていることと、以前に注文したことがあるかどうかを確認してください。これらのテストが失敗した場合は、適切なエラー メッセージを表示します。