yk há 2 anos
cometimento
747a195a7f
28 ficheiros alterados com 1453 adições e 0 eliminações
  1. +52
    -0
      .gitignore
  2. +9
    -0
      Dockerfile
  3. +126
    -0
      pom.xml
  4. +13
    -0
      src/main/java/com/lecoo/wechat/App.java
  5. +17
    -0
      src/main/java/com/lecoo/wechat/builder/AbstractBuilder.java
  6. +22
    -0
      src/main/java/com/lecoo/wechat/builder/TextBuilder.java
  7. +33
    -0
      src/main/java/com/lecoo/wechat/config/SmsProperties.java
  8. +129
    -0
      src/main/java/com/lecoo/wechat/config/WxMpConfiguration.java
  9. +105
    -0
      src/main/java/com/lecoo/wechat/config/WxMpProperties.java
  10. +74
    -0
      src/main/java/com/lecoo/wechat/controller/IndexController.java
  11. +39
    -0
      src/main/java/com/lecoo/wechat/entity/SmsReqEntity.java
  12. +42
    -0
      src/main/java/com/lecoo/wechat/entity/WxMsgReqEntity.java
  13. +12
    -0
      src/main/java/com/lecoo/wechat/handler/AbstractHandler.java
  14. +52
    -0
      src/main/java/com/lecoo/wechat/handler/ControllerExceptionHandler.java
  15. +25
    -0
      src/main/java/com/lecoo/wechat/handler/KfSessionHandler.java
  16. +44
    -0
      src/main/java/com/lecoo/wechat/handler/LocationHandler.java
  17. +25
    -0
      src/main/java/com/lecoo/wechat/handler/LogHandler.java
  18. +35
    -0
      src/main/java/com/lecoo/wechat/handler/MenuHandler.java
  19. +51
    -0
      src/main/java/com/lecoo/wechat/handler/MsgHandler.java
  20. +24
    -0
      src/main/java/com/lecoo/wechat/handler/NullHandler.java
  21. +24
    -0
      src/main/java/com/lecoo/wechat/handler/ScanHandler.java
  22. +27
    -0
      src/main/java/com/lecoo/wechat/handler/StoreCheckNotifyHandler.java
  23. +71
    -0
      src/main/java/com/lecoo/wechat/handler/SubscribeHandler.java
  24. +27
    -0
      src/main/java/com/lecoo/wechat/handler/UnsubscribeHandler.java
  25. +234
    -0
      src/main/java/com/lecoo/wechat/service/SmsService.java
  26. +17
    -0
      src/main/java/com/lecoo/wechat/utils/JsonUtils.java
  27. +61
    -0
      src/main/java/com/lecoo/wechat/utils/SendUtil.java
  28. +63
    -0
      src/main/resources/config/application.yml

+ 52
- 0
.gitignore Ver ficheiro

@@ -0,0 +1,52 @@
######################################################################
# Build Tools

.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar

target/
xueyi-ui/
!.mvn/wrapper/maven-wrapper.jar

######################################################################
# IDE

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans

### IntelliJ IDEA ###
.idea/
.vscode/
*.iws
*.iml
*.ipr

### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/

######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
.DS_Store
.idea/

!*/build/*.java
!*/build/*.html
!*/build/*.xml
logs/
**/target */

+ 9
- 0
Dockerfile Ver ficheiro

@@ -0,0 +1,9 @@
FROM openjdk:8
MAINTAINER yangkai
ADD target/sms-msg-sender-1.0-SNAPSHOT.jar sms-msg-sender.jar
COPY application.yml /
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
EXPOSE 8080
ENTRYPOINT ["java","-jar","sms-msg-sender.jar","--spring.config.location=/application.yml"]

# docker run -d --restart=always --name dg-sms-sender -p 9950:9950 dg-sms-sender:v1 //运行镜像

+ 126
- 0
pom.xml Ver ficheiro

@@ -0,0 +1,126 @@
<?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.example</groupId>
<artifactId>sms-msg-sender</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<revision>0.2.10</revision>
<nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.3.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
<optional>true</optional>
<version>1.16.22</version>
</dependency>

<!-- Testing Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.0.6.RELEASE</version>
</dependency>

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>

<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>4.1.0</version>
</dependency>

<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.5</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>


<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>


<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.6.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>

</project>

+ 13
- 0
src/main/java/com/lecoo/wechat/App.java Ver ficheiro

