阿里云短信调用包调整为新版,移除旧版调用,合并管理调用模板为枚举类

debug
王绍全 5 days ago
parent da484fb17a
commit f9edb6c5a0
  1. 81
      pom.xml
  2. 18
      src/main/java/com/ynxbd/common/TestA.java
  3. 4
      src/main/java/com/ynxbd/common/action/ApiAction.java
  4. 40
      src/main/java/com/ynxbd/common/action/SmsAction.java
  5. 2
      src/main/java/com/ynxbd/common/action/report/LisReportAction.java
  6. 10
      src/main/java/com/ynxbd/common/action/test/TestAction.java
  7. 2
      src/main/java/com/ynxbd/common/bean/pay/Register.java
  8. 31
      src/main/java/com/ynxbd/common/bean/sms/SmsTempEnum.java
  9. 5
      src/main/java/com/ynxbd/common/bean/sms/SmsTemplate.java
  10. 94
      src/main/java/com/ynxbd/common/helper/common/SmsHelper.java
  11. 5
      src/main/java/com/ynxbd/common/helper/common/SmsNewHelper.java
  12. 6
      src/main/java/com/ynxbd/common/service/SmsService.java
  13. 24
      src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java
  14. 4
      src/main/resources/sms.properties

@ -24,6 +24,13 @@
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.42</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@ -31,11 +38,20 @@
<scope>test</scope>
</dependency>
<!-- struts2核心依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.42</version>
<scope>provided</scope>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- struts2零配置依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
@ -131,22 +147,6 @@
<version>${jackson.version}</version>
</dependency>
<!-- struts2核心依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- struts2零配置依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
@ -395,53 +395,16 @@
</exclusions>
</dependency>
<!--阿里云短信-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.0</version>
<artifactId>dysmsapi20170525</artifactId>
<version>4.3.1</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
<exclusion>
<artifactId>bcprov-jdk15on</artifactId>
<groupId>org.bouncycastle</groupId>
</exclusion>
<exclusion>
<artifactId>org.jacoco.agent</artifactId>
<groupId>org.jacoco</groupId>
</exclusion>
<exclusion>
<artifactId>commons-codec</artifactId>
<groupId>commons-codec</groupId>
</exclusion>
<exclusion>
<artifactId>jaxb-runtime</artifactId>
<groupId>org.glassfish.jaxb</groupId>
</exclusion>
<exclusion>
<artifactId>gson</artifactId>
<groupId>com.google.code.gson</groupId>
</exclusion>
<exclusion>
<artifactId>httpcore</artifactId>
<groupId>org.apache.httpcomponents</groupId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
<exclusion>
<artifactId>httpclient</artifactId>
<groupId>org.apache.httpcomponents</groupId>
</exclusion>
</exclusions>
</dependency>

