参考文档:api
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN微信
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=&lang=zh_CNsession
微信开放平台里面的文档已经说明的很详细了。这里再用实例补充下。app
1.发送请求code
微信登陆的请求连接:https://open.weixin.qq.com/connect/qrconnect?appid=12312312312312&redirect_uri=www.baidu.com&response_type=code&scope=snsapi_login&state=3072355978#wechat_redirectcsrf
参数说明:token
appid:应用惟一标识,必填接口
redirect_uri:重定向地址,须要进行UrlEncode,必填作用域
response_type: code,必填文档
scope:应用受权做用域,拥有多个做用域用逗号(,)分隔,网页应用目前仅填写snsapi_login便可,必填
state:用于保持请求和回调的状态,受权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验,非必填
用户容许受权后,将会重定向到redirect_uri的网址上,而且带上code和state参数:www.baidu.com?code=CODE&state=STATE
若用户禁止受权,则重定向后不会带上code参数,仅会带上state参数:www.baidu.com?state=STATE
第二步:经过code获取access_token
例如:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
参数说明:
appid:应用惟一标识,必填
secret:应用密钥AppSecret,在微信开放平台提交应用审核经过后得到,必填
code:填写第一步获取的code参数,必填
grant_type:填authorization_code,必填
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
参数说明:
access_token:接口调用凭证
expires_in: access_token接口调用凭证超时时间,单位(秒)(目前为2个小时)
refresh_token: 用户刷新access_token
openid: 受权用户惟一标识
scope: 用户受权的做用域,使用逗号(,)分隔
unionid: 只有在用户将公众号绑定到微信开放平台账号后,才会出现该字段。
access_token是调用受权关系接口的调用凭证,因为access_token有效期(目前为2个小时)较短,当access_token超时后,可使用refresh_token进行刷新。refresh_token拥有较长的有效期(30天),当refresh_token失效的后,须要用户从新受权。
获取第一步的code后,请求如下连接进行refresh_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
参数说明:
appid:应用惟一标识,必填
grant_type:填refresh_token,必填
refresh_token:填写经过access_token获取到的refresh_token参数,必填
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
第三步:经过access_token调用接口
获取access_token后,进行接口调用,有如下前提:
1. access_token有效且未超时;
2. 微信用户已受权给第三方应用账号相应接口做用域(scope)。