HarmonyOS应用集成三方SDK微信账号登录1-148254236
一、前期准备![]()
-
注册微信开放平台账号
-
在微信开放平台注册开发者账号,创建移动应用并提交审核,获取AppID和AppSecret[citation:1]。
-
注意:应用包名需与鸿蒙项目的
config.json中配置的bundleName完全一致[citation:2]。
-
-
配置应用签名
-
使用鸿蒙提供的签名工具生成应用签名(如
.cer文件),并在微信开放平台填写对应的签名信息(如SHA256或MD5)。签名不匹配会导致登录失败[citation:1][citation:3]。
-
二、集成微信SDK
1.添加依赖
在项目的oh-package.json5文件中添加三方SDK依赖
"dependencies": {
"@tencent/wechat_open_sdk": "1.0.0"
} 2. 鸿蒙接入指南
正确接入 SDK 后并拥有相关授权域(scope)权限后,开发者移动应用会在终端本地拉起微信应用进行授权登录,微信用户确认后微信将拉起开发者移动应用,并带上授权临时票据(code)。
{
let req = new wxopensdk.SendAuthReq;
req.scope = "snsapi_userinfo"; // 只能填 snsapi_userinfo
req.state = "wechat_sdk_demo_test";
this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
} 参数说明
| 参数 | 是否必须 | 说明 |
|---|---|---|
| appid | 是 | 应用唯一标识,在微信开放平台提交应用审核通过后获得 |
| scope | 是 | 应用授权作用域,获取用户个人信息则填写 snsapi_userinfo (只能填 snsapi_userinfo) |
| state | 否 | 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验。在state传递的过程中会将该参数作为url的一部分进行处理,因此建议对该参数进行url encode操作,防止其中含有影响url解析的特殊字符(如'#'、'&'等)导致该参数无法正确回传。 |
返回示例:
appid: wxd477edab60670232
scope: snsapi_userinfo
state: wechat_sdk_demo 3.通过 code 获取 access_token
获取第一步的 code 后,请求以下链接获取 access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_t 返回说明
正确的返回:
{
"access_token": "ACCESS_TOKEN",
"expires_in": 7200,
"refresh_token": "REFRESH_TOKEN",
"openid": "OPENID",
"scope": "snsapi_userinfo",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
} 4.刷新 access_token 有效期
access_token 是调用授权关系接口的调用凭证,由于 access_token 有效期(目前为 2 个小时)较短,当 access_token 超时后,可以使用 refresh_token 进行刷新,access_token 刷新结果有两种:
1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
2. 若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
refresh_token 拥有较长的有效期(30 天),当 refresh_token 失效的后,需要用户重新授权
请求方法
获取第一步的 code 后,请求以下链接进行 refresh_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
正确的返回:
{
"access_token": "ACCESS_TOKEN",
"expires_in": 7200,
"refresh_token": "REFRESH_TOKEN",
"openid": "OPENID",
"scope": "SCOPE"
} 5.获取用户信息
获取access_token后,进行接口调用,有以下前提:
- access_token有效且未超时;
- 微信用户已授权给第三方应用账号相应接口作用域(scope)。
获取access_token后,进行接口调用,有以下前提:
- access_token有效且未超时;
- 微信用户已授权给第三方应用账号相应接口作用域(scope)。
对于接口作用域(scope 为 snsapi_userinfo),可参考如下接口获取用户个人信息:
| 接口 | 接口说明 |
|---|---|
| /sns/oauth2/access_token | 通过code换取access_token、refresh_token和已授权scope |
| /sns/oauth2/refresh_token | 刷新或续期access_token使用 |
| /sns/auth | 检查access_token有效性 |
| /sns/userinfo | 获取用户个人信息 |

浙公网安备 33010602011771号