java 接入微信 spring boot 接入微信
1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>demo</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.新建一个RestController
import java.io.InputStream;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
import java.util.Arrays; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; /**
* 微信接入
*/
@RestController
public class WeiXinController { // private final String appid='';
// private final String secret=''; private final String appid = "";
private final String secret = ""; private final String token = "demo"; private static Logger logger = LoggerFactory.getLogger(WeiXinController.class); @GetMapping("/wx")
public String getWeiXin(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce, @RequestParam("echostr") String echostr) { logger.debug("signature:{},timestamp:{},nonce:{},echostr:{}", signature, timestamp, nonce, echostr);
if (StringUtils.isEmpty(signature)) {
return "";
} String[] arrs = new String[] { token, timestamp, nonce };
Arrays.sort(arrs); String tmp = String.join("", arrs);
//使用common.codec进行sah1加密
String hashCode = DigestUtils.sha1Hex(tmp); if (StringUtils.equals(signature, hashCode)) {
return echostr;
} return "";
} @PostMapping(value = "/wx")
public String postWeiXin(@RequestBody String xmlMsg) { logger.debug("xmlMsg:{}", xmlMsg); //获取消息类型
String pattern = "<MsgType(?:><!\\[CDATA\\[|>)(.*?)(?:\\]\\]><|<)/MsgType>";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(xmlMsg);
String msgType = ""; if (m.find()) {
msgType = m.group(1);
} if ("text".equals(msgType)) {
//使用xstream进行转换
XStream xStream = new XStream();
//XStream.setupDefaultSecurity(xStream);
//xStream.allowTypes(new Class[]{TextMsg.class});
xStream.processAnnotations(TextMsg.class);
TextMsg txtMsg = (TextMsg) xStream.fromXML(xmlMsg); // 示例 交换发送接收人,然后把源信息返回
TextMsg replyMsg = (TextMsg) xStream.fromXML(xmlMsg);
replyMsg.setToUserName(txtMsg.getFromUserName());
replyMsg.setFromUserName(txtMsg.getToUserName()); //返回
return xStream.toXML(replyMsg);
} else {
return "other msg ";
}
} @XStreamAlias("xml")
public static class TextMsg implements Serializable { private static final long serialVersionUID = 1L;
private String MsgType;
private String ToUserName;
private String FromUserName;
private Long CreateTime;
private String MsgId;
private String Content; /**
* @return the msgType
*/
public String getMsgType() {
return MsgType;
} /**
* @return the content
*/
public String getContent() {
return Content;
} /**
* @param content the content to set
*/
public void setContent(String content) {
this.Content = content;
} /**
* @return the msgId
*/
public String getMsgId() {
return MsgId;
} /**
* @param msgId the msgId to set
*/
public void setMsgId(String msgId) {
this.MsgId = msgId;
} /**
* @return the createTime
*/
public Long getCreateTime() {
return CreateTime;
} /**
* @param createTime the createTime to set
*/
public void setCreateTime(Long createTime) {
this.CreateTime = createTime;
} /**
* @return the fromUserName
*/
public String getFromUserName() {
return FromUserName;
} /**
* @param fromUserName the fromUserName to set
*/
public void setFromUserName(String fromUserName) {
this.FromUserName = fromUserName;
} /**
* @return the toUserName
*/
public String getToUserName() {
return ToUserName;
} /**
* @param toUserName the toUserName to set
*/
public void setToUserName(String toUserName) {
this.ToUserName = toUserName;
} /**
* @param msgType the msgType to set
*/
public void setMsgType(String msgType) {
this.MsgType = msgType;
}
} }
微信公众号配置 http://ip或域名/wx
第三方平台开发 全网发布时验证注意事项
参考 https://blog.csdn.net/dk947960731/article/details/52204408
java 接入微信 spring boot 接入微信的更多相关文章
- Spring Boot 开发微信公众号后台
Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台. 很多小伙伴可能注意到松哥的个人网站(http://www.javaboy.org)前 ...
- 第64节:Java中的Spring Boot 2.0简介笔记
Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...
- 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案
技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...
- 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案--temp
技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...
- Spring Boot中微信全局token的缓存实现
为什么要缓存token? 这里的token指的是微信JSAPI中基础支持的ACCESS_TOKEN,并非网页授权ACCESS_TOKEN.网页授权Token每天的调用次数没有限制,不需要缓存. 接口 ...
- Spring Boot接入 apollo 后启动 dubbo 报错
原文地址:https://xobo.org/spring-boot-apollo-dubbo-xml-error/ 某Spring Boot项目接入 apollo 后启动 dubbo 报错Caused ...
- Spring Boot项目微信云托管入门部署
微信云托管本身是一个服务器,里面的软件都已经配置好了,直接使用即可,适用于一些简单部署的项目.直接把项目直接上传到服务器即可.无需各种繁琐的软件配置和打包,微信云托管统统给你搞定.而且系统会根据使用量 ...
- Spring Boot企业微信点餐系统
第1章 课程介绍 包括项演示.课程概述.课程安排.学习前提等的介绍, 让同学们了解这课程 1-1 课程介绍 第2章 项目设计 包括需求分析,项?目设计,项?目架构,数据库设计等等. 2-1 项目设计 ...
- Spring Boot企业微信点餐系统-第一章-课程介绍
一.项目简介——技术要点 前端和后端: 后端主要技术: 微信接口技术 微信支付 微信扫码登录 微信模板消息推送 开发环境 但实际上我用的环境和这上面还是有点不一样,我服务器用的是win,到时候我会详细 ...
随机推荐
- MyEclipse使用教程:unattended安装
[MyEclipse CI 2019.4.0安装包下载] 以下内容适用于2013及以上版本. 运行无提示安装程序 1. 创建一个unattended response文件. 2. 要激活unatten ...
- @ResponseStatus注解作用
@ResponseStatus注解有两种用法,一种是加载自定义异常类上,一种是加在目标方法中 这里我们说一下加在目标方法上的这种情况,注解中有两个参数,value属性设置异常的状态码,reaseon是 ...
- share point 查询文档库 过滤 文档名称和上传时间
SPQuery query = new SPQuery(); CAMLBuilder.WhereBuilder whereBuilder = null; pageCount = ; if (!stri ...
- canvas实现圆角、圆框图片
参考资料: http://www.zhangxinxu.com/study/201406/image-border-radius-canvas.html https://www.jianshu.com ...
- 【NOIP2016提高A组模拟9.9】闭门造车
题目 自从htn体验了一把飙车的快感,他就下定决心要闭门造车!但是他两手空空怎么造得出车来呢?无奈的他只好来到了汽车零部件商店. 一走进商店,玲琅满目的各式零件看得htn眼花缭乱.但是他很快便反应过来 ...
- yaf 生成项目
yaf 生成项目 yaf下载安装地址 https://github.com/laruence/yaf/releases 生成项目 一定需要在安装yaf的php版本环境中执行该语句 sudo /usr/ ...
- [BZOJ3622]已经没有什么好害怕的了:DP+容斥原理
分析 说白了就是一道先DP再二项式反演的水题,然后被脑残博主把"多\(k\)组"看成了"糖果比药片能量大的组数恰好为\(k\)组",还改了各种奇怪的地方,最后看 ...
- [BZO3572][HNOI2014]世界树:虚树+倍增
分析 思维难度几乎为\(0\)的虚树码农(并不)题. 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=( ...
- 满减 HRBUST - 2455
https://vjudge.net/problem/HRBUST-2455 有两种优惠方式,一是满400减100,另外一种是商品自带折扣,二者不可叠加 dp[i][j]表示前i种商品,(参与满400 ...
- linux-解决添加的网卡无法识别的问题(转载)
添加网卡之后,网卡无法被正确的识别和使用排错方法查看/etc/udev/rules.d/70-persistent-net.rules的内容,该文件中可以查看到新添加的网卡的MAC地址修改/etc/s ...