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.

298 lines
11 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
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. use App\Common\Helper;
  7. class OrderController extends CommonController
  8. {
  9. public function __construct()
  10. {
  11. parent::__construct();
  12. }
  13. //订单列表
  14. public function orderList(Request $request)
  15. {
  16. $pagesize = 10;
  17. $offset = 0;
  18. if(isset($_REQUEST['page'])){$offset = ($_REQUEST['page']-1)*$pagesize;}
  19. $status = $request->input('status',-1);
  20. $postdata = array(
  21. 'limit' => $pagesize,
  22. 'offset' => $offset,
  23. 'status' => $status, //0或者不传表示全部,1待付款,2待发货,3待收货,4待评价,5退款/售后
  24. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  25. );
  26. $url = env('APP_API_URL')."/order_list";
  27. $res = curl_request($url,$postdata,'GET');
  28. $data['list'] = $res['data']['list'];
  29. $data['totalpage'] = ceil($res['data']['count']/$pagesize);
  30. if(isset($_REQUEST['page_ajax']) && $_REQUEST['page_ajax']==1)
  31. {
  32. $html = '';
  33. if($res['data']['list'])
  34. {
  35. foreach($res['data']['list'] as $k => $v)
  36. {
  37. $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>';
  38. $html .= '<div class="goods_info"><p class="goods_tit">'.$v['goods']['title'].'</p>';
  39. $html .= '<p class="goods_price">¥<b>'.$v['goods']['price'].'</b></p>';
  40. $html .= '<p class="goods_des fr"><span id="del_history" onclick="delconfirm(\''.route('weixin_user_goods_history_delete',array('id'=>$v['id'])).'\')">删除</span></p>';
  41. $html .= '</div></li>';
  42. }
  43. }
  44. exit(json_encode($html));
  45. }
  46. return view('weixin.order.orderList', $data);
  47. }
  48. //订单详情
  49. public function orderDetail(Request $request)
  50. {
  51. $id = $request->input('id','');
  52. $postdata = array(
  53. 'order_id' => $id,
  54. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  55. );
  56. $url = env('APP_API_URL')."/order_detail";
  57. $res = curl_request($url,$postdata,'GET');
  58. $data['post'] = $res['data'];
  59. if(empty($data['post'])){$this->error_jump('订单不存在');}
  60. return view('weixin.order.orderDetail', $data);
  61. }
  62. //订单评价
  63. public function orderComment(Request $request)
  64. {
  65. if(Helper::isPostRequest())
  66. {
  67. if($_POST['comment'])
  68. {
  69. foreach($_POST['comment'] as $k=>$v)
  70. {
  71. $_POST['comment'][$k]['comment_type'] = 0;
  72. $_POST['comment'][$k]['comment_rank'] = 5;
  73. }
  74. }
  75. else
  76. {
  77. $this->error_jump('评论失败');
  78. }
  79. $postdata = array(
  80. 'order_id' => $_POST['order_id'],
  81. 'comment' => json_encode($_POST['comment']),
  82. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  83. );
  84. $url = env('APP_API_URL')."/comment_batch_add";
  85. $res = curl_request($url,$postdata,'POST');
  86. if($res['code']!=0){$this->error_jump('评论失败');}
  87. //订单状态设为已评价
  88. $postdata = array(
  89. 'id' => $_POST['order_id'],
  90. 'type' => 6,
  91. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  92. );
  93. $url = env('APP_API_URL')."/order_status_update";
  94. $res = curl_request($url,$postdata,'POST');
  95. $this->success_jump('评论成功',route('weixin_order_list'));
  96. }
  97. $id = $request->input('id','');
  98. if($id==''){$this->error_jump('您访问的页面不存在或已被删除!');}
  99. $postdata = array(
  100. 'order_id' => $id,
  101. 'order_status' => 3,
  102. 'refund_status' => 0,
  103. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  104. );
  105. $url = env('APP_API_URL')."/order_detail";
  106. $res = curl_request($url,$postdata,'GET');
  107. $data['post'] = $res['data'];
  108. if(empty($data['post'])){$this->error_jump('您访问的页面不存在或已被删除!');}
  109. return view('weixin.order.orderComment', $data);
  110. }
  111. //订单支付
  112. public function pay($id)
  113. {
  114. //获取订单详情
  115. $postdata = array(
  116. 'order_id' => $id, //要支付的订单id
  117. 'order_status' => 0,
  118. 'pay_status' => 0,
  119. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  120. );
  121. $url = env('APP_API_URL')."/order_detail";
  122. $res = curl_request($url,$postdata,'GET');
  123. $data['order_detail'] = $res['data'];
  124. $data['order_id'] = $id;
  125. if($res['code']!=0 || empty($data['order_detail'])){$this->error_jump('订单不存在或已过期');}
  126. //获取会员信息
  127. $postdata = array(
  128. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  129. );
  130. $url = env('APP_API_URL')."/user_info";
  131. $res = curl_request($url,$postdata,'GET');
  132. $data['user_info'] = $res['data'];
  133. //判断余额是否足够
  134. $is_balance_enough = 1; //足够
  135. if($data['order_detail']['order_amount']>$data['user_info']['money']){$is_balance_enough = 0;}
  136. $data['is_balance_enough'] = $is_balance_enough;
  137. return view('weixin.order.pay', $data);
  138. }
  139. public function dopay(Request $request)
  140. {
  141. $order_id = $request->input('order_id','');
  142. $payment_id = $request->input('payment_id','');
  143. if($order_id == '' || $order_id == '')
  144. {
  145. $this->error_jump(ReturnData::PARAMS_ERROR);
  146. }
  147. $url = '';
  148. if($payment_id == 1) //余额支付
  149. {
  150. $url = route('weixin_order_yuepay',array('order_id'=>$order_id));
  151. }
  152. elseif($payment_id == 2) //微信支付
  153. {
  154. $url = route('weixin_order_wxpay',array('order_id'=>$order_id));
  155. }
  156. if($url == '')
  157. {
  158. $this->error_jump('订单不存在或已过期');
  159. }
  160. else
  161. {
  162. header('Location: '.$url);
  163. exit;
  164. }
  165. }
  166. //订单余额支付
  167. public function orderYuepay(Request $request)
  168. {
  169. $order_id = $request->input('order_id','');
  170. //获取订单详情
  171. $postdata = array(
  172. 'order_id' => $order_id, //要支付的订单id
  173. 'order_status' => 0,
  174. 'pay_status' => 0,
  175. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  176. );
  177. $url = env('APP_API_URL')."/order_detail";
  178. $res = curl_request($url,$postdata,'GET');
  179. $order_detail = $res['data'];
  180. if($res['code']!=0){$this->error_jump('订单不存在或已过期');}
  181. //获取会员信息
  182. $postdata = array(
  183. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  184. );
  185. $url = env('APP_API_URL')."/user_info";
  186. $res = curl_request($url,$postdata,'GET');
  187. $user_info = $res['data'];
  188. if($order_detail['order_amount']>$user_info['money']){$this->error_jump('余额不足');}
  189. //修改订单状态
  190. $postdata = array(
  191. 'id' => $order_detail['id'],
  192. 'type' => 1,
  193. 'pay_id' => 1,
  194. 'pay_name' => '余额支付',
  195. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  196. );
  197. $url = env('APP_API_URL')."/order_status_update";
  198. $res = curl_request($url,$postdata,'POST');
  199. if($res['code']!=0){$this->error_jump('支付失败');}
  200. $this->success_jump('支付成功',route('weixin_order_list'));
  201. }
  202. //订单余额支付
  203. public function orderWxpay(Request $request)
  204. {
  205. $order_id = $request->input('order_id','');
  206. //获取订单详情
  207. $postdata = array(
  208. 'order_id' => $order_id, //要支付的订单id
  209. 'order_status' => 0,
  210. 'pay_status' => 0,
  211. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  212. );
  213. $url = env('APP_API_URL')."/order_detail";
  214. $res = curl_request($url,$postdata,'GET');
  215. $data['order_detail'] = $res['data'];
  216. $data['order_id'] = $order_id;
  217. if($res['code']!=0){$this->error_jump('订单不存在或已过期');}
  218. //微信支付-start
  219. require_once(resource_path('org/wxpay/WxPayConfig.php')); // 导入微信配置类
  220. require_once(resource_path('org/wxpay/WxPayPubHelper.class.php')); // 导入微信支付类
  221. $body = '订单支付';//订单详情
  222. $out_trade_no = $data['order_detail']['order_sn'];//订单号
  223. $total_fee = floatval($data['order_detail']['order_amount']*100);//价格0.01
  224. $attach = 'pay_type=2'; //pay_type=2订单支付
  225. $notify_url = route('weixin_wxpay_notify');//通知地址
  226. $wxconfig= \WxPayConfig::wxconfig();
  227. //=========步骤1:网页授权获取用户openid============
  228. $jsApi = new \JsApi_pub($wxconfig);
  229. $openid = $jsApi->getOpenid();
  230. //=========步骤2:使用统一支付接口,获取prepay_id============
  231. //使用统一支付接口
  232. $unifiedOrder = new \UnifiedOrder_pub($wxconfig);
  233. //设置统一支付接口参数
  234. //设置必填参数
  235. //appid已填,商户无需重复填写
  236. //mch_id已填,商户无需重复填写
  237. //noncestr已填,商户无需重复填写
  238. //spbill_create_ip已填,商户无需重复填写
  239. //sign已填,商户无需重复填写
  240. $unifiedOrder->setParameter("openid","$openid");//微信用户
  241. $unifiedOrder->setParameter("body","$body");//商品描述
  242. $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
  243. $unifiedOrder->setParameter("total_fee","$total_fee");//总金额
  244. $unifiedOrder->setParameter("attach","$attach"); //附加数据,选填,在查询API和支付通知中原样返回,可作为自定义参数使用,示例:a=1&b=2
  245. $unifiedOrder->setParameter("notify_url","$notify_url");//通知地址
  246. $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
  247. $prepay_id = $unifiedOrder->getPrepayId();
  248. //=========步骤3:使用jsapi调起支付============
  249. $jsApi->setPrepayId($prepay_id);
  250. $jsApiParameters = $jsApi->getParameters();
  251. $data['jsApiParameters'] = $jsApiParameters;
  252. $data['returnUrl'] = route('weixin_order_list'); //支付完成要跳转的url,跳转到用户订单列表页面
  253. return view('weixin.order.orderWxpay', $data);
  254. }
  255. }