微信开放平台找回过期的authorizer_access_token
当微信公众号授权给第三方开发平台后,第三方开发平台执行某些操作时,如查询用户信息、用户打标签,需要使用authorizer_access_token。这个token从获得开始,2小时内有效,如果需要继续使用授权,就需要在有效期内主动刷新token。但是当某些原因导致刷新token失败时,仍然可以使用authorizer_refresh_token(自获得起30天内有效)重新获得authorizer_access_token。
本文中使用的代码均来自github的项目weixin-popular-2.8.6.jar
weixin.popular.api.ComponentAPI
找回authorizer_access_token需要先获得两个数据【component_access_token】和【authorizer_refresh_token】
1. 获取component_access_token
1.1 微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket
授权事件接收URL在【微信开放平台->第三方平台->开发资料->授权事件接收URL】中修改
1.2 使用【微信开放平台->第三方平台->AppID】【微信开放平台->第三方平台->AppSecret,即component_appsecret】和第一步的component_verify_ticket获取公众号第三方平台access_token,即component_access_token
/*** 获取公众号第三方平台access_token* @param component_appid 公众号第三方平台appid* @param component_appsecret 公众号第三方平台appsecret* @param component_verify_ticket 微信后台推送的ticket,此ticket会定时推送,具体请见本页末尾的推送说明* @return 公众号第三方平台access_token*/public static ComponentAccessToken api_component_token(String component_appid,String component_appsecret,String component_verify_ticket){String postJsonData = String.format("{\"component_appid\":\"%1$s\" ,\"component_appsecret\": \"%2$s\",\"component_verify_ticket\": \"%3$s\"}",component_appid,component_appsecret,component_verify_ticket);HttpUriRequest httpUriRequest = RequestBuilder.post().setHeader(jsonHeader).setUri(BASE_URI + "/cgi-bin/component/api_component_token").setEntity(new StringEntity(postJsonData,Charset.forName("utf-8"))).build();return LocalHttpClient.executeJsonResult(httpUriRequest,ComponentAccessToken.class);}
2. 公众号授权,获得authorizer_refresh_token
转向以下页面,用户扫码授权。授权完成后,会重定向到redirect_uri
在redirect_uri方法中会接收到一个auth_code参数,然后使用该参数获取授权信息
/*** 使用授权码换取公众号的授权信息* @param component_access_token component_access_token* @param component_appid 公众号第三方平台appid* @param authorization_code 授权code,会在授权成功时返回给第三方平台,详见第三方平台授权流程说明* @return 公众号的授权信息*/public static ApiQueryAuthResult api_query_auth(String component_access_token,String component_appid,String authorization_code){String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"authorization_code\":\"%2$s\"}",component_appid,authorization_code);HttpUriRequest httpUriRequest = RequestBuilder.post().setHeader(jsonHeader).setUri(BASE_URI + "/cgi-bin/component/api_query_auth").addParameter("component_access_token", API.componentAccessToken(component_access_token)).setEntity(new StringEntity(postJsonData,Charset.forName("utf-8"))).build();return LocalHttpClient.executeJsonResult(httpUriRequest,ApiQueryAuthResult.class);}
从授权信息中即可获得authorizer_refresh_token
3. 使用第1步获取的component_access_token和第2步获取的authorizer_refresh_token获取authorizer_access_token
/*** 获取(刷新)授权公众号的令牌* @param component_access_token component_access_token* @param component_appid 公众号第三方平台appid* @param authorizer_appid 授权方appid* @param authorizer_refresh_token 授权方的刷新令牌,刷新令牌主要用于公众号第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。 一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌* @return 授权公众号的令牌*/public static AuthorizerAccessToken api_authorizer_token(String component_access_token,String component_appid,String authorizer_appid,String authorizer_refresh_token){String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"authorizer_appid\":\"%2$s\",\"authorizer_refresh_token\":\"%3$s\"}",component_appid,authorizer_appid,authorizer_refresh_token);HttpUriRequest httpUriRequest = RequestBuilder.post().setHeader(jsonHeader).setUri(BASE_URI + "/cgi-bin/component/api_authorizer_token").addParameter("component_access_token", API.componentAccessToken(component_access_token)).setEntity(new StringEntity(postJsonData,Charset.forName("utf-8"))).build();return LocalHttpClient.executeJsonResult(httpUriRequest,AuthorizerAccessToken.class);}
微信开放平台找回过期的authorizer_access_token相关推荐
- 微信商业闭环谈论之微信开放平台实现微信卡券投放实践(附部分JAVA源码)
一.微信卡券及现状 先认识几个概念:微信开放平台.公众号第三方平台和微信公众平台开发者模式. 微信开放平台:简单的说,是用于微信生态平台,该平台提供各种接口,第三方App通过接口接入微信登录.微信分享 ...
- 微信开放平台之第三方平台开发,从哪里入手?
大家好,我是悟空码字 疫情之下,最近有不少兄弟没有挺进决赛,半途成了小羊人,可谓是出师未捷身先死.话说回来,不管怎么样,尽量保护好自己,能越晚变羊越好. 开始说正事,不管是自己在创业或学习也好,还是公 ...
- 微信开放平台开源_开源需要开放徽章的3个原因
微信开放平台开源 早在2013年, Fedora项目的一些贡献者就感到困惑. 他们已经获得了偏执狂熊猫 , 好奇企鹅和总编辑等数字徽章,但不知道为什么. Master Editor似乎相对容易理解-毕 ...
- 微信开放平台开发(一)
2019独角兽企业重金招聘Python工程师标准>>> 使用背景 我们的客户都有一个公众号,每个公众号对应的都有用户,但我们的业务是想让这些不同公众号下相同的用户关联起来.所以就选择 ...
- 微信开放平台-第三方平台-全网发布接入【java版本】
微信给出的文档 概述 在第三方平台方创建成功并最终开发测试完毕,提交全网发布申请时,微信服务器会通过自动化测试的方式,检测服务的基础逻辑是否可用,在确保基础可用的情况下,才会允许公众号第三方平台提交全 ...
- 微信开放平台之公众号第三方平台开发及全网发布验证
技术交流请加QQ群:Jeewx微信开发④[289709451] 微信公众号第三方平台的开放,让公众号运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关的处理能力,方便快捷,那如 ...
- 微信开放平台开发第三方授权登陆(二):PC网页端
微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平 ...
- 微信开放平台---网站授权微信登录功能(附带源码)
1 微信开放平台:https://open.weixin.qq.com/ 2 微信官方教程:https://open.weixin.qq.com/cgi-bin/showdocument?action ...
- 微信开放平台_第三方平台授权流程_验证票据
一.验证票据 1.1 官方说明: 验证票据(component_verify_ticket):在第三方平台创建审核通过后,微信服务器会向其"授权事件接收URL" 每隔 10 分钟以 ...
最新文章
- 耗时3天,上亿数据如何做到秒级查询?
- linux 物理内存统计,说说free命令 + Linux可用内存统计方法
- elinput内容过长显示悬浮框_element ui el-table 表头自定义,内容超出省略,悬浮时显示...
- 如何:为 Windows 窗体 RichTextBox 控件设置字体属性
- 员工工号怎么编码_华为员工感慨:工号就留在这了,感谢公司给我自己写墓志铭的机会...
- linux nginx django,如何在Linux下使用Nginx部署Django项目
- 充电枪cp信号控制板_筋膜枪究竟是不是智商税?评测后,我的回答更坚定了
- 计算机术语hpp,HPP(计算机术语)_百度百科
- 附上堆和栈的区别 (转贴)
- 关于大内存(大于4G)支持的问题
- 第一章 【数据分析师---数据可视化1】 matplotlib 静态图,无互动
- 给网页添加2D卡通形象(形象超全超可爱)
- 因安装搜狗输入法而引发的一系列惨案
- 计算机网络原理学习资源——相关书籍推荐
- 高效必备!这4个黑科技小网站,让你眼前一亮
- sonysrshg2 Android,索尼SRS-HG2蓝牙音箱评测 成为你张扬个性的一部分
- 20210429# Python解释器的下载和安装
- 很想联网,家庭用的。
- Android文件格式
- Python基础(二)计算