android 微信登录sdk

微信登录sdk接入方式请见,移动应用微信登录开发指南。

公司官网android国内版sdk,其中第三方登录选择微信登录,其实微信登录已经接入了一段时间了,测试也都通过。新需求是登录完微信sdk后需要保存在本地(就是在本地保存一份微信的登录token,下次登录不用再跳转到微信进行授权),见下图:


android 微信登录sdk_第1张图片

刚开始觉得挺简单的,但是做的过程中发现了许多坑(主要还是自己当时太心急),记录一下:

1.微信登录之后有个access_token,需要服务器端sdk进行验证,我在本地保存的就是这个token,但是这个token的有效期限为2个小时。(需要把微信开放平台的说明贴一下),

2.微信登录后还有一个refresh_token,sdk的说法是在access_token未失效的情况下,刷新refresh_token会重新设定之前的acess_token(access_token的有效期还是2个小时,相当于延长了之前的有效期),当access_token已经失效的情况下,刷新refresh_token会重新获取一个新的access_token。需要在本地保存一个refresh_token,refresh_token的有效期限是30天,refresh_token失效后,需要用户再次授权登录,以下是移动应用微信登录开发指南里关于刷新access_token有效期的说明:

刷新access_token有效期

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

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

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

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

请求方法

获取第一步的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_inaccess_token接口调用凭证超时时间,单位(秒)

refresh_token用户刷新access_token

openid授权用户唯一标识

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

错误返回样例:

{"errcode":40030,"errmsg":"invalid refresh_token"}

注意:

1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);

2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;

3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。

建议将Appsecret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。

3.需要保存一个微信sdk登录后返回的一个用户的唯一标识openid,我是根据openid来进行保存相对应账户的refresh_token.

你可能感兴趣的:(android 微信登录sdk)