中国インターネット事情

ITを中心に中国の事 もろもろ

ECcube 無料商品のカートへの追加を初めて貰う商品のみに制限するハック

一度サンプルを送ったら、同じIDには次は送らないようにしたい。購入履歴から過去のサンプル商品を特定して、同じものをカートに投入できないようにします。

先ずこちらをご覧ください。
https://chinese-homepage.com/modules/d3blog/details.php?bid=302

if ($price === "0"){

              $objCustomer = new SC_Customer();
              //ログイン判定
              if (!$objCustomer->isLoginSuccess()){
                 SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG,"",false,"無料商品は会員登録してログイン状態で選択してください。<br />会員登録は右上の「会員登録」からお願いします。",false); //←ログイン以外はエラー
                 exit;
              }

ここまでは、さきのURLにある通り。その下に以下コードを追加します。なお、必ずログイン判定部が必要になります。お客を特定できないと、過去に買った商品を特定できません。

             $objQuery = new SC_Query();
              $objCustomer = new SC_Customer();
              //customer_idを検証
              $customer_id = $id;
              $customer_id[3] = $objCustomer->getValue("customer_id");
              $order_count = $objQuery->count("dtb_order_detail AS T1 INNER JOIN dtb_order AS T2 ON T1.order_id = T2.order_id", "T1.product_id = ? and T1.classcategory_id1 = ? and T1.classcategory_id2 = ? and T2.customer_id = ?",$customer_id);

              if ($order_count > 0){
                 SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG,"",false,"本商品は追加できません。<br />無料商品はお一人様(1住所)一度のみとなっております。",false); //←ログイン以外はエラー
                 exit;
              }

過去に一度貰った商品をカートに入れようとすると、エラーメッセージを表示して、無料商品をカートに追加することが出来ない状態になります。
なお、他の無料商品や有料商品は普通に追加可能です。

なお、不具合については特にチェックしていませんのでよくテストをした方が良いと思われます。
ハックの適用は自己責任でお願いします。