PHP限时抢购限时秒杀逻辑性详细说明

摘要: $TEMPLATE[ type ] = buy $TEMPLATE[ pageTitle ] = 限时抢购 $active_model = new \model\Active(); $goods_model = new \model\Goods(); // 主要参数的解决 $active_id = getReqInt( active_id $goods_id = getReqInt( goods_id $goods_nu...

 $TEMPLATE[ type ] =  buy  $TEMPLATE[ pageTitle ] =  限时抢购  $active_model = new \model\Active();  $goods_model = new \model\Goods();  // 主要参数的解决  $active_id = getReqInt( active_id  $goods_id = getReqInt( goods_id  $goods_num = getReqInt( goods_num  $sign_data = $_POST[ sign_data  $question_sign = $_POST[ question_sign  $ask = $_POST[ ask  $answer = $_POST[ answer  $action = isset($_POST[ action ]) ? $_POST[ action ] : false;  if ( buy_cart  == $action) {  $goods_num = $_POST[ num ][0];}$client_ip = getClientIp();  // 1 认证客户是不是登陆  if (!$ || !$[ uid ]) {  $result = array( error_no  =   101 ,  error_msg  =   客户登陆以后才能够参加  show_result($result);}$uid = $[ uid $username = $[ username  // 2 认证主要参数是不是恰当、合理合法  if (!$active_id || !$goods_id  || !$goods_num || !$question_sign) {  $result = array( error_no  =   102 ,  error_msg  =   主要参数递交出现异常  show_result($result);}  // 3.1 认证主题活动情况信息内容  $status_check = false;  $str_sign_data = unsignQuestion($sign_data);$ = json_decode($str_sign_data, true);  // 時间不可以超出当今時间五分钟,IP和客户维持不会改变if ($    $[ now ]   $now    $[ now ]   $now - 300    $[ ip ] == $client_ip    $[ uid ] == $uid) {  $status_check = true;}if (!$status_check) {  $result = array( error_no  =   103 ,  error_msg  =   客户校检值认证沒有根据  show_result($result);}  // 3.2 认证问与答信息内容是不是恰当  $question_check = false;$str_question = unsignQuestion($question_sign);  $ = json_decode(trim($str_question), true);if ($str_question   $) {  if ($[ ask ] == $ask    $[ answer ] == $answer    $[ aid ] == $active_id    $[ uid ] == $uid    $[ ip ] == $client_ip    $[ now ]   $now -300  ) {  $question_check = true;  }}if (!$question_check) {  $result = array( error_no  =   103 ,  error_msg  =   问与答认证沒有根据  show_result($result);}  // 统一文件格式化单产品、组成产品的数据信息构造  $nums = $goods = array();  if ( buy_cart  != $action) {  $nums = array($goods_num);  $goods = array($goods_id);} else {  $num = $_POST[ num  $goods = $_POST[ goods }  $redis_obj = \common\Datasource::getRedis( instance1  $d_list = array(   u_trade_  . $uid .  _  . $active_id,   st_a_  . $active_id);/**  * id, sys_status,  * num_user, num_left,  * price_normal, price_discount  */foreach ($goods as $i =  $goods_id) {  $d_list[] =  info_g_  . $goods_id; // 产品  }$data_list = $redis_obj- mget($d_list);  // 4 认证客户是不是早已选购  if ($data_list[0]) {  $result = array( error_no  =   104 ,  error_msg  =   请不必反复递交定单  show_result($result);}  // 5 认证主题活动信息内容,产品信息内容是不是一切正常  if ($data_list[1]) {  $result = array( error_no  =   105 ,  error_msg  =   主题活动信息内容出现异常  show_result($result);  }unset($data_list[0]);  unset($data_list[1]);/* // 4 认证客户是不是早已选购 $trade_model = new \model\Trade(); $ = $trade_model- getUserTrade($uid, $active_id); if ($) {  $result = array( error_no  =   104 ,  error_msg  =   请不必反复递交定单  show_result($result); // 5 认证主题活动信息内容,产品信息内容是不是一切正常 $ = $active_model- get($active_id); if (!$ || $[ sys_status ] !==  1  || $[ time_begin ]   $now  || $[ time_end ]   $now ) {  $result = array( error_no  =   105 ,  error_msg  =   主题活动信息内容出现异常  show_result($result); if ( buy_cart  != $action) {  $nums = array($goods_num);  $goods = array($goods_id); } else {  $nums = $_POST[ num  $goods = $_POST[ goods */$num_total = $price_total = $price_discount = 0; $trade_goods = array(); foreach ($data_list as $i =  $) {  $goods_num = $nums[$i - 2];  // $ = $goods_model- get($goods_id);  if (!$ || $[ sys_status ] !==  1 ) {  $result = array( error_no  =   106 ,  error_msg  =   产品信息内容出现异常  show_result($result);  }// 6 认证客户选购的产品总数是不是在限定的范畴内  if ($goods_num   $[ num_user ]) {  $result = array( error_no  =   107 ,  error_msg  =   超过产品总数的限定  show_result($result);  }// 7 认证产品是不是也有剩下总数  if ($[ num_left ]   $goods_num) {  $result = array( error_no  =   108 ,  error_msg  =   产品剩下总数不够  show_result($result);  }// 8 扣减产品剩下总数  $left = $goods_model- changeLeftNumCached($goods_id, 0-$goods_num);  $ok = false;  if ($left  = 0) {  $ok = $goods_model- changeLeftNum($goods_id, 0-$goods_num);  } else {  // 扣减产品库存量不成功  $goods_model- changeStatusCached($goods_id, 0);  $result = array( error_no  =   108 ,  error_msg  =   产品剩下总数不够  show_result($result);  }// 9.1 建立订单详情,定单的产品信息内容  $trade_goods[] = array(    =  $,   goods_num  =  $goods_num  );  $num_total += $goods_num;  $price_total += $[ price_normal ] * $goods_num;  $price_discount += $[ price_discount ] * $goods_num;}// 9.2 储存订单详情  $trade_model = new \model\Trade();$ = array(   active_id  =  $active_id,   goods_id  =  $goods_id,   num_total  =  $num_total,   num_goods  =  count($goods),   price_total  =  $price_total,   price_discount  =  $price_discount,    =  json_encode($trade_goods),   uid  =  $uid,   username  =  $username,   sys_ip  =  $client_ip,   sys_dateline  =  $now,   time_confirm  =  $now,   sys_status  =  1,);foreach ($ as $k =  $v) {  $trade_model- $k = $v;}$trade_id = $trade_model- create();  if ($trade_id) {  $redis_obj- set( u_trade_  . $uid .  _  . $active_id, 1, 86400);}// 10 回到提醒信息内容  $result =  限时秒杀取得成功,请尽早去付款  show_result($result,  /trade.php


回到


联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503