当微信公众号授权给第三方开发平台后,第三方开发平台执行某些操作时,如查询用户信息、用户打标签,需要使用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. 威斯康辛大学《机器学习导论》2020秋季课程完结,课件、视频资源已开放
  2. R-CNN系列学习笔记
  3. P1967 货车运输
  4. 导航栏中加入自动弹出下拉菜单
  5. c语言编程 新浪博客,[c语言编程]经典编程
  6. 把combobox控件添加到datagridview控件中_自定义系列:控件属性添加
  7. ssl1104-USACO 2.1城堡(foodfill)【图论,广搜】
  8. [Leetcode]62. Unique Paths
  9. linux动态ip 搭建什么服务,怎么给Linux系统配置动态IP服务
  10. java 读取clob字段的几种方法
  11. 携号转网实时手机号归属地查询接口API
  12. 基于汽车后市场应用 汽车VIN码识别 车架号识别数据SDK
  13. 关于山东大学(青岛)的吐槽
  14. Leetcode 460. LFU 缓存
  15. matlab 使用 audioread 、 sound 读取和播放 wav 文件
  16. 备份你的Sina博客
  17. 2018中国区块链金融生态大会
  18. CDH集成了Kerberos后写入数据到HBase遇到的几个问题
  19. PHP之微信头像加水印
  20. 维基解密曝光CIA新路由器网络攻击方式

热门文章

  1. 哪种便签应用能支持导出?
  2. img标签访问图片403(http referrer),直接访问图片链接可以打开
  3. 联邦学习看了论文之后的小展望(11.21)
  4. Android 异步编程
  5. 还在看美女直播跳舞,过时啦老夫反手就是一波用jmeter对直播间做压测
  6. 具体某个计算机病毒中毒症状,十种计算机中毒症状
  7. “问世间情为何物,直教生死相许"是写人间爱情吗?
  8. vb.net datagridview控件导出excel
  9. 短信群发可以使用哪些方式发送
  10. 爬虫之SSL-校验网站证书