当前位置: 首页 > news >正文

手机网站列表模板网站做网站词怎么推广

手机网站列表模板,网站做网站词怎么推广,做网站交易平台,服装行业网站建设比较好使用WxJava微信开发时,调用接口获取access_token,如果多个服务部署,就需要使用到缓存来保存access_token以达到重复利用,WxJava 也提供了相关的实现类WxMaRedisConfigImpl,但是这个是基于jedis客户端的实现&#xff0c…

使用WxJava微信开发时,调用接口获取access_token,如果多个服务部署,就需要使用到缓存来保存access_token以达到重复利用,WxJava 也提供了相关的实现类WxMaRedisConfigImpl,但是这个是基于jedis客户端的实现,最新版本的springboot-redis都开始采用lettuce客户端进行连接了,所以我们只能自己手动实现一个类似于WxMaRedisConfigImpl的类

使用的版本

<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-miniapp</artifactId><version>3.5.0</version>
</dependency>

 WxMaLettuceRedisConfigImpl基于lettuce的工具类

package cn.shiyue.config.ma;import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.data.redis.core.StringRedisTemplate;import java.util.concurrent.TimeUnit;public class WxMaLettuceRedisConfigImpl extends WxMaDefaultConfigImpl {private StringRedisTemplate stringRedisTemplate;private static final String ACCESS_TOKEN_KEY = "wa:access_token:";private String accessTokenKey;public WxMaLettuceRedisConfigImpl(StringRedisTemplate stringRedisTemplate){this.stringRedisTemplate = stringRedisTemplate;}/*** 每个公众号生成独有的存储key.*/@Overridepublic void setAppid(String appId) {super.setAppid(appId);this.accessTokenKey = ACCESS_TOKEN_KEY.concat(appId);}@Overridepublic String getAccessToken() {return stringRedisTemplate.opsForValue().get(accessTokenKey);}@Overridepublic boolean isAccessTokenExpired() {Long expireTime = stringRedisTemplate.getExpire(accessTokenKey);if (ObjectUtils.isEmpty(expireTime)) {return true;}// 到期时间小于2秒就算作过期了,就重新调用接口获取return expireTime < 2;}@Overridepublic synchronized void updateAccessToken(String accessToken, int expiresInSeconds) {stringRedisTemplate.opsForValue().set(accessTokenKey, accessToken, expiresInSeconds - 200, TimeUnit.SECONDS);}@Overridepublic void expireAccessToken() {stringRedisTemplate.expire(accessTokenKey, 0, TimeUnit.SECONDS);}@Overridepublic long getExpiresTime() {Long expire = stringRedisTemplate.getExpire(accessTokenKey);return expire == null ? 0 : expire;}@Overridepublic void setExpiresTime(long expiresTime) {stringRedisTemplate.expire(accessTokenKey, expiresTime, TimeUnit.SECONDS);}
}
WxMaConfiguration配置
package cn.shiyue.config.ma;import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;import javax.annotation.PostConstruct;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;@Configuration
@EnableConfigurationProperties(WxMaProperties.class)
public class WxMaConfiguration {private WxMaProperties properties;private static Map<String, WxMaMessageRouter> routers = Maps.newHashMap();private static Map<String, WxMaService> maServices = Maps.newHashMap();// 注入StringRedisTemplate @Autowiredprivate StringRedisTemplate stringRedisTemplate;@Autowiredpublic WxMaConfiguration(WxMaProperties properties) {this.properties = properties;}public static WxMaService getMaService(String appid) {WxMaService wxService = maServices.get(appid);if (wxService == null) {throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", appid));}return wxService;}public static WxMaMessageRouter getRouter(String appid) {return routers.get(appid);}@PostConstructpublic void init() {List<WxMaProperties.Config> configs = this.properties.getConfigs();if (configs == null) {throw new RuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!");}maServices = configs.stream().map(a -> {// 在当前引用WxMaDefaultConfigImpl config = new WxMaLettuceRedisConfigImpl(stringRedisTemplate);//WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl ();config.setAppid(a.getAppid());config.setSecret(a.getSecret());config.setToken(a.getToken());config.setAesKey(a.getAesKey());config.setMsgDataFormat(a.getMsgDataFormat());WxMaService service = new WxMaServiceImpl();service.setWxMaConfig(config);routers.put(a.getAppid(), this.newRouter(service));return service;}).collect(Collectors.toMap(s -> s.getWxMaConfig().getAppid(), a -> a));}private WxMaMessageRouter newRouter(WxMaService service) {final WxMaMessageRouter router = new WxMaMessageRouter(service);router.rule().handler(logHandler).next().rule().async(false).content("模板").handler(templateMsgHandler).end().rule().async(false).content("文本").handler(textHandler).end().rule().async(false).content("图片").handler(picHandler).end().rule().async(false).content("二维码").handler(qrcodeHandler).end();return router;}private final WxMaMessageHandler templateMsgHandler = (wxMessage, context, service, sessionManager) ->{service.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder().templateId("此处更换为自己的模板id").formId("自己替换可用的formid").data(Lists.newArrayList(new WxMaTemplateData("keyword1", "339208499", "#173177"))).toUser(wxMessage.getFromUser()).build());return null;};private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> {System.out.println("收到消息:" + wxMessage.toString());service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson()).toUser(wxMessage.getFromUser()).build());return null;};private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) ->{service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息").toUser(wxMessage.getFromUser()).build());return null;};private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> {try {WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", "png",ClassLoader.getSystemResourceAsStream("tmp.png"));service.getMsgService().sendKefuMsg(WxMaKefuMessage.newImageBuilder().mediaId(uploadResult.getMediaId()).toUser(wxMessage.getFromUser()).build());} catch (WxErrorException e) {e.printStackTrace();}return null;};private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> {try {final File file = service.getQrcodeService().createQrcode("123", 430);WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file);service.getMsgService().sendKefuMsg(WxMaKefuMessage.newImageBuilder().mediaId(uploadResult.getMediaId()).toUser(wxMessage.getFromUser()).build());} catch (WxErrorException e) {e.printStackTrace();}return null;};}
WxMaProperties文件
package cn.shiyue.config.ma;import org.springframework.boot.context.properties.ConfigurationProperties;import java.util.List;@ConfigurationProperties(prefix = "wx.miniapp")
public class WxMaProperties {private List<Config> configs;public static class Config {/*** 设置微信小程序的appid*/private String appid;/*** 设置微信小程序的Secret*/private String secret;/*** 设置微信小程序消息服务器配置的token*/private String token;/*** 设置微信小程序消息服务器配置的EncodingAESKey*/private String aesKey;/*** 消息格式,XML或者JSON*/private String msgDataFormat;public String getAppid() {return appid;}public void setAppid(String appid) {this.appid = appid;}public String getSecret() {return secret;}public void setSecret(String secret) {this.secret = secret;}public String getToken() {return token;}public void setToken(String token) {this.token = token;}public String getAesKey() {return aesKey;}public void setAesKey(String aesKey) {this.aesKey = aesKey;}public String getMsgDataFormat() {return msgDataFormat;}public void setMsgDataFormat(String msgDataFormat) {this.msgDataFormat = msgDataFormat;}}public List<Config> getConfigs() {return configs;}public void setConfigs(List<Config> configs) {this.configs = configs;}
}

 还有一种方式在WxMaConfiguration 文件中配置,这个WxMaRedisBetterConfigImpl类需要高版本的weixin-java-miniapp的jar

@Autowired

private StringRedisTemplate stringRedisTemplate;

// 方式二才需要用上

@Bean

public WxRedisOps getWxRedisOps() {

return new RedisTemplateWxRedisOps(stringRedisTemplate);

}

// 方式一:自己实现一个lettuce的redis配置对象

WxMaDefaultConfigImpl config = new WxMaLettuceRedisConfigImpl(stringRedisTemplate);

// 方式二: 使用wxRedisOps对象来包装redis连接

// WxMaDefaultConfigImpl config = new WxMaRedisBetterConfigImpl(getWxRedisOps(), "wa:access_token:");

http://www.yayakq.cn/news/743214/

相关文章:

  • 哈尔滨网站专业制作建设部房地产网站
  • 达州做网站清爽帝国cms
  • 网站开发与设计专业在服务器上运行wordpress
  • 自己电脑做服务器上传网站 需要备案吗旅游网站源码免费下载
  • 网站开发要求网站怎么做直播功能
  • 小蘑菇网站建设软件网站建设vs网络推广
  • 央企网站开发邯郸信息港征婚交友
  • 网站做流量的论坛贴吧Linux网站建设总结
  • 番禺建设网站公司免费网络电话app下载
  • 自助建站系统php培训网站有哪些
  • 做网站的公司怎么拓展业务wordpress 显示一篇文章
  • 住房和建设执业资格注册中心网站美食网站开发的难点
  • 有批量做基因结构的网站吗自己做网站商城需要营业执照吗
  • 网站关键词做的越多越好吗开通腾讯企业邮箱入口
  • 广州珠江工程建设监理有限公司网站进行网站建设的上市公司
  • 网站建设番禺企业网站建设怎么选择空间
  • 福安市网站建设南宁网络推广外包
  • 宝安做网站公司建站做得好的公司
  • 深圳教育平台网站建设咨询公司是干什么的
  • 网站 新增线路 备案久久建筑网是山东省的吗
  • 网站建设 杭州市萧山区网站建设的几个要素
  • 网站设计在线培训国内四大高端建站公司
  • 大型门户网站建设推广win7系统优化
  • 高端网站建设推荐万维科技顺义区专业网站制作网站建设
  • 网站的三大因素网站注册搜索引擎的目的
  • 网站建设丶金手指a排名15清风室内设计培训学校官网
  • 网站没有备案是假的吗零食网站建设的文案策划书
  • 常州知名网站建设公司东莞有什么公司
  • 做网站 二维码登录网络热词缩写
  • 偷别人的WordPress主题天津百度seo