微信授权逻辑修改
This commit is contained in:
@@ -149,6 +149,51 @@ export class WechatApiProvider implements IWechatProvider {
|
||||
};
|
||||
}
|
||||
|
||||
async fetchOAuthUserInfo(
|
||||
accessToken: string,
|
||||
openId: string,
|
||||
actorRef?: WechatActorRef,
|
||||
): Promise<import('./wechat.interface').WechatOAuthUserInfo> {
|
||||
const maskedUrl = new URL('https://api.weixin.qq.com/sns/userinfo');
|
||||
maskedUrl.searchParams.set('access_token', '***');
|
||||
maskedUrl.searchParams.set('openid', openId);
|
||||
maskedUrl.searchParams.set('lang', 'zh_CN');
|
||||
const apiUrl = new URL('https://api.weixin.qq.com/sns/userinfo');
|
||||
apiUrl.searchParams.set('access_token', accessToken);
|
||||
apiUrl.searchParams.set('openid', openId);
|
||||
apiUrl.searchParams.set('lang', 'zh_CN');
|
||||
const data = await this.fetchJson<{
|
||||
openid?: string;
|
||||
nickname?: string;
|
||||
headimgurl?: string;
|
||||
unionid?: string;
|
||||
errcode?: number;
|
||||
errmsg?: string;
|
||||
}>(apiUrl.toString());
|
||||
const ok = !!data.openid;
|
||||
await logWechatAuth(this.prisma, {
|
||||
scene: 'USERINFO',
|
||||
requestUrl: maskedUrl.toString(),
|
||||
requestBody: { lang: 'zh_CN' },
|
||||
responseBody: ok
|
||||
? { openid: data.openid, nickname: data.nickname, unionid: data.unionid }
|
||||
: { errcode: data.errcode, errmsg: data.errmsg },
|
||||
externalNo: data.openid ?? openId,
|
||||
status: ok ? 'SUCCESS' : 'FAILED',
|
||||
errorMessage: ok ? undefined : data.errmsg || '微信用户信息获取失败',
|
||||
actorRef,
|
||||
});
|
||||
if (!data.openid) {
|
||||
throw new InternalServerErrorException(data.errmsg || '微信用户信息获取失败');
|
||||
}
|
||||
return {
|
||||
openId: data.openid,
|
||||
nickname: data.nickname,
|
||||
headImgUrl: data.headimgurl,
|
||||
unionId: data.unionid,
|
||||
};
|
||||
}
|
||||
|
||||
async createJssdkConfig(url: string, actorRef?: WechatActorRef) {
|
||||
try {
|
||||
const ticket = await this.getJsapiTicket();
|
||||
|
||||
@@ -27,6 +27,10 @@ export class WechatDisabledProvider implements IWechatProvider {
|
||||
return this.disabled();
|
||||
}
|
||||
|
||||
fetchOAuthUserInfo() {
|
||||
return this.disabled();
|
||||
}
|
||||
|
||||
createJssdkConfig() {
|
||||
return this.disabled();
|
||||
}
|
||||
|
||||
@@ -14,6 +14,13 @@ export type WechatOAuthSession = {
|
||||
refreshToken?: string;
|
||||
};
|
||||
|
||||
export type WechatOAuthUserInfo = {
|
||||
openId: string;
|
||||
nickname?: string;
|
||||
headImgUrl?: string;
|
||||
unionId?: string;
|
||||
};
|
||||
|
||||
export type WechatPayNotifyResult = {
|
||||
transactionId: string;
|
||||
outTradeNo: string;
|
||||
@@ -36,6 +43,13 @@ export interface IWechatProvider {
|
||||
/** 公众号 H5 OAuth code 换 openId */
|
||||
oauth2AccessToken(code: string, actorRef?: { refType: string; refId: bigint }): Promise<WechatOAuthSession>;
|
||||
|
||||
/** 公众号 OAuth access_token 拉取用户昵称头像(snsapi_userinfo) */
|
||||
fetchOAuthUserInfo(
|
||||
accessToken: string,
|
||||
openId: string,
|
||||
actorRef?: { refType: string; refId: bigint },
|
||||
): Promise<WechatOAuthUserInfo>;
|
||||
|
||||
/** JSSDK 签名配置 */
|
||||
createJssdkConfig(url: string, actorRef?: { refType: string; refId: bigint }): Promise<WechatJssdkConfig>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user