show_live_groupbuy.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713
  1. <?php
  2. /**
  3. * 前台抢购
  4. *
  5. *
  6. *
  7. ***/
  8. defined('InShopNC') or exit('Access Invalid!');
  9. class show_live_groupbuyControl extends BaseHomeControl {
  10. public function __construct() {
  11. parent::__construct();
  12. //读取语言包
  13. Language::read('member_groupbuy,home_cart_index,live_groupbuy');
  14. //分类导航
  15. $nav_link = array(
  16. 0=>array(
  17. 'title'=>Language::get('homepage'),
  18. 'link'=>'index.php'
  19. ),
  20. 1=>array(
  21. 'title'=>Language::get('nc_groupbuy')
  22. )
  23. );
  24. Tpl::output('nav_link_list',$nav_link);
  25. Tpl::output('index_sign','groupbuy');
  26. Tpl::setLayout('home_groupbuy_layout');
  27. }
  28. /**
  29. * 默认跳转到进行中的抢购列表
  30. */
  31. public function indexOp() {
  32. $this->citylist();//区域列表
  33. $this->classlist();//分类列表
  34. $this->onlineclass();
  35. $model_live_groupbuy = Model('live_groupbuy');
  36. $condition_live_groupbuy = array();
  37. $condition_live_groupbuy['start_time'] = array('elt',time());
  38. $condition_live_groupbuy['end_time'] = array('egt',time());
  39. $condition_live_groupbuy['is_hot'] = 1;//推荐
  40. $condition_live_groupbuy['is_audit'] = 2;//审核通过
  41. $condition_live_groupbuy['is_open'] = 1;//开启
  42. //区域城市商区
  43. if(cookie('city_id')){
  44. $condition_live_groupbuy['city_id'] = cookie('city_id');
  45. }
  46. $live_groupbuy = $model_live_groupbuy->getList($condition_live_groupbuy,'',9);
  47. Tpl::output('live_groupbuy',$live_groupbuy);//线下抢购
  48. $model_groupbuy = Model('groupbuy');
  49. $condition_groupbuy = array();
  50. $groupbuy = $model_groupbuy->getGroupbuyOnlineList($condition_groupbuy,9);
  51. Tpl::output('groupbuy',$groupbuy);//线上抢购
  52. Tpl::output('current', 'online');
  53. $model_setting = Model('setting');
  54. $list_setting = $model_setting->getListSetting();
  55. if(!empty($list_setting)){//轮播图片
  56. $picArr = array();
  57. if(!empty($list_setting['live_pic1'])){
  58. $picArr[] = array($list_setting['live_pic1'],$list_setting['live_link1']);
  59. }
  60. if(!empty($list_setting['live_pic2'])){
  61. $picArr[] = array($list_setting['live_pic2'],$list_setting['live_link2']);
  62. }
  63. if(!empty($list_setting['live_pic3'])){
  64. $picArr[] = array($list_setting['live_pic3'],$list_setting['live_link3']);
  65. }
  66. if(!empty($list_setting['live_pic4'])){
  67. $picArr[] = array($list_setting['live_pic4'],$list_setting['live_link4']);
  68. }
  69. Tpl::output('picArr', $picArr);
  70. }
  71. Tpl::output('list_setting', $list_setting);
  72. Tpl::showpage('show_live_groupbuy.index');
  73. }
  74. /**
  75. * 抢购列表
  76. **/
  77. public function live_groupbuy_listOp(){
  78. $condition = array();
  79. $condition['is_open'] = 1;//1.开启 2.关闭
  80. $condition['is_audit']= 2;//1.待审核 2.审核通过 3.审核未通过
  81. if(isset($_GET['type']) && $_GET['type']=='soon'){
  82. $condition['start_time'] = array('egt',time());
  83. Tpl::output('type', 'soon');
  84. }elseif(isset($_GET['type']) && $_GET['type']=='end'){
  85. $condition['end_time'] = array('elt',time());
  86. Tpl::output('type', 'end');
  87. }else{
  88. $condition['start_time'] = array('elt',time());
  89. $condition['end_time'] = array('egt',time());
  90. Tpl::output('type', 'immediate');
  91. }
  92. //区域城市商区
  93. if(cookie('city_id')){
  94. $condition['city_id'] = cookie('city_id');
  95. }
  96. if(isset($_GET['area_id']) && !empty($_GET['area_id'])){
  97. $condition['area_id'] = intval($_GET['area_id']);
  98. Tpl::output('area_id', intval($_GET['area_id']));
  99. if(isset($_GET['mall_id']) && !empty($_GET['mall_id'])){
  100. $condition['mall_id'] = intval($_GET['mall_id']);
  101. Tpl::output('mall_id', intval($_GET['mall_id']));
  102. }
  103. }
  104. //分类
  105. if(isset($_GET['class_id']) && !empty($_GET['class_id'])){
  106. $condition['class_id'] = intval($_GET['class_id']);
  107. Tpl::output('class_id', intval($_GET['class_id']));
  108. if(isset($_GET['s_class_id']) && !empty($_GET['s_class_id'])){
  109. $condition['s_class_id'] = intval($_GET['s_class_id']);
  110. Tpl::output('s_class_id', intval($_GET['s_class_id']));
  111. }
  112. }
  113. //价格区间
  114. if(isset($_GET['dis']) && !empty($_GET['dis'])){
  115. switch($_GET['dis']){
  116. case 1:
  117. $condition['groupbuy_price'] = array('lt',20);
  118. break;
  119. case 2:
  120. $condition['groupbuy_price'] = array('between','20,49');
  121. break;
  122. case 3:
  123. $condition['groupbuy_price'] = array('between','50,79');
  124. break;
  125. case 4:
  126. $condition['groupbuy_price'] = array('between','80,119');
  127. break;
  128. case 5:
  129. $condition['groupbuy_price'] = array('between','120,199');
  130. break;
  131. case 6:
  132. $condition['groupbuy_price'] = array('between','200,500');
  133. break;
  134. case 7:
  135. $condition['groupbuy_price'] = array('gt',500);
  136. break;
  137. }
  138. }
  139. //抢购排序
  140. $orderby = '';
  141. if(isset($_GET['order']) && isset($_GET['sort'])){
  142. switch($_GET['order']){
  143. case 'sales':
  144. $order = 'buyer_num';
  145. break;
  146. case 'price':
  147. $order = 'groupbuy_price';
  148. break;
  149. case 'time':
  150. $order = 'publish_time';
  151. break;
  152. default:
  153. $order = 'groupbuy_id';
  154. break;
  155. }
  156. $sort = in_array($_GET['sort'],array('desc','asc'))?$_GET['sort']:'desc';
  157. $orderby = $order.' '.$sort;
  158. Tpl::output('order',trim($_GET['order']));
  159. Tpl::output('sort',$sort=='desc'?'asc':'desc');
  160. }else{
  161. $orderby = 'groupbuy_id desc';
  162. Tpl::output('sort',empty($_GET['sort'])?'desc':$_GET['sort']);
  163. }
  164. $model_live_groupbuy = Model('live_groupbuy');
  165. $groupbuy_list = $model_live_groupbuy->getList($condition,'','',$orderby);
  166. Tpl::output('groupbuy_list', $groupbuy_list);
  167. Tpl::output('show_page', $model_live_groupbuy->showpage(5));
  168. $this->classlist();//抢购分类
  169. $this->citylist();//城市列表
  170. $this->arealist();//区域列表
  171. $pricedis = $this->pconsume();
  172. Tpl::output('pricedis',$pricedis);
  173. $this->onlineclass();
  174. Tpl::showpage('live_groupbuy_list');
  175. }
  176. /*
  177. * 选择城市
  178. */
  179. public function select_cityOp(){
  180. $city_id = intval($_GET['city_id']);
  181. $model_live_area = Model('live_area');
  182. $city = $model_live_area->live_areaInfo(array('live_area_id'=>$city_id));
  183. if(empty($city)&&$city_id!=0){
  184. showMessage('该城市不存在,请选择其他城市');
  185. }
  186. setNcCookie('city_id',$city_id);
  187. redirect("index.php?act=show_live_groupbuy");
  188. }
  189. /*
  190. * 区域列表
  191. */
  192. private function arealist(){
  193. $parent_area_id = cookie('city_id');
  194. if(!$area_list = F('area_'.$parent_area_id,null,'cache/city')){
  195. $model_live_area = Model('live_area');
  196. $area_list = $model_live_area->getList(array('parent_area_id'=>$parent_area_id));
  197. if(!empty($area_list)){
  198. foreach($area_list as $key=>$val){
  199. $area_list[$key][] = $model_live_area->getList(array('parent_area_id'=>$val['live_area_id']));
  200. }
  201. }
  202. F('area_'.$parent_area_id,$area_list,'cache/city');
  203. }
  204. Tpl::output('area_list',$area_list);
  205. }
  206. /*
  207. * 价格区间
  208. */
  209. private function pconsume(){
  210. return array(
  211. 1 => '20元以下',
  212. 2 => '20-50元',
  213. 3 => '50-80元',
  214. 4 => '80-120元',
  215. 5 => '120-200元',
  216. 6 => '200-500元',
  217. 7 => '500元以上'
  218. );
  219. }
  220. /*
  221. * 抢购详情
  222. */
  223. public function groupbuy_detailOp(){
  224. $groupbuy_id = intval($_GET['groupbuy_id']);
  225. $model_live_groupbuy = Model('live_groupbuy');
  226. $condition = array();
  227. $condition['groupbuy_id'] = $groupbuy_id;
  228. $condition['is_audit'] = 2;//2.审核通过
  229. $condition['is_open'] = 1;//1.开启
  230. $live_groupbuy = $model_live_groupbuy->live_groupbuyInfo($condition);
  231. if(empty($live_groupbuy)){
  232. showMessage('抢购不存在');
  233. }
  234. if($live_groupbuy['start_time']>time()){//即将开始
  235. Tpl::output('groupbuy_state',1);
  236. }elseif($live_groupbuy['start_time']<time() && $live_groupbuy['end_time']>time()){//正在进行
  237. Tpl::output('groupbuy_state',2);
  238. }else{//已经结束
  239. Tpl::output('groupbuy_state',3);
  240. }
  241. Tpl::output('live_groupbuy',$live_groupbuy);
  242. $recommend_condition = array();
  243. $recommend_condition['is_hot'] = 1;//0.未推荐 1.已推荐
  244. $recommend_condition['is_audit'] = 2;//1.待审核 2.审核通过 3.审核未通过
  245. $recommend_condition['is_open']= 1;//1.开启
  246. $recommend_condition['start_time'] = array('elt',time());
  247. $recommend_condition['end_time'] = array('egt',time());
  248. $recommend_live_groupbuy = $model_live_groupbuy->getList($recommend_condition,'','5');
  249. Tpl::output('recommend_live_groupbuy',$recommend_live_groupbuy);//推荐抢购
  250. $store_condition = array();//店铺信息
  251. $store_condition['store_id'] = $live_groupbuy['store_id'];
  252. $model_store = Model('store');
  253. $store_info = $model_store->getStoreInfo($store_condition);
  254. Tpl::output('store_info',$store_info);
  255. Tpl::showpage('live_groupbuy_detail');
  256. }
  257. /*
  258. * 抢购购买
  259. */
  260. public function livegroupbuyorderOp(){
  261. if($_SESSION['is_login'] !== '1'){//检测是否登录
  262. showMessage('请先登录','index.php?act=login&op=index','','error');
  263. }
  264. Language::read('common,home_layout');
  265. Tpl::setDir('buy');
  266. Tpl::setLayout('groupbuy_layout');
  267. $groupbuy_id = intval($_GET['groupbuy_id']);
  268. $model_live_groupbuy = Model('live_groupbuy');
  269. $live_groupbuy = $model_live_groupbuy->live_groupbuyInfo(array('groupbuy_id'=>$groupbuy_id));
  270. if(empty($live_groupbuy)){
  271. showMessage('该抢购不存在','','','error');
  272. }
  273. if($live_groupbuy['start_time']>time()){
  274. showMessage('抢购即将开始','','','error');
  275. }
  276. if($live_groupbuy['end_time']<time()){
  277. showMessage('抢购已经结束','','','error');
  278. }
  279. Tpl::output('live_groupbuy',$live_groupbuy);
  280. $model_member = Model('member');
  281. $member = $model_member->getMemberInfo(array('member_id'=>$_SESSION['member_id']));
  282. Tpl::output('member',$member);
  283. $model_store = Model('store');
  284. $store_info = $model_store->getStoreInfo(array('store_id'=>$live_groupbuy['store_id']));
  285. Tpl::output('store_info',$store_info);
  286. Tpl::output('buy_step','step1');
  287. Tpl::showpage('live_groupbuy_order');
  288. }
  289. /*
  290. * 抢购STEP1
  291. */
  292. public function livegroupbuystep1Op(){
  293. if($_SESSION['is_login'] !== '1'){//检测是否登录
  294. showMessage('请先登录','index.php?act=login&op=index','','error');
  295. }
  296. Language::read('common,home_layout');
  297. Tpl::setDir('buy');
  298. Tpl::setLayout('groupbuy_layout');
  299. $groupbuy_id = intval($_POST['groupbuy_id']);
  300. $model_live_groupbuy = Model('live_groupbuy');
  301. $live_groupbuy = $model_live_groupbuy->live_groupbuyInfo(array('groupbuy_id'=>$groupbuy_id));
  302. if(empty($live_groupbuy)){
  303. showMessage('该抢购不存在','','','error');
  304. }
  305. if($live_groupbuy['start_time']>time()){
  306. showMessage('抢购即将开始','','','error');
  307. }
  308. if($live_groupbuy['end_time']<time()){
  309. showMessage('抢购已经结束','','','error');
  310. }
  311. Tpl::output('live_groupbuy',$live_groupbuy);
  312. Tpl::output('q_number',intval($_POST['q_number'])>0?intval($_POST['q_number']):1);
  313. $model_member = Model('member');
  314. $member = $model_member->getMemberInfo(array('member_id'=>$_SESSION['member_id']));
  315. Tpl::output('member',$member);
  316. $model_store = Model('store');
  317. $store_info = $model_store->getStoreInfo(array('store_id'=>$live_groupbuy['store_id']));
  318. Tpl::output('store_info',$store_info);
  319. Tpl::output('buy_step','step2');
  320. Tpl::showpage('live_groupbuy_step1');
  321. }
  322. /*
  323. * 抢购STEP2
  324. */
  325. public function livegroupbuystep2Op(){
  326. if(chksubmit()){
  327. $groupbuy_id = intval($_POST['groupbuy_id']);
  328. $model_live_groupbuy = Model('live_groupbuy');
  329. $live_groupbuy = $model_live_groupbuy->live_groupbuyInfo(array('groupbuy_id'=>$groupbuy_id));
  330. if(empty($live_groupbuy)){
  331. showMessage('该抢购不存在','','','error');
  332. }
  333. if($live_groupbuy['start_time']>time()){
  334. showMessage('抢购即将开始','','','error');
  335. }
  336. if($live_groupbuy['end_time']<time()){
  337. showMessage('抢购已经结束','','','error');
  338. }
  339. $model_member = Model('member');
  340. $member = $model_member->getMemberInfo(array('member_id'=>$_SESSION['member_id']));
  341. if(empty($member)){
  342. showMessage('请登录','','','error');
  343. }
  344. $params = array();
  345. $params['order_sn'] = $order_sn = $this->makeOrderSn($member['member_id']);
  346. $params['member_id']= $_SESSION['member_id'];
  347. $params['member_name'] = $_SESSION['member_name'];
  348. $params['mobile'] = trim($_POST['mobile']);
  349. $params['store_id'] = $live_groupbuy['store_id'];
  350. $params['store_name']= $live_groupbuy['store_name'];
  351. $params['add_time'] = time();
  352. $params['item_id'] = $live_groupbuy['groupbuy_id'];
  353. $params['item_name']= $live_groupbuy['groupbuy_name'];
  354. $params['number'] = intval($_POST['number']);
  355. $params['price'] = intval($_POST['number'])*$live_groupbuy['groupbuy_price'];
  356. $params['state'] = 1;
  357. $params['leave_message'] = $_POST['leave_message'];
  358. if(isset($_POST['pd_pay']) && $_POST['pd_pay']==1){
  359. $params['payment_code'] = 'predeposit';
  360. $model_member = Model('member');
  361. $member = $model_member->getMemberInfo(array('member_id'=>$_SESSION['member_id']));
  362. if($params['price']>$member['available_predeposit']){//使用预存款支付部分
  363. $condition = array();
  364. $condition['member_id'] = $_SESSION['member_id'];
  365. $change_type = 'live_groupbuy_part';
  366. $data = array();
  367. $data['amount'] = $member['available_predeposit'];
  368. $data['order_sn'] = $order_sn;
  369. $data['member_id'] = $_SESSION['member_id'];
  370. $data['member_name'] = $_SESSION['member_name'];
  371. $model_predeposit = Model('predeposit');
  372. $res = $model_predeposit->changePd($change_type,$data);
  373. if(!$res){
  374. showMessage('订单支付失败','index.php?act=member_live','html','error');
  375. }
  376. $params['py_amount'] = $member['available_predeposit'];
  377. }else{
  378. $params['py_amount'] = $params['price'];
  379. }
  380. }
  381. $model_live_order = Model('live_order');
  382. $res = $model_live_order->add($params);
  383. if($res){
  384. //转向到商城支付页面
  385. $pay_url = 'index.php?act=show_live_groupbuy&op=pay&order_sn='.$order_sn;
  386. redirect($pay_url);
  387. }else{
  388. showMessage('抢购失败','index.php?act=member_live&op=index','html','error');
  389. }
  390. }else{
  391. showMessage('抢购失败','index.php?act=member_live&op=index','html','error');
  392. }
  393. }
  394. /**
  395. * 下单时支付页面
  396. */
  397. public function payOp(){
  398. $order_sn = $_GET['order_sn'];
  399. if (!preg_match('/^\d{18}$/',$order_sn)){
  400. showMessage('订单不存在','index.php?act=member_live&op=index','html','error');
  401. }
  402. //查询支付单信息
  403. $model_live_order = Model('live_order');
  404. $order_info = $model_live_order->live_orderInfo(array('order_sn'=>$order_sn,'member_id'=>$_SESSION['member_id']));
  405. if(empty($order_info)){
  406. showMessage('订单不存在','','html','error');
  407. }
  408. Tpl::output('order_info',$order_info);
  409. if(!empty($order_info['payment_code'])&&$order_info['payment_code']=='predeposit'){
  410. $model_member = Model('member');
  411. $member = $model_member->getMemberInfo(array('member_id'=>$_SESSION['member_id']));
  412. $price = $member['available_predeposit']-$order_info['price'];
  413. if($price>0){//使用预存款支付
  414. $condition = array();
  415. $condition['order_id'] = $order_info['order_id'];
  416. $params = array();
  417. $params['state'] = 2;//已支付
  418. $params['payment_time'] = time();//支付时间
  419. $res1 = $model_live_order->updateLiveOrder($condition,$params);//修改订单状态
  420. $change_type = 'live_groupbuy';
  421. $data = array();
  422. $data['amount'] = $order_info['price'];
  423. $data['order_sn'] = $order_info['order_sn'];
  424. $data['member_id'] = $_SESSION['member_id'];
  425. $data['member_name'] = $_SESSION['member_name'];
  426. $model_predeposit = Model('predeposit');
  427. $res2 = $model_predeposit->changePd($change_type,$data);
  428. $groupbuy_params = array();
  429. $groupbuy_params['buyer_count'] = array('exp','buyer_count-'.$order_info['number']);
  430. $groupbuy_params['buyer_num'] = array('exp','buyer_num+'.$order_info['number']);
  431. $groupbuy_condition = array();
  432. $groupbuy_condition['groupbuy_id'] = $order_info['item_id'];
  433. $model_live_groupbuy = Model('live_groupbuy');
  434. $res3 = $model_live_groupbuy->edit($groupbuy_condition,$groupbuy_params);
  435. if($res1 && $res2 && $res3){
  436. //转向到商城支付页面
  437. $pay_url = 'index.php?act=show_live_groupbuy&op=pay_ok&order_sn='.$order_sn;
  438. redirect($pay_url);
  439. }else{
  440. showMessage('抢购失败','index.php?act=member_live&op=index','html','error');
  441. }
  442. }else{//使用预存款支付部分
  443. Tpl::output('member',$member);
  444. Tpl::output('paymentpart',1);
  445. }
  446. }
  447. //支付方式
  448. $model_payment = Model('payment');
  449. $condition = array();
  450. $payment_list = $model_payment->getPaymentOpenList($condition);
  451. if (!empty($payment_list)) {
  452. unset($payment_list['predeposit']);
  453. unset($payment_list['offline']);
  454. }
  455. if (empty($payment_list)) {
  456. showMessage('暂未找到合适的支付方式','index.php?act=member_live','html','error');
  457. }
  458. Tpl::output('payment_list',$payment_list);
  459. Language::read('common,home_layout');
  460. Tpl::setDir('buy');
  461. Tpl::setLayout('groupbuy_layout');
  462. Tpl::output('buy_step','step3');
  463. Tpl::showpage('live_groupbuy_step2');
  464. }
  465. /**
  466. * 订单支付
  467. */
  468. public function paymentOp(){
  469. $order_sn = $_POST['order_sn'];
  470. $payment_code = $_POST['payment_code'];
  471. $url = 'index.php?act=member_live';
  472. $valid = !preg_match('/^\d{18}$/',$order_sn) || !preg_match('/^[a-z]{1,20}$/',$payment_code);
  473. if($valid){
  474. showMessage(Language::get('para_error'),'','html','error');
  475. }
  476. //支付信息
  477. $model_payment = Model('payment');
  478. $condition_payment = array();
  479. $condition_payment['payment_code'] = $payment_code;
  480. $payment_info = $model_payment->getPaymentOpenInfo($condition_payment);
  481. if(empty($payment_info)){
  482. showMessage('暂未找到合适的支付方式','index.php?act=member_live','html','error');
  483. }
  484. //订单信息
  485. $condition = array();
  486. $condition['order_sn'] = $order_sn;
  487. $model_live_order = Model('live_order');
  488. $order_info = $model_live_order->live_orderInfo($condition);
  489. if(empty($order_info)){
  490. showMessage('该订单不存在','index.php?act=member_live','html','error');
  491. }
  492. if($order_info['py_amount']>0){
  493. $order = array();
  494. $order['pay_sn'] = $order_sn;
  495. $order['subject'] = $order_info['item_name'];
  496. $order['order_type'] = 'live_groupbuy';//抢购订单
  497. $order['pay_amount'] = $order_info['price']-$order_info['py_amount'];
  498. $order['buyer_id'] = $order_info['member_id'];
  499. $order['api_pay_state'] = 0;
  500. }else{
  501. $order = array();
  502. $order['pay_sn'] = $order_sn;
  503. $order['subject'] = $order_info['item_name'];
  504. $order['order_type'] = 'live_groupbuy';//抢购订单
  505. $order['pay_amount'] = $order_info['price'];
  506. $order['buyer_id'] = $order_info['member_id'];
  507. $order['api_pay_state'] = 0;
  508. }
  509. //第三方API支付
  510. $this->_api_pay($order, $payment_info);
  511. }
  512. /**
  513. * 第三方在线支付接口
  514. *
  515. */
  516. private function _api_pay($order_info, $payment_info) {
  517. $inc_file = BASE_PATH.DS.'api'.DS.'payment'.DS.$payment_info['payment_code'].DS.$payment_info['payment_code'].'.php';
  518. if(!file_exists($inc_file)){
  519. showMessage(Language::get('payment_index_lose_file'),'','html','error');
  520. }
  521. require_once($inc_file);
  522. $payment_info['payment_config'] = unserialize($payment_info['payment_config']);
  523. $payment_api = new $payment_info['payment_code']($payment_info,$order_info);
  524. if($payment_info['payment_code'] == 'chinabank') {
  525. $payment_api->submit();
  526. } else {
  527. @header("Location: ".$payment_api->get_payurl());
  528. }
  529. exit;
  530. }
  531. /**
  532. * 支付成功页面
  533. */
  534. public function pay_okOp() {
  535. $order_sn = $_GET['order_sn'];
  536. if (!preg_match('/^\d{18}$/',$order_sn)){
  537. showMessage('订单不存在','index.php?act=member_live&op=index','html','error');
  538. }
  539. Language::read('common,home_layout');
  540. Tpl::setDir('buy');
  541. Tpl::setLayout('buy_layout');
  542. //查询支付单信息
  543. $model_live_order= Model('live_order');
  544. $order_info = $model_live_order->live_orderInfo(array('order_sn'=>$order_sn,'member_id'=>$_SESSION['member_id']));
  545. if(empty($order_info)){
  546. showMessage('订单不存在','index.php?act=member_live&op=index','html','error');
  547. }
  548. Tpl::output('order_info',$order_info);
  549. //生成抢购券
  550. $sn_str = '';
  551. for($i=0;$i<$order_info['number'];$i++){
  552. $sn = $this->_groupbuySN();
  553. $order_pwd = $model_live_order->getLiveOrderPwd(array('order_pwd'=>$sn));
  554. if(count($order_pwd)>0){
  555. $i--;
  556. continue;
  557. }
  558. $params = array();
  559. $params['order_id'] = $order_info['order_id'];
  560. $params['state'] = 1;//1.未使用
  561. $params['order_pwd']= $sn;
  562. $model_live_order->addLiveOrderPwd($params);
  563. $sn_str.=$sn.',';
  564. }
  565. //发送短信
  566. $sn_str = trim($sn_str,',');
  567. $content = '您的抢购兑换券:'.$sn_str;
  568. $sms = new Sms;
  569. $sms->send($order_info['mobile'],$content.'【'.C('site_name').'】');
  570. Tpl::output('buy_step','step4');
  571. Tpl::showpage('live_groupbuy_step3');
  572. }
  573. /**
  574. * AJAX验证支付密码
  575. */
  576. public function check_pd_pwdOp(){
  577. if (empty($_GET['password'])) exit('0');
  578. $buyer_info = Model('member')->infoMember(array('member_id' => $_SESSION['member_id']));
  579. echo ($buyer_info['member_paypwd'] != '' && $buyer_info['member_paypwd'] === md5($_GET['password'])) ? '1' : '0';
  580. }
  581. /**
  582. * 生成支付单编号(两位随机 + 从2000-01-01 00:00:00 到现在的秒数+微秒+会员ID%1000),该值会传给第三方支付接口
  583. * 长度 =2位 + 10位 + 3位 + 3位 = 18位
  584. * 1000个会员同一微秒提订单,重复机率为1/100
  585. * @return string
  586. */
  587. public function makeOrderSn($member_id) {
  588. return mt_rand(10,99)
  589. . sprintf('%010d',time() - 946656000)
  590. . sprintf('%03d', (float) microtime() * 1000)
  591. . sprintf('%03d', (int) $member_id % 1000);
  592. }
  593. /**
  594. * AJAX验证支付密码
  595. */
  596. private function _groupbuySN(){
  597. return mt_rand(100000,999999).mt_rand(1000000,9999999);
  598. }
  599. }