微信公众号开发-获取access_token

thinkphp5 使用 easywechat 依赖问题记录 thinkphp5 使用 easywechat 依赖问题记录 Failed to cache access token 出现这个错误注意一下 /tmp/symfony-cache/ 文件夹权限是否和项目权限相同 cd /tmp chown -R www symfony-cache chgrp -R www symfony-cache 紧急处理方案 1.因为是缓存无法写入,那么可以先屏蔽掉抛出错误的代码。 # 文件路径 vendor\overtrue\wechat\src\Kernel\Acc 阅读详情
Model——AccessToken
//微信通用接口凭证
public class AccessToken {
    // 获取到的凭证
    private String token;
    // 获取到ticket
    private String ticket;
    // 凭证有效时间,单位:秒
    private int expiresIn;
    // 添加时间
    private long addTime;
}
获取AccessToken外部调用方法getAccessToken,
public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

public static String getAccessToken(String appId,String secret) {
    AccessToken accessTocken = getAccessToken(appId, secret,System.currentTimeMillis()/1000);//毫秒转秒
    return accessTocken.getToken();
}


public static AccessToken getAccessToken(String appid, String appsecret, long currentTime) {
    AccessToken tockenTicketCache = getTokenTicket(TOKEN);//从缓存中获取
    AccessToken accessToken = null;
    if (tockenTicketCache != null && 
        (currentTime - tockenTicketCache.getAddTime() <= tockenTicketCache.getExpiresIn() )) {
        // 缓存存在并且没过期
        log.info("==========缓存中token已获取时长为:" + (currentTime - tockenTicketCache.getAddTime()) + "秒,可以重新使用");
            return tockenTicketCache;
        }
    JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
    if (null != jsonObject) {//重新请求获取
        accessToken = new AccessToken();
        accessToken.setToken(jsonObject.getString("access_token"));
        // 正常过期时间是7200秒,此处设置3600秒读取一次
        accessToken.setExpiresIn(jsonObject.getIntValue("expires_in") / 2);
        log.info("==========tocket缓存过期时间为:" + accessToken.getExpiresIn() + "秒");
        accessToken.setAddTime(currentTime);
        updateAccessToken(TOKEN, accessToken);//更新缓存
    }
}


    /**
     * 从缓存中读取token或者ticket
     * 
     * @return
     */
    private static AccessToken getTokenTicket(String key) {
        if (TOKEN_TICKET_CACHE != null && TOKEN_TICKET_CACHE.get(key) != null) {
            log.info("==========从缓存中获取到了" + key + "成功===============");
            return TOKEN_TICKET_CACHE.get(key);
        }
        return null;
    }
// token,ticket缓存,
//类加载的时候(第一次访问),这个类中所有静态成员就会被加载在静态存储区,同时存储在静态变量区域的成员一旦创建,直到程序退出才会被回收。
public static Map<String, AccessToken> TOKEN_TICKET_CACHE = new HashMap<String, AccessToken>();
// 获取access_token的接口地址(GET) 限2000(次/天)

    /**
     * 更新缓存中token或者ticket
     * 
     * @return
     */
    private static void updateAccessToken(String key, AccessToken accessTocken) {
        if (TOKEN_TICKET_CACHE != null && TOKEN_TICKET_CACHE.get(key) != null) {
            TOKEN_TICKET_CACHE.remove(key);
            log.info("==========从缓存中删除" + key + "成功===============");
        }
        TOKEN_TICKET_CACHE.put(key, accessTocken);
        cacheAddTime = String.valueOf(accessTocken.getAddTime());// 更新缓存修改的时间
        log.info("==========更新缓存中" + key + "成功===============");
    }



    /**
     * 发起https请求并获取结果
     * 
     * @param requestUrl
     *            请求地址
     * @param requestMethod
     *            请求方式(GET、POST)
     * @param outputStr
     *            提交的数据
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
     */
    private static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
        JSONObject jsonObject = null;
        StringBuffer buffer = new StringBuffer();
        try {
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 从上述SSLContext对象中得到SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();

            URL url = new URL(requestUrl);
            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
            httpUrlConn.setSSLSocketFactory(ssf);

            httpUrlConn.setDoOutput(true);
            httpUrlConn.setDoInput(true);
            httpUrlConn.setUseCaches(false);
            // 设置请求方式(GET/POST)
            httpUrlConn.setRequestMethod(requestMethod);
            if ("GET".equalsIgnoreCase(requestMethod))
                httpUrlConn.connect();
            // 当有数据需要提交时
            if (null != outputStr) {
                OutputStream outputStream = httpUrlConn.getOutputStream();
                // 注意编码格式,防止中文乱码
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }
            // 将返回的输入流转换成字符串
            InputStream inputStream = httpUrlConn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            bufferedReader.close();
            inputStreamReader.close();
            // 释放资源
            inputStream.close();
            inputStream = null;
            httpUrlConn.disconnect(); 
            jsonObject = JSONObject.parseObject(buffer.toString());
            // jsonObject = JSONObject.fromObject(buffer.toString());
        } catch (ConnectException ce) {
            log.info("Weixin server connection timed out.");
        } catch (Exception e) {
            log.info("https request error:{}" + e.getMessage());
        }
        return jsonObject;
    }
