公众号中点击第三方网页时如何顺带openId

openId是公众号中关注者的唯一标识,在同一个公众号中不同微信号有不同的openId。


当一个用户关注了公众号,然后点击了我们放在公众号内的一个第三方页面,比如是一个登陆页面,需要用户收入手机号和验证码进行登陆,则在用户提交表单时,我希望后台还可以获取到这个用户的openId,这样下一次用户再进入这个页面时,我可以自动获取这个用户的手机号、实现自动登陆。
如何能够使得后台能够获取用户的openId?需要我们修改一下提交表单的网址。
比如正常的登陆网址是http://www.whaty.com?phone=15210588777&validcode=1234,那么需要改成

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=http%3a%2f%2fwww.whaty.com%3fphone%3d15210588777%26validcode%3d1234&response_type=code&scope=snsapi_base&state=123#wechat_redirect

其中:

1、redirect_uri的值是原网址进行UrlEncode之后的网址。
2、scope有两种,snsapi_base是静默授权,只能用于已关注用户;snsapi_userinfo是会跳出一个授权窗口,用户点击允许之后,才会跳到redirect_uri,好处是也可以用于非关注用户。对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。


微信的这个接口会自动跳转到redirect_uri,只不过会在后面自动添加上code参数(自动生成的)和state参数(我们自定义的)

这时候在服务端,我们就可以根据code获取openId了:

String code = request.getParameter("code");//我们要的code
code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
然后请求以下接口:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
正确时返回json数据

{ "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE"
}

到此我们成功获取到了用户的openid。

参考微信API文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值