用户要求在微信端登录一次后,以后不需要再登录. 我的系统是单独的一个网站. 使用MVC的记住密码功能, 如果用户重启,就还是要输入密码,所以需要有一个唯一不变的用来标示用户的ID。 OpenID就是这样,微信用户对于每个公众号它都是唯一的,不管关注还是不关注。
如何做到呢?
使用微信的网页授权(OAuth2.0),简单点理解这个东西就是跑到微信去请求个回调,微信跳转到你给的回调页面,然后在页面后面加个code, 你拿着code 去微信取你要的信息。
(1), 去公众号后台设置回调的域名
在开发-- 接口权限 -- 网页账号-- 用户授权获取用户基础信息 点击 “修改”,输入域名。 如www.baidu.com
(2) 绑定开发者微信号: 在开发--开发者工具 -- web开发者工具--进入 绑定开发者微信
(3) 这个时候你就可以试着看到code. 比如
在微信web开发者工具中输入
https://open.weixin.qq.com/connect/oauth2/authorize?appid=*******&redirect_uri=www.baidu.com&response_type=code&scope=snsapi_base&state=1#wechat_redirect
页面就会跳转到 www.baidu.com?code=***. 就可以看到code了。
(4) 通过code 来获取openID
https://api.weixin.qq.com/sns/oauth2/access_token?appid=***&secret=***&code=***&grant_type=authorization_code
会返回json 数据包,里面有要得OpenID 。 具体可以参见:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
这里注意的是一个code只能使用一次,我开始不知道,反复去取,导致程序时而好时而不好。 Code 5分钟不用就过期。
我这里只是去了OpenID。如果要取用户的其它信息,就需要在取code的时候改scope=snsapi_userinfo。 开发者文档也有详细记录