post(); $pageSize = $request->post('limit', 10); $post['user_id'] = $request->uid; return api_succ_return(['msg' => '获取成功', 'data' => ShopOrderService::make()->getList($post, $pageSize)]); } catch (\Exception $e) { return api_error_return('获取失败' . $e->getMessage()); } } /** * 订单详情 */ public function orderDetail(Request $request): Response { try { return api_succ_return(['msg' => '获取成功', 'data' => ShopOrderModel::details($request->only(['order_sn']), $request->uid)]); } catch (\Exception $e) { return api_error_return('获取失败' . $e->getMessage()); } } /** * 下单商品详情 * @param Request $request * @return Response */ public function buyDetail(Request $request) { $buyGoods = $request->post('buy_goods'); if (empty($buyGoods)) { return api_error_return('参数错误'); } try { $buyGoods = json_decode(html_entity_decode($buyGoods), true); if (empty($buyGoods)) { return api_error_return('商品参数错误,请返回刷新重新下单'); } if(!$result = ShopOrderService::make()->buyDetail($buyGoods, $request)){ return api_error_return('下单失败'); } return api_succ_return(['msg' => '获取成功', 'data' => $result]); } catch (\Exception $e) { return api_error_return($e->getMessage()); } } /** * 商城下单购买商品 * @param Request $request * @return Response * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function createOrder(Request $request) { $payType = $request->post('pay_type', 0); $payType = $payType == 3 ? $payType : 99; // 因收银台功能过滤支付方式 // 购买商品参数 $buyGoods = json_decode(html_entity_decode($request->post('buy_goods', '')), true); if ($request->user['status'] != 1) { return api_error_return('用户被禁用'); } if ($request->user['is_reward'] == 0) { return api_error_return('用户已被禁止交易'); } // 重复提交拦截 $cacheKeyLock = "caches:orders:createLock:{$request->uid}"; if(RedisCache::exists($cacheKeyLock)){ return api_error_return('请不要频繁提交'); } try { // 加锁 RedisCache::setnx($cacheKeyLock, 1, rand(2,3)); if($ids = ShopOrderService::make()->createOrder($request->uid, $buyGoods, $payType, $request)){ // 清除缓存 RedisCache::clear($cacheKeyLock); RedisCache::keyDel("caches:paymentCall:u{$request->uid}_ot4*"); return api_succ_return(['msg'=>'下单成功', 'data'=>['order_ids'=> $ids]]); }else{ RedisCache::clear($cacheKeyLock); return api_error_return('下单失败'); } } catch (\Exception $e) { RedisCache::clear($cacheKeyLock); return api_error_return($e->getMessage()); } } /** * 取消订单 */ public function cancelOrder(Request $request): Response { if (empty($request->only(['order_sn']))) { return api_error_return('订单号不能为空'); } try { if(ShopOrderService::make()->cancelOrder($request->only(['order_sn']), $request->uid)){ return api_succ_return('取消成功'); }else{ return api_error_return('取消失败'); } } catch (\Exception $e) { return api_error_return('取消失败' . $e->getMessage()); } } /** * 确认订单 */ public function receiveOrder(Request $request): Response { if (empty($request->only(['order_sn']))) { return api_error_return('订单号不能为空'); } try { if(ShopOrderService::make()->receiveOrder($request->only(['order_sn']), $request->uid)){ return api_succ_return('确认成功'); }else{ return api_error_return('确认失败'); } } catch (\Exception $e) { return api_error_return('确认失败' . $e->getMessage()); } } }