前端vue+后台node实现获取微信用户基本信息+调用微信JS-SDK(上篇)

比如原来是:

http://127.0.0.1:3000/jsApi

借助内网穿透工具后,外网可访问的链接就为:

http://reh37g.natappfree.cc/jsApi

当然,不是所有的链接让微信用户授权的链接都能让微信服务器正确返回code。

我们需要将服务器的ip填写在测试号页面的指定位置才可以:

在后台服务启动的情况下,将使用内网穿透生成的域名填写在如下两个地方:

(1)接口配置信息修改模块

点击修改,填写URL和token。token可以随便写。

填写完点击提交,正常情况下是提示配置成功。

如果失败了,有可能是以下两个原因:

  1. 后台服务没启动

  2. url填写错误,建议直接粘贴,不要手动输入

(2)点击网页服务-网页账号-修改

将内网穿透生成的域名粘进弹出窗口的输入框中。注意,这里的域名不要加Http://这种前缀

完成上述两项配置,并保证后台服务启动的情况下,我们就可以进行测试啦:

在微信里找个群或好友发送微信授权链接:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect(示例链接)

让用户点击示例链接进行授权。授权成功的话,后台写好的接口应该就会收到微信服务器返回的code~,至此完成第一步!

接下来进入第二步:通过code换取网页授权access_token

此步骤需要注意的是网页授权的access_token不是公众号开发接口的access_token,两者相互独立。

考虑到获取access_token需要给微信服务器发送APPSecret这种敏感性参数,因此通过code换取网页授权access_token这步由服务端(后台)来完成。

编写获取access_token的后台方法:

function getOauthAccessToken(CODE) {

return new Promise(async (resolve, reject) => {

const uri = https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=${CODE}&grant_type=authorization_code;

resolve(await getRequest(uri));

})

}

修改微信授权后跳转的接口:

// 网页授权里的access_token 和 微信公众号里的access_token不是一个东西

app.get(‘/weapp_qauth_code’, async (req, res) => {

const OAuthData = await getOauthAccessToken(CODE);

console.log(OAuthData);

})

正常情况下就可以获取到access_token了。

OAuthData这个对象里就包含access_token.下面为OAuthData对象的内容:

{

“access_token”:“ACCESS_TOKEN”,

“expires_in”:7200,

“refresh_token”:“REFRESH_TOKEN”,

“openid”:“OPENID”,

“scope”:“SCOPE”

}

接下来就进入第三步:刷新access_token(如果需要)

第二步中微信服务器返回的获取用户基本信息的access_token的有效时间为7200秒(2小时)。过期后需要再次获取。而且微信这边对获取accessToken操作有上限限制,因此我们需要在数据库中缓存accessToken.并在access_token即将过期之前,调用微信提供的刷新access_token的方法利用refresh_token刷新access_token.当然,refresh_token也有有效期,目前是一个月,当一个月之后,我们就需要重新获取access_token了

编写刷新access_token的后台方法:(大写字母请替换为具体的值)

function refreshToken() {

return new Promise(async (resolve, reject) => {

const uri = https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN;

resolve(await getRequest(uri));

})

}

然后在需要刷新的接口里调用该方法即可。

下列代码是微信服务器返回的refresh_token内容:

{

“access_token”:“ACCESS_TOKEN”,

“expires_in”:7200,

“refresh_token”:“REFRESH_TOKEN”,

“openid”:“OPENID”,

“scope”:“SCOPE”

}

接下来进入第四步:第四步:拉取用户信息(需scope为 snsapi_userinfo)")

通过第二步的access_token和openID来拉取用户的基本信息:

编写获取用户基本信息的方法:

function getOauthAccessUserInfo(accessToken,openID){

return new Promise(async (resolve, reject) => {

const uri = https://api.weixin.qq.com/sns/userinfo?access_token=${accessToken}&openid=${openID}&lang=zh_CN;

resolve(await getRequest(uri));

})

}

修改之前的接口:

// 网页授权里的access_token 和 微信公众号里的access_token不是一个东西

app.get(‘/weapp_qauth_code’, async (req, res) => {

console.log(req.query);

const CODE = req.query.code;

console.log(CODE);

const OAuthData = await getOauthAccessToken(CODE);

console.log(OAuthData);

const userInfo = await getOauthAccessUserInfo(OAuthData.access_token, OAuthData.openid);

console.log(userInfo);

res.send(JSON.stringify(userInfo));

})

微信返回获取到的用户基本信息有:

{

“openid”: “OPENID”,

“nickname”: NICKNAME,

“sex”: 1,

“province”:“PROVINCE”,

“city”:“CITY”,

“country”:“COUNTRY”, “headimgurl”:“https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46”,

“privilege”:[ “PRIVILEGE1” “PRIVILEGE2” ],

“unionid”: “o6_bmasdasdsad6_2sgVt7hMZOPfL”

}

至此引导微信用户授权,获取用户基本信息的操作完成!

整合一下后台完整代码如下:

/*

  • author:sweet

  • date:2021年11月9日

  • description: 获取微信用户基本信息

*/

// 获取access_token

function getOauthAccessToken(CODE) {

return new Promise(async (resolve, reject) => {

const uri = https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=${CODE}&grant_type=authorization_code;

resolve(await getRequest(uri));

})

}

// 刷新access_token

function refreshToken() {

return new Promise(async (resolve, reject) => {

const uri = https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN;

resolve(await getRequest(uri));

})

}

// 获取用户基本信息

function getOauthAccessUserInfo(accessToken,openID){

return new Promise(async (resolve, reject) => {

const uri = https://api.weixin.qq.com/sns/userinfo?access_token=${accessToken}&openid=${openID}&lang=zh_CN;

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
[外链图片转存中…(img-9AKwVrCt-1715094570256)]

[外链图片转存中…(img-VbSv6T2v-1715094570257)]

[外链图片转存中…(img-cJ2bSFfN-1715094570258)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值