h5微信接入授权登录
- 微信提供给开发者的测试账号平台
- 微信网页开发文档
- 微信JS接口签名校验工具
- 参数
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
-
- code
- code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未使用自动过期
- 存在:已授权
- 不存在:未授权,则跳转微信授权链接,
- appid(必填)
- 公众号的唯一标识
- redirect_url(必填)
- 授权成功后跳转的地址,微信会跳转到改链接,并通过?的形式拼接code,请使用urlEncode对链接进行处理
- response_type(必填)
- 返回类型,请填写code
- scope(必填)
- 应用授权作用域
- 静默授权(scope=snsapi_base):不弹出授权页面,直接跳转,只能获取用户openid
- 非静默授权(scope=snsapi_userinfo):弹出授权页面,可通过openid拿到昵称、性别、所在地,即使在未关注的情况下,只要用户授权,也能获取其信息。
- 应用授权作用域
- state
- 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
- #wechat_redirect(必填)
- 无论直接打开还是做页面302重定向时,必须带此参数
- 提示
-
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
-
由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问。
-
跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。
-
- code
- 步骤
- 用户同意授权,获取code
- 通过code换区网页授权access_token
- 获取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
-
- 正确返回的json数据包
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
- 参数
- access_toke
- 网页授权接口调用凭证:此access_token与基础支持的access_token不同
- expires_in
- 调用凭证超时时间,单位(秒)
- refresh_token
- 用户刷新access_token
- openid
- 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的页面,也会产生一个用户和公众号唯一的OpenId
- scope
- 用户授权的作用于,使用逗号(,)分隔
- access_toke
- 参数
- 错误返回的json数据包
{"errcode":40029,"errmsg":"invalid code"}
- 获取access_token
- 刷新access_token(如果需要)
- 较短有效期,当超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当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参数
- 正确返回的json数据包
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
- 参数(参数介绍,同上)
- 错误返回的json数据包
{"errcode":40029,"errmsg":"invalid code"}
- 参数
-
-
-
- 拉去用户信息(需要scope为snsapi_userinfo)
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
-
-
- 参数
- aceess_token(同上)
- openid(同上)
- lang
- 返回国家地区语言版本,zh_CN简体,zh_TW繁体,en英语
- 正确返回的json数据包
{ "openid":" OPENID", " nickname": NICKNAME, "sex":"1", "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
- 参数
- openid(同上)
- nickname
- 用户昵称
- sex
- 用户性别,1=>男,2=>女,0=>未知
- province
- 用户个人资料填写的省份
- city
- 普通用户个人资料填写的城市
- country
- 国家,如中国为CN
- headimgurl
- 用户头像
- privilege
- 用户特权信息
- unionid
- 只有在用户将公众号绑定到微信开放平台后,才会出现该字段
- 参数
- 错误返回的json数据包
{"errcode":40003,"errmsg":" invalid openid "}
- 参数
-
- 附:检验授权凭证(access_token)是否有效
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
-
- 参数
- access_token(同上)
- openid(同上)
- 正确返回的json数据包
{ "errcode":0,"errmsg":"ok"}
- 错误返回的json数据包
{ "errcode":40003,"errmsg":"invalid openid"}
- 参数