一、内嵌二维码扫码登录
1.在网页中引入JS
文件
http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js
2.在需要使用微信登录的地方实例以下JS
对象
// 1号店示例二维码
var obj = new WxLogin({
self_redirect:false,
id:"login_container",
appid: "wxbdc5610cc59c1631",
scope: "snsapi_login",
redirect_uri: encodeURIComponent("http://"+window.location.host+"/..."),
state: Math.ceil(Math.random()*1000),
style: "black",
href: ""
});
参数 | 是否必须 | 说明 |
---|---|---|
self_redirect | 否 | 跳转到redirect_uri的方式 |
id | 是 | 显示二维码的容齐 |
appid | 是 | 应用唯一标识 |
socpe | 是 | 应用授权作用域 |
redirect_uri | 是 | 重定向地址 |
state | 否 | 保持请求和回调状态 |
style | 否 | 二维码样式,black\white |
href | 否 | 自定义样式链接 |
返回说明:
- 用户授权后,将会在重定向到redirect_uri的网址上,并且带上
code
和state
参数
redirect_uri?code=CODE&state=STATE
- 若用户禁止授权,则重定向后不会带上
code
参数,仅会带上state
参数
redirect_uri?state=STATE
3.使用通过以上请求获取到的code
来获取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识 |
secret | 是 | 应用密钥 |
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 | 超时时间 |
refresh_token | 用户刷新accrss_token |
openid | 授权用户唯一标识 |
scope | 授权作用域 |
unionid | 网站应用已获得用户授权时才会出现该字段 |
错误返回结果样例:
{"errcode":40029,"errmsg":"invalid code"}
刷新access_token有效期:
1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
2. 若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
4.获取用户信息
/// http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
正确返回结果:
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
unionid
是用户统一标识,针对一个账号下的应用,该标识是唯一的。可以保存unionid
以便在不用应用中进行信息互通