Appearance
微信登录功能 / 网站应用微信登录开发指南 (qq.com)
微信二维码登录流程总结
- 生成二维码:
- 使用应用的 appId 向微信授权地址发送一个 GET 请求,微信返回一个包含登录二维码的图片。请求示例:GET https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect参数说明: 参数 是否必须 说明 appid 是 应用唯一标识 redirect_uri 是 请使用urlEncode对链接进行处理 response_type 是 填code scope 是 应用授权作用域,网页应用目前仅填写snsapi_login state 否 用于保持请求和回调的状态,可用于防止csrf攻击(跨站请求伪造攻击),建议设置为随机数等安全参数 返回说明:
- 成功:返回一个包含登录二维码的页面。
- 用户扫描二维码:
- 用户使用已登录的微信扫描二维码,实际上是向二维码包含的地址发送一个 GET 请求,同时携带用户的个人信息。
- 用户确认登录:
- 微信收到用户扫描二维码的请求后,返回一个包含当前应用信息、当前用户信息、准备授予的权限以及一个确认按钮的页面。
- 用户点击确认按钮后,再次向微信服务器发送请求,表示同意或不同意此次登录请求。
- 微信生成授权码:
- 如果用户不同意,流程中断。
- 如果用户同意,微信服务器会生成一个 code,并携带这个 code 向应用的回调 API 发送一个 GET 请求。请求示例:GET REDIRECT_URI?code=CODE&state=STATE返回说明:
- 成功:包含 code 和 state 参数的回调请求。
- 失败:无重定向。
- 应用服务器处理回调:
- 应用服务器接收到微信的回调请求后,从中提取出 code。
* 应用服务器使用 code 加上应用的 appId 和 appSecret,向微信服务器发送请求以换取 access_token 等信息。请求示例:GET https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&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 后,应用服务器可以调用微信相关接口,获取当前登录用户的基本信息,如昵称、地区、头像和 openId 等。请求示例:GET https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN参数说明: 参数 是否必须 说明 access_token 是 接口调用凭证 openid 是 授权用户唯一标识 lang 否 返回国家地区语言版本,默认为zh_CN 返回说明: 成功: { "openid":"OPENID", "nickname":"NICKNAME", "sex":1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6Eia5micAib0eib2FeMibiceXXa/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
- 失败:
安全性和其他注意事项
- 安全性考虑:
- appSecret 应该存储在服务器端,不要暴露在客户端代码中,以防止被恶意获取。
- access_token 和 refresh_token 也应妥善保管,以防止用户数据泄漏。
- 刷新 access_token:
- access_token 有效期较短(目前为 2 小时),当 access_token 过期时,可以使用 refresh_token 进行刷新,以获取新的 access_token。
- refresh_token 有效期为 30 天,当 refresh_token 失效后,需要用户重新授权。请求示例:GET 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 后,可以调用微信的各种开放接口,如获取用户信息(/sns/userinfo)。