开发者账号 网站审核通过 获取APPID AppSecret
1、授权登陆,重定向到第三方网站,带上临时授权的code
2、通过code参数加上AppID和AppSecret等,通过API换取access_token;
3、通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
第一步:请求code
https://open.weixin.qq.com/connect/qrconnect?appid=[APPID]&redirect_uri=[重定向的url]&response_type=code&scope=[snsapi_login]&state=STATE#wechat_redirect
注:若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login
【重定向的url需要urlencode】
参数说明
参数是否必须说明
appid是应用唯一标识
redirect_uri是重定向地址,需要进行UrlEncode
response_type是填code
scope是应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
state否用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
第二步:通过code获取access_token
$code = $_REQUEST['code'];
https://api.weixin.qq.com/sns/oauth2/access_token?appid=[APPID]&secret=[AppSecret]&code=[$code]&grant_type=authorization_code
返回的是json数据,通过curl处理,json_decode转化为数组$data
$access_token = $data['access_token'];
$refresh_token = $data['refresh_token'];
$openid = $data['openid'];
返回结果参数:
参数说明
access_token接口调用凭证
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid授权用户唯一标识
scope用户授权的作用域,使用逗号(,)分隔
unionid当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。
第三步【补充】:刷新access_token的有效期
说明:access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用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接口调用凭证
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid授权用户唯一标识
scope用户授权的作用域,使用逗号(,)分隔
第四步:通过access_token调用接口
【授权后的相关接口到微信开放平台找相关参数】
举例:获取用户个人信息
https://api.weixin.qq.com/sns/userinfo?access_token=[$access_token]&openid=[$openid]
返回json数据参数说明:
参数说明
openid普通用户的标识,对当前开发者帐号唯一
nickname普通用户昵称
sex普通用户性别,1为男性,2为女性
province普通用户个人资料填写的省份
city普通用户个人资料填写的城市
country国家,如中国为CN
headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
privilege用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
unionid用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的