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.

288 lines
11 KiB

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