@ -13,22 +13,8 @@ import java.util.Map;
public class TestA {
public static void main(String[] args) throws UnsupportedEncodingException {
// String a = "";
// String s = DesEncryptHelper.deCode(a);
// System.out.println(s);
// RequestBody requestBody = new FormBody.Builder()
// .add("token", "")
// .add("state", "aHR0cCUzQSUyRiUyRnNseGxmd3N5LnNseHJteXkuY24lMkZ3eCUyRndlYiUyRnJlZy1yZXNlcnZlLmh0bWwlMjMlMkY=")
// .add("isUserInfo", "false")
// .add("enuId", "false")
// .add("protocolState", "0")
// .build();
// log.info("[认证请求转发] resp:[{}]", requestBody);
// log.info("[认证请求转发] resp:[{}]", JsonHelper.toJsonString(requestBody));
String decode = AesWxHelper.decode("26BF93E3E09EFC13F3AC0574A271B83F4D5EAE7C8A5101BCF8560CE14EC80FF9");
System.out.println(decode);
System.out.println(AesWxHelper.encode("397631"));
}

@ -3,6 +3,7 @@ package com.ynxbd.common.action;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.User;
import com.ynxbd.common.bean.sms.SmsTempEnum;
import com.ynxbd.common.bean.sms.SmsTemplate;
import com.ynxbd.common.helper.common.*;
import com.ynxbd.common.result.Result;
@ -247,8 +248,7 @@ public class ApiAction extends BaseAction {
String template;
switch (callNo) {
case "dhzzyyy001": // 东软自助机
template = "SMS_173475681";
isFlag = SmsHelper.sendCode(template, phoneNo, codeNo);
isFlag = SmsHelper.sendCode(SmsTempEnum.SMS_173475681, phoneNo, codeNo);
break;

@ -2,6 +2,7 @@ package com.ynxbd.common.action;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.sms.SmsTempEnum;
import com.ynxbd.common.bean.sms.SmsTemplate;
import com.ynxbd.common.bean.wxMessage.WaitReg;
import com.ynxbd.common.dao.RegisterDao;
@ -50,15 +51,15 @@ public class SmsAction extends BaseAction {
String code = CodeHelper.getRandomCode(6);
switch (callNo) {
case "general": // 通用模板【您的验证码${code},您正进行身份验证,该验证码5分钟内有效,请勿泄漏于他人!】
isFlag = SmsHelper.sendCode("SMS_257021489", tel, code);
isFlag = SmsHelper.sendCode(SmsTempEnum.SMS_257021489, tel, code);
break;
case "peis_report": // 体检报告【您的校验码:${code},您正在查看体检报告,感谢您的支持!】
isFlag = SmsHelper.sendCode("SMS_164268358", tel, code);
isFlag = SmsHelper.sendCode(SmsTempEnum.SMS_164268358, tel, code);
break;
case "user_bind": // 用户绑定
isFlag = SmsHelper.sendCode("SMS_257021489", tel, code);
isFlag = SmsHelper.sendCode(SmsTempEnum.SMS_257021489, tel, code);
break;
default:
@ -116,15 +117,12 @@ public class SmsAction extends BaseAction {
boolean resultFlag = false;
switch (callNo) {
case "dhzzyyy001": // 东软自助机
template = "SMS_173475681";
resultFlag = SmsHelper.sendCode(template, tel, code);
resultFlag = SmsHelper.sendCode(SmsTempEnum.SMS_173475681, tel, code);
break;
case "xbd_code_001":
template = "SMS_257021489";
resultFlag = SmsHelper.sendCode(template, tel, code);
resultFlag = SmsHelper.sendCode(SmsTempEnum.SMS_257021489, tel, code);
break;
default:
log.info("调用码无效");
break;
@ -163,7 +161,7 @@ public class SmsAction extends BaseAction {
boolean isFlag;
switch (callNo) {
case "na_admin": // 核酸结果上传逾期
isFlag = SmsHelper.send("SMS_260585044", tel, smsObj);
isFlag = SmsHelper.send(SmsTempEnum.SMS_260585044, tel, smsObj);
break;
default:
@ -175,8 +173,9 @@ public class SmsAction extends BaseAction {
/**
* 德宏州中医院每日候诊推送
*
* @param startTime 检索推送开始时间
* @param endTime 检索推送结束时间
* @param endTime 检索推送结束时间
* @return 推送结果
*/
@Action("todayRegSmS")
@ -184,15 +183,15 @@ public class SmsAction extends BaseAction {
log.info("[候诊推送短信] begTime={}, endTime={}", startTime, endTime);
List<WaitReg> waitRegs = new RegisterDao().selectTodayRegRecord(startTime, endTime);
for (WaitReg waitReg : waitRegs) {
Map<String,String> sms = new HashMap<>();
sms.put("time",waitReg.getRegDate()+" "+waitReg.getBegTime()+"-"+waitReg.getEndTime());
sms.put("deptName",waitReg.getDeptName());
sms.put("doctorName",waitReg.getDoctName());
sms.put("address",waitReg.getAddress());
sms.put("minute","15");
sms.put("signView","个人中心");
sms.put("hospTel","0692-2991794");
log.info("[候诊推送短信]sendResult-{},tel-{},sms-{}",SmsHelper.send("SMS_475780750",waitReg.getTel(),sms),waitReg.getTel(),sms);
Map<String, String> sms = new HashMap<>();
sms.put("time", waitReg.getRegDate() + " " + waitReg.getBegTime() + "-" + waitReg.getEndTime());
sms.put("deptName", waitReg.getDeptName());
sms.put("doctorName", waitReg.getDoctName());
sms.put("address", waitReg.getAddress());
sms.put("minute", "15");
sms.put("signView", "个人中心");
sms.put("hospTel", "0692-2991794");
log.info("[候诊推送短信]sendResult-{},tel-{},sms-{}", SmsHelper.send(SmsTempEnum.SMS_475780750, waitReg.getTel(), sms), waitReg.getTel(), sms);
}
return Result.success();
}
@ -200,7 +199,8 @@ public class SmsAction extends BaseAction {
/**
* 天助平台短信推送红河州第一人民医院影像报告使用
* 备注2025-05-07 只有放射科会发短信
* @param tel 电话号码
*
* @param tel 电话号码
* @param content 内容
* @return 返回发送结果
*/

@ -173,7 +173,7 @@ public class LisReportAction extends BaseAction {
*/
@Action("image")
public Result getImage(@AesDecode String reportId, @AesDecode String sampleCode, String flag, String testDate, String openid) {
log.info("查询Lis图像: flag={{}}, reportId={}, testDate={{}}, sampleCode={{}}", flag, reportId, testDate, sampleCode);
log.info("[Lis图像]查询: flag={{}}, reportId={}, testDate={{}}, sampleCode={{}}", flag, reportId, testDate, sampleCode);
if ("1".equals(flag) && (testDate == null || sampleCode == null)) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}

@ -1,7 +1,11 @@
package com.ynxbd.common.action.test;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.sms.SmsTempEnum;
import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.common.SmsHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
@ -106,6 +110,12 @@ public class TestAction extends BaseAction {
}
@Action("sms_test")
public Result sms_test() throws ServiceException {
return Result.success();
}
// @Action("lock")
// public String lock() {
// return Result.success(update());

@ -39,6 +39,8 @@ public class Register extends Order {
private BigDecimal regFee;
private BigDecimal clinicFee;
private String enTotalFee; // 加密订单总金额
private String clinicCode;
private String clinicName;

@ -0,0 +1,31 @@
package com.ynxbd.common.bean.sms;
import lombok.ToString;
@ToString
public enum SmsTempEnum {
SMS_257021489("SMS_257021489", "短信验证码通用"), // 您的验证码${code},您正进行身份验证,该验证码5分钟内有效,请勿泄漏于他人!
SMS_475980406("SMS_475980406", "德宏州中医医院(预约通知)第四版-去掉门诊版"), // 您已预约${time}的${deptName}的:${doctorName}医生,就诊序号为${seq}号,就诊地址:${address},请您根据就诊时间${hosp_tip}。注意:同一天内,只能预约一次,多次预约会自动退款。如有疑问请致电${hosp_tel}咨询。祝您健康!
SMS_173475681("SMS_173475681", "德宏州中医医院(东软自助机)"), // 您的校验码:${code},您正在使用自助机注册,感谢您的支持!
SMS_184121392("SMS_184121392", "德宏州中医医院(挂号取消预约通知)"), // 您已成功取消${time}的${deptName}门诊的${doctorName}医生,就诊序号为${seq}号的预约挂号,费用会在24小时内退回。如有疑问请致电0692-2991794咨询。祝您健康
SMS_475780750("SMS_475780750", "德宏州中医医院(签到提醒)"), // 您已预约${time}的${deptName}的:${doctorName}医生,就诊地址:${address},请您根据就诊时间提前${minute}分钟到医院门诊各导医服务台签到后排队候诊,也可直接在本院微信公众号微官网或者${signView}页面直接手机签到后排队候诊。如有疑问请致电${hospTel}咨询。祝您健康!
SMS_260585044("SMS_260585044", "核算结果上传逾期"), // 尊敬的蓝旗用户,现有 [${hosp_name}] 的 [${name}] 用户的核酸结果未上传成功,请及时核查!
SMS_164268358("SMS_164268358", "体验报告短信验证(体检系统)"),// 您的校验码:${code},您正在查看体检报告,感谢您的支持!
;
public final String TEMP_CODE;
public final String NAME;
SmsTempEnum(String TEMP_CODE, String NAME) {
this.TEMP_CODE = TEMP_CODE;
this.NAME = NAME;
}
}

@ -1,6 +1,5 @@
package com.ynxbd.common.bean.sms;
import com.ynxbd.common.helper.common.JsonHelper;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@ -8,10 +7,6 @@ import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
// 德宏州中医医院:SMS_176534008
// 模版内容:
// 您已成功预约${time}的${dept}门诊的${doctor}医生,就诊序号为${seq}号,地址:${address},
// 请于就诊当日按预约就诊时间提前半小时到诊区候诊。如有疑问请致电0692-2991794咨询。祝您健康!
@Setter
@Getter

@ -1,12 +1,8 @@
package com.ynxbd.common.helper.common;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.ynxbd.common.bean.sms.SmsTempEnum;
import com.ynxbd.common.bean.sms.SmsTemplate;
import com.ynxbd.common.config.EhCacheConfig;
import com.ynxbd.common.helper.ProperHelper;
@ -61,6 +57,18 @@ public class SmsHelper {
return send(template, tel, null, smsTemplate);
}
/**
* 通用-发送短信
*
* @param tempEnum 短信模板
* @param tel 电话号码
*/
public static boolean send(SmsTempEnum tempEnum, String tel, Object smsObj) {
SmsTemplate smsTemplate = new SmsTemplate();
smsTemplate.setTemParam(JsonHelper.toJsonString(smsObj));
return send(tempEnum.TEMP_CODE, tel, null, smsTemplate);
}
/**
* 通用-发送短信
*
@ -96,6 +104,18 @@ public class SmsHelper {
return sendCode(template, tel, null, code);
}
/**
* 发送短信验证码
*
* @param tempEnum 短信模板
* @param tel 电话号码
* @param code 验证码
* @return 是否发送成功
*/
public static boolean sendCode(SmsTempEnum tempEnum, String tel, String code) {
return sendCode(tempEnum.TEMP_CODE, tel, null, code);
}
/**
* 发送短信验证码
*
@ -124,6 +144,16 @@ public class SmsHelper {
return sendAli(template, tel, signName, smsTemplate);
}
public static com.aliyun.dysmsapi20170525.Client createAliSmsClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(ACCESS_KEY_ID)
.setAccessKeySecret(ACCESS_KEY_SECRET);
config.endpoint = "dysmsapi.aliyuncs.com"; // 配置 Endpoint。
return new com.aliyun.dysmsapi20170525.Client(config);
}
/**
* 发送请求到阿里云
*
@ -137,52 +167,34 @@ public class SmsHelper {
}
if (CACHE == null) createCache();
if (CACHE != null) {
CACHE.put(tel, smsTemplate); //添加缓存值
}
boolean flag = false;
try {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
// 发送短信的类型
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
// 签名模版
request.putQueryParameter("SignName", signName);
// 短信模版ID
request.putQueryParameter("TemplateCode", template);
// 接收短信的手机号
request.putQueryParameter("PhoneNumbers", tel);
// 设置模板需要的参数==>验证码code
if (smsTemplate.getCode() == null) {
request.putQueryParameter("TemplateParam", smsTemplate.getTemParam());
} else {
request.putQueryParameter("TemplateParam", JsonHelper.toJsonString(smsTemplate));
}
// 发送并获取响应消息
CommonResponse response = client.getCommonResponse(request);
String result = response.getData();
log.info("[短信]请求返回 resp={}", result);
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(tel)
.setSignName(signName)
.setTemplateCode(template)
// TemplateParam为序列化后的JSON字符串。其中\"表示转义后的双引号。
.setTemplateParam(smsTemplate.getCode() == null ?
smsTemplate.getTemParam() : JsonHelper.toJsonString(smsTemplate));
SendSmsResponse sendSmsResponse = createAliSmsClient().sendSms(sendSmsRequest);
// {"Message":"签名不合法(不存在或被拉黑)","RequestId":"B929C1F5-0DF6-4678-98B8-118060EFBC96","Code":"isv.SMS_SIGNATURE_ILLEGAL"}
JSONObject respMsg = JsonHelper.parseObject(result);
String respCode = respMsg.getString("Code");
String respMessage = respMsg.getString("Message");
log.info("[短信]请求返回 body={}", JsonHelper.toJsonString(sendSmsResponse.body));
// {"Message":"签名不合法(不存在或被拉黑)","RequestId":"B929C1F5-0DF6-4678-98B8-118060EFBC96","Code":"isv.SMS_SIGNATURE_ILLEGAL"}
String respCode = sendSmsResponse.body.code;
String respMessage = sendSmsResponse.body.message;
if (OK.equals(respCode) && OK.equals(respMessage)) { // 发送成功
flag = true;
return true;
}
log.warn("[阿里云短信]发送失败 code={}, message={}", respCode, respMessage);
} catch (Exception e) {
ErrorHelper.println(e);
}
return flag;
return false;
}

@ -182,11 +182,6 @@
// }
//
//
// public static void main(String[] args) {
// SmsTemplate sms = new SmsTemplate();
// sms.setCode("222111");
// SmsNewHelper.send("SMS_164268358", "15559603353", "云南新八达科技有限公司", sms);
// }
//
// /**
// * 发送短信验证码

@ -3,6 +3,7 @@ package com.ynxbd.common.service;
import com.ynxbd.common.bean.enums.HospEnum;
import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.bean.sms.SmsRegTem;
import com.ynxbd.common.bean.sms.SmsTempEnum;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.common.SmsHelper;
import com.ynxbd.wx.config.WeChatConfig;
@ -34,7 +35,7 @@ public class SmsService {
sms.setSeq(reg.getQueueNum());
sms.setHosp_tip("提前15分钟到医院门诊各导医服务台签到后排队候诊");
log.info("[挂号]发送预约短信通知 sms={}, appId={}, tel-{}", JsonHelper.toJsonString(sms), WeChatConfig.APP_ID, tel);
isResult = SmsHelper.send("SMS_475980406", tel, sms);
isResult = SmsHelper.send(SmsTempEnum.SMS_475980406, tel, sms);
}
return isResult;
}
@ -48,14 +49,13 @@ public class SmsService {
}
if (HospEnum.德宏州中医医院.isHosp()) {
String template = "SMS_184121392";
SmsRegTem sms = new SmsRegTem();
sms.setTime(reg.getRegDate() + " " + reg.getBegTime() + "-" + reg.getEndTime());
sms.setDeptName(reg.getDeptName());
sms.setDoctorName(reg.getDoctName());
sms.setAddress(reg.getAddress());
sms.setSeq(reg.getQueueNum());
SmsHelper.send(template, tel, sms);
SmsHelper.send(SmsTempEnum.SMS_184121392, tel, sms);
}
}

@ -10,16 +10,15 @@ public class AesWxHelper extends AesHelper {
private static final String KEY = "wsqysqsdssjtwmyd";
private static final String IV = "xbdynwdykkrinkll";
/**
* 加密
*/
public static String encode(String data) {
return encryptHex(data, KEY, IV);
}
/**
*
* @param data 加密的数据
* @param isDataNotNull 加密数据是否不允许为空
* @return
* 加密
*/
public static String encode(String data, boolean isDataNotNull) {
if (isDataNotNull && ObjectUtils.isEmpty(data)) {
@ -28,17 +27,16 @@ public class AesWxHelper extends AesHelper {
return encryptHex(data, KEY, IV);
}
/**
* 解密
*/
public static String decode(String enData) {
if (ObjectUtils.isEmpty(enData)) return null;
return decryptHex(enData, KEY, IV);
}
public static void main(String[] args) {
// System.out.println(encode("397631"));
System.out.println(encode("847149"));
System.out.println(decode("E6835E243069406F53EC8464898B37C0"));
// System.out.println(decode("FC0E7CBB32E595E2C84D44CE8B79E5325FA2C20E1090E9E5A5D7FBEA974023EB"));
// System.out.println(encode("533103198603294034"));
// System.out.println(decode("EF6115C81C9EA8FF79E21180FEC20294"));
}
// public static void main(String[] args) {
// System.out.println(encode("847149"));
// System.out.println(decode("E6835E243069406F53EC8464898B37C0"));
// }
}

@ -1,4 +1,4 @@
#阿里云短信配置
#\u963F\u91CC\u4E91\u77ED\u4FE1\u914D\u7F6E
sms.access_key_id=LTAIucQcv6BOaBQ6
sms.access_key_secret=96QOyw62AgBT9BbLI8IyEkA8g43VNQ
sms.sign_name=\u65b0\u516b\u8fbe\u5065\u5eb7\u901a\u77e5
sms.sign_name=\u5FB7\u5B8F\u5DDE\u4E2D\u533B\u533B\u9662
Loading…
Cancel
Save