@@ -0,0 +1,13 @@
package com.lecoo.wechat;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}

+ 17
- 0
src/main/java/com/lecoo/wechat/builder/AbstractBuilder.java Ver ficheiro

@@ -0,0 +1,17 @@
package com.lecoo.wechat.builder;

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
public abstract class AbstractBuilder {
protected final Logger logger = LoggerFactory.getLogger(getClass());

public abstract WxMpXmlOutMessage build(String content,
WxMpXmlMessage wxMessage, WxMpService service);
}

+ 22
- 0
src/main/java/com/lecoo/wechat/builder/TextBuilder.java Ver ficheiro

@@ -0,0 +1,22 @@
package com.lecoo.wechat.builder;

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
public class TextBuilder extends AbstractBuilder {

@Override
public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage,
WxMpService service) {
WxMpXmlOutTextMessage m = WxMpXmlOutMessage.TEXT().content(content)
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
return m;
}

}

+ 33
- 0
src/main/java/com/lecoo/wechat/config/SmsProperties.java Ver ficheiro

@@ -0,0 +1,33 @@
package com.lecoo.wechat.config;

import com.alibaba.nacos.api.config.ConfigType;
import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
* sms properties
*/
@Data
@Component
@ConfigurationProperties(prefix = "sys.mms")
//@NacosConfigurationProperties(prefix = "sys.mms", dataId = "ali-sms",type = ConfigType.YAML, groupId = "DEFAULT_GROUP", autoRefreshed = true)
public class SmsProperties {
private String accessKeyId;
private String accessKeySecrect;
private String endpoint;
private String signName;
private String signNameFront;
private String signNameVisitor;
private String template;
private String carTemplate;
private String fixedTemplate;
private String codeTemplate;
private String meetingOrderTemplate;
private String meetingQuitTemplate;
private String meetingRemindTemplate;
private String defaultRemindTemplate;
private String robotName;
private String receptionPhones;
}

+ 129
- 0
src/main/java/com/lecoo/wechat/config/WxMpConfiguration.java Ver ficheiro

@@ -0,0 +1,129 @@
package com.lecoo.wechat.config;

import com.lecoo.wechat.handler.*;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.redis.JedisWxRedisOps;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.List;
import java.util.stream.Collectors;

import static me.chanjar.weixin.common.api.WxConsts.EventType;
import static me.chanjar.weixin.common.api.WxConsts.EventType.SUBSCRIBE;
import static me.chanjar.weixin.common.api.WxConsts.EventType.UNSUBSCRIBE;
import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType;
import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType.EVENT;
import static me.chanjar.weixin.mp.constant.WxMpEventConstants.CustomerService.*;
import static me.chanjar.weixin.mp.constant.WxMpEventConstants.POI_CHECK_NOTIFY;

/**
* wechat mp configuration
*
* @author Binary Wang(https://github.com/binarywang)
*/
@AllArgsConstructor
@Configuration
@EnableConfigurationProperties(WxMpProperties.class)
public class WxMpConfiguration {
private final LogHandler logHandler;
private final NullHandler nullHandler;
private final KfSessionHandler kfSessionHandler;
private final StoreCheckNotifyHandler storeCheckNotifyHandler;
private final LocationHandler locationHandler;
private final MenuHandler menuHandler;
private final MsgHandler msgHandler;
private final UnsubscribeHandler unsubscribeHandler;
private final SubscribeHandler subscribeHandler;
private final ScanHandler scanHandler;
private final WxMpProperties properties;

@Bean
public WxMpService wxMpService() {
// 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!!
final List<WxMpProperties.MpConfig> configs = this.properties.getConfigs();
if (configs == null) {
throw new RuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!");
}

WxMpService service = new WxMpServiceImpl();
service.setMultiConfigStorages(configs
.stream().map(a -> {
WxMpDefaultConfigImpl configStorage;
if (this.properties.isUseRedis()) {
final WxMpProperties.RedisConfig redisConfig = this.properties.getRedisConfig();
JedisPoolConfig poolConfig = new JedisPoolConfig();
JedisPool jedisPool = new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(),
redisConfig.getTimeout(), redisConfig.getPassword());
configStorage = new WxMpRedisConfigImpl(new JedisWxRedisOps(jedisPool), a.getAppId());
} else {
configStorage = new WxMpDefaultConfigImpl();
}

configStorage.setAppId(a.getAppId());
configStorage.setSecret(a.getSecret());
configStorage.setToken(a.getToken());
configStorage.setAesKey(a.getAesKey());
return configStorage;
}).collect(Collectors.toMap(WxMpDefaultConfigImpl::getAppId, a -> a, (o, n) -> o)));
return service;
}

