授权确认优化
This commit is contained in:
@@ -105,7 +105,11 @@ class TransferAuthorizationService
|
||||
: self::generateAuthNo($userId);
|
||||
$displayName = self::sanitizeDisplayName($displayName ?: ($user->nickname ?: ('用户' . $userId)));
|
||||
|
||||
$query = $wechat->queryTransferAuthorization($authNo, true);
|
||||
//注意:is_display_authorization=true 只在授权已生效(TAKING_EFFECT)时可用;
|
||||
//待确认(WAIT_USER_CONFIRM)/已关闭(CLOSED)会被微信以 INVALID_REQUEST 拒绝且不返回 state,
|
||||
//会导致误判为“查询授权状态失败”。查状态必须用 false,
|
||||
//拉起授权页所需的 package 只能来自申请接口的响应或本地记录。
|
||||
$query = $wechat->queryTransferAuthorization($authNo, false);
|
||||
$resolved = self::resolveByWechatState($userId, $authNo, $query, $wechat, $record);
|
||||
if ($resolved !== null) {
|
||||
return $resolved;
|
||||
@@ -156,9 +160,13 @@ class TransferAuthorizationService
|
||||
return null;
|
||||
}
|
||||
|
||||
//查询失败时禁止再开新单,避免把同一 openid 的待确认/已生效单堆到 5 笔上限
|
||||
//查询异常(网络/系统错误)时:本地已生效的授权直接放行,避免误报“查询授权状态失败”;
|
||||
//不允许再开新单,防止把同一 openid 的待确认/已生效单堆到 5 笔上限
|
||||
if ($record && $record->state === self::STATE_TAKING_EFFECT) {
|
||||
throw new \Exception('查询授权状态失败,请稍后重试');
|
||||
return [
|
||||
'authorized' => true,
|
||||
'state' => self::STATE_TAKING_EFFECT,
|
||||
];
|
||||
}
|
||||
if ($record && $record->state === self::STATE_WAIT_USER_CONFIRM && !empty($record->package_info)) {
|
||||
return self::pendingAuthResponse($wechat, self::STATE_WAIT_USER_CONFIRM, (string)$record->package_info);
|
||||
@@ -180,7 +188,7 @@ class TransferAuthorizationService
|
||||
|
||||
//当前单已受理/已终结:改为查单,禁止换号重试
|
||||
if (self::isApplyConflict($res)) {
|
||||
$query = $wechat->queryTransferAuthorization($authNo, true);
|
||||
$query = $wechat->queryTransferAuthorization($authNo, false);
|
||||
$resolved = self::resolveByWechatState($userId, $authNo, $query, $wechat, self::getByUserId($userId));
|
||||
if ($resolved !== null) {
|
||||
return $resolved;
|
||||
|
||||
Reference in New Issue
Block a user