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.

263 lines
9.7 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
6 years ago
7 years ago
6 years ago
7 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
6 years ago
7 years ago
7 years ago
7 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
6 years ago
7 years ago
7 years ago
6 years ago
7 years ago
6 years ago
6 years ago
7 years ago
6 years ago
7 years ago
6 years ago
7 years ago
7 years ago
  1. <?php
  2. namespace App\Http\Controllers\Weixin;
  3. use Illuminate\Http\Request;
  4. use App\Common\ReturnData;
  5. use App\Common\Helper;
  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',-1);
  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. '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 orderComment(Request $request)
  63. {
  64. if(Helper::isPostRequest())
  65. {
  66. if($_POST['comment'])
  67. {
  68. foreach($_POST['comment'] as $k=>$v)
  69. {
  70. $_POST['comment'][$k]['comment_type'] = 0;
  71. $_POST['comment'][$k]['comment_rank'] = 5;
  72. }
  73. }
  74. else
  75. {
  76. $this->error_jump('评论失败');
  77. }
  78. $postdata = array(
  79. 'order_id' => $_POST['order_id'],
  80. 'comment' => json_encode($_POST['comment']),
  81. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  82. );
  83. $url = env('APP_API_URL')."/comment_batch_add";
  84. $res = curl_request($url,$postdata,'POST');
  85. if($res['code']!=0){$this->error_jump('评论失败');}
  86. $this->success_jump('评论成功',route('weixin_order_list'));
  87. }
  88. $id = $request->input('id','');
  89. if($id==''){$this->error_jump('您访问的页面不存在或已被删除!');}
  90. $postdata = array(
  91. 'id' => $id,
  92. 'order_status' => 3,
  93. 'refund_status' => 0,
  94. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  95. );
  96. $url = env('APP_API_URL')."/order_detail";
  97. $res = curl_request($url,$postdata,'GET');
  98. $data['post'] = $res['data'];
  99. if(empty($data['post'])){$this->error_jump('您访问的页面不存在或已被删除!');}
  100. return view('weixin.order.orderComment', $data);
  101. }
  102. //订单支付
  103. public function pay($id)
  104. {
  105. //获取订单详情
  106. $postdata = array(
  107. 'id' => $id, //要支付的订单id
  108. 'order_status' => 0,
  109. 'pay_status' => 0,
  110. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  111. );
  112. $url = env('APP_API_URL')."/order_detail";
  113. $res = curl_request($url,$postdata,'GET');
  114. $data['order_detail'] = $res['data'];
  115. $data['order_id'] = $id;
  116. if($res['code']!=0 || empty($data['order_detail'])){$this->error_jump('订单不存在或已过期');}
  117. //获取会员信息
  118. $postdata = array(
  119. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  120. );
  121. $url = env('APP_API_URL')."/user_info";
  122. $res = curl_request($url,$postdata,'GET');
  123. $data['user_info'] = $res['data'];
  124. //判断余额是否足够
  125. $is_balance_enough = 1; //足够
  126. if($data['order_detail']['order_amount']>$data['user_info']['money']){$is_balance_enough = 0;}
  127. $data['is_balance_enough'] = $is_balance_enough;
  128. return view('weixin.order.pay', $data);
  129. }
  130. public function dopay(Request $request)
  131. {
  132. $order_id = $request->input('order_id','');
  133. $payment_id = $request->input('payment_id','');
  134. if($order_id == '' || $payment_id == '')
  135. {
  136. $this->error_jump(ReturnData::PARAMS_ERROR);
  137. }
  138. $url = '';
  139. if($payment_id == 1) //余额支付
  140. {
  141. $url = route('weixin_order_yuepay',array('order_id'=>$order_id));
  142. }
  143. elseif($payment_id == 2) //微信支付
  144. {
  145. $url = route('weixin_order_wxpay',array('order_id'=>$order_id));
  146. }
  147. if($url == '')
  148. {
  149. $this->error_jump('订单不存在或已过期');
  150. }
  151. else
  152. {
  153. header('Location: '.$url);
  154. exit;
  155. }
  156. }
  157. //订单余额支付
  158. public function orderYuepay(Request $request)
  159. {
  160. $order_id = $request->input('order_id','');
  161. //修改订单状态
  162. $postdata = array(
  163. 'id' => $order_id,
  164. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  165. );
  166. $url = env('APP_API_URL')."/order_yue_pay";
  167. $res = curl_request($url,$postdata,'POST');
  168. if($res['code']==ReturnData::SUCCESS){$this->success_jump('支付成功',route('weixin_order_list'));}
  169. $this->error_jump('支付失败');
  170. }
  171. //订单-微信支付
  172. public function orderWxpay(Request $request)
  173. {
  174. $order_id = $request->input('order_id','');
  175. //获取订单详情
  176. $postdata = array(
  177. 'id' => $order_id, //要支付的订单id
  178. 'order_status' => 0,
  179. 'pay_status' => 0,
  180. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  181. );
  182. $url = env('APP_API_URL')."/order_detail";
  183. $res = curl_request($url,$postdata,'GET');
  184. if($res['code']!=0){$this->error_jump('订单不存在或已过期');}
  185. $data['order_detail'] = $res['data'];
  186. $data['order_id'] = $order_id;
  187. //微信支付-start
  188. require_once(resource_path('org/wxpay/WxPayConfig.php')); // 导入微信配置类
  189. require_once(resource_path('org/wxpay/WxPayPubHelper.class.php')); // 导入微信支付类
  190. $body = '订单支付';//订单详情
  191. $out_trade_no = $data['order_detail']['order_sn'];//订单号
  192. $total_fee = floatval($data['order_detail']['order_amount']*100);//价格0.01
  193. $attach = 'pay_type=2'; //附加数据,pay_type=2订单支付,示例:xxx=1&yyy=2
  194. $notify_url = route('notify_wxpay_jsapi');//通知地址
  195. $wxconfig= \WxPayConfig::wxconfig();
  196. //=========步骤1:网页授权获取用户openid============
  197. $jsApi = new \JsApi_pub($wxconfig);
  198. $openid = $jsApi->getOpenid();
  199. //=========步骤2:使用统一支付接口,获取prepay_id============
  200. //使用统一支付接口
  201. $unifiedOrder = new \UnifiedOrder_pub($wxconfig);
  202. //设置统一支付接口参数
  203. //设置必填参数
  204. //appid已填,商户无需重复填写
  205. //mch_id已填,商户无需重复填写
  206. //noncestr已填,商户无需重复填写
  207. //spbill_create_ip已填,商户无需重复填写
  208. //sign已填,商户无需重复填写
  209. $unifiedOrder->setParameter("openid","$openid");//微信用户openid,trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识,
  210. $unifiedOrder->setParameter("body","$body");//商品描述
  211. $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
  212. $unifiedOrder->setParameter("total_fee","$total_fee");//总金额
  213. $unifiedOrder->setParameter("attach","$attach"); //附加数据,选填,在查询API和支付通知中原样返回,可作为自定义参数使用,示例:a=1&b=2
  214. $unifiedOrder->setParameter("notify_url","$notify_url");//通知地址
  215. $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型,JSAPI,NATIVE,APP...
  216. $prepay_id = $unifiedOrder->getPrepayId();
  217. //=========步骤3:使用jsapi调起支付============
  218. $jsApi->setPrepayId($prepay_id);
  219. $jsApiParameters = $jsApi->getParameters();
  220. $data['jsApiParameters'] = $jsApiParameters;
  221. $data['returnUrl'] = route('weixin_order_list'); //支付完成要跳转的url,跳转到用户订单列表页面
  222. return view('weixin.order.orderWxpay', $data);
  223. }
  224. }