@Bean
public WxMpMessageRouter messageRouter(WxMpService wxMpService) {
final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService);

// 记录所有事件的日志 (异步执行)
newRouter.rule().handler(this.logHandler).next();

// 接收客服会话管理事件
newRouter.rule().async(false).msgType(EVENT).event(KF_CREATE_SESSION)
.handler(this.kfSessionHandler).end();
newRouter.rule().async(false).msgType(EVENT).event(KF_CLOSE_SESSION)
.handler(this.kfSessionHandler).end();
newRouter.rule().async(false).msgType(EVENT).event(KF_SWITCH_SESSION)
.handler(this.kfSessionHandler).end();

// 门店审核事件
newRouter.rule().async(false).msgType(EVENT).event(POI_CHECK_NOTIFY).handler(this.storeCheckNotifyHandler).end();

// 自定义菜单事件
newRouter.rule().async(false).msgType(EVENT).event(EventType.CLICK).handler(this.menuHandler).end();

// 点击菜单连接事件
newRouter.rule().async(false).msgType(EVENT).event(EventType.VIEW).handler(this.nullHandler).end();

// 关注事件
newRouter.rule().async(false).msgType(EVENT).event(SUBSCRIBE).handler(this.subscribeHandler).end();

// 取消关注事件
newRouter.rule().async(false).msgType(EVENT).event(UNSUBSCRIBE).handler(this.unsubscribeHandler).end();

// 上报地理位置事件
newRouter.rule().async(false).msgType(EVENT).event(EventType.LOCATION).handler(this.locationHandler).end();

// 接收地理位置消息
newRouter.rule().async(false).msgType(XmlMsgType.LOCATION).handler(this.locationHandler).end();

// 扫码事件
newRouter.rule().async(false).msgType(EVENT).event(EventType.SCAN).handler(this.scanHandler).end();

// 默认
newRouter.rule().async(false).handler(this.msgHandler).end();

return newRouter;
}


public WxMpProperties getWxMpProperties(){
return this.properties;
}
}

+ 105
- 0
src/main/java/com/lecoo/wechat/config/WxMpProperties.java Ver ficheiro

@@ -0,0 +1,105 @@
package com.lecoo.wechat.config;

import com.alibaba.nacos.api.config.ConfigType;
import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.List;

/**
* wechat mp properties
*
* @author Binary Wang(https://github.com/binarywang)
*/
@Data
@ConfigurationProperties(prefix = "wx.mp")
//@NacosConfigurationProperties(prefix = "wx.mp", dataId = "ali-sms",type = ConfigType.YAML, groupId = "DEFAULT_GROUP", autoRefreshed = true)
public class WxMpProperties {
/**
* 是否使用redis存储access token
*/
private boolean useRedis;

/**
* redis 配置
*/
private RedisConfig redisConfig;

@Data
public static class RedisConfig {
/**
* redis服务器 主机地址
*/
private String host;

/**
* redis服务器 端口号
*/
private Integer port;

/**
* redis服务器 密码
*/
private String password;

/**
* redis 服务连接超时时间
*/
private Integer timeout;
}

/**
* 多个公众号配置信息
*/
private List<MpConfig> configs;

@Data
public static class MpConfig {
/**
* 设置微信公众号的appid
*/
private String appId;

/**
* 设置微信公众号的app secret
*/
private String secret;

/**
* 设置微信公众号的token
*/
private String token;

/**
* 设置微信公众号的EncodingAESKey
*/
private String aesKey;


private String auditTemplateId;

private String pushMsgTemplateId;

private String regAuditTemplateId;

private String url;
}

@Override
public String toString() {
return "";
}

public List<MpConfig> getConfigs() {
return configs;
}

public boolean isUseRedis() {
return useRedis;
}

public RedisConfig getRedisConfig() {
return redisConfig;
}
}

+ 74
- 0
src/main/java/com/lecoo/wechat/controller/IndexController.java Ver ficheiro

