国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

347 lines
12KB

  1. <?php
  2. /**
  3. *
  4. * 购物车过程
  5. *
  6. * @version $Id: carbuyaction.php$
  7. * @package DedeCMS.Site
  8. * @copyright Copyright (c) 2020, DedeBIZ.COM
  9. * @license https://www.dedebiz.com/license
  10. * @link https://www.dedebiz.com
  11. */
  12. require_once (dirname(__FILE__) . "/../include/common.inc.php");
  13. define('_PLUS_TPL_', DEDEROOT.'/templets/plus');
  14. require_once DEDEINC.'/dedetemplate.class.php';
  15. require_once DEDEINC.'/shopcar.class.php';
  16. require_once DEDEINC.'/memberlogin.class.php';
  17. if($cfg_mb_open == 'N')
  18. {
  19. ShowMsg("系统关闭了会员功能,因此你无法访问此页面!","javascript:;");
  20. exit();
  21. }
  22. $rs = array();
  23. $cfg_ml = new MemberLogin();
  24. if(!isset($dopost) || empty($dopost)){
  25. $payment = 'none';
  26. $cart = new MemberShops();
  27. //获得购物车内商品,返回数组
  28. $Items = $cart->getItems();
  29. if(empty($Items))
  30. {
  31. ShowMsg("您的购物车中没有商品!","-1");
  32. exit();
  33. }
  34. $OrdersId = preg_replace("#[^0-9a-z_\-]#i", "", $cart->OrdersId); //本次记录的订单号
  35. $CartCount = $cart->cartCount(); //商品总数
  36. $priceCount = $cart->priceCount();//该订单总价格
  37. /*
  38. function PostOrdersForm(); //填写订单信息
  39. */
  40. if(!isset($do) || empty($do))
  41. {
  42. $shops_deliveryarr = array();
  43. $dsql->SetQuery("SELECT pid,dname,price,des FROM #@__shops_delivery ORDER BY orders ASC");
  44. $dsql->Execute();
  45. while($row = $dsql->GetArray())
  46. {
  47. $shops_deliveryarr[] = $row;
  48. }
  49. //获取支付接口列表
  50. $shops_paymentarr = array();
  51. $dsql->SetQuery("SELECT * FROM #@__payment WHERE enabled='1' ORDER BY rank ASC");
  52. $dsql->Execute();
  53. $i = 0 ;
  54. while($row = $dsql->GetArray())
  55. {
  56. $row['disabled'] = ($row['id'] == 5) && ($cfg_ml->M_Money < $priceCount) ? ' disabled="disabled"' : '';
  57. $shops_paymentarr[] = $row;
  58. $i++;
  59. }
  60. unset($row);
  61. $dtp = new DedeTemplate();
  62. $carts = array(
  63. 'orders_id' => $cart->OrdersId,
  64. 'cart_count' => $cart->cartCount(),
  65. 'price_count' => $cart->priceCount()
  66. );
  67. $dtp->Assign('carts',$carts);
  68. $dtp->LoadTemplate(_PLUS_TPL_.'/carbuyaction.htm');
  69. $dtp->Display();
  70. exit();
  71. } else if ($do == 'clickout')
  72. {
  73. $svali = GetCkVdValue();
  74. if((strtolower($vdcode) != $svali || $svali == "") && $payment == 'none')
  75. {
  76. ShowMsg("验证码错误!","-1");
  77. exit();
  78. }
  79. if(empty($address))
  80. {
  81. ShowMsg("请填写收货地址!","-1");
  82. exit();
  83. }
  84. if(empty($postname))
  85. {
  86. ShowMsg("请填写收货人姓名!","-1");
  87. exit();
  88. }
  89. $paytype = isset($paytype) && is_numeric($paytype) ? $paytype : 0;
  90. $pid = isset($pid) && is_numeric($pid) ? $pid : 0;
  91. if($paytype < 1)
  92. {
  93. ShowMsg("请选择支付方式!","-1");
  94. exit();
  95. }
  96. if($pid < 1)
  97. {
  98. ShowMsg("请选择配送方式!","-1");
  99. exit();
  100. }
  101. $address = cn_substrR(trim(RemoveXSS($address)),200);
  102. $des = cn_substrR(RemoveXSS($des),100);
  103. $postname = cn_substrR(trim(RemoveXSS($postname)),15);
  104. $tel = preg_replace("#[^-0-9,\/\| ]#", "", $tel);
  105. $zip = preg_replace("#[^0-9]#", "", $zip);
  106. $email = cn_substrR(RemoveXSS($email),255);
  107. if(empty($tel))
  108. {
  109. ShowMsg("请填写正确的收货人联系电话!","-1");
  110. exit();
  111. }
  112. if($zip<1 || $zip>999999)
  113. {
  114. ShowMsg("请填写正确的收货人邮政编码!","-1");
  115. exit();
  116. }
  117. //确认用户登录信息
  118. if($cfg_ml->IsLogin())
  119. {
  120. $userid = $cfg_ml->M_ID;
  121. }
  122. else
  123. {
  124. $username = trim($username);
  125. $password = trim($password);
  126. if(empty($username) || $password)
  127. {
  128. ShowMsg("请选登录!","-1",0,2000);
  129. exit();
  130. }
  131. $rs = $cfg_ml->CheckUser($username,$password);
  132. if($rs==0)
  133. {
  134. ShowMsg("用户名不存在!","-1",0,2000);
  135. exit();
  136. }
  137. else if($rs==-1)
  138. {
  139. ShowMsg("密码错误!","-1",0,2000);
  140. exit();
  141. }
  142. $userid = $cfg_ml->M_ID;
  143. }
  144. //取得配送手续费
  145. $rs = $dsql->GetOne("SELECT `price` FROM #@__shops_delivery WHERE pid='$pid' LIMIT 0,1");
  146. $dprice = $rs['price'] > 0 ? $rs['price'] : 0;
  147. unset($rs);
  148. //
  149. //取得支付方式手续费
  150. $row = $dsql->GetOne("SELECT `fee` FROM #@__payment WHERE id='$paytype' LIMIT 0,1");
  151. $fprice = $row['fee'] > 0 ? $row['fee'] : 0;
  152. unset($row);
  153. //
  154. $ip = GetIP();
  155. $stime = time();
  156. //最后总计费用
  157. $lastpriceCount = sprintf("%01.2f", $priceCount+$dprice+$fprice);
  158. $rows = $dsql->GetOne("SELECT `oid` FROM #@__shops_orders WHERE oid='$OrdersId' LIMIT 0,1");
  159. if(empty($rows['oid']))
  160. {
  161. $sql = "INSERT INTO `#@__shops_orders` (`oid`,`userid`,`cartcount`,`price`,`state`,`ip`,`stime`,`pid`,`paytype`,`dprice`,`priceCount`)
  162. VALUES ('$OrdersId','$userid','$CartCount','$priceCount','0','$ip','$stime','$pid','$paytype','$dprice','$lastpriceCount');";
  163. //更新订单
  164. if($dsql->ExecuteNoneQuery($sql))
  165. {
  166. foreach($Items as $key=>$val)
  167. {
  168. $val['price'] = str_replace(",","",$val['price']);
  169. $dsql->ExecuteNoneQuery("INSERT INTO `#@__shops_products` (`aid`,`oid`,`userid`,`title`,`price`,`buynum`)
  170. VALUES ('$val[id]','$OrdersId','$userid','$val[title]','$val[price]','$val[buynum]');");
  171. }
  172. $sql = "INSERT INTO `#@__shops_userinfo` (`userid`,`oid`,`consignee`,`address`,`zip`,`tel`,`email`,`des`)
  173. VALUES ('$userid','$OrdersId','$postname','$address','$zip','$tel','$email','$des');
  174. ";
  175. $dsql->ExecuteNoneQuery($sql);
  176. }
  177. else
  178. {
  179. ShowMsg("更新订单时出现错误!".$dsql->GetError(),"-1");
  180. exit();
  181. }
  182. } else {
  183. $sql = "UPDATE `#@__shops_orders`
  184. SET `cartcount`='$CartCount',`price`='$priceCount',`ip`='$ip',`stime`='$stime',pid='$pid',paytype='$paytype',dprice='$dprice',priceCount='$lastpriceCount'
  185. WHERE oid='$OrdersId' AND userid='$userid' ;";
  186. if($dsql->ExecuteNoneQuery($sql))
  187. {
  188. $sql = "UPDATE `#@__shops_userinfo`
  189. SET `consignee`='$postname',`address`='$address',`zip`='$zip',`tel`='$tel',`email`='$email',`des`='$des'
  190. WHERE oid='$OrdersId';";
  191. $dsql->ExecuteNoneQuery($sql);
  192. }
  193. else
  194. {
  195. echo $dsql->GetError();
  196. exit;
  197. }
  198. unset($sql);
  199. }
  200. //最后结算价格 = 最后统计价格
  201. $priceCount = sprintf("%01.2f", $lastpriceCount);
  202. //更新用户商品统计
  203. $countOrders = $dsql->GetOne("SELECT SUM(cartcount) AS nums FROM #@__shops_orders WHERE userid='".$cfg_ml->M_ID."'");
  204. $dsql->ExecuteNoneQuery("UPDATE #@__member_tj SET `shop`='".$countOrders['nums']."' WHERE mid='".$cfg_ml->M_ID."'");
  205. $rs = $dsql->GetOne("SELECT * FROM `#@__payment` WHERE id='$paytype' ");
  206. require_once DEDEINC.'/payment/'.$rs['code'].'.php';
  207. $pay = new $rs['code'];
  208. if($rs['code']=="cod" || $rs['code']=="bank")
  209. {
  210. $order=$OrdersId;
  211. } else {
  212. $order=array( 'out_trade_no' => $cart->OrdersId,
  213. 'price' => $priceCount
  214. );
  215. require_once DEDEDATA.'/payment/'.$rs['code'].'.php';
  216. }
  217. $button=$pay->GetCode($order,$payment);
  218. $dtp = new DedeTemplate();
  219. $carts = array( 'orders_id' => $cart->OrdersId,
  220. 'cart_count' => $cart->CartCount(),
  221. 'price_count' => $priceCount
  222. );
  223. $row = $dsql->GetOne("SELECT dname,price FROM #@__shops_delivery WHERE pid='{$pid}'");
  224. $dtp->SetVar('pay_name',$row['dname']);
  225. $dtp->SetVar('price',$row['price']);
  226. $dtp->SetVar('pay_way',$rs['name']);
  227. $dtp->SetVar('description',$rs['description']);
  228. $dtp->SetVar('button',$button);
  229. $dtp->Assign('carts',$carts);
  230. $dtp->LoadTemplate(_PLUS_TPL_.'/shops_action_payment.htm');
  231. $dtp->Display();
  232. exit();
  233. }
  234. } else if ($dopost == 'memclickout')
  235. {
  236. $svali = GetCkVdValue();
  237. $rs = array();
  238. if(preg_match ("/S-P[0-9]+RN[0-9]/",$oid))
  239. {
  240. $oid=trim($oid);
  241. } else {
  242. ShowMsg("您的订单号不存在!","/member/shops_orders.php",0,2000);
  243. exit();
  244. }
  245. //确认用户登录信息
  246. if($cfg_ml->IsLogin())
  247. {
  248. $userid = $cfg_ml->M_ID;
  249. }
  250. else
  251. {
  252. $username = trim($username);
  253. $password = trim($password);
  254. if(empty($username) || $password)
  255. {
  256. ShowMsg("请选登录!","-1",0,2000);
  257. exit();
  258. }
  259. $rs = $cfg_ml->CheckUser($username,$password);
  260. if($rs==0)
  261. {
  262. ShowMsg("用户名不存在!","-1",0,2000);
  263. exit();
  264. }
  265. else if($rs==-1)
  266. {
  267. ShowMsg("密码错误!","-1",0,2000);
  268. exit();
  269. }
  270. $userid = $cfg_ml->M_ID;
  271. }
  272. $row=$dsql->GetOne("SELECT * FROM `#@__shops_orders` WHERE oid='$oid' ");
  273. if(is_array($row)){
  274. $OrdersId=$oid;
  275. $CartCount=$row['cartcount'];
  276. $priceCount=$row['priceCount'];
  277. $pid=$row['pid'];
  278. $rs = $dsql->GetOne("SELECT * FROM `#@__payment` WHERE id='{$row['paytype']}' ");
  279. }
  280. $rs['code'] = isset($rs['code'])? preg_replace("#[^0-9a-z_\-]+#i", "", $rs['code']) : "";
  281. if(empty($rs['code']) OR !file_exists(DEDEINC.'/payment/'.$rs['code'].'.php'))
  282. {
  283. exit("Error:payment is not exsits!");
  284. }
  285. require_once DEDEINC.'/payment/'.$rs['code'].'.php';
  286. $pay = new $rs['code'];
  287. $payment="";
  288. if($rs['code']=="cod" || $rs['code']=="bank") $order=$OrdersId;
  289. else{
  290. $order=array( 'out_trade_no' => $OrdersId,
  291. 'price' => $priceCount
  292. );
  293. require_once DEDEDATA.'/payment/'.$rs['code'].'.php';
  294. }
  295. $button=$pay->GetCode($order, $payment);
  296. $dtp = new DedeTemplate();
  297. $carts = array( 'orders_id' => $OrdersId,
  298. 'cart_count' => $CartCount,
  299. 'price_count' => $priceCount
  300. );
  301. $row = $dsql->GetOne("SELECT dname,price FROM #@__shops_delivery WHERE pid='{$pid}'");
  302. $dtp->SetVar('pay_name',$row['dname']);
  303. $dtp->SetVar('price',$row['price']);
  304. $dtp->SetVar('pay_way',$rs['name']);
  305. $dtp->SetVar('description',$rs['description']);
  306. $dtp->SetVar('button',$button);
  307. $dtp->Assign('carts',$carts);
  308. $dtp->LoadTemplate(_PLUS_TPL_.'/shops_action_payment.htm');
  309. $dtp->Display();
  310. exit();
  311. } else if ($dopost == 'return')
  312. {
  313. $write_list = array('alipay', 'bank', 'cod', 'yeepay');
  314. if (in_array($code, $write_list))
  315. {
  316. require_once DEDEINC.'/payment/'.$code.'.php';
  317. $pay = new $code;
  318. $msg=$pay->respond();
  319. ShowMsg($msg, "javascript:;", 0, 3000);
  320. exit();
  321. } else {
  322. exit('Error:File Type Can\'t Recognized!');
  323. }
  324. }