【HarmonyOS】鸿蒙应用实现微信登录-最新版

GeorgeGcs
• 阅读 89

【HarmonyOS】鸿蒙应用实现微信登录-最新版

一、前言

微信支付和登录是三方应用集成比较热门的功能。需要注意的是,在鸿蒙AGC官方平台,当三方应用集成了类似微信登录这种三方应用,也必须集成华为的登录。这点很多人不知道,在此说明一下。这也算是应用市场的常规要求,苹果应用市场也是如此。

1、微信开放平台配置应用信息: 在接入过程之前,我们需要在微信开放平台,注册自己的应用,开启支付权限。理论上这些都应该是运营提前做好,不过在这里也事先讲一下。

需在微信开放平台完成移动应用的创建/配置,获取AppID并填写鸿蒙应用信息:
创建/修改应用:进入「管理中心 - 移动应用」,新建应用或在已有应用的「开发配置」中编辑鸿蒙信息。
填写关键信息Bundle ID:鸿蒙应用的包名(见下方链接)。
Identifier:鸿蒙应用的appIdentifier(见下方链接)。
【HarmonyOS】鸿蒙应用实现微信登录-最新版

注意: 若应用已上架Android/iOS市场,需选择「已上架至少一个应用市场」并填写备案号;仅鸿蒙未上架时,可按需选择上架状态。

「未上架任何应用市场」选项仅适用于Android、iOS、鸿蒙均未上架的情况,此类应用使用微信能力会受限,需谨慎选择。

Bundle ID: https://developer.huawei.com/consumer/cn/doc/app/agc-help-createharmonyapp-0000001945392297

appIdentifier: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-bundlemanager-bundleinfo-V5

2、鸿蒙应用接入微信OpenSDK: (1)sdk在OH三方库的地址:

// 把地址放到浏览器打开,查看最新的版本号,如我下方截图所示,是最近的最新版本信息。
https://ohpm.openharmony.cn/#/cn/detail/@tencent%2Fwechat_open_sdk

【HarmonyOS】鸿蒙应用实现微信登录-最新版 (2)接入方式: 在你项目的oh-package.json5的dependencies中配置sdk依赖:


{
  "name": "demo",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "",
  "author": "",
  "license": "",
   "dependencies": {
    "@tencent/wechat_open_sdk": "1.0.14"
  }
}

二、登录流程整体步骤:

1、配置权限

权限配置,module.json5里得加上网络权限,不然调不了接口:

"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET",
    "reason": "需要网络权限用于微信登录"
  }
]

这里有个容易忽略的点:要在 abilities 里配置微信的回调协议,不然授权后跳不回来:

"abilities": [
  {
    "skills": [
      {
        "actions": [
          "wxentity.action.open"
        ]
      }
    ]
  }
]

签名证书也得配置对,我当时因为调试证书没配置好,一直提示 “第三方应用信息校验失败”,后来在 AGC 平台重新生成证书才解决。

2、初始化与登录流程

应用启动时记得初始化 SDK,一般放在 EntryAbility 的 onCreate 里,如果对冷启动有要求,根据你们的解决方案处理:

import * as wxopensdk from '@tencent/wechat_open_sdk';
wxopensdk.WXApi.registerApp("你的AppID");

登录按钮点击事件里,先检查用户有没有装微信:

if (!wxopensdk.WXApi.isWXAppInstalled()) {
  // 提示用户安装微信或使用其他登录方式
  return;
}

然后发起授权请求:

const sendAuthReq = new wxopensdk.SendAuthReq();
sendAuthReq.scope = "snsapi_userinfo"; // 要获取用户信息就用这个scope
sendAuthReq.state = Math.random().toString(36).substring(2); // 随机字符串防攻击
wxopensdk.WXApi.sendReq(getContext(this) as common.UIAbilityContext, sendAuthReq);

3、处理回调与获取用户信息

授权结果回调处理是关键,我封装了一个方法专门处理:

wxopensdk.WXEventHandler.registerOnWXRespCallback((resp: wxopensdk.BaseResp) => {
  if (resp.errCode === 0 && resp instanceof wxopensdk.SendAuthResp) {
    const code = resp.code;
    // 用code换token
    this.fetchAccessToken(code);
  } else {
    console.error("登录失败,错误码:", resp.errCode);
    // 给用户显示失败提示
  }
});

换取 accessToken 的接口调用要注意用 https:

