国内流行的内容管理系统(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.

312 lines
11KB

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