@@ -0,0 +1,74 @@
package com.lecoo.wechat.controller;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.lecoo.wechat.entity.SmsReqEntity;
import com.lecoo.wechat.entity.WxMsgReqEntity;
import com.lecoo.wechat.service.SmsService;
import com.lecoo.wechat.utils.SendUtil;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/notification/api")
public class IndexController {
@Autowired
SendUtil sendUtil;

@Autowired
SmsService smsService;

@RequestMapping(value = "/sendMsg", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public JSONObject sendMsg(@RequestBody WxMsgReqEntity wxMsgReqEntity) {

JSONObject json = wxMsgReqEntity.toJson();
System.err.println(json);


JSONObject result = new JSONObject();
result.put("status", 0);
result.put("message", "send success!");

try {
sendUtil.sendWxTemplateMsg(json);
} catch (WxErrorException e) {
result.put("status", -1);
result.put("message", e.getMessage());
e.printStackTrace();
}
return result;
}

@RequestMapping(value = "/sendSms", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public JSONObject sendSms(@RequestBody SmsReqEntity smsReqEntity) {
System.err.println("receive a new req for send sms");
JSONObject result = new JSONObject();
result.put("status", 0);
result.put("message", "send success!");
System.err.println(smsReqEntity.toJson().toJSONString());
try {
SendSmsResponse sendSmsResponse = smsService.sendTempMmsMeeting(smsReqEntity);
System.err.println(sendSmsResponse.getBody().getMessage());
System.err.println(sendSmsResponse.getBody().getCode());
System.err.println(sendSmsResponse.getBody().getCode());
if (sendSmsResponse.getBody().code.equalsIgnoreCase("ok")) {
return result;
} else {
result.put("status", -1);
result.put("message", sendSmsResponse.getBody().getMessage());
return result;
}
} catch (Exception e) {
result.put("status", -1);
result.put("message", e.getMessage());
e.printStackTrace();
}
System.err.println(result.toJSONString());
System.err.println("send sms end...");
return result;
}
}

+ 39
- 0
src/main/java/com/lecoo/wechat/entity/SmsReqEntity.java Ver ficheiro

@@ -0,0 +1,39 @@
package com.lecoo.wechat.entity;

import com.alibaba.fastjson.JSONObject;
import com.lecoo.wechat.utils.JsonUtils;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.util.Map;

@Data
public class SmsReqEntity {
@NotBlank(message = "phone不能为空")
private String phone;

@NotBlank(message = "template不能为空")
private String template;

private String dataMap;

public JSONObject toJson(){
JSONObject json = new JSONObject(true);
json.put("phone", phone);
json.put("template", template);

if(dataMap!= null && dataMap.length() > 0){
JSONObject jsonObject = JSONObject.parseObject(dataMap);
jsonObject.forEach((key, item)->{
json.put(key, item);
});
}

return json;
}

public String mapToString(){
JSONObject jsonObject = JSONObject.parseObject(dataMap);
return jsonObject ==null ? "" : jsonObject.toJSONString();
}
}

+ 42
- 0
src/main/java/com/lecoo/wechat/entity/WxMsgReqEntity.java Ver ficheiro

@@ -0,0 +1,42 @@
package com.lecoo.wechat.entity;

import com.alibaba.fastjson.JSONObject;
import lombok.Data;

import javax.validation.constraints.NotBlank;

@Data
public class WxMsgReqEntity {
@NotBlank(message = "openid不能为空")
private String openid;
@NotBlank(message = "url不能为空")
private String url;
@NotBlank(message = "templateId不能为空")
private String templateId;
private String first;
private String second;
private String three;
private String four;
private String five;
private String six;

public JSONObject toJson(){
JSONObject json = new JSONObject(true);
json.put("openid", openid);
json.put("url", url);
json.put("templateId", templateId);
if (null != first)
json.put("first", first);
if (null != second)
json.put("second", second);
if (null != three)
json.put("three", three);
if (null != four)
json.put("four", four);
if (null != five)
json.put("five", five);
if (null != six)
json.put("six", six);
return json;
}
}

+ 12
- 0
src/main/java/com/lecoo/wechat/handler/AbstractHandler.java Ver ficheiro

@@ -0,0 +1,12 @@
package com.lecoo.wechat.handler;

import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
public abstract class AbstractHandler implements WxMpMessageHandler {
protected Logger logger = LoggerFactory.getLogger(getClass());
}

+ 52
- 0
src/main/java/com/lecoo/wechat/handler/ControllerExceptionHandler.java Ver ficheiro

@@ -0,0 +1,52 @@
package com.lecoo.wechat.handler;

import com.alibaba.fastjson.JSONObject;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class ControllerExceptionHandler {

@ExceptionHandler(Exception.class)
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public JSONObject exceptionHandler(Exception exception) {
exception.printStackTrace();
JSONObject jsonObject = new JSONObject();
if (exception instanceof MethodArgumentNotValidException) {
JSONObject temp = new JSONObject();
((MethodArgumentNotValidException) exception).getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
temp.put(fieldName, errorMessage);
});
jsonObject.put("status", 500);
jsonObject.put("errors", temp);
return jsonObject;
} else if (exception instanceof BindException) {
JSONObject temp = new JSONObject();
((BindException) exception).getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
temp.put(fieldName, errorMessage);
});
jsonObject.put("status", 500);
jsonObject.put("errors", temp);
return jsonObject;
} else {
}

