zoukankan      html  css  js  c++  java
  • 微信登录第三方平台的实现

    一、准备工作

    通过以下官网获得相应AppID和AppSecret以及对应的回调地址。

    QQ登录官网:https://connect.qq.com

    微信登录官网:https://open.weixin.qq.com

    二、授权登录

        授权登录时序图

     

    1.请求CODE

    (1)在页面中先引入如下JS文件(支持https)

    <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

    (2)在需要使用微信登录的地方实例以下JS对象

    var obj = new WxLogin({

              id:"login_container",

              appid: "",

              scope: "",

              redirect_uri: "",

              state: "",

              style: "",

              href: ""

    });

    ·参数说明

    参数

    是否必须

    说明

    id

    第三方页面显示二维码的容器id

    appid

    应用唯一标识,在微信开放平台提交应用审核通过后获得

    scope

    应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可

    redirect_uri

    重定向地址,需要进行UrlEncode

    state

    用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

    style

    提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ

    href

    自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ

    2. 通过code获取access_token

    (1)调用

    请求方式:GET

    请求地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

    ·参数说明

    参数

    是否必须

    说明

    appid

    应用唯一标识,在微信开放平台提交应用审核通过后获得

    secret

    应用密钥AppSecret,在微信开放平台提交应用审核通过后获得

    code

    填写第一步获取的code参数

    grant_type

    填authorization_code

    (2)获得反馈—--验证登录是否成功

    //这是获取到的正确反馈

    {

    "access_token":"ACCESS_TOKEN",

    "expires_in":7200,

    "refresh_token":"REFRESH_TOKEN",

    "openid":"OPENID",

    "scope":"SCOPE",

    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"

    }

    //这是获取的错误反馈

    {"errcode":40029,"errmsg":"invalid code"}

    ·参数说明

    参数

    说明

    access_token

    接口调用凭证

    expires_in

    access_token接口调用凭证超时时间,单位(秒)

    refresh_token

    用户刷新access_token

    openid

    授权用户唯一标识

    scope

    用户授权的作用域,使用逗号(,)分隔

    unionid

    当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。

    (3)刷新access_token有效期

    1)access_token有效期和refresh_token

    access_token是调用授权关系接口的调用凭证,但access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新

    ①若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;

    ②若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token

    refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。

    2)请求方法

        获取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

    接口调用凭证

    expires_in

    access_token接口调用凭证超时时间,单位(秒)

    refresh_token

    用户刷新access_token

    openid

    授权用户唯一标识

    scope

    用户授权的作用域,使用逗号(,)分隔

    3. 通过access_token调用接口——获取后续用户信息

    http请求方式:GET

    http请求地址:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

    ·参数说明

    参数

    是否必须

    说明

    access_token

    调用凭证

    openid

    普通用户的标识,对当前开发者帐号唯一

    lang

    国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN

    正确的Json返回结果:

    {

    "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"

    }

    参数说明

    参数

    说明

    openid

    普通用户的标识,对当前开发者帐号唯一

    nickname

    普通用户昵称

    sex

    普通用户性别,1为男性,2为女性

    province

    普通用户个人资料填写的省份

    city

    普通用户个人资料填写的城市

    country

    国家,如中国为CN

    headimgurl

    用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空

    privilege

    用户特权信息,json数组,如微信沃卡用户为(chinaunicom)

    unionid

    用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。

  • 相关阅读:
    Java 读取大容量excel
    Linux 安装mysql
    Linux 配置nginx
    java 微信H5支付
    微信公众号授权登录两种方式
    Jsoup 获取页面返回的table中的内容
    Python Model执行迁移数据库失败
    java上传txt文件,出现中文乱码
    在Window环境下,使用Django shell 命令查询数据库
    Java模拟form表单提交普通参数和文件
  • 原文地址:https://www.cnblogs.com/sssonia/p/7198705.html
Copyright © 2011-2022 走看看