微信公众号开发之获取access_token 微信公众号开发详细教程 官方文档 公众平台的API调用所需的access_token的使用及生成方式说明: 1、建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务; 2、目前access_token的有效期通过返回的exp... 阅读详情

相关推荐

php微信公众号开发access_token获取

1.我们打开开发文档https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html 2.获取access_token <?php function curl_get_https($url){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); curl_seto

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 572

easywechat报错:Failed to cache access token

场景: 1.小程序 2.在代码中用$app=EasyWeChat\Factory::miniProgram(['app_id' => $app_id, 'secret' => $secret])获取小程序实例 3.配置文件wechat.default.use_laravel_cache=true 结果在$app->template_message->send()的时...

weixin_34006965的博客 5520

Unity动画状态机实战:Trigger和Bool参数到底怎么选?附5个常见场景解析

本文深入解析Unity动画状态机中Trigger和Bool参数的核心差异与应用场景。通过对比两者在描述瞬时事件与持续状态上的本质区别,并结合角色移动、攻击连招、跳跃落地、受击死亡及环境交互等5个实战场景,提供了清晰的选择逻辑与避坑指南,帮助开发者构建更健壮、易维护的动画逻辑。

weixin_29009501的博客 120

thinkphp5使用easywechat报错Failed to cache access token(世纪大坑)

路径如下:\vendor\symfony\cache\Traits\FilesystemCommonTrait.php。然后,把里面的symfony-cache改成symfony-cache-2023。然后你在试试,试完之后,你就会发现,成功了,并且服务器会多了个这样的文件夹。万一删了或者改了权限导致其他羡慕瘫痪肯定电话被打爆了。服务器还有其他很多项目没有注意到这个问题,所以,你只需要找到你项目下的这个文件,或者将这个文件夹改一下权限就可以了,由于线上新项目遇到这个问题,怕会受到牵连,所以也敢乱动,

qq_37363320的博客 1279

手搓ZLMediaKit实现拉流推流系列3(RK3588上YOLO系列拉流、MPP解码+编码、推流全流程)

 前段时间比较忙,一直没有时间补充后续的内容。今天终于抽出空来,立马进入码字环节:手搓ZLMediaKit实现拉流推流系列在本篇也终于迎来了完结篇,在本篇文章中,你将看到以下一整套完整流程:使用ZLMediaKit拉流---MPP解码---Yolo模型进行推理---MPP编码并推流。

m0_46303486的博客 2174

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4962

微信订阅信息问题心得

一、解决subscribeMessage.send通过HTTPS调用时返回47003的问题 订阅信息参数内容限制说明 消息订阅报错码 如果出现 Failed to cache access token.(以tp框架为例) 缓存问题可能是出现微信绑的域名和你现在访问的域名没有一致,我就是因为测试空间的域名和微信调用的域名不一致,微信域名要求做安全https,测试空间没有装证书就是http,所以一直出现无法缓存access token,这也可以隐藏掉 ...

yezi170701的博客 708

动手学Moveit2|使用配置助手创建自己机械臂的功能包

今天没时间了,先生成功能包,下一步还需要装一些依赖才能运行,明天再补充下面的内容。

生活不止眼前的苟且 1万+

微信公众号开发之获取公众号的access_token

为啥要获取公众号的access_token? 因为接下来要实现微信公众号的自定义菜单需要access_token,而且菜单的URl跳转第三方网页也要用到。 一、access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口、客服接口、获取用户信息接口、用户分组接口、群发接口等, 开发者在调用这些接口时,都需要传入一个...

灰太狼 2万+

实战复盘:如何用Frida脚本绕过某书APP的libmsaoaidsec.so检测(附完整Hook代码)

