授权确认优化
This commit is contained in:
@@ -297,7 +297,10 @@ class EasyWeChatService
|
||||
* 接口:GET /v3/fund-app/mch-transfer/user-confirm-authorization/out-authorization-no/{no}
|
||||
* 文档:https://pay.weixin.qq.com/doc/v3/merchant/4015901167
|
||||
* @param string $out_authorization_no 商户侧授权单号
|
||||
* @param bool $isDisplayAuthorization 是否在响应中返回 package_info(调起授权页/授权信息页)
|
||||
* @param bool $isDisplayAuthorization 是否请求展示授权信息页的 package_info。
|
||||
* 注意:仅当授权已生效(TAKING_EFFECT)时才有效;
|
||||
* 待确认/已关闭状态下微信会返回 INVALID_REQUEST 且不返回 state,
|
||||
* 因此“查状态”必须传 false,拉起授权确认页的 package 应取申请接口的响应
|
||||
* @return array {out_authorization_no, authorization_id, state, ...};失败时含 message
|
||||
*/
|
||||
public function queryTransferAuthorization($out_authorization_no, $isDisplayAuthorization = false)
|
||||
|
||||
@@ -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