JSONObject temp = new JSONObject();
temp.put("message", exception.getMessage());

jsonObject.put("status", 500);
jsonObject.put("errors", temp);
return jsonObject;
}
}

+ 25
- 0
src/main/java/com/lecoo/wechat/handler/KfSessionHandler.java Ver ficheiro

@@ -0,0 +1,25 @@
package com.lecoo.wechat.handler;

import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class KfSessionHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
//TODO 对会话做处理
return null;
}

}

+ 44
- 0
src/main/java/com/lecoo/wechat/handler/LocationHandler.java Ver ficheiro

@@ -0,0 +1,44 @@
package com.lecoo.wechat.handler;

import com.lecoo.wechat.builder.TextBuilder;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class LocationHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
if (wxMessage.getMsgType().equals(XmlMsgType.LOCATION)) {
//TODO 接收处理用户发送的地理位置消息
try {
String content = "感谢反馈,您的的地理位置已收到!";
return new TextBuilder().build(content, wxMessage, null);
} catch (Exception e) {
this.logger.error("位置消息接收处理失败", e);
return null;
}
}

//上报地理位置事件
this.logger.info("上报地理位置,纬度 : {},经度 : {},精度 : {}",
wxMessage.getLatitude(), wxMessage.getLongitude(), String.valueOf(wxMessage.getPrecision()));

//TODO 可以将用户地理位置信息保存到本地数据库,以便以后使用

return null;
}

}

+ 25
- 0
src/main/java/com/lecoo/wechat/handler/LogHandler.java Ver ficheiro

@@ -0,0 +1,25 @@
package com.lecoo.wechat.handler;

import com.lecoo.wechat.utils.JsonUtils;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class LogHandler extends AbstractHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
this.logger.info("\n接收到请求消息,内容:{}", JsonUtils.toJson(wxMessage));
return null;
}

}

+ 35
- 0
src/main/java/com/lecoo/wechat/handler/MenuHandler.java Ver ficheiro

@@ -0,0 +1,35 @@
package com.lecoo.wechat.handler;

import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

import static me.chanjar.weixin.common.api.WxConsts.EventType;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class MenuHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService weixinService,
WxSessionManager sessionManager) {
String msg = String.format("type:%s, event:%s, key:%s",
wxMessage.getMsgType(), wxMessage.getEvent(),
wxMessage.getEventKey());
if (EventType.VIEW.equals(wxMessage.getEvent())) {
return null;
}

return WxMpXmlOutMessage.TEXT().content(msg)
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
}

}

+ 51
- 0
src/main/java/com/lecoo/wechat/handler/MsgHandler.java Ver ficheiro

@@ -0,0 +1,51 @@
package com.lecoo.wechat.handler;

import com.lecoo.wechat.builder.TextBuilder;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.Map;

import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class MsgHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService weixinService,
WxSessionManager sessionManager) {

if (!wxMessage.getMsgType().equals(XmlMsgType.EVENT)) {
//TODO 可以选择将消息保存到本地
}

//当用户输入关键词如“你好”,“客服”等,并且有客服在线时,把消息转发给在线客服
try {
if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服")
&& weixinService.getKefuService().kfOnlineList()
.getKfOnlineList().size() > 0) {
return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE()
.fromUser(wxMessage.getToUser())
.toUser(wxMessage.getFromUser()).build();
}
} catch (WxErrorException e) {
e.printStackTrace();
}

//TODO 组装回复消息
String content = "收到信息内容:好的,已收到您的回复";

return new TextBuilder().build(content, wxMessage, weixinService);

}

}

+ 24
- 0
src/main/java/com/lecoo/wechat/handler/NullHandler.java Ver ficheiro

@@ -0,0 +1,24 @@
package com.lecoo.wechat.handler;