本文深入探讨了如何利用Frida脚本绕过某书APP通过libmsaoaidsec.so实现的反Frida检测机制。通过分析动态链接过程中的关键节点和检测模式,提供了两种实战验证的绕过方案:动态Hook关键链接器函数和静态Patch SO文件。文章还分享了进阶对抗策略和调试技巧,帮助安全研究人员有效应对现代移动安全防护挑战。

weixin_42706667的博客 219

BambuStudio学习笔记:GCode 类

关键成员解析 核心配置组件 状态跟踪系统 功能模块集成 核心方法剖析 主输出管道 实现多阶段处理: 分层处理流程: 实现智能路径规划: 关键特性: 实现模板故障检测: 采用三级流水线: 支持扩展类型: 实现多通道输出: 采用: 实现: 支持: 支持模块化编译: 典型流程: 实现功能:

zzzkk2009的专栏 933

微信公众号开发如何获取 access_token

一、微信公众号获取 access_token access_token 是微信调用接口全局唯一的凭据。它的特点是唯一的,有效期为2 小时,提前 5分钟请求,接口权限,每天 2000 次。它的请求地址是 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APP...

浮生离梦的博客 3348

OpenCloudOS9操作系统搭建Confluence8.2.1+Jira企业级WIKI

Atlassian Confluence是一个专业的企业知识管理与协同软件,可用于构建企业wiki

背锅神童的博客 1023

微信公众号服务器获取token,微信公众号开发教程获取access_token

在微信公众号开发过程中,如果我们想要主动向微信服务器推送消息那么我们必须要有access_token。access_token 是公众号的唯一票据,当我们开发调用微信的各种接口时都需要使用access_token。access_token是类似于下面所展示的一个字符串。wGOSbMw6iKvhIOcjCJTi_r6wXpOF_Vnih-TEvumx_1OXgnaZiRfy0g0hJ08ykRkc0...

weixin_33318222的博客 6227

YOLO26 电子产品零部件质检:缺陷检测 + Streamlit

YOLO26s 电子质检链路:1100 张工业零部件图 (4 类缺陷) → 增强 (blur+shear+低光照) → 150 epoch → mAP@0.5=0.91 → Streamlit 质检界面 (上传/摄像头双模式) → 缺陷严重度分级 (pass/minor/major/critical)。核心贡献:blur+shear 模拟产线振动和视角偏移, 使模糊场景 recall 从 72% 提升至 78%;Streamlit 一键部署, 无需前端经验。建议先收集 200 张纯正常件做负样本防过检;

m0_71589036的博客 375

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

微信公众号开发之获取Access token

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。 公众平台的API调用所需的access_token的使用及生成方式说明: 1、建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来

艺术编程 1411

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

微信公众号开发(三)——获取 Access_Token

获取access token

深页 8374

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

springboot-微信公众号开发(获取access_token)

前面已经详细的讲解了java后台接入微信公众号,下一步将带领大家开始开发微信公众号,废话不多说,直接进入正题。<本篇文章在上一节项目中进行更新> 1.获取access_token 在开始之前还是有必要啰嗦啰嗦,什么时access_token? 官方文档介绍:access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存...

qq_41486247的博客 3498

5 微信公众号开发 获取 access_token

在使用微信公众号接口中,需要access_token。access_token是公众号的全局唯一凭证。可以理解为我们服务器的身份证。 总结以上说明,access_token需要做到以下两点: 1.因为access_token有2个小时的时效性,要有一个机制保证最长2个小时重新获取一次; 2.因为接口调用上限每天2000次,所以不能调用太频繁; 下面是核心代码: /** * 获取全局访问...

solocao的专栏 447

微信公众号开发之access_token的获取

access_token的获取

youhebuke225的博客 4107

微信公众号开发----获取access_token,定时刷新access_token

首先先查看微信公众技术文档之获取access_token,了解各参数含义 前提:获取到公众号的AppId和AppSecret 一、常量类 /** * 公众号相关 */ public class WechartConst { //公众号的唯一标识 public static final String appId = "appId"; //公众号的appsecret ...

small_emotion的博客 2553

微信公众号开发access_token获取为null

微信公众号开发access_token获取为null 第一次微信公众号开发采用微信公众号测试账号进行开发。 后续申请了个人微信公众号进行测试时发现运行报错一下是报错打印内容 获取到的access_token={“errcode”:40164,“errmsg”:“invalid ip 117.29.130.172, not in whitelist hint: [yrEdZa02613055]”} ...

weixin_45146666的博客 5218
上一篇: 微信公众号模板消息推送
下一篇: Spring:简易切换开发和生产数据库等配置
程序NM的猿
博客等级 码龄12年 240粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值