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.

199 lines
7.3 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. <?php
  2. namespace App\Http\Controllers\Weixin;
  3. use App\Http\Controllers\Weixin\CommonController;
  4. use Illuminate\Http\Request;
  5. use App\Common\ReturnData;
  6. class OrderController extends CommonController
  7. {
  8. public function __construct()
  9. {
  10. parent::__construct();
  11. }
  12. //订单列表
  13. public function orderList(Request $request)
  14. {
  15. $pagesize = 10;
  16. $offset = 0;
  17. if(isset($_REQUEST['page'])){$offset = ($_REQUEST['page']-1)*$pagesize;}
  18. $status = $request->input('status','');
  19. $postdata = array(
  20. 'limit' => $pagesize,
  21. 'offset' => $offset,
  22. 'status' => $status, //0或者不传表示全部,1待付款,2待发货,3待收货,4待评价,5退款/售后
  23. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  24. );
  25. $url = env('APP_API_URL')."/order_list";
  26. $res = curl_request($url,$postdata,'GET');
  27. $data['list'] = $res['data']['list'];
  28. $data['totalpage'] = ceil($res['data']['count']/$pagesize);
  29. if(isset($_REQUEST['page_ajax']) && $_REQUEST['page_ajax']==1)
  30. {
  31. $html = '';
  32. if($res['data']['list'])
  33. {
  34. foreach($res['data']['list'] as $k => $v)
  35. {
  36. $html .= '<li><a href="'.$v['goods']['goods_detail_url'].'"><span class="goods_thumb"><img alt="'.$v['goods']['title'].'" src="'.env('APP_URL').$v['goods']['litpic'].'"></span></a>';
  37. $html .= '<div class="goods_info"><p class="goods_tit">'.$v['goods']['title'].'</p>';
  38. $html .= '<p class="goods_price">¥<b>'.$v['goods']['price'].'</b></p>';
  39. $html .= '<p class="goods_des fr"><span id="del_history" onclick="delconfirm(\''.route('weixin_user_goods_history_delete',array('id'=>$v['id'])).'\')">删除</span></p>';
  40. $html .= '</div></li>';
  41. }
  42. }
  43. exit(json_encode($html));
  44. }
  45. return view('weixin.order.orderList', $data);
  46. }
  47. //订单详情
  48. public function orderDetail(Request $request)
  49. {
  50. $id = $request->input('id','');
  51. $postdata = array(
  52. 'order_id' => $id,
  53. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  54. );
  55. $url = env('APP_API_URL')."/order_detail";
  56. $res = curl_request($url,$postdata,'GET');
  57. $data['post'] = $res['data'];
  58. if(empty($data['post'])){$this->error_jump('订单不存在');}
  59. return view('weixin.order.orderDetail', $data);
  60. }
  61. //订单支付
  62. public function pay($id)
  63. {
  64. //获取订单详情
  65. $postdata = array(
  66. 'order_id' => $id, //要支付的订单id
  67. 'order_status' => 0,
  68. 'pay_status' => 0,
  69. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  70. );
  71. $url = env('APP_API_URL')."/order_detail";
  72. $res = curl_request($url,$postdata,'GET');
  73. $data['order_detail'] = $res['data'];
  74. $data['order_id'] = $id;
  75. if($res['code']!=0 || empty($data['order_detail'])){$this->error_jump('订单不存在或已过期');}
  76. //获取会员信息
  77. $postdata = array(
  78. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  79. );
  80. $url = env('APP_API_URL')."/user_info";
  81. $res = curl_request($url,$postdata,'GET');
  82. $data['user_info'] = $res['data'];
  83. //判断余额是否足够
  84. $is_balance_enough = 1; //足够
  85. if($data['order_detail']['order_amount']>$data['user_info']['money']){$is_balance_enough = 0;}
  86. $data['is_balance_enough'] = $is_balance_enough;
  87. return view('weixin.order.pay', $data);
  88. }
  89. public function dopay(Request $request)
  90. {
  91. $order_id = $request->input('order_id','');
  92. $payment_id = $request->input('payment_id','');
  93. if($order_id == '' || $order_id == '')
  94. {
  95. $this->error_jump(ReturnData::PARAMS_ERROR);
  96. }
  97. $url = '';
  98. if($payment_id == 1) //余额支付
  99. {
  100. $url = route('weixin_order_yuepay',array('order_id'=>$order_id));
  101. }
  102. elseif($payment_id == 2) //微信支付
  103. {
  104. $url = route('weixin_order_wxpay',array('order_id'=>$order_id));
  105. }
  106. if($url == '')
  107. {
  108. $this->error_jump('订单不存在或已过期');
  109. }
  110. else
  111. {
  112. header('Location: '.$url);
  113. exit;
  114. }
  115. }
  116. public function orderWxpay(Request $request)
  117. {
  118. $order_id = $request->input('order_id','');
  119. //获取订单详情
  120. $postdata = array(
  121. 'order_id' => $order_id, //要支付的订单id
  122. 'order_status' => 0,
  123. 'pay_status' => 0,
  124. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  125. );
  126. $url = env('APP_API_URL')."/order_detail";
  127. $res = curl_request($url,$postdata,'GET');
  128. $data['order_detail'] = $res['data'];
  129. $data['order_id'] = $order_id;
  130. if($res['code']!=0){$this->error_jump('订单不存在或已过期');}
  131. //微信支付-start
  132. require_once(resource_path('org/wxpay/WxPayConfig.php')); // 导入微信配置类
  133. require_once(resource_path('org/wxpay/WxPayPubHelper.class.php')); // 导入微信支付类
  134. $body = '订单支付';//订单详情
  135. $out_trade_no = $data['order_detail']['order_sn'];//订单号
  136. $total_fee = floatval($data['order_detail']['order_amount']*100);//价格0.01
  137. $attach = 'pay_type=2'; //pay_type=2订单支付
  138. $notify_url = route('weixin_wxpay_notify');//通知地址
  139. $wxconfig= \WxPayConfig::wxconfig();
  140. //=========步骤1:网页授权获取用户openid============
  141. $jsApi = new \JsApi_pub($wxconfig);
  142. $openid = $jsApi->getOpenid();
  143. //=========步骤2:使用统一支付接口,获取prepay_id============
  144. //使用统一支付接口
  145. $unifiedOrder = new \UnifiedOrder_pub($wxconfig);
  146. //设置统一支付接口参数
  147. //设置必填参数
  148. //appid已填,商户无需重复填写
  149. //mch_id已填,商户无需重复填写
  150. //noncestr已填,商户无需重复填写
  151. //spbill_create_ip已填,商户无需重复填写
  152. //sign已填,商户无需重复填写
  153. $unifiedOrder->setParameter("openid","$openid");//微信用户
  154. $unifiedOrder->setParameter("body","$body");//商品描述
  155. $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
  156. $unifiedOrder->setParameter("total_fee","$total_fee");//总金额
  157. $unifiedOrder->setParameter("attach","$attach"); //附加数据,选填,在查询API和支付通知中原样返回,可作为自定义参数使用,示例:a=1&b=2
  158. $unifiedOrder->setParameter("notify_url","$notify_url");//通知地址
  159. $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
  160. $prepay_id = $unifiedOrder->getPrepayId();
  161. //=========步骤3:使用jsapi调起支付============
  162. $jsApi->setPrepayId($prepay_id);
  163. $jsApiParameters = $jsApi->getParameters();
  164. $data['jsApiParameters'] = $jsApiParameters;
  165. $data['returnUrl'] = route('weixin_order_list'); //支付完成要跳转的url,跳转到用户订单列表页面
  166. return view('weixin.order.orderWxpay', $data);
  167. }
  168. }