import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class NullHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
return null;
}

}

+ 24
- 0
src/main/java/com/lecoo/wechat/handler/ScanHandler.java Ver ficheiro

@@ -0,0 +1,24 @@
package com.lecoo.wechat.handler;

import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class ScanHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map<String, Object> map,
WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException {
// 扫码事件处理
return null;
}
}

+ 27
- 0
src/main/java/com/lecoo/wechat/handler/StoreCheckNotifyHandler.java Ver ficheiro

@@ -0,0 +1,27 @@
package com.lecoo.wechat.handler;

import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* 门店审核事件处理
*
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class StoreCheckNotifyHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
// TODO 处理门店审核事件
return null;
}

}

+ 71
- 0
src/main/java/com/lecoo/wechat/handler/SubscribeHandler.java Ver ficheiro

@@ -0,0 +1,71 @@
package com.lecoo.wechat.handler;

import com.lecoo.wechat.builder.TextBuilder;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class SubscribeHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService weixinService,
WxSessionManager sessionManager) throws WxErrorException {

this.logger.info("新关注用户 OPENID: " + wxMessage.getFromUser());

// 获取微信用户基本信息
try {
WxMpUser userWxInfo = weixinService.getUserService()
.userInfo(wxMessage.getFromUser(), null);
if (userWxInfo != null) {
// TODO 可以添加关注用户到本地数据库
System.out.println(userWxInfo);
}
} catch (WxErrorException e) {
if (e.getError().getErrorCode() == 48001) {
this.logger.info("该公众号没有获取用户信息权限!");
}
}


WxMpXmlOutMessage responseResult = null;
try {
responseResult = this.handleSpecial(wxMessage);
} catch (Exception e) {
this.logger.error(e.getMessage(), e);
}

if (responseResult != null) {
return responseResult;
}

try {
return new TextBuilder().build("感谢关注", wxMessage, weixinService);
} catch (Exception e) {
this.logger.error(e.getMessage(), e);
}

return null;
}

/**
* 处理特殊请求,比如如果是扫码进来的,可以做相应处理
*/
private WxMpXmlOutMessage handleSpecial(WxMpXmlMessage wxMessage)
throws Exception {
//TODO
return null;
}

}

+ 27
- 0
src/main/java/com/lecoo/wechat/handler/UnsubscribeHandler.java Ver ficheiro

@@ -0,0 +1,27 @@
package com.lecoo.wechat.handler;

import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class UnsubscribeHandler extends AbstractHandler {

@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
String openId = wxMessage.getFromUser();
this.logger.info("取消关注用户 OPENID: " + openId);
// TODO 可以更新本地数据库为取消关注状态
return null;
}

}

+ 234
- 0
src/main/java/com/lecoo/wechat/service/SmsService.java Ver ficheiro

@@ -0,0 +1,234 @@
package com.lecoo.wechat.service;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.lecoo.wechat.config.SmsProperties;
import com.lecoo.wechat.entity.SmsReqEntity;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.Set;

/**
* spring sms 工具类
*
* @author xueyi
**/
@Component
@AllArgsConstructor
@SuppressWarnings(value = {"unchecked", "rawtypes"})
public class SmsService {
@Autowired
private SmsProperties sendMmsProperties;


public String getReceptionPhones(){
return sendMmsProperties.getReceptionPhones();
}


public SendSmsResponse sendTempMms(String phone, String paramStr, boolean hasCar) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(sendMmsProperties.getAccessKeyId())
// 您的AccessKey Secret
.setAccessKeySecret(sendMmsProperties.getAccessKeySecrect());
// 访问的域名
config.endpoint = sendMmsProperties.getEndpoint();
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);

SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(sendMmsProperties.getSignNameVisitor())
.setTemplateCode(hasCar?sendMmsProperties.getCarTemplate():sendMmsProperties.getTemplate())
.setTemplateParam(paramStr);
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse res = client.sendSms(sendSmsRequest);

return res;
}

public SendSmsResponse sendTempMmsFixed(String phone, String paramStr) throws Exception {


Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(sendMmsProperties.getAccessKeyId())
// 您的AccessKey Secret
.setAccessKeySecret(sendMmsProperties.getAccessKeySecrect());
// 访问的域名
config.endpoint = sendMmsProperties.getEndpoint();
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);

SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(sendMmsProperties.getSignNameVisitor())
.setTemplateCode(sendMmsProperties.getFixedTemplate())
.setTemplateParam(paramStr);
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse res = client.sendSms(sendSmsRequest);

