微信登录第三方平台的实现

一、准备工作

通过以下官网获得相应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是唯一的。

posted @ 2017-07-18 09:22  米唐糖糖糖  阅读(732)  评论(0编辑  收藏  举报