怎么通过openid获得微信用户信息

怎么通过openid获得微信用户信息,第1张

 通过菜单打开url,在网页页面里获得用户的openid, 获取微信用户的openid目前有两种方法: 一是先回复一条图文消息,将用户的openid带在链接上,然后用户通过点击图文消息的链接打开最终的页面,这么做用户体验非常非常不好,而且每个菜单都得这么干; 二是调用服务号的高级接口,可是我们大部分都是用订阅号。 那怎么通过js获取微信用户的openid? 答:目前微信服务号在网页获取微信用户openid就这两种方法,订阅号只能通过图文或文本消息打开网页,自己传用户的openid。

用OpenID绑定即可

微信接口中虽然没给用户的微信账号,但给了用户的OpenID,这个OpenID对一个公众号是唯一的,测试也证明不会改变,也就是说同一个微信号和同一个公众号交互,我们得到的OpenID是不会变的,因此,可以用OpenID作为微信用户的身份标识。

如何绑定

俗话说,没吃过猪肉还没见过猪跑。看招行xyk公众号是如何做的,在微信里面给用户一个验证链接,用户点击链接,微信会用内嵌的浏览器打开这个链接,然后就是一般的网页登录验证界面,我们通过HTTP(S)获取用户输入的系统用户名与密码,验证通过后完成绑定。 具体如何生成链接和如何传递OpenID下面详述。

如何生成绑定链接

绑定涉及到用户的身份甚至利益,所以需要注意安全性。我们需要绑定的是OpenID和系统用户,系统用户名是用户直接在链接页面输入后通过 HTTP(S)传给我们的,这没有问题。OpenID对用户来说透明,用户不会传给我们,我们也只有在用户在微信中向公众号发消息时才可获得 OpenID,所以很明显,OpenID需要包含在生成的链接中,至于需不需要对OpenID作加密就看你自己了,我觉得这不重要,更为重要的是要在链接 中带上签名和加上时间戳。因为我们需要确认这个链接是由我们服务端生成的,用户自己或者其他人不能够伪造出这个链接,加上时间戳是为了给这个链接一个过期 时间,如果不限制过期时间,假设用户绑定后这个链接通过某种方式被别人知道,那么这个人就可以把自己的账号与用户的微信号绑定。所以我采取的方法是用 OpenID、过期时间再加上一个密钥生成签名,生成签名的方法和微信服务器接口验证时的签名方法类似(密钥最好另选一个只有自己知道的)。

如何传递OpenID

有了绑定链接,用户点了绑定链接,但这只是第一步,第二步我们需要在用户在链接页面提交登录请求后进行验证,OpenID怎么传到第二步中呢?有人 说了,这还不简单,在登录表单中加一个隐藏域放用户的OpenID一起提交给验证的Handler不就OK了,那我只能说很遗憾,你前面所做的安全工作都 白费了,一旦A用户的OpenID泄漏,B用户就可以把自己的账号与A用户的微信号绑定了。所以永远不要相信客户端提交的东西。我的方法是当用户点击生成 链接后,在链接页载入时,将OpenID存到session中,因为这个session是没法伪造的(cookie被盗除外),所以只有点击这个链接的用 户的session中才会有链接中包含的OpenID。

在进行微信公众号开发的时候我们很常用的一个功能就是获取用户的信息。但是获取用户信息的方式有哪几种,我目前用到的有两种。

一种是通过网页授权获取用户信息。一种是通过户和公众号产生消息交互或关注后事件推送后,根据用户OpenID来获取用户基本信息。

要特别注意的有两点:

第一点是两者向微信请求获取用户信息时的地址是不同的;

网页授权请求的“获取用户基本信息接口”接口地址:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

用户管理类接口中的“获取用户基本信息接口”地址 :

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

第二点是“网页授权”获取用户信息用到的网页授权access_token和普通access_token不同,它可以理解为用户,服务号和微信之间的一个access_token。用户管理类接口中的“获取用户基本信息接口”用到的access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用的access_token。

第一种:网页授权获取用户信息

微信文档地址: 网页授权

关于网页授权的两种scope的区别说明

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

网页授权流程分为四步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和openid获取用户基本信息

网页授权请求的微信地址:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

请求的参数:

通过网页授权我们可以获得以下的用户信息:

第二种获取用户信息的方法是调用用户管理类接口中的“获取用户基本信息接口”

文档地址: 用户管理获取用户信息

请求参数:

获取的用户信息:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11572532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存