async fetchAccessToken(code: string) {
  const url = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的AppID&secret=你的AppSecret&code=${code}&grant_type=authorization_code`;
  try {
    const response = await http.createHttp().request(url, { method: http.RequestMethod.GET });
    const data = JSON.parse(response.result.toString());
    if (data.access_token) {
      this.getUserInfo(data.access_token, data.openid);
    }
  } catch (e) {
    console.error("获取token失败:", e);
  }
}

拿到 token 后就能获取用户信息了,这部分建议做好缓存,不用每次都请求。

注意事项:

1、权限申请:虽然网络权限是基础权限,但最好在调用前检查一下:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
const atManager = abilityAccessCtrl.createAtManager();
const hasPermission = await atManager.checkAccessToken(tokenId, "ohos.permission.INTERNET");

2、签名问题:调试时用的证书和正式发布的要区分开,不然审核可能通不过

3、隐私合规:一定要在隐私政策里说明会获取微信的哪些信息,不然应用市场审核会被打回

4、回调处理: 刚开始集成时没配置回调协议,导致微信授权后跳不回应用,排查了半天才发现是 abilities 配置问题

5、scope 参数处理:scope 参数一开始用了 snsapi_base,结果拿不到用户信息,换成 snsapi_userinfo 才解决

5、微信和sdk版本:测试机微信版本太低,导致某些接口调用失败,提醒用户更新微信

6、系统弹框处理:建议在项目的module.json5中,配置querySchemes参数,可以实现拉起微信免系统弹窗 "querySchemes": [ "weixin", "wxopensdk" ]

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
4年前
uni-app入门教程(7)第三方登录和分享
前言本文主要介绍了APP开发的两大基本功能,即第三方登录登录和分享:包括登录通用配置,微信小程序和APP的第三方登录方式,和分享到聊天和朋友圈,使用uniapp实现有不同的接口和实现方式。一、通用配置因为小程序和APP登录接口不同,需要在前端进行跨端兼容处理,同时微信等平台的小程序一般只支持所属宿主程序的第三方登录,而无法包括其他的
马丁路德 马丁路德
4年前
小程序静默登录与维护自定义登录态
1.背景在小程序中,openid是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户,就如同你的身份证一样。2.什么是静默登录?在普通的应用中,用户通过表单验证登录建立用户体系,这种常见的登录方式一般是通过登录页面表单进行登录,对用户来说是有感的。在小程序中,由于是基于微信,可以通过微信官方提供的API能力,使我们能够无感知得获取
Jacquelyn38 Jacquelyn38
4年前
手写一个仿微信登录的nodejs程序
前言首先,我们看一下微信开放文档中的一张图:上面的一幅图中清楚地介绍了微信登录整个过程,下面对图上所示进行总结:一、二维码的获得1.用户打开登录网页后,登录网页后台根据微信OAuth2.0协议向微信开发平台请求授权登录,并传递事先在微信开发平台中审核通过的AppID和AppSecrect等参数;2.微信开发平台对AppID等参数进行验证,并向
Stella981 Stella981
3年前
Android之第三方平台实现QQ登录和QQ分享
目前大多数APP都包含了第三方平台的登录,特别是QQ和微信,这篇博客主要讲的是如何实现QQ第三方平台实现QQ登录和分享功能,功能包含:登录授权登录获取用户信息(昵称,头像,地址等)QQ分享给好友QQ分享到空间先看看效果图:                      !(https://static.oschin
Wesley13 Wesley13
3年前
C#开发——网站应用微信登录开发
1\.在微信开放平台注册开发者账号,并有一个审核已通过的网站应用,并获得相对应的AppID和AppSecret,申请通过登陆后,方可开始接入流程。2.微信OAuth2.0授权登录目前支持authorization\_code模式,适用于拥有server端的应用授权。该模式整体流程为:1.第三方发起微信授权登录请求,微信用户允许授权第三方应
GeorgeGcs GeorgeGcs
1个月前
【HarmonyOS】鸿蒙应用实现调用系统地图导航或路径规划
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财前言在涉及地图业务中,调用地图导航和路径规划是三方应用中较为常见的功能。若只是子业务需要地图导航效果,整个APP内部集成地图去实现导航或者路径规划,会造成SDK集成冗余。毕竟很重。所以该效
后端码匠 后端码匠
1年前
【Java】单点登陆
一、简介单点登陆:在多系统中单一位置登录可以实现多系统同时登录的一种技术。常在互联网应用和企业级平台中使用。第三方登陆:在某系统中使用其他系统的用户实现本系统登录的方式。如,在京东中使用微信登录。解决信息孤岛和用户不对等的实现方案。单点登陆需要解决的问题:
流浪剑客 流浪剑客
1年前
微信微调助手WeChatTweak:多开和防撤回工具
是一款仅限mac平台的微信客户端插件,这款插件拥有防撤回和微信多开的功能。集成版无需执行终端命令,直接可以右键单击dock栏图标以登录另一个微信帐户。
GeorgeGcs GeorgeGcs
1个月前
【HarmonyOS 5】鸿蒙跨平台开发方案详解(一)
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、为什么需要鸿蒙跨平台开发方案?2025年是鸿蒙生态迎来关键发展期。根据前几天的2025HDC数据显示,鸿蒙原生应用数量已从2024年的2000款增长至5000款,微信鸿蒙版安装量突破1
GeorgeGcs GeorgeGcs
1个月前
【HarmonyOS 5】VisionKit人脸活体检测详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、VisionKit人脸活体检测是什么?VisionKit是HamronyOS提供的场景化视觉服务工具包。华为将常见的解决方案,通常需要三方应用使用SDK进行集成。华为以Kit的形式集成
GeorgeGcs
GeorgeGcs
Lv1
男 · 金融头部企业 · 鸿蒙应用架构师
HarmonyOS认证创作先锋,华为HDE专家,鸿蒙讲师,作者。目前任职鸿蒙应用架构师。 历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 AAE,Harmony(OpenHarmony\HarmonyOS),MAE(Android\IOS),FE(H5\Vue\RN)。
文章
71
粉丝
1
获赞
2