From 168ff2058fe9a0c84d33a8cade1fd0f3f9d7e769 Mon Sep 17 00:00:00 2001 From: Dev Date: Sat, 10 Oct 2026 17:19:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=A1=AE=E8=AE=A4=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/service/TransferAuthorizationService.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/application/common/service/TransferAuthorizationService.php b/backend/application/common/service/TransferAuthorizationService.php index f22f527..e061158 100644 --- a/backend/application/common/service/TransferAuthorizationService.php +++ b/backend/application/common/service/TransferAuthorizationService.php @@ -148,7 +148,9 @@ class TransferAuthorizationService ]; } if ($queryState === self::STATE_WAIT_USER_CONFIRM) { - //待确认单有效期内必须复用,禁止再申请(计入 5 笔上限) + //待确认单有效期内必须复用同一单号(禁止换号,避免把同一 openid 的待确认单堆到 5 笔上限)。 + //本地若无可用 package(该状态是本次查单才发现、或记录里的 package 丢失), + //返回 null 交给外层用同一单号重新“发起授权”,微信会幂等返回该单号及其 package_info return self::pendingPackageResponse($wechat, $query, $record ?: self::getByUserId($userId)); } //CLOSED 走换号申请 @@ -224,16 +226,19 @@ class TransferAuthorizationService } /** - * 待确认:优先用查询返回的 package,否则用本地上次申请保存的 package + * 待确认:优先用查询返回的 package,其次用本地上次申请保存的 package。 + * 两者都没有时返回 null,由调用方用同一单号重新发起授权取回 package, + * 否则会出现“提示待确认但无法拉起授权页”的死路。 + * @return array|null */ - private static function pendingPackageResponse(EasyWeChatService $wechat, array $query, $record): array + private static function pendingPackageResponse(EasyWeChatService $wechat, array $query, $record) { $package = (string)($query['package_info'] ?? ''); if ($package === '' && $record) { $package = (string)($record->package_info ?? ''); } if ($package === '') { - throw new \Exception('授权申请待用户确认,请在微信中完成授权,勿重复发起'); + return null; } return self::pendingAuthResponse($wechat, self::STATE_WAIT_USER_CONFIRM, $package);