【需求】微信小程序getAccessToken接口调用过于频繁,导致超过每日限制,不能再次获取

【需求】微信小程序getAccessToken接口调用过于频繁,导致超过每日限制,不能再次获取。

1.功能描述

微信API文档上有讲:①getAccessToken接口生成的access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效②每天有调用次数限制,据说是2000次,具体多少就不知道了。本需求需要保证每天能正常获取和使用getAccessToken。

1.1 联调微信小程序的getAccessToken接口

在这里插入图片描述
也可以用微信自带的 链接: 微信getAccessToken接口联调

1.2 基本思路

一天24h,上限调用为2000次。每次可用2h。所以,我们理论上每天只调用12次就能满足需求。不过,为了保险起见我们每1小时获取一次新的。见流程图。

2.流程设计

在这里插入图片描述

### 使用 Spring Boot 实现向微信小程序发送消息推送 #### 准备工作 为了实现这一目标,需先完成一些必要的准备。这包括但不限于注册并配置好微信公众平台的小程序账号,在其中设置服务器域名以及获取相应的`appID`和`appsecret`等基本信息[^4]。 #### 获取 Access Token Access token调用微信 API 的凭证,其有效期为7200秒(即两小时),因此建议开发者合理缓存该令牌以减少不必要的请求次数。以下是用于获取 access tokenJava 方法: ```java public String getAccessToken(String appId, String appSecret){ String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); JSONObject jsonObject = JSON.parseObject(responseEntity.getBody()); if (jsonObject.containsKey("access_token")) { return jsonObject.getString("access_token"); } else { throw new RuntimeException(jsonObject.toJSONString()); } } ``` #### 编写模板消息发送工具类 基于上述获得的 access token ,接下来定义一个通用的消息发送方法,它能够接受接收者的 openid 和具体要发送的内容作为参数,并执行实际的消息投递操作: ```java public void sendTemplateMessage(String accessToken, String openId, Map<String,Object> dataMap,String templateId){ // 构建请求体 TemplateMsg templateMsg = new TemplateMsg(openId,templateId,"http://weixin.qq.com/download",dataMap); ObjectMapper objectMapper = new ObjectMapper(); try{ String jsonStr = objectMapper.writeValueAsString(templateMsg); HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken); httpPost.setHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON); StringEntity se = new StringEntity(jsonStr, CHARSET_UTF8); httpPost.setEntity(se); CloseableHttpClient httpClient = HttpClientBuilder.create().build(); HttpResponse httpResponse = httpClient.execute(httpPost); int statusCode=httpResponse.getStatusLine().getStatusCode(); if(statusCode==HttpStatus.SC_OK){ System.out.println("成功!"); } }catch(Exception e){ e.printStackTrace(); } } // 定义模板消息实体类 class TemplateMsg { private String touser; // 接收者openid private String template_id;// 模板id private String url; // 跳转链接 private Map<String,Object> data; public TemplateMsg(String touser, String template_id, String url, Map<String,Object> data) { this.touser=touser; this.template_id=template_id; this.url=url; this.data=data; } // Getters and Setters... } ``` 以上代码片段展示了如何利用 `RestTemplate` 发起 HTTP POST 请求至微信服务器,从而触发特定格式的数据包传输给指定用户[^2]。 #### 集成 WebSocket 技术增强交互体验 除了传统的HTTP轮询方式外,还可以考虑引入WebSocket协议来实现实时双向通信机制。这种方式特别适合于需要频繁更新状态的应用场景,比如聊天室、在线游戏或是直播互动等功能模块。对于微信小程序而言,则可以通过集成Websocket客户端库与后端建立持久连接通道,进而达到更流畅自然的通知效果[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值