_valid([ 'order.require' => trans("empty.require") ]); if (!is_array($param)) return error($param); $order = (new SaasOrder)->where("order_sn",$param["order"])->with(['product','poi','user'])->findOrEmpty(); echo "订单状态==={$order['status']}\n"; if ($order->isEmpty()) return errorTrans("empty.data"); // if ($order['status'] <> 7) return error("该订单状态不支持核销"); // if ($request->user['store_id'] <> $order['poi_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data"); // $orderExpress = (new SaasOrderExpress)->where("order_sn",$order['out_order_no'])->findOrEmpty(); // if ($orderExpress->isEmpty()) return error("订单尚未发货"); // if (!empty($order['error_at'])) { // if (strtotime("+24 hour",strtotime($order['error_at'])) < time()) return error("新订单需24小时后方可核销"); // } // [$state,$expressData] = (new LifeWeb)->getExpressData($orderExpress['express_sn'],$orderExpress['mobile']); // if (!$state) return error("查询物流失败,请联系管理员"); // if (!in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) return error("当前物流状态不允许核销"); $startTime = $order['poi']['order_start']??'09:00'; $endTime = $order['poi']['order_end']??'22:30'; $startTimeStamp = strtotime(date("Y-m-d {$startTime}:00")); $endTimeStamp = strtotime(date("Y-m-d {$endTime}:00")); if (time() > $startTimeStamp && time() < $endTimeStamp) { $data = (new OrderData)->config([ "appid" => sConf("wechat.mini_appid"), "secret" => sConf("wechat.mini_secret") ])->token()->verifyOrder($order->toArray()); if (empty($data['verify_results'])) return error($data['description']); // 核销失败 $order->status = 2; $order->express_status = 3; $order->done_at = getDateFull(); $order->save(); (new SaasOrderItem)->where(['order_sn'=>$order['order_sn'],'status'=>1])->update(['status'=>3]); (new SaasOrderVerify)->insertGetId([ "poi_id" => $order['poi_id'], "order_sn" => $order['order_sn'], "money" => $order['price'], "certificate_id" => $data['verify_results'][0]['certificate_id']??'0', "verify_id" => $data['verify_results'][0]['verify_id']??'0', ]); return success("核销成功"); } else { return error("当前时间段不支持核销"); } } catch (\Throwable $throwable) { echo $throwable->getMessage()."\n"; echo $throwable->getFile()."\n"; echo $throwable->getLine()."\n"; return error($throwable->getMessage()); } } #[GetMapping('mini/token')] public function testToken() { try { $resp = (new OrderData)->config([ "appid" => sConf("wechat.mini_appid"), "secret" => sConf("wechat.mini_secret"), ])->token()->getAccessToken(); return success('ok',['data' => $resp]); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } #[GetMapping('mini/order')] public function getTest(Request $request) { try { $param = $this->_valid([ "order.require" => trans("empty.require") ],$request->method()); if (!is_array($param)) return error($param); $resp = (new SaasOrderExpress)->where('express_sn',$param['order'])->with(['orders' => function ($query) { $query->field("*")->with(['poi']); }])->findOrEmpty(); if ($resp->isEmpty()) return error("没有任务啦"); [$state,$expressData] = $this->getExpressData($resp['express_sn'],$resp['mobile']); $isDone = false; foreach ($expressData['logisticsTraceDetailList'] as $sk){ if (in_array($sk['logisticsStatus'],['DELIVERING','AGENT_SIGN','SIGN'])) { $isDone = true; } } $expressUpData = [ 'last_at' => getDateFull(), 'last_msg' => $expressData['logisticsStatusDesc'], 'content' => json_encode($expressData['logisticsTraceDetailList']) ]; if ($isDone) { // 核销订单 $where = []; if (str_contains($resp['order_sn'], 'AL')) { $where['out_order_no'] = $resp['order_sn']; } else { $where['order_sn'] = $resp['order_sn']; } (new SaasOrder)->where($where)->save(['is_done' => 1]); $expressUpData['status'] = 1; $msg = ("订单可以核销=={$resp['order_sn']}=={$resp['express_sn']}==".getDateFull()); } else { $msg = ("查询物流成功=={$resp['express_sn']}=={$resp['order_sn']}=={$expressData['logisticsStatusDesc']}==".getDateFull()); } (new SaasOrderExpress)->where("id",$resp['id'])->update($expressUpData); return success('ok',['msg' => $msg]); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } #[GetMapping('mini/at')] public function checkOrderAt(Request $request): Response { try { $param = $this->_valid([ "order.require" => trans("empty.require") ],$request->method()); if (!is_array($param)) return error($param); $order = (new SaasOrder)->where("order_sn",$param['order'])->findOrEmpty(); echo getDateFull()."===发货时间:{$order['error_at']}\n"; if (!empty($order['error_at'])) { echo time()."===".strtotime("+1 day",strtotime($order['error_at']))."\n"; if (strtotime("+1 day",strtotime($order['error_at'])) < time()) return error("新订单需24小时后方可核销"); } return success("ok"); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } protected function getExpressData(string $expressNo = "",string $mobile = ""): array { $url = "https://kzexpress.market.alicloudapi.com/api-mall/api/express/query"; $param = [ "expressNo" => $expressNo, "mobile" => substr($mobile,-4) ]; $resp = Http::withHeaders([ "Authorization" => "APPCODE ".sConf("wechat.kd_code") ])->post($url,$param)->array(); if ($resp['code'] <> 200) { return [0,'']; } return [1,$resp['data']]; } }