





















uniapp App 在 HarmonyOS NEXT 上接入微信授权登录的完整方案,涵盖微信开放平台注册、原生工程配置、前端代码改造三层。适用于 uni-app(Vue3)+ 独立 DevEco 原生工程的现有工作流。
现有 src/pages/Login/index.vue 的微信登录逻辑被包裹在条件编译 // #ifdef APP-PLUS || APP 中。由于 APP-HARMONY 与 APP-PLUS 是并列关系(不是包含),这段代码在鸿蒙端编译时被整体剔除,导致鸿蒙上点击「微信授权登录」无任何反应。
此外,微信登录在鸿蒙端的 API 参数与 App 端不同:
onlyAuthorize:HarmonyOS 不支持univerifyStyle:HarmonyOS 不支持scopes:鸿蒙端无需传微信登录在 uni-app 鸿蒙端已官方支持(微信登录:HarmonyOS Next,需 HBuilderX ≥ 4.81)。
微信鸿蒙平台不需要 Android 那种「签名指纹」,需要的是 Bundle ID + identifier(appIdentifier) 两项。
| 微信表单字段 | 值 | 来源 |
|---|---|---|
| Bundle ID(包名) | com.****** |
原生工程 AppScope/app.json5 → app.bundleName |
| identifier(appIdentifier) | ****** |
签名描述文件 .p7b 中的 app-identifier 字段 |
| AppID(移动应用) | wx****** |
与 src/manifest.json 中配置一致,鸿蒙沿用同一 AppID |
appIdentifier 提取方式:解析
C:\Users\<用户>\.ohos\config\default_app-harmony_*.p7b,读取其中的"app-identifier"。正常情况下它与 AppGallery Connect(AGC)中该应用的「APP ID」一致,上架前建议到 AGC → 应用信息 二次核对。
因已有移动应用(含 iOS/Android),走「已有应用追加鸿蒙平台」,AppID 不变:
E:\code_qnl\app-harmony)在 oh-package.json5 的 dependencies 中加入:
"@tencent/wechat_open_sdk": "1.0.15"
在 App module 的 entry/src/main/module.json5 中:
{
"module": {
// querySchemes 只配 weixin,切勿配 wxopensdk
"querySchemes": ["weixin"],
"abilities": [{
"skills": [{
// 微信回调需要的 action
"actions": ["action.system.home", "wxentity.action.open"]
}]
}]
}
}
⚠️ 与微信官方原生 Demo 的差异:微信官方文档要求同时配置
weixin和wxopensdk。但本项目登录走 uni-app 鸿蒙运行时,uni-app 官方实测配置wxopensdk会导致登录无回调,因此只配weixin,以 uni-app 规则为准。
src/pages/Login/index.vue)保持现有 // #ifdef APP-PLUS || APP 分支不变,新增独立的 APP-HARMONY 分支(因参数不同,不能与 APP-PLUS 合并):
// #ifdef APP-HARMONY
isWeixinLogging.value = true;
uni.login({
provider: 'weixin',
// 注意:鸿蒙不支持 onlyAuthorize / univerifyStyle / scopes
success: async (weixinLoginRes) => {
try {
// 鸿蒙端授权码可能位于 code 或 authResult.code,做兼容取值
const code = weixinLoginRes.code || weixinLoginRes?.authResult?.code;
if (!code) throw new Error('获取微信授权code失败');
uni.showLoading({ title: '微信登录中...' });
weixinLoginCode.value = code;
const wxLoginRes = await loginByWeixin({ code, type: 2 });
await afterAppLogin(wxLoginRes);
} catch (error) {
if (error.code === '-7755') {
navigateTo({ url: RouteName.BindMobile, props: { weixinLoginCode: weixinLoginCode.value } });
} else {
uni.showToast({ title: error.message ?? error ?? '微信登录失败', icon: 'none' });
}
} finally {
uni.hideLoading();
isWeixinLogging.value = false;
}
},
fail: (err) => {
uni.hideLoading();
isWeixinLogging.value = false;
const errorMsg = err.errMsg?.includes('cancel') ? '您取消了微信授权,请重新尝试' : '微信授权失败,请稍后再试';
uni.showToast({ title: errorMsg, icon: 'none' });
console.error('鸿蒙微信登录授权失败:', err);
},
});
// #endif
关键差异:去掉 onlyAuthorize 和 scopes;鸿蒙返回结构可能不同,用 code || authResult?.code 兼容取值(首次真机联调建议 console.log(weixinLoginRes) 确认字段)。后续 loginByWeixin、afterAppLogin、-7755 绑定手机号跳转逻辑全部复用,无需改后端。
src/manifest.json 中 weixin 的 __platform__: ["ios","android"] 是 App 端配置,鸿蒙走原生工程 module.json5,两者独立、互不影响。| 报错 | 原因 | 处理 |
|---|---|---|
login:fail Provider not found |
鸿蒙未接入微信 SDK / 未配置 querySchemes | 完成第三章原生配置 |
| Bundle ID 信息校验不通过 | 微信开放平台审核中/被驳回 | 等审核通过;通过后仍报错则核对 appid+identifier+bundleId 是否匹配 |
| 第三方应用信息校验失败 | AppID 传错 或 identifier 不一致 | 确认传的是移动应用 AppID(非小程序 AppID),核对 identifier |
| 点击微信登录无反应 | 条件编译未覆盖 APP-HARMONY |
按第四章新增鸿蒙分支 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。