微信开发之获取用户信息
要想在用户关注微信公众号以后,用户点击一下我们公众号的栏目,授权一下,然后获取到用户的信息,则需要先搞到一个服务器,80端口开放。
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842这是官方的教程
一、OAuth2.0网页授权
OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth 2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
新浪微博API目前也使用OAuth 2.0。
微信公众平台OAuth2.0授权详细步骤如下:
1. 用户关注微信公众账号。
2. 微信公众账号提供用户请求授权页面URL。
3. 用户点击授权页面URL,将向服务器发起请求
4. 服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)
5. 用户同意(scope为snsapi_base时无此步骤)
6. 服务器将CODE通过回调传给微信公众账号
7. 微信公众账号获得CODE
8. 微信公众账号通过CODE向服务器请求Access Token
9. 服务器返回Access Token和OpenID给微信公众账号
10. 微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
11. 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)
二、下面是我在测试号中的实践:
1、我的测试号
2、先在开发中,修改服务器地址,我是弄得阿里云服务器,填写ip地址就行,实际应用中是需要域名的。
授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权。
3、用户授权获取code
用php获取code值,这个例子在tomcat中实现php也讲了,新建了oauth2.php
<?php if (isset($_GET['code'])){ echo $_GET['code']; }else{ echo "NO CODE"; } ?>
请求页面的方式:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
这几个参数类型
应用授权作用域:由于snsapi_base只能获取到openid,意义不大,所以我们使用snsapi_userinfo。
回调地址:填写为刚才上传后的oauth2.php的文件地址,
state参数:随便一个数字,这里填1
跳转到oauth2.php页面,执行
echo $_GET['code']
界面上显示的就是code,这时候通过右上角按钮中的复制链接.
返回一串code:021Lenud2HEBSA047Awd2gSoud2LenuV
4、使用code换取access_token
换取网页授权access_token页面的构造方式:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
得到如下的json返回
{
"access_token":"Qi16XfGDKhgqYmeYFHLg4ys9pJOPWTa-8wW2NyoAlNAjI-Gxzh-Uwvhj9YaMedNsqHPIVWvHYDEmfJmrr3yAjACZ0UDdwZpOFWFJ9FXr0M0",
"expires_in":7200,
"refresh_token":"stjo52Ekedc7nt3BjlXpPNCrRl-aUM7BZ5CLmTtP6xvjmwqJRKVfF5cBSMNJL9mSn_-ZgpmlP8kxECeFnAqYdeU_8O9vfhTBbJtsZZpBKqE",
"openid":"o9frI0xrZAN7AOxqKRNvfRj5RjoY",
"scope":"snsapi_userinfo"
}
5、使用access_token与openid获取用户基本信息
请求方法:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
https://api.weixin.qq.com/cgi-bin/user/info?access_token=66OnujLQWdhK7uJEvFA7LpJROSdOxMYqaHZH8gnTpRrgrxcqdXAB0Sq_vDjHAFII5l68AMUTaDub8ZMKW85a8mIfVSphuCCM8YQGMmrolso&openid=o9frI0xrZAN7AOxqKRNvfRj5RjoY&lang=zh_CN
结果:
这是测试接口中的结果
参考:
http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html
http://www.cnblogs.com/zyw-205520/p/3581088.html
http://www.cnblogs.com/txw1958/p/weixin-get-user-basic-info.html