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.

313 lines
13 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
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\Api;
  3. use App\Http\Controllers\Api\CommonController;
  4. use Illuminate\Http\Request;
  5. use App\Common\ReturnData;
  6. use App\Common\Token;
  7. use App\Http\Model\Order;
  8. use DB;
  9. class OrderController extends CommonController
  10. {
  11. public function __construct()
  12. {
  13. parent::__construct();
  14. }
  15. //订单列表
  16. public function orderList(Request $request)
  17. {
  18. //参数
  19. $data['limit'] = $request->input('limit', 10);
  20. $data['offset'] = $request->input('offset', 0);
  21. $data['user_id'] = Token::$uid;
  22. $data['status'] = $request->input('status',-1);
  23. return Order::getList($data);
  24. }
  25. //订单详情
  26. public function orderDetail(Request $request)
  27. {
  28. //参数
  29. $data['user_id'] = Token::$uid;
  30. $data['order_id'] = $request->input('order_id','');
  31. if($request->input('order_status','') != ''){$data['order_status'] = $request->input('order_status');}
  32. if($request->input('pay_status','') != ''){$data['pay_status'] = $request->input('pay_status');}
  33. if($request->input('refund_status','') != ''){$data['refund_status'] = $request->input('refund_status');}
  34. if($data['order_id']=='')
  35. {
  36. return ReturnData::create(ReturnData::PARAMS_ERROR);
  37. }
  38. return Order::getOne($data);
  39. }
  40. //生成订单
  41. public function orderAdd(Request $request)
  42. {
  43. //参数
  44. $data['default_address_id'] = $request->input('default_address_id','');
  45. //$data['payid'] = $request->input('payid','');
  46. $data['user_bonus_id'] = $request->input('user_bonus_id','');
  47. $data['shipping_costs'] = $request->input('shipping_costs','');
  48. $data['message'] = $request->input('message','');
  49. $data['place_type'] = $request->input('place_type',2); //订单来源,1pc,2微信,3app
  50. $data['user_id'] = Token::$uid;
  51. //获取商品列表
  52. $data['cartids'] = $request->input('cartids','');
  53. if($data['cartids']=='')
  54. {
  55. return ReturnData::create(ReturnData::PARAMS_ERROR);
  56. }
  57. return Order::add($data);
  58. }
  59. //订单修改
  60. public function orderUpdate(Request $request)
  61. {
  62. if($request->input('id', '')!=''){$where['id'] = $request->input('id');}
  63. if($request->input('order_sn', '')!=''){$where['order_sn'] = $request->input('order_sn');}
  64. if($request->input('order_amount', '')!=''){$data['order_amount'] = $request->input('order_amount');}
  65. if($request->input('out_trade_no', '')!=''){$data['out_trade_no'] = $request->input('out_trade_no');}
  66. if($request->input('shipping_name', '')!=''){$data['shipping_name'] = $request->input('shipping_name');}
  67. if($request->input('shipping_id', '')!=''){$data['shipping_id'] = $request->input('shipping_id');}
  68. if($request->input('shipping_sn', '')!=''){$data['shipping_sn'] = $request->input('shipping_sn');}
  69. if($request->input('shipping_fee', '')!=''){$data['shipping_fee'] = $request->input('shipping_fee');}
  70. if($request->input('shipping_time', '')!=''){$data['shipping_time'] = $request->input('shipping_time');}
  71. if($request->input('name', '')!=''){$data['name'] = $request->input('name');}
  72. if($request->input('province', '')!=''){$data['province'] = $request->input('province');}
  73. if($request->input('city', '')!=''){$data['city'] = $request->input('city');}
  74. if($request->input('district', '')!=''){$data['district'] = $request->input('district');}
  75. if($request->input('address', '')!=''){$data['address'] = $request->input('address');}
  76. if($request->input('zipcode', '')!=''){$data['zipcode'] = $request->input('zipcode');}
  77. if($request->input('mobile', '')!=''){$data['mobile'] = $request->input('mobile');}
  78. if($request->input('message', '')!=''){$data['message'] = $request->input('message');}
  79. if($request->input('is_comment', '')!=''){$data['is_comment'] = $request->input('is_comment');}
  80. if($request->input('is_delete', '')!=''){$data['is_delete'] = $request->input('is_delete');}
  81. if($request->input('to_buyer', '')!=''){$data['to_buyer'] = $request->input('to_buyer');}
  82. if($request->input('invoice', '')!=''){$data['invoice'] = $request->input('invoice');}
  83. if($request->input('invoice_title', '')!=''){$data['invoice_title'] = $request->input('invoice_title');}
  84. if($request->input('invoice_taxpayer_number', '')!=''){$data['invoice_taxpayer_number'] = $request->input('invoice_taxpayer_number');}
  85. if(!isset($where)){return ReturnData::create(ReturnData::PARAMS_ERROR);}
  86. if (isset($data))
  87. {
  88. $where['user_id'] = Token::$uid;
  89. Order::modify($where,$data);
  90. }
  91. return ReturnData::create(ReturnData::SUCCESS);
  92. }
  93. //订单状态修改
  94. public function orderStatusUpdate(Request $request)
  95. {
  96. $type = $request->input('type','');
  97. if($request->input('id', '')!=''){$where['id'] = $request->input('id');}
  98. $where['user_id'] = Token::$uid;
  99. if($type=='' || $where['id'] =='')
  100. {
  101. return ReturnData::create(ReturnData::PARAMS_ERROR);
  102. }
  103. //修改订单状态,1设为支付,2设为取消,3设为确认收货,4设为退款退货,5设为删除,6设为已评价
  104. if($type == 1)
  105. {
  106. //判断订单是否存在或本人
  107. $where['order_status'] = 0;
  108. $where['pay_status'] = 0;
  109. $order = Order::where($where)->first();
  110. if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
  111. //判断用户余额是否足够
  112. $user_money = DB::table('user')->where(array('id'=>Token::$uid))->value('money');
  113. if($order['order_amount']>$user_money){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'余额不足');}
  114. $data['pay_status'] = 1;
  115. $data['pay_money'] = $order['order_amount']; //支付金额
  116. $data['pay_id'] = $request->input('pay_id','');
  117. $data['pay_time'] = $request->input('pay_time',time());
  118. if($request->input('pay_name', '')!=''){$data['pay_name'] = $request->input('pay_name');}
  119. //扣除用户余额
  120. if($data['pay_money']<=0 || !DB::table('user')->where(array('id'=>Token::$uid))->decrement('money', $data['pay_money']))
  121. {
  122. return ReturnData::create(ReturnData::PARAMS_ERROR);
  123. }
  124. //增加用户余额记录
  125. DB::table('user_money')->insert(array('user_id'=>Token::$uid,'type'=>1,'money'=>$data['pay_money'],'des'=>'订单余额支付','user_money'=>DB::table('user')->where(array('id'=>Token::$uid))->value('money'),'add_time'=>time()));
  126. }
  127. elseif($type == 2)
  128. {
  129. //判断订单是否存在或本人
  130. $where['order_status'] = 0;
  131. $where['pay_status'] = 0;
  132. $order = Order::where($where)->first();
  133. if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
  134. $data['order_status'] = 1;
  135. }
  136. elseif($type == 3)
  137. {
  138. //判断订单是否存在或本人
  139. $where['order_status'] = 0;
  140. $where['refund_status'] = 0;
  141. $where['pay_status'] = 1;
  142. $order = Order::where($where)->first();
  143. if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
  144. $data['order_status'] = 3;
  145. $data['shipping_status'] = 2;
  146. $data['refund_status'] = 0;
  147. $data['is_comment'] = 0;
  148. }
  149. elseif($type == 4)
  150. {
  151. //判断订单是否存在或本人
  152. $where['order_status'] = 3;
  153. $where['refund_status'] = 0;
  154. $order = Order::where($where)->first();
  155. if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
  156. $data['refund_status'] = 1;
  157. }
  158. elseif($type == 5)
  159. {
  160. //判断订单是否存在或本人
  161. $order = Order::where(array('order_status'=>3,'refund_status'=>0))->orWhere(array('order_status'=>1))->orWhere(array('order_status'=>2))->first();
  162. if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
  163. $data['is_delete'] = 1;
  164. }
  165. elseif($type == 6)
  166. {
  167. //判断订单是否存在或本人
  168. $where['order_status'] = 3;
  169. $where['refund_status'] = 0;
  170. $order = Order::where($where)->first();
  171. if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
  172. $data['is_comment'] = 1;
  173. }
  174. //修改订单状态
  175. if (isset($data))
  176. {
  177. Order::modify($where,$data);
  178. }
  179. return ReturnData::create(ReturnData::SUCCESS);
  180. }
  181. //删除订单
  182. public function orderDelete(Request $request)
  183. {
  184. $id = $request->input('id','');
  185. if($id=='')
  186. {
  187. return ReturnData::create(ReturnData::PARAMS_ERROR);
  188. }
  189. return Order::remove($id,Token::$uid);
  190. }
  191. //商城支付宝app支付
  192. public function orderAlipayApp(Request $request)
  193. {
  194. $id = $request->input('id',null);
  195. if($id===null){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
  196. $order = DB::table('order')->where(['id'=>$id,'status'=>0,'user_id'=>Token::$uid])->first();
  197. if(!$order){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
  198. $order_pay = DB::table('order_pay')->where(['id'=>$order->pay_id])->first();
  199. if(!$order_pay){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
  200. require_once base_path('resources/org/alipay_app').'/AopClient.php';
  201. require_once base_path('resources/org/alipay_app').'/AlipayTradeAppPayRequest.php';
  202. $aop = new \AopClient;
  203. $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
  204. $aop->appId = config('alipay.app_alipay.appId');
  205. $aop->rsaPrivateKey = config('alipay.app_alipay.rsaPrivateKey');
  206. $aop->format = "json";
  207. $aop->charset = "UTF-8";
  208. $aop->signType = "RSA2";
  209. $aop->alipayrsaPublicKey = config('alipay.app_alipay.alipayrsaPublicKey');
  210. //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
  211. $request = new \AlipayTradeAppPayRequest();
  212. //SDK已经封装掉了公共参数,这里只需要传入业务参数
  213. $bizcontent = "{\"body\":\"订单支付\","
  214. . "\"subject\": \"订单支付\","
  215. . "\"out_trade_no\": \"".$order_pay->sn."\","
  216. . "\"total_amount\": \"".$order_pay->pay_amount."\","
  217. . "\"timeout_express\": \"30m\","
  218. . "\"product_code\":\"QUICK_MSECURITY_PAY\""
  219. . "}";
  220. $request->setNotifyUrl(config('app.url.apiDomain') . '/payment/notify/order_alipay/');
  221. $request->setBizContent($bizcontent);
  222. //这里和普通的接口调用不同,使用的是sdkExecute
  223. $response = $aop->sdkExecute($request);
  224. //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
  225. return ReturnCode::create(ReturnCode::SUCCESS,$response);//就是orderString 可以直接给客户端请求,无需再做处理。
  226. }
  227. //商城微信app支付
  228. public function orderWxpayApp(Request $request)
  229. {
  230. //参数
  231. $id = $request->input('id',null);
  232. if($id===null){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
  233. $order_info = DB::table('order')->where(['id'=>$id,'status'=>0,'user_id'=>Token::$uid])->first();
  234. if(!$order_info){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
  235. $order_pay = DB::table('order_pay')->where(['id'=>$order_info->pay_id])->first();
  236. if(!$order_pay){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
  237. //1.配置
  238. $options = config('weixin.app');
  239. $app = new \EasyWeChat\Foundation\Application($options);
  240. $payment = $app->payment;
  241. $out_trade_no = $order_pay->sn;
  242. //2.创建订单
  243. $attributes = [
  244. 'trade_type' => 'APP', // JSAPI,NATIVE,APP...
  245. 'body' => '订单支付',
  246. 'detail' => '订单支付',
  247. 'out_trade_no' => $out_trade_no,
  248. 'total_fee' => $order_pay->pay_amount*100, // 单位:分
  249. 'notify_url' => config('app.url.apiDomain').'payment/notify/app_order_weixin_pay/', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
  250. //'openid' => '当前用户的 openid', // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识,
  251. // ...
  252. ];
  253. $order = new \EasyWeChat\Payment\Order($attributes);
  254. //3.统一下单
  255. $result = $payment->prepare($order);
  256. if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS')
  257. {
  258. $prepayId = $result->prepay_id;
  259. $res = $payment->configForAppPayment($prepayId);
  260. }
  261. $res['out_trade_no'] = $out_trade_no;
  262. return ReturnCode::create(ReturnCode::SUCCESS,$res);
  263. }
  264. }