From 3197244f6ecfc87b5b44b93f9bf4b48a17f56339 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Mon, 29 Jun 2026 19:28:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98=20?= =?UTF-8?q?=E5=8F=91=E8=B4=A7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/OfflineOrderService.php | 50 ---------------------------- app/Services/PayService.php | 33 +++++++++++++++++- app/Services/WxMpService.php | 9 +---- 3 files changed, 33 insertions(+), 59 deletions(-) diff --git a/app/Services/OfflineOrderService.php b/app/Services/OfflineOrderService.php index 1f53967e..64719dad 100644 --- a/app/Services/OfflineOrderService.php +++ b/app/Services/OfflineOrderService.php @@ -340,55 +340,5 @@ class OfflineOrderService $coupon->markAsUse(); } } - - if (config('app.env') != "local") { - try { - $this->orderShip($order); - } catch (BizException $e) { - logger()->error("线下订单-自动发货失败: " . $e->getMessage(), ['id' => $order->id, 'sn' => $order->sn]); - } - } - } - - /** - * 订单发货 - */ - public function orderShip(OfflineOrder $order) - { - $now = now(); - if (!$order->isPaid()) { - throw new BizException("订单未支付"); - } - $userId = $order->user_id; - $socialite = SocialiteUser::where('user_id', $userId)->where('socialite_type', SocialiteType::WechatMiniProgram)->first(); - if (!$socialite) { - throw new BizException("未找到用户的openid"); - } - $openid = $socialite->socialite_id; - $items = $order->items()->with(['productCategory'])->get(); - $desc = []; - foreach ($items as $item) { - $name = data_get($item, "productCategory.name", "定制服务"); - array_push($desc, $name); - } - $data = [ - "order_key" => [ - "order_number_type" => 1, - "out_trade_no" => $order->payment_sn, - ], - "logistics_type" => 4, - "delivery_mode" => 1, - "shipping_list" => [ - "item_desc" => implode(";", $desc) - ], - "upload_time" => $now, - "payer" => [ - "openid" => $openid - ] - ]; - WxMpService::make()->uploadShippingInfo($data); - - $order->ship_time = $now; - $order->save(); } } diff --git a/app/Services/PayService.php b/app/Services/PayService.php index 0006af92..8e378dec 100644 --- a/app/Services/PayService.php +++ b/app/Services/PayService.php @@ -3,10 +3,11 @@ namespace App\Services; use App\Enums\OfflineOrderStatus; +use App\Enums\SocialiteType; use App\Exceptions\BizException; use App\Exceptions\InvalidPaySerialNumberException; use App\Models\PayLog; -use App\Models\{OfflineOrder, Order, OrderPre}; +use App\Models\{OfflineOrder, Order, OrderPre, SocialiteUser}; class PayService { @@ -54,6 +55,7 @@ class PayService ]); $payable = $payLog->payable; + $userId = null; if ($payable instanceof Order) { if ($payable->isPaid()) { @@ -63,6 +65,7 @@ class PayService if ($payable->isCompleted()) { throw new BizException('订单已完成'); } + $userId = $payable->user_id; $payable->update([ 'pay_sn' => $payLog->pay_sn, @@ -77,6 +80,7 @@ class PayService } elseif ($payable->isRevoked()) { throw new BizException('订单取消'); } + $userId = $payable->user_id; OfflineOrderService::make()->paySuccess($payable, [ 'payment_sn' => $payLog->pay_sn, @@ -86,9 +90,36 @@ class PayService 'status' => OfflineOrderStatus::Paid, ]); } elseif ($payable instanceof \App\Models\UserVip) { + $userId = $payable->user_id; (new \App\Services\VipService())->success($payable, ['pay_at' => $payLog->pay_at]); } + // 订单支付成功, 调用发货信息API + if ($userId) { + $socialite = SocialiteUser::where('user_id', $userId)->where('socialite_type', SocialiteType::WechatMiniProgram)->first(); + if ($socialite) { + $openid = $socialite->socialite_id; + if ($openid) { + $data = [ + "order_key" => [ + "order_number_type" => 1, + "out_trade_no" => $payLog->pay_sn, + ], + "logistics_type" => 4, + "delivery_mode" => 1, + "shipping_list" => [ + "item_desc" => "定制服务" + ], + "upload_time" => $payLog->pay_at, + "payer" => [ + "openid" => $openid + ] + ]; + WxMpService::make()->uploadShippingInfo($data); + } + } + } + return $payLog; } diff --git a/app/Services/WxMpService.php b/app/Services/WxMpService.php index 17b9116b..ef933854 100644 --- a/app/Services/WxMpService.php +++ b/app/Services/WxMpService.php @@ -17,18 +17,11 @@ class WxMpService * 发货信息录入 * https://developers.weixin.qq.com/miniprogram/dev/server/API/order_shipping/api_uploadshippinginfo.html */ - public function uploadShippingInfo($data) + public function uploadShippingInfo(array $data) { $app = Factory::miniProgram(config('wechat.mini_program.default')); $accessToken = $app->access_token->getToken()['access_token']; $url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" . $accessToken; - $data = [ - "order_key" => [ - "order_number_type" => 1, - "out_trade_no" => "", - ], - "logistics_type" => 4 - ]; $response = Http::post($url, $data); $response->throw();