return res;
}


public SendSmsResponse sendTempMmsCode(String phone, String code) throws Exception {


Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(sendMmsProperties.getAccessKeyId())
// 您的AccessKey Secret
.setAccessKeySecret(sendMmsProperties.getAccessKeySecrect());
// 访问的域名
config.endpoint = sendMmsProperties.getEndpoint();
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);

JSONObject json = new JSONObject();
json.put("code", code);
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(sendMmsProperties.getSignName())
.setTemplateCode(sendMmsProperties.getCodeTemplate())
.setTemplateParam(json.toJSONString());
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse res = client.sendSms(sendSmsRequest);

return res;
}

public void test(){
System.out.println(sendMmsProperties);
}

public SendSmsResponse sendTempMmsMeeting(String phone, Integer type, Map<String, String> dataMap) throws Exception {

Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(sendMmsProperties.getAccessKeyId())
// 您的AccessKey Secret
.setAccessKeySecret(sendMmsProperties.getAccessKeySecrect());
// 访问的域名
config.endpoint = sendMmsProperties.getEndpoint();
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);

String template = "";
if (type == 1) {
template = sendMmsProperties.getMeetingOrderTemplate();
} else if (type == 2) {
template = sendMmsProperties.getMeetingQuitTemplate();
} else {
template = sendMmsProperties.getMeetingRemindTemplate();
}

JSONObject json = new JSONObject();
Set<String> kSet = dataMap.keySet();

for (String key : kSet) {
json.put(key, dataMap.get(key));
}
// json.put("name", meetingRoomOrder.getOrderByEmp());
// json.put("dateStr", meetingRoomOrder.getOrderData());
json.put("rebotName", sendMmsProperties.getRobotName());
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(sendMmsProperties.getSignName())
.setTemplateCode(template)
.setTemplateParam(json.toJSONString());
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse res = client.sendSms(sendSmsRequest);

return res;
}


public SendSmsResponse sendTempMmsMeeting(SmsReqEntity smsReqEntity) throws Exception {

Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(sendMmsProperties.getAccessKeyId())
// 您的AccessKey Secret
.setAccessKeySecret(sendMmsProperties.getAccessKeySecrect());
// 访问的域名
config.endpoint = sendMmsProperties.getEndpoint();
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);

String template = smsReqEntity.getTemplate();

SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(smsReqEntity.getPhone())
.setSignName(sendMmsProperties.getSignName())
.setTemplateCode(template)
.setTemplateParam(smsReqEntity.mapToString());
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse res = client.sendSms(sendSmsRequest);

return res;
}

/*public SendSmsResponse sendTempMmsMeeting(String phone, MeetingRoomOrder meetingRoomOrder, Integer type) throws Exception {

Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(sendMmsProperties.getAccessKeyId())
// 您的AccessKey Secret
.setAccessKeySecret(sendMmsProperties.getAccessKeySecrect());
// 访问的域名
config.endpoint = sendMmsProperties.getEndpoint();
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);

String template = "";
if (type == 1) {
template = sendMmsProperties.getMeetingOrderTemplate();
} else if (type == 2) {
template = sendMmsProperties.getMeetingQuitTemplate();
} else {
template = sendMmsProperties.getMeetingRemindTemplate();
}

JSONObject json = new JSONObject();
json.put("name", meetingRoomOrder.getOrderByEmp());
json.put("dateStr", meetingRoomOrder.getOrderData());
json.put("rebotName", sendMmsProperties.getRobotName());
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(sendMmsProperties.getSignName())
.setTemplateCode(template)
.setTemplateParam(json.toJSONString());
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse res = client.sendSms(sendSmsRequest);

return res;
}*/

public SendSmsResponse sendMmsToDefault(String phone) throws Exception{
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(sendMmsProperties.getAccessKeyId())
// 您的AccessKey Secret
.setAccessKeySecret(sendMmsProperties.getAccessKeySecrect());
// 访问的域名
config.endpoint = sendMmsProperties.getEndpoint();
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);

String template = sendMmsProperties.getDefaultRemindTemplate();

JSONObject json = new JSONObject();
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(sendMmsProperties.getSignName())
.setTemplateCode(template)
.setTemplateParam(json.toJSONString());
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse res = client.sendSms(sendSmsRequest);

return res;
}
}




+ 17
- 0
src/main/java/com/lecoo/wechat/utils/JsonUtils.java Ver ficheiro

