当前位置: 首页 > Web前端 > HTML5

vue+微信获取用户信息

时间:2023-04-05 15:56:28 HTML5

vue+微信获取用户信息本项目实现了一个点赞功能,即分享一个页面给微信好友,微信好友点赞,需要添加用户的微信昵称,微信头像,微信openid,微信unionid(需要注意公众号有这个字段)并发送到后台记录点赞者的相关信息。两种授权范围的区别(详见官网)-scope=snsapi_base获取微信用户openid,获取后直接跳转到业务页面,无需用户操作-scope=snsapi_userinfo获取微信用户openid的详细信息微信用户(昵称、头像等),用户需要手动点击授权。当用户点击Allow时,会跳转到业务页面(类似关闭弹窗),当用户点击Deny时,页面会拉起。用户与公众号进行消息交互或后继事件推送后,可根据用户的OpenID获取用户的基本信息。该接口,包括其他微信接口,只有用户(即openid)关注了公众号后才能调用成功。分享页面实际链接:??当前页面链接需要encodeURIComponent(url)编码https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect//APPID:公众号appid//REDIRECT_URI:当前页面的链接,需要编码//scope:snsapi_base/snsapi_userinfo//其他值不用改,点击允许后跳转的链接为REDIRECT_URI+code=代码&状态=状态。??这里的代码可以用来调用获取微信用户相关信息的接口??每个用户授权所带的代码都会不同。密码只能使用一次,5分钟未使用自动失效。-正式地,代码只能使用一次。在H5页面,如果有跳转,再回到当前页面,微信会判断是否已经授权。如果已经授权,code会返回最后一个code,如果你用code取回用户信息(code已经过期),会报invalidcode,提示:[req_id:GGJbIz4ce-oGYwya],这样你就可以首次获取用户信息时,将用户信息存储在本地。需要获取用户信息,以及二次分享的问题虽然当前页面没有问题,但是当前微信用户使用微信进行二次分享,微信会分享当前页面的链接(不包括https://open.weixin.qq.com...),新用户点击不授权,但微信二次分享会在当前链接添加&from=,参数可以在生命周期中获取判断vue创建的。如果有from参数,会跳转到https://open.weixin.qq.com/co...链接让用户授权??二次分享样式显示问题可以查看我的另一篇文章vue+微信二次分享/自定义分享代码如下//创建循环if(this.$route.query.from){//判断链接中是否有from参数,后面的studentId,activityId项需要让_nowUrl=window.location.href.split('?')[0]+`?resource=1&studentId=${this.$route.query.studentId}&activityId=${this.$route.query.activityId}`让_shareUrl=`https://打开。weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(_nowUrl)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`window.location.href=_shareUrlreturn}//处理微信用户信息handleWechatMsg(code){//调用接口获取微信用户信息(后台参考微信官方文档进行封装)code-参数api.getWechatInfo(code).then((res)=>{if(res.data.code==200){//返回一个json字符串let_data=res.data.contentlet_personMsg=JSON.parse(_data)this.wechatMsg=_personMsg//将微信用户信息存储在本地,防止页面刷新,code无效window.localStorage.setItem('wechatMesssage',_data)}elseif(res.data.code==400){//400-code无效,后台返回400,具体看哪个code由后端返回letmsgs=window.localStorage.getItem('wechatMesssage')this.wechatMsg=JSON.parse(msgs)}else{this.$Message.message(res.data.message);}})},如果需要获取微信unionid,需要引导用户关注,可以判断返回的用户信息中是否包含unionid,如果没有可以显示微信公众号二维码供用户识别和关注??-----------------------------------------------------------------------------------------------------------------------------------?需要在公众号的后台进行配置和添加(详见官网)如果页面存在#,可能会出错,可以用nginx配置