授权确认优化

This commit is contained in:
Dev
2026-10-10 17:19:40 +08:00
parent 5f451e1d66
commit 168ff2058f
@@ -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);