Android:微信授权登录与微信分享全解析

前言

在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应用,于是微信,微博,QQ说了:来来来,你们都可以用我家的帐号登录你家应用,只要你遵循OAuth2.0协议标准就行。于是第三方社交帐号登陆成为了许多新兴应用的选择,由于腾讯官方微信开放平台的在线文档相对最新的SDK有些出入,并且登录相关的文档结构次序有些紊乱,今天就把我的一些经验记录在此,对微信开放平台官方的在线文档进行一定的整理。同时微信分享可以扩大自身APP影响力,于是微信分享功能也是很多开发者需要的功能,一并整理在此,希望能对后来的同道朋友有所帮助。 转载请注明原作者xiong_it和原文连接:,谢谢!

微信登录

以下部分内容摘自腾讯开放平台:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=6bfe3acd2969037c7217667f24f8eeaf714e5113&lang=zh_CN

授权流程说明

微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。 微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数; 2. 通过code参数加上AppID和AppSecret等,通过API换取access_token; 3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。 获取access_token时序图:

注意:如果开发者需要调用登录接口,需要进行进行开发者认证并交300大洋,官方在线文档说无需缴费,,其实那已经是过去式了,只是在线文档没有更新而异。

下面将依次讲解微信授权登录流程。所有网络请求均为GET请求。

1、获取临时票据code2、获取access_token & openid3、检查access_token是否有效4、刷新或续期access_token5、获取微信用户详细信息获取临时票据code

前三条向右的箭头

{// 发出授权申请Final SendAuth.Req req = new SendAuth.Req();req.scope = “snsapi_userinfo”;req.state = “wechat_sdk_微信登录,分享demo_test”;api.sendReq(req);}

上两条箭头向左的流程在代码体现出来的就是:

(BaseResp resp) ;// 这个回调接口位于IWXAPIEventHandler中

返回的数据为resp,用作请求登录授权时,它是SendAuth.Resp的实例,携带的数据有:

ErrorCode:ERR_OK = 0(用户同意);ERR_AUTH_DENIED = -4(用户拒绝授权);ERR_USER_CANCEL = -2(用户取消)code:用户换取access_token的code,仅在ErrCode为0时有效state:第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1Klang:微信客户端当前语言country:微信客户端当前国家

以上数据均以static String形式存在SendAuth.Resp的resp对象中。

注意:当使用微信提供最新的SDK/library时,上面有些数据是不存在,微信开放平台的文档和API及SDK没有同步更新。读者可使用最下方微信登录,分享demo中的笔者使用的jar包构建工程。

获取access_token & openid

最后一条向右的箭头表示:使用得到的code,获取access_token,openid,接口为: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

注意:微信的接口链接是使用SSL的安全链接,普通的HttpClient访问会导致应用崩溃或报错,详细方法请下载最下方的微信登录,分享demo代码,或者点击下方链接直接搜索

百度搜索:Android 访问Https链接 参数说明

appid: 应用唯一标识,在微信开放平台提交应用审核通过后获得secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得code :填写第一步获取的code参数grant_type:固定值,填authorization_code

最下方向左的箭头表示使用code访问完链接返回的数据,json携带的数据有:

access_token:接口调用凭证expires_in:access_token的有效期,一般为7200(秒),也即是两小时refresh_token:用户刷新access_tokenopenid:授权用户唯一标识scope:用户授权的作用域,使用逗号(,)分隔检查access_token是否有效

由于access_token有效期为两小时,所以进行下一步操作前最好进行一次检查,接口为: https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID 传入的参数为accesss_token和openid。 access_token有效时返回的json是:

{ “errcode”:0,”errmsg”:”ok”}

失效时的返回数据为:

{ “errcode”:40003,”errmsg”:”invalid openid”}

如果access_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失效的后,需要用户重新授权。

打掉的应是脆弱的铁屑,锻成的将是锋利的钢刀。

Android:微信授权登录与微信分享全解析

相关文章:

你感兴趣的文章:

标签云: