HarmonyOS鸿蒙Next中微信登录第一次授权不能获取微信code,第二次才能获取,帮忙看看问题
HarmonyOS鸿蒙Next中微信登录第一次授权不能获取微信code,第二次才能获取,帮忙看看问题
import common from '@ohos.app.ability.common';
import * as wxopensdk from '@tencent/wechat_open_sdk';
import { OnWXResp, WXApi, WXEventHandler } from './WXApiWrap';
export const kRoute = "OAuth"
@Entry({ routeName: kRoute })
@Component
struct OAuth {
private wxApi = WXApi
private wxEventHandler = WXEventHandler
@State authResultText: string = ''
private onWXResp: OnWXResp = (resp) => {
console.info('compressedImage', 'packing onWXResp',JSON.stringify(resp ?? {}, null, 2));
this.authResultText = JSON.stringify(resp ?? {}, null, 2)
}
aboutToAppear(): void {
this.wxEventHandler.registerOnWXRespCallback(this.onWXResp)
}
aboutToDisappear(): void {
this.wxEventHandler.unregisterOnWXRespCallback(this.onWXResp)
}
build() {
Column({ space: 20 }) {
Text("授权登录").fontSize(20).fontWeight("bold").width('100%').padding(16)
Button("授权登录").onClick(async () => {
let req = new wxopensdk.SendAuthReq
req.isOption1 = false
req.nonAutomatic = true
req.scope = 'snsapi_userinfo'
req.state = 'none'
req.transaction = 'test123'
let finished1 = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
let finished = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
console.log("send request finished: ", finished)
}).width('80%')
Text(this.authResultText)
.width('80%')
.fontSize(17)
.lineHeight(20)
}
}
}
console.info('compressedImage', 'packing onWXResp',JSON.stringify(resp ?? {}, null, 2)); 这句话第一次回调,第二次才有
更多关于HarmonyOS鸿蒙Next中微信登录第一次授权不能获取微信code,第二次才能获取,帮忙看看问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者您好,请问您指的是您代码里的finished1无法获取到微信code吗?获取不到微信code是否有报错?麻烦提供一下您的hilog日志
更多关于HarmonyOS鸿蒙Next中微信登录第一次授权不能获取微信code,第二次才能获取,帮忙看看问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,可以先参考以下方案排查一下,如未解决可以再反馈并提供完整的日志信息。
【常见FAQ】
Q:为什么点击支付跳转微信后,走不到微信的onResp()方法内? A:排查以下两项。
- 检查引入的包是否正确。
若是跨模块引入自定义微信API封装类,依赖中可能存在同名、相似实现的封装类,导致引入错误而运行不报错,但无法进入预期文件的onResp()方法内。
若项目包含多个模块,WXAPI的注册在主模块中实现,则回调类应该存在于common模块或使用模块中,而不是在主模块中。否则会造成循环依赖,引起异常。
- 检查module.json5配置。
若包的引入没问题而依旧存在走不到onResp()方法的现象,则排查是否在App module的module.json5里加入了用于检查微信是否安装的如下配置。若存在,建议删除
"wxopensdk",只保留"weixin"。
"querySchemes": [
"weixin",
"wxopensdk" // 若无法进入onResp()方法回调,建议删除该行
]
关注,顶贴,
在HarmonyOS鸿蒙Next中,微信登录首次授权无法获取code,通常与微信SDK初始化或授权流程时序有关。请检查以下方面:确保微信SDK已正确集成,且应用签名与微信开放平台配置一致。首次调用时,授权请求参数可能未完全就绪,或回调监听未及时注册。建议在应用启动时提前完成SDK初始化,并验证授权回调URL的配置。若问题持续,可尝试在授权前添加短暂延迟,确保组件加载完成。
问题出在代码逻辑上。在 Button 的 onClick 事件中,您连续两次调用了 this.wxApi.sendReq 方法。
let finished1 = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
let finished = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
这会导致在第一次点击按钮时,实际上向微信发送了两次授权请求。HarmonyOS与微信客户端的交互以及回调的注册/触发可能存在时序问题。第一次请求可能因为回调监听器尚未完全就绪,或者微信客户端处理连续请求的机制,导致其响应(包含code)没有被您的 onWXResp 回调成功捕获。而第二次请求发出时,环境已经稳定,因此回调正常触发,您收到了code。
解决方案:
删除重复的 sendReq 调用,确保一次点击只发送一次请求。
将 onClick 中的代码修改为:
Button("授权登录").onClick(async () => {
let req = new wxopensdk.SendAuthReq
req.isOption1 = false
req.nonAutomatic = true
req.scope = 'snsapi_userinfo'
req.state = 'none'
req.transaction = 'test123'
// 只保留一次 sendReq 调用
let finished = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
console.log("send request finished: ", finished)
}).width('80%')
这样修改后,第一次点击按钮就会正常触发微信授权流程,并在授权成功后通过 onWXResp 回调返回包含 code 的响应。

