顺便说一下微信公共测试号的申请,不需要准备任何材料,除了部分需要认证的接口,大部分都可以调用,提供一下链接点我获取
官方文档点击查看
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功
可以用redis、mc这种去缓存,或者直接保存到数据库,或者直接保存为application
提供个保存到数据库的方法,redis缓存,目前我已经弃用数据库保存了,连定时任务都不需要了
一、access_token实体类
package com.phil.wechatauth.entity; import com.phil.common.entity.AbstractEntity; /** * 微信的access_token * @author phil * @date 2017年7月9日 * */ public class WechatAccessToken extends AbstractEntity { /** * */ private static final long serialVersionUID = 123771404997810930L; private String token; public String getToken() { return token; } public void setToken(String token) { this.token = token; } }
二、获取并保存
package com.phil.wechatauth.service.impl; import java.util.TreeMap; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.phil.common.config.WechatConfig; import com.phil.common.util.DateTimeUtil; import com.phil.common.util.HttpReqUtil; import com.phil.common.util.JsonUtil; import com.phil.common.util.UUIDGenerator; import com.phil.wechatauth.dao.WechatAccessTokenMapper; import com.phil.wechatauth.entity.WechatAccessToken; import com.phil.wechatauth.model.resp.AccessToken; import com.phil.wechatauth.service.AuthTokenService; /** * AuthToken Service * @author phil * @date 2017年7月9日 * */ @Service public class AuthTokenServiceImpl implements AuthTokenService { private static final Logger logger = Logger.getLogger(AuthTokenServiceImpl.class); @Autowired private WechatAccessTokenMapper wechatAccessTokenMapper; @Transactional(readOnly=true) public String findlastestToken() { String accessToken = wechatAccessTokenMapper.findlastestToken(); if(StringUtils.isNotBlank(accessToken)){ logger.info("accessToken of search is " + accessToken.substring(0, 10) + "..."); } return accessToken; } @Override @Transactional(readOnly=false) public void saveToken() throws Exception { TreeMap<String, String> map = new TreeMap<String, String>(); map.put("grant_type", "client_credential"); map.put("appid", WechatConfig.APP_ID); map.put("secret", WechatConfig.APP_SECRET); String result = HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.GET_METHOD, WechatConfig.TOKEN_PATH, map, ""); AccessToken accessToken = JsonUtil.fromJson(result, AccessToken.class); try { if(accessToken.getAccess_token()==null){ throw new Exception(""); } } catch (Exception e) { e.printStackTrace(); } WechatAccessToken wechatAccessToken = new WechatAccessToken(); wechatAccessToken.setId(UUIDGenerator.generate().toString()); wechatAccessToken.setToken(accessToken.getAccess_token()); wechatAccessToken.setCreateTime(DateTimeUtil.currentTime()); wechatAccessTokenMapper.saveToken(wechatAccessToken); } }
三、项目启动初始化
package com.phil.common.listener; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; import com.phil.wechatauth.service.AuthTokenService; /** * 初始化生成微信token * * @author phil * @date 2017年7月9日 * */ @Component public class InitWechatAuthListener implements ApplicationListener<ContextRefreshedEvent> { private static final Logger logger = Logger.getLogger(InitWechatAuthListener.class); @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private AuthTokenService authTokenService; private static boolean isStart = false; // 防止二次调用 @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (!isStart) { isStart = true; String token = authTokenService.findlastestToken(); if (StringUtils.isBlank(token)) { logger.info("token is null in db"); try { authTokenService.saveToken(); token = authTokenService.findlastestToken(); } catch (Exception e) { e.printStackTrace(); } } // 添加一个 key ValueOperations<String, Object> value = redisTemplate.opsForValue(); value.set("phil_token", token, 7200, TimeUnit.SECONDS); // 7200秒有效期 } } }
四、定时刷新
package com.phil.common.task; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.phil.wechatauth.service.AuthTokenService; /** * Spring调度,指定时间执行 利用了spring中使用注解的方式来进行任务调度。 * @author phil * @date 2017年7月9日 * */ @Component @Lazy(false) public class SpringTaskController { private static final Logger logger = Logger.getLogger(SpringTaskController.class); @Autowired private AuthTokenService authTokenService; /** * 每小时抓取一次 */ @Scheduled(cron = "0 0 0/1 * * ? ") public void scheduleSaveToken(){ try { authTokenService.saveToken(); } catch (Exception e) { logger.info("抓取失败,please check"); /**** 发邮件/电话 ****/ e.printStackTrace(); } } }
spring配置
<!-- 定时器 --> <task:annotation-driven /> <bean class="com.phil.common.task.SpringTaskController" />
相关推荐
微信公众平台开发ACCESSTOKEN.docx
WXService Java根据code换取微信小程序openId,accessToken以及微信小程序码二维码 String param = "appid=" + ydAppId + "&secret=" + ydSecret + "&js_code=" + code + "&grant_type=authorization_code"; // ...
【ASP.NET编程知识】微信公众平台开发之获得ACCESSTOKEN .Net代码解析.docx
在微信开发中,无论是服务号还是企业号,`AccessToken` 是一个至关重要的概念。它是微信API接口调用的通行令牌,用于验证开发者身份并确保请求的安全性。然而,`AccessToken` 不是永久有效的,它会定期过期,这就...
在Java环境下实现微信授权登录的过程涉及多个步骤,主要包括配置微信开发者平台、获取AppID和AppSecret、用户授权、获取access_token以及刷新access_token等。以下是对这个过程的详细阐述: 1. **配置微信开发者...
一个文件解决获取微信公众号accesstoken永不失效,简单高效
主要为大家详细解析了微信公众平台开发之获得ACCESSTOKEN .Net代码,感兴趣的小伙伴们可以参考一下
在Java开发中,微信登录授权是一项常见的功能,它允许用户通过微信账号快速登录到你的应用,提升用户体验。本篇将详细讲解如何利用Java实现微信登录授权,以及涉及到的关键技术和步骤。 一、微信开放平台注册与接口...
此sdk包含【开放平台全网发布】,接收微信推送消息事件,发起公众号授权,处理各消息事件,粉丝,分组,支付,emoji处理,网页授权,获取用户信息,群发,图文,回复内容,上传下载多媒体文件,自定义菜单,...
Java企业微信开发源码框架,获取AccessToken,发送消息. 当前应用于公司的企业微信监控报警系统. 微信企业号管理系统源码框架 使用springboot框架 基础签名验证,附加强加密算法jar 获取accessToken 发送消息 扩展对接...
获取accesstoken、获取jsapi_ticket、配置jssdk、调用扫一扫。里面写了一个类、参数配置好直接调用就行。包括全局缓存,定时获取accesstoken和jsapi_ticket
微信小程序在运行过程中需要与微信服务器进行交互,而交互的核心之一就是`accesstoken`。`accesstoken`是微信小程序与微信接口通信的身份凭证,它允许小程序调用微信提供的各种开放接口,如用户信息获取、支付功能等...
在这个Java实例中,我们将使用微信开放平台提供的SDK来处理与微信服务器的交互。 1. **微信开发者平台注册**: 在实施微信授权登录前,需要在微信开发者平台上注册并创建一个应用,获取AppID和AppSecret。这两个...
下载 ngrok ...微信公众平台 https://mp.weixin.qq.com/cgi-bin/frame?t=advanced/dev_tools_frame&nav=10049&token=1958267125&lang=zh_CN 参考网址: http://www.cnblogs.com/lovebread/p/5513241.html ...
基于PHP框架Laravel5.2的微信公众平台开发示例 IDE: PhpStorm 9.0.2 PHP VERSION: 5.6.7 DATABASE: Mysql5.6 Author: Steven Guo ##包含功能 1.微信公众平台接入 2.获取AccessToken 3.接收普通消息,并被动回复...
微信获取jssdk例子JAVA例子生成sign签名(MD5格式) 校验sign
Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册 Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为...Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...
1、微信企业号服务端调用方法java源码实现 1.1 获取AccessToken 1.2 发送文本消息 1.3 发送消息(包括文本、图像、声音、视频、文件、图文) 1.4 上传素材文件 1.5 获取素材文件 1.6 获取应用素材总数以及每种类型...
使用微信接口制作的转短链接工具,需要有自己的微信测试号或者公众号生成的accesstoken,配置jdk环境变量才能使用(由于使用了exe4j打包,提示配置EXE_JAVA_HOME是和jdk环境变量一样的配置方法)