@@ -0,0 +1,17 @@
package com.lecoo.wechat.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
* @author Binary Wang(https://github.com/binarywang)
*/
public class JsonUtils {
public static String toJson(Object obj) {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
return gson.toJson(obj);
}
}

+ 61
- 0
src/main/java/com/lecoo/wechat/utils/SendUtil.java Ver ficheiro

@@ -0,0 +1,61 @@
/**
* @project AppService
* @filename SignUtil.java
* @date 2016年8月31日
* @author KeShanqiang
*/

package com.lecoo.wechat.utils;

import com.alibaba.fastjson.JSONObject;
import com.lecoo.wechat.config.WxMpProperties;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Set;

@AllArgsConstructor
@Component
public class SendUtil {
@Autowired
private final WxMpService wxService;




public String sendWxTemplateMsg(JSONObject jsonObject) throws WxErrorException {

if (jsonObject.size()<4) {
return "不合法的参数。。。。";
}
Set keySet = jsonObject.keySet();
Object[] keyAry = keySet.toArray();
Integer i = 0, j = 1;
String openid = (String) jsonObject.get(keyAry[i++]);
String url = (String) jsonObject.get(keyAry[i++]);
String templateId = (String) jsonObject.get(keyAry[i++]);

WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser(openid)
.templateId(templateId)
.url(url)
.build();

templateMessage.addData(new WxMpTemplateData("first", (String) jsonObject.get(keyAry[i++]), "#FF00FF"));
while (i<keyAry.length && j<6) {
templateMessage.addData(new WxMpTemplateData("keyword"+(j++), (String) jsonObject.get(keyAry[i++]), "#000"));
}

templateMessage.addData(new WxMpTemplateData("remark", (String) jsonObject.get(keyAry[keyAry.length-1]), "#000"));

String msgId = this.wxService.getTemplateMsgService().sendTemplateMsg(templateMessage);
return msgId;
}


}

+ 63
- 0
src/main/resources/config/application.yml Ver ficheiro

@@ -0,0 +1,63 @@
server:
port: 9950

nacos:
config:
server-addr: 127.0.0.1:8848
# namespace: 6d0ee265-2a92-44cc-a6de-f34b3ea104e6
enabled: true
file-extension: yaml
blocking-queue-size: 5000

sys:
baseUrl: http://dev.hjkjg.top
mms:
receptionPhones: 18910801519
# accessKeyId: LTAI5tR67Z2jD21XdjZppe2E
# accessKeySecrect: 1q8QkQEzc8UZ3JmH8nt73tP1etO5Px
accessKeyId: LTAI5tBxoXcHTkMZv1jUwCT8
accessKeySecrect: E8i2eWczpxOIcYGtX9D0lNJtHApmh2
endpoint: dysmsapi.aliyuncs.com
signName: 缔智元
signNameVisitor: 缔智元
template: SMS_228835440
carTemplate: SMS_228850376
fixedTemplate: SMS_228835443
codeTemplate: SMS_229300003
meetingOrderTemplate: SMS_460710519
meetingQuitTemplate: SMS_460685561
meetingRemindTemplate: SMS_460655546
defaultRemindTemplate: SMS_460715556
visitorTemplate: SMS_461045124
robotName: 小酷

wx:
mp:
useRedis: false
redisConfig:
host: 127.0.0.1
port: 6379
configs:
- appId: wxde105494dd27c1ac # 第一个公众号的appid
secret: f81e44ef5a1ed2235ce471f0ee3d1445 # 公众号的appsecret
token: 83u4h # 接口配置里的Token值
pushMsgTemplateId: BQlE4WmvD6C2YG6aMYUxlSztBYbiSFe_KjQaneTWrHY
auditTemplateId: Y1qGJ7SjY4GFky9V101dV8rYQzDR1uZ8g3e6d16M1Ts
regAuditTemplateId: RYDfkUjIRHnCWSy_O1XfDaFT9uE-jYqDAtrpkp49350
url: ${sys.baseUrl}/f/wx/oauth2


spring:
application:
name: sms-msg-sender # 业务服务的名称,用于注册到nacos中
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:18848 # nacos的服务地址

config:
server-addr: 127.0.0.1:18848 # nacos的配置地址
file-extension: yml # 配置文件扩展名,默认为yml
data-id: ali-sms.yml # 配置文件名称,可以自定义



Carregando…
Cancelar
Guardar