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