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.

178 lines
6.6 KiB

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 pay($id)
  49. {
  50. //获取订单详情
  51. $postdata = array(
  52. 'order_id' => $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['order_detail'] = $res['data'];
  58. $data['order_id'] = $id;
  59. /* if(!$res['code']!=0){$this->error_jump('订单不存在或已过期');} */
  60. //获取会员信息
  61. $postdata = array(
  62. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  63. );
  64. $url = env('APP_API_URL')."/user_info";
  65. $res = curl_request($url,$postdata,'GET');
  66. $data['user_info'] = $res['data'];
  67. //判断余额是否足够
  68. $is_balance_enough = 1; //足够
  69. if($data['order_detail']['total_price']>$data['user_info']['money']){$is_balance_enough = 0;}
  70. $data['is_balance_enough'] = $is_balance_enough;
  71. return view('weixin.order.pay', $data);
  72. }
  73. public function dopay(Request $request)
  74. {
  75. $order_id = $request->input('order_id','');
  76. $payment_id = $request->input('payment_id','');
  77. if($order_id == '' || $order_id == '')
  78. {
  79. $this->error_jump(ReturnData::PARAMS_ERROR);
  80. }
  81. $url = '';
  82. if($payment_id == 1) //余额支付
  83. {
  84. $url = '';
  85. }
  86. elseif($payment_id == 2) //微信支付
  87. {
  88. $url = route('weixin_order_wxpay',array('order_id'=>$order_id));
  89. }
  90. if($url == '')
  91. {
  92. $this->error_jump('订单不存在或已过期');
  93. }
  94. else
  95. {
  96. header('Location: '.$url);
  97. exit;
  98. }
  99. }
  100. public function orderWxpay(Request $request)
  101. {
  102. $order_id = $request->input('order_id','');
  103. //获取订单详情
  104. $postdata = array(
  105. 'order_id' => $order_id, //要支付的订单id
  106. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  107. );
  108. $url = env('APP_API_URL')."/order_detail";
  109. $res = curl_request($url,$postdata,'GET');
  110. $data['order_detail'] = $res['data'];
  111. $data['order_id'] = $order_id;
  112. if(!$res['code']!=0){$this->error_jump('订单不存在或已过期');}
  113. //微信支付-start
  114. require_once(resource_path('org/wxpay/WxPayConfig.php')); // 导入微信配置类
  115. require_once(resource_path('org/wxpay/WxPayPubHelper.class.php')); // 导入微信支付类
  116. $body = '订单支付';//订单详情
  117. $out_trade_no = $data['order_detail']['order_sn'];//订单号
  118. $total_fee = floatval($data['order_detail']['order_amount']*100);//价格0.01
  119. $attach = 'pay_type=2'; //pay_type=2订单支付
  120. $notify_url = route('weixin_wxpay_notify');//通知地址
  121. $wxconfig= \WxPayConfig::wxconfig();
  122. //=========步骤1:网页授权获取用户openid============
  123. $jsApi = new \JsApi_pub($wxconfig);
  124. $openid = $jsApi->getOpenid();
  125. //=========步骤2:使用统一支付接口,获取prepay_id============
  126. //使用统一支付接口
  127. $unifiedOrder = new \UnifiedOrder_pub($wxconfig);
  128. //设置统一支付接口参数
  129. //设置必填参数
  130. //appid已填,商户无需重复填写
  131. //mch_id已填,商户无需重复填写
  132. //noncestr已填,商户无需重复填写
  133. //spbill_create_ip已填,商户无需重复填写
  134. //sign已填,商户无需重复填写
  135. $unifiedOrder->setParameter("openid","$openid");//微信用户
  136. $unifiedOrder->setParameter("body","$body");//商品描述
  137. $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
  138. $unifiedOrder->setParameter("total_fee","$total_fee");//总金额
  139. $unifiedOrder->setParameter("attach","$attach"); //附加数据,选填,在查询API和支付通知中原样返回,可作为自定义参数使用,示例:a=1&b=2
  140. $unifiedOrder->setParameter("notify_url","$notify_url");//通知地址
  141. $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
  142. $prepay_id = $unifiedOrder->getPrepayId();
  143. //=========步骤3:使用jsapi调起支付============
  144. $jsApi->setPrepayId($prepay_id);
  145. $jsApiParameters = $jsApi->getParameters();
  146. $data['jsApiParameters'] = $jsApiParameters;
  147. $data['returnUrl'] = route('weixin_order_list'); //支付完成要跳转的url,跳转到用户订单列表页面
  148. return view('weixin.order.orderWxpay', $data);
  149. }
  150. }