当微信公众号授权给第三方开发平台后,第三方开发平台执行某些操作时,如查询用户信息、用户打标签,需要使用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

https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid={component_appid}&pre_auth_code={pre_auth_code}&redirect_uri={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相关推荐

  1. 微信商业闭环谈论之微信开放平台实现微信卡券投放实践(附部分JAVA源码)

    一.微信卡券及现状 先认识几个概念:微信开放平台.公众号第三方平台和微信公众平台开发者模式. 微信开放平台:简单的说,是用于微信生态平台,该平台提供各种接口,第三方App通过接口接入微信登录.微信分享 ...

  2. 微信开放平台之第三方平台开发,从哪里入手?

    大家好,我是悟空码字 疫情之下,最近有不少兄弟没有挺进决赛,半途成了小羊人,可谓是出师未捷身先死.话说回来,不管怎么样,尽量保护好自己,能越晚变羊越好. 开始说正事,不管是自己在创业或学习也好,还是公 ...

  3. 微信开放平台开源_开源需要开放徽章的3个原因

    微信开放平台开源 早在2013年, Fedora项目的一些贡献者就感到困惑. 他们已经获得了偏执狂熊猫 , 好奇企鹅和总编辑等数字徽章,但不知道为什么. Master Editor似乎相对容易理解-毕 ...

  4. 微信开放平台开发(一)

    2019独角兽企业重金招聘Python工程师标准>>> 使用背景 我们的客户都有一个公众号,每个公众号对应的都有用户,但我们的业务是想让这些不同公众号下相同的用户关联起来.所以就选择 ...

  5. 微信开放平台-第三方平台-全网发布接入【java版本】

    微信给出的文档 概述 在第三方平台方创建成功并最终开发测试完毕,提交全网发布申请时,微信服务器会通过自动化测试的方式,检测服务的基础逻辑是否可用,在确保基础可用的情况下,才会允许公众号第三方平台提交全 ...

  6. 微信开放平台之公众号第三方平台开发及全网发布验证

    技术交流请加QQ群:Jeewx微信开发④[289709451] 微信公众号第三方平台的开放,让公众号运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关的处理能力,方便快捷,那如 ...

  7. 微信开放平台开发第三方授权登陆(二):PC网页端

    微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平 ...

  8. 微信开放平台---网站授权微信登录功能(附带源码)

    1 微信开放平台:https://open.weixin.qq.com/ 2 微信官方教程:https://open.weixin.qq.com/cgi-bin/showdocument?action ...

  9. 微信开放平台_第三方平台授权流程_验证票据

    一.验证票据 1.1 官方说明: 验证票据(component_verify_ticket):在第三方平台创建审核通过后,微信服务器会向其"授权事件接收URL" 每隔 10 分钟以 ...

最新文章

  1. 耗时3天,上亿数据如何做到秒级查询?
  2. linux 物理内存统计,说说free命令  + Linux可用内存统计方法
  3. elinput内容过长显示悬浮框_element ui el-table 表头自定义,内容超出省略,悬浮时显示...
  4. 如何:为 Windows 窗体 RichTextBox 控件设置字体属性
  5. 员工工号怎么编码_华为员工感慨:工号就留在这了,感谢公司给我自己写墓志铭的机会...
  6. linux nginx django,如何在Linux下使用Nginx部署Django项目
  7. 充电枪cp信号控制板_筋膜枪究竟是不是智商税?评测后,我的回答更坚定了
  8. 计算机术语hpp,HPP(计算机术语)_百度百科
  9. 附上堆和栈的区别 (转贴)
  10. 关于大内存(大于4G)支持的问题
  11. 第一章 【数据分析师---数据可视化1】 matplotlib 静态图,无互动
  12. 给网页添加2D卡通形象(形象超全超可爱)
  13. 因安装搜狗输入法而引发的一系列惨案
  14. 计算机网络原理学习资源——相关书籍推荐
  15. 高效必备!这4个黑科技小网站,让你眼前一亮
  16. sonysrshg2 Android,索尼SRS-HG2蓝牙音箱评测 成为你张扬个性的一部分
  17. 20210429# Python解释器的下载和安装
  18. 很想联网,家庭用的。
  19. Android文件格式
  20. Python基础(二)计算

热门文章

  1. Provisional headers are shown 的可能原因和解决
  2. 弘辽科技:巨量千川如何投放。
  3. 华为鸿蒙发布会不选深圳,最高149999!华为一系列新品发布:不仅鸿蒙,这就是未来...
  4. JavaScript全局变量、局部变量
  5. 使用Latex输入定积分竖线
  6. webpack之Code Splitting
  7. 求整形矩阵的最大子矩阵
  8. 一年卖3亿元 看看这家潮流B2C如何做到的?
  9. 怎么在手机待办工具上设置每个月三号银行还款提醒
  10. Android使用WallpaperService和openGL ES生成的动态图形设置动态壁纸