Commit 8b056a04 authored by 耿迪迪's avatar 耿迪迪

语音服务修改 gengdidi

parent c4b230cc
...@@ -53,15 +53,20 @@ ...@@ -53,15 +53,20 @@
</dependency> </dependency>
<!--log日志--> <!--log日志-->
<dependency> <dependency>
<groupId>commons-logging</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>commons-logging</artifactId> <artifactId>spring-boot-starter-web</artifactId>
<version>1.2</version> <exclusions>
<!-- 排除自带的logback依赖 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>log4j</artifactId> <artifactId>spring-boot-starter-log4j</artifactId>
<version>1.2.17</version> <version>1.3.8.RELEASE</version>
</dependency> </dependency>
<!--commons-lang--> <!--commons-lang-->
<dependency> <dependency>
...@@ -92,6 +97,17 @@ ...@@ -92,6 +97,17 @@
<version>1.18.4</version> <version>1.18.4</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!--validation-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
</dependencies> </dependencies>
......
...@@ -20,8 +20,6 @@ import org.springframework.web.context.request.RequestContextHolder; ...@@ -20,8 +20,6 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
...@@ -33,6 +31,7 @@ import java.util.UUID; ...@@ -33,6 +31,7 @@ import java.util.UUID;
public class LogInterceptor { public class LogInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LogInterceptor.class); private static final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);
private static final Logger requestLogger = LoggerFactory.getLogger("RequestLog");
@Autowired @Autowired
private RequestLogService requestLogService; private RequestLogService requestLogService;
...@@ -118,19 +117,12 @@ public class LogInterceptor { ...@@ -118,19 +117,12 @@ public class LogInterceptor {
* @param result 请求结果 * @param result 请求结果
*/ */
private void writeToLocalFile(String params,String result) { private void writeToLocalFile(String params,String result) {
try { StringBuilder requestLog = new StringBuilder();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
FileWriter writer = new FileWriter(fileUrl,true); requestLog.append("requestMapping:").append(request.getRequestURL().toString())
writer.write("\n time:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); .append(" params:").append(params)
writer.write(" requestMapping:"+request.getRequestURL().toString()); .append(" postTime:").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))
writer.write(" params:"+params); .append(" result:").append(JSONObject.toJSONString(result));
writer.write(" postTime:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); requestLogger.info(requestLog.toString());
writer.write(" result:"+JSONObject.toJSONString(result));
writer.flush();
writer.close();
} catch (IOException e) {
logger.error("写入本地文件出错:"+e);
}
} }
} }
...@@ -5,7 +5,8 @@ public enum ResultEnum { ...@@ -5,7 +5,8 @@ public enum ResultEnum {
* 请求成功 * 请求成功
*/ */
SUCCESS("0","接口请求成功!"),BUSSINESS_FAIL("1","业务异常!"),FAIL("2","接口请求失败!"),SYSTEM_EXCEPTION("3","系统异常!") SUCCESS("0","接口请求成功!"),BUSSINESS_FAIL("1","业务异常!"),FAIL("2","接口请求失败!"),SYSTEM_EXCEPTION("3","系统异常!")
,NOT_IN_IPWHITE("4","当前IP不在白名单中,请联系管理员"),SECRETKRY_ERROR("5","secretKey不存在或秘钥不正确!"); ,NOT_IN_IPWHITE("4","当前IP不在白名单中,请联系管理员"),SECRETKRY_ERROR("5","secretKey不存在或秘钥不正确!")
,VALIDATA_ERROR("6","");
private String code; private String code;
private String msg; private String msg;
......
...@@ -10,11 +10,14 @@ import org.slf4j.Logger; ...@@ -10,11 +10,14 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySource;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/** /**
* 发送短信 * 发送短信
* @author gengdidi * @author gengdidi
...@@ -35,9 +38,12 @@ public class SmsController { ...@@ -35,9 +38,12 @@ public class SmsController {
* @return Result * @return Result
*/ */
@RequestMapping(value="/sendSms",method = RequestMethod.GET) @RequestMapping(value="/sendSms",method = RequestMethod.GET)
public Result sendSms(@RequestBody SendSms sendSms){ public Result sendSms(@Valid @RequestBody SendSms sendSms, BindingResult result){
try { try {
return smsService.sendSms(sendSms.getPhoneNumber()); if(result.hasErrors()){
return new Result(ResultEnum.VALIDATA_ERROR.getCode(),result.getFieldError().getDefaultMessage());
}
return smsService.sendSms(sendSms);
} catch (ClientException e) { } catch (ClientException e) {
logger.info("短信发送失败,phoneNumber:%",sendSms.getPhoneNumber(),e); logger.info("短信发送失败,phoneNumber:%",sendSms.getPhoneNumber(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION); return new Result(ResultEnum.SYSTEM_EXCEPTION);
...@@ -50,11 +56,14 @@ public class SmsController { ...@@ -50,11 +56,14 @@ public class SmsController {
* @return Result * @return Result
*/ */
@RequestMapping(value="/sendBatchSms",method = RequestMethod.POST) @RequestMapping(value="/sendBatchSms",method = RequestMethod.POST)
public Result sendBatchSms(@RequestBody SendBatchSms sendBatchSms){ public Result sendBatchSms(@Valid @RequestBody SendBatchSms sendBatchSms, BindingResult result){
try { try {
return smsService.sendBatchSms(sendBatchSms.getPhoneNumbers()); if(result.hasErrors()){
return new Result(ResultEnum.VALIDATA_ERROR.getCode(),result.getFieldError().getDefaultMessage());
}
return smsService.sendBatchSms(sendBatchSms);
} catch (ClientException e) { } catch (ClientException e) {
logger.info("批量发送短信失败,phoneNumbers:%",sendBatchSms.getPhoneNumbers(),e); logger.info("批量发送短信失败,phoneNumbers:%",sendBatchSms.getPhoneNumberJson(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION); return new Result(ResultEnum.SYSTEM_EXCEPTION);
} }
} }
......
...@@ -8,8 +8,10 @@ import com.zehong.communication.service.VoiceNotifyService; ...@@ -8,8 +8,10 @@ import com.zehong.communication.service.VoiceNotifyService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
...@@ -31,9 +33,12 @@ public class VoiceNotifyController { ...@@ -31,9 +33,12 @@ public class VoiceNotifyController {
* @return String * @return String
*/ */
@RequestMapping(value = "/sendVoiceNotify",method = RequestMethod.GET) @RequestMapping(value = "/sendVoiceNotify",method = RequestMethod.GET)
public Result sendVoiceNotify(@RequestBody SendVoiceNotify sendVoiceNotify){ public Result sendVoiceNotify(@Valid @RequestBody SendVoiceNotify sendVoiceNotify, BindingResult result){
try { try {
return voiceNotifyService.sendVoiceNotify(sendVoiceNotify.getPhoneNumber()); if(result.hasErrors()){
return new Result(ResultEnum.VALIDATA_ERROR.getCode(),result.getFieldError().getDefaultMessage());
}
return voiceNotifyService.sendVoiceNotify(sendVoiceNotify);
} catch (IOException | URISyntaxException e) { } catch (IOException | URISyntaxException e) {
logger.info("语音发送失败!phoneNumber:%",sendVoiceNotify.getPhoneNumber(),e); logger.info("语音发送失败!phoneNumber:%",sendVoiceNotify.getPhoneNumber(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION); return new Result(ResultEnum.SYSTEM_EXCEPTION);
...@@ -46,11 +51,14 @@ public class VoiceNotifyController { ...@@ -46,11 +51,14 @@ public class VoiceNotifyController {
* @return String * @return String
*/ */
@RequestMapping(value = "/sendBatchVoiceNotify",method = RequestMethod.GET) @RequestMapping(value = "/sendBatchVoiceNotify",method = RequestMethod.GET)
public Result sendBatchVoiceNotify(@RequestBody SendBatchVoiceNotify sendBatchVoiceNotify){ public Result sendBatchVoiceNotify(@Valid @RequestBody SendBatchVoiceNotify sendBatchVoiceNotify, BindingResult result){
try { try {
return voiceNotifyService.sendBatchVoiceNotify(sendBatchVoiceNotify.getPhoneNumbers()); if(result.hasErrors()){
return new Result(ResultEnum.VALIDATA_ERROR.getCode(),result.getFieldError().getDefaultMessage());
}
return voiceNotifyService.sendBatchVoiceNotify(sendBatchVoiceNotify);
} catch (IOException | URISyntaxException e) { } catch (IOException | URISyntaxException e) {
logger.info("群发语音失败!phoneNumbers:%",sendBatchVoiceNotify.getPhoneNumbers(),e); logger.info("群发语音失败!phoneNumbers:%",sendBatchVoiceNotify.getPhoneNumberJson(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION); return new Result(ResultEnum.SYSTEM_EXCEPTION);
} }
} }
......
package com.zehong.communication.model; package com.zehong.communication.model;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
@Data @Data
public class SendBatchSms extends BaseRequestModel{ public class SendBatchSms extends BaseRequestModel{
private String[] phoneNumbers; /**
* 群发号码
* [\"13333333333\"]
*/
@NotBlank(message = "手机号码不能为空")
private String phoneNumberJson;
/**
* 群发短信模板
*/
@NotBlank(message = "短信模板不能为空")
private String templateCode;
/**
* [{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"},{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}]
* 群发短信变量
*/
private String templateParamJson;
} }
package com.zehong.communication.model; package com.zehong.communication.model;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
@Data @Data
public class SendBatchVoiceNotify extends BaseRequestModel { public class SendBatchVoiceNotify extends BaseRequestModel {
private String phoneNumbers; /**
* 语音群发号码
* "[133333333,133333333]"
*/
@NotBlank(message = "语音群发号码不能为空")
private String phoneNumberJson;
/**
* 语音模板
*/
@NotBlank(message = "语音模板不能为空")
private String templateId;
/**
*模板变量字符串
* [{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"},{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}]
*/
private String paramJson;
} }
package com.zehong.communication.model; package com.zehong.communication.model;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
@Data @Data
public class SendSms extends BaseRequestModel { public class SendSms extends BaseRequestModel {
/**
* 手机号码
*/
@NotEmpty(message = "手机号不能为空")
@Pattern(regexp = "^1[0-9]{10}$", message = "手机号不合法")
private String phoneNumber; private String phoneNumber;
/**
* 短信模板
*/
@NotBlank(message = "短信模板不能为空")
private String templateCode;
/**
* 模板变量
* {\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}
*/
private String templateParam;
} }
package com.zehong.communication.model; package com.zehong.communication.model;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
@Data @Data
public class SendVoiceNotify extends BaseRequestModel { public class SendVoiceNotify extends BaseRequestModel {
/**
* 手机号码
*/
@NotEmpty(message = "手机号不能为空")
@Pattern(regexp = "^1[0-9]{10}$", message = "手机号不合法")
private String phoneNumber; private String phoneNumber;
/**
* 语音模板
*/
@NotBlank(message = "语音模板不能为空")
private String templateId;
/**
* 模板变量字符串
* {\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}
*/
private String param;
} }
...@@ -2,10 +2,24 @@ package com.zehong.communication.service; ...@@ -2,10 +2,24 @@ package com.zehong.communication.service;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
import com.zehong.communication.common.result.Result; import com.zehong.communication.common.result.Result;
import com.zehong.communication.model.SendBatchSms;
import com.zehong.communication.model.SendSms;
public interface SmsService { public interface SmsService {
Result sendSms(String phoneNumber) throws ClientException; /**
* 发送短信
* @param sendSms 发送短信实体
* @return Result
* @throws ClientException
*/
Result sendSms(SendSms sendSms) throws ClientException;
Result sendBatchSms(String[] phoneNumbers) throws ClientException; /**
* 批量发送短信
* @param sendBatchSms 批量发送短信实体
* @return Result
* @throws ClientException
*/
Result sendBatchSms(SendBatchSms sendBatchSms) throws ClientException;
} }
package com.zehong.communication.service; package com.zehong.communication.service;
import com.zehong.communication.common.result.Result; import com.zehong.communication.common.result.Result;
import com.zehong.communication.model.SendBatchVoiceNotify;
import com.zehong.communication.model.SendVoiceNotify;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
...@@ -9,15 +11,15 @@ public interface VoiceNotifyService { ...@@ -9,15 +11,15 @@ public interface VoiceNotifyService {
/** /**
* 发送语音 被叫号码,限单个,仅支持11位国内号码 * 发送语音 被叫号码,限单个,仅支持11位国内号码
* @param phoneNumber 手机号 * @param sendVoiceNotify 实体
* @return String * @return String
*/ */
Result sendVoiceNotify(String phoneNumber) throws IOException, URISyntaxException; Result sendVoiceNotify(SendVoiceNotify sendVoiceNotify) throws IOException, URISyntaxException;
/** /**
*批量发送语音 被叫号码,模版无变量多个则以英文半角分号“;”分割;模板带变量,多个号码以英文分号“;”分割,号码和变量以英文逗号“,”隔开, 多个变量以竖线“|”隔开,如 130XXXXXXXX,123|456;186XXXXXXXX,321|654(注意:文件语音模板类型 号码之间分隔用“,”隔开) *批量发送语音 被叫号码,模版无变量多个则以英文半角分号“;”分割;模板带变量,多个号码以英文分号“;”分割,号码和变量以英文逗号“,”隔开, 多个变量以竖线“|”隔开,如 130XXXXXXXX,123|456;186XXXXXXXX,321|654(注意:文件语音模板类型 号码之间分隔用“,”隔开)
* @param phoneNumbers 手机号 * @param sendBatchVoiceNotify 实体
* @return String * @return String
*/ */
Result sendBatchVoiceNotify(String phoneNumbers) throws IOException, URISyntaxException; Result sendBatchVoiceNotify(SendBatchVoiceNotify sendBatchVoiceNotify) throws IOException, URISyntaxException;
} }
...@@ -13,7 +13,10 @@ import com.aliyuncs.profile.DefaultProfile; ...@@ -13,7 +13,10 @@ import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.profile.IClientProfile;
import com.zehong.communication.common.result.Result; import com.zehong.communication.common.result.Result;
import com.zehong.communication.common.result.ResultEnum; import com.zehong.communication.common.result.ResultEnum;
import com.zehong.communication.model.SendBatchSms;
import com.zehong.communication.model.SendSms;
import com.zehong.communication.service.SmsService; import com.zehong.communication.service.SmsService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -31,11 +34,8 @@ public class SmsServiceImpl implements SmsService { ...@@ -31,11 +34,8 @@ public class SmsServiceImpl implements SmsService {
@Value("${signName}") @Value("${signName}")
private String signName; private String signName;
@Value("${templateCode}")
private String templateCode;
@Value("${signNameJson}") @Value("${signNameJson}")
private String SignNameJson; private String signNameJson;
/** /**
* 短信API产品名称(短信产品名固定,无需修改) * 短信API产品名称(短信产品名固定,无需修改)
...@@ -48,7 +48,7 @@ public class SmsServiceImpl implements SmsService { ...@@ -48,7 +48,7 @@ public class SmsServiceImpl implements SmsService {
private final String DOMAIN = "dysmsapi.aliyuncs.com"; private final String DOMAIN = "dysmsapi.aliyuncs.com";
@Override @Override
public Result sendSms(String phoneNumber) throws ClientException { public Result sendSms(SendSms sendSms) throws ClientException {
//设置超时时间-可自行调整 //设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000");
...@@ -60,11 +60,15 @@ public class SmsServiceImpl implements SmsService { ...@@ -60,11 +60,15 @@ public class SmsServiceImpl implements SmsService {
IAcsClient acsClient = new DefaultAcsClient(profile); IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = getSmsRequest(); SendSmsRequest request = getSmsRequest();
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000” //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000”
request.setPhoneNumbers(phoneNumber); request.setPhoneNumbers(sendSms.getPhoneNumber());
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
request.setTemplateCode(sendSms.getTemplateCode());
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败 //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
//参考:request.setTemplateParam("{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}") //参考:request.setTemplateParam("{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}")
request.setTemplateParam("{\"cphone\":\""+phoneNumber+"\"}"); if(StringUtils.isNotBlank(sendSms.getTemplateParam())){
request.setTemplateParam(sendSms.getTemplateParam());
}
//请求失败这里会抛ClientException异常 //请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
...@@ -75,7 +79,7 @@ public class SmsServiceImpl implements SmsService { ...@@ -75,7 +79,7 @@ public class SmsServiceImpl implements SmsService {
} }
@Override @Override
public Result sendBatchSms(String[] phoneNumbers) throws ClientException { public Result sendBatchSms(SendBatchSms sendBatchSms) throws ClientException {
//设置超时时间-可自行调整 //设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000");
...@@ -91,14 +95,16 @@ public class SmsServiceImpl implements SmsService { ...@@ -91,14 +95,16 @@ public class SmsServiceImpl implements SmsService {
request.setMethod(MethodType.POST); request.setMethod(MethodType.POST);
//必填:待发送手机号。支持JSON格式的批量调用,批量上限为100个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 //必填:待发送手机号。支持JSON格式的批量调用,批量上限为100个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
//"[\"1500000000\",\"1500000001\"]" //"[\"1500000000\",\"1500000001\"]"
request.setPhoneNumberJson(new JSONArray(Arrays.asList(phoneNumbers)).toJSONString()); request.setPhoneNumberJson(sendBatchSms.getPhoneNumberJson());
//必填:短信签名-支持不同的号码发送不同的短信签名 //必填:短信签名-支持不同的号码发送不同的短信签名
request.setSignNameJson(SignNameJson); request.setSignNameJson(signNameJson);
//必填:短信模板-可在短信控制台中找到 //必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode); request.setTemplateCode(sendBatchSms.getTemplateCode());
//必填:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 //必填:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败 //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
request.setTemplateParamJson(getTemplateParamJson(phoneNumbers)); if(StringUtils.isNotBlank(sendBatchSms.getTemplateParamJson())){
request.setTemplateParamJson( sendBatchSms.getTemplateParamJson());
}
//可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段) //可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCodeJson("[\"90997\",\"90998\"]"); //request.setSmsUpExtendCodeJson("[\"90997\",\"90998\"]");
//请求失败这里会抛ClientException异常 //请求失败这里会抛ClientException异常
...@@ -117,21 +123,8 @@ public class SmsServiceImpl implements SmsService { ...@@ -117,21 +123,8 @@ public class SmsServiceImpl implements SmsService {
request.setMethod(MethodType.POST); request.setMethod(MethodType.POST);
//必填:短信签名-可在短信控制台中找到 //必填:短信签名-可在短信控制台中找到
request.setSignName(signName); request.setSignName(signName);
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
request.setTemplateCode(templateCode);
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId"); request.setOutId("yourOutId");
return request; return request;
} }
private String getTemplateParamJson(String[] phoneNumbers){
StringBuilder templateParamJson = new StringBuilder("[");
for(String phoneNumber : phoneNumbers){
templateParamJson.append("{\"cphone\":\"");
templateParamJson.append(phoneNumber);
templateParamJson.append("\"}");
}
templateParamJson.append("]");
return templateParamJson.toString();
}
} }
package com.zehong.communication.service.impl; package com.zehong.communication.service.impl;
import com.zehong.communication.common.result.Result; import com.zehong.communication.common.result.Result;
import com.zehong.communication.model.SendBatchVoiceNotify;
import com.zehong.communication.model.SendVoiceNotify;
import com.zehong.communication.service.VoiceNotifyService; import com.zehong.communication.service.VoiceNotifyService;
import com.zehong.communication.util.HttpUtil; import com.zehong.communication.util.HttpUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -23,23 +26,29 @@ public class VoiceNotifyServiceImpl implements VoiceNotifyService { ...@@ -23,23 +26,29 @@ public class VoiceNotifyServiceImpl implements VoiceNotifyService {
@Value("${appKey}") @Value("${appKey}")
private String appKey; private String appKey;
@Value("${templateId}")
private String templateId;
@Value("${batchVoiceNotifyURL}") @Value("${batchVoiceNotifyURL}")
private String batchVoiceNotifyURL; private String batchVoiceNotifyURL;
@Override @Override
public Result sendVoiceNotify(String phoneNumber) throws IOException, URISyntaxException { public Result sendVoiceNotify(SendVoiceNotify sendVoiceNotify) throws IOException, URISyntaxException {
Map<String,Object> params = getParams(); Map<String,Object> params = getParams();
params.put("mobile",phoneNumber); params.put("mobile",sendVoiceNotify.getPhoneNumber());
params.put("templateId", sendVoiceNotify.getTemplateId());
if(StringUtils.isNotBlank(sendVoiceNotify.getParam())){
params.put("param",sendVoiceNotify.getParam());
}
return HttpUtil.doPost(voiceNotifyURL,params); return HttpUtil.doPost(voiceNotifyURL,params);
} }
@Override @Override
public Result sendBatchVoiceNotify(String phoneNumbers) throws IOException, URISyntaxException { public Result sendBatchVoiceNotify(SendBatchVoiceNotify sendBatchVoiceNotify) throws IOException, URISyntaxException {
Map<String,Object> params = getParams(); Map<String,Object> params = getParams();
params.put("mobile",phoneNumbers); params.put("mobile",sendBatchVoiceNotify.getPhoneNumberJson());
params.put("templateId", sendBatchVoiceNotify.getTemplateId());
if(StringUtils.isNotBlank(sendBatchVoiceNotify.getParamJson())){
params.put("param", sendBatchVoiceNotify.getParamJson());
}
return HttpUtil.doPost(batchVoiceNotifyURL,params); return HttpUtil.doPost(batchVoiceNotifyURL,params);
} }
...@@ -47,8 +56,6 @@ public class VoiceNotifyServiceImpl implements VoiceNotifyService { ...@@ -47,8 +56,6 @@ public class VoiceNotifyServiceImpl implements VoiceNotifyService {
Map<String,Object> params = new HashMap<>(); Map<String,Object> params = new HashMap<>();
params.put("appId",appId); params.put("appId",appId);
params.put("appKey",appKey); params.put("appKey",appKey);
params.put("templateId",templateId);
params.put("param","2222,某某街道,报警器报警(手机号后四位,地址,原因");
return params; return params;
} }
} }
...@@ -29,7 +29,6 @@ mybatis: ...@@ -29,7 +29,6 @@ mybatis:
voiceNotifyURL: https://api.253.com/open/notify/voice-notify voiceNotifyURL: https://api.253.com/open/notify/voice-notify
appId: N69N0WkT appId: N69N0WkT
appKey: IE5F7Jih appKey: IE5F7Jih
templateId: 4371
#批量发送语音 #批量发送语音
batchVoiceNotifyURL: https://api.253.com/open/notify/batch-voice-notify batchVoiceNotifyURL: https://api.253.com/open/notify/batch-voice-notify
...@@ -38,7 +37,6 @@ batchVoiceNotifyURL: https://api.253.com/open/notify/batch-voice-notify ...@@ -38,7 +37,6 @@ batchVoiceNotifyURL: https://api.253.com/open/notify/batch-voice-notify
accessKeyId: LTAI2xiZNF3iV2aV accessKeyId: LTAI2xiZNF3iV2aV
accessKeySecret: bprEWwn1M0xgglRQCQEMYSPiYctDk4 accessKeySecret: bprEWwn1M0xgglRQCQEMYSPiYctDk4
signName: 泽宏云 signName: 泽宏云
templateCode: SMS_162524468
#阿里批量发送短信 #阿里批量发送短信
signNameJson: [\"泽宏云\"] signNameJson: [\"泽宏云\"]
...@@ -50,5 +48,11 @@ iPWhite: 192.168.2.23 ...@@ -50,5 +48,11 @@ iPWhite: 192.168.2.23
secretKey: f225e66813e6d6a663daf919c1935dcb secretKey: f225e66813e6d6a663daf919c1935dcb
#是否写入本地 #是否写入本地
isWriteLocal: false isWriteLocal: true
fileUrl: E:\java\work\requireLog.text fileUrl: E:\java\work\requireLog.text
logging:
# 设置logback.xml位置
# config: classpath:logback.xml
# 设置log4j.properties位置
config: classpath:log4j.properties
\ No newline at end of file
log4j.rootLogger=INFO,Console,File
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c - %L]%m%n
log4j.appender.File = org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File = E:/java/work/info.log
#log4j.appender.File.File = /data/java/communication/log/info
log4j.appender.File.DatePattern= _yyyy-MM-dd'.log'
log4j.appender.File.Append = true
log4j.appender.File.File.MaxFileSize = 30MB
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c - %L]%m%n
#请求日志
log4j.logger.RequestLog=INFO,S
log4j.additivity.RequestLog = false
log4j.appender.S = org.apache.log4j.DailyRollingFileAppender
log4j.appender.S.File =E:/java/work/log.log
#log4j.appender.S.File = /data/java/communication/log/requestLog
log4j.appender.S.DatePattern= _yyyy-MM-dd'.log'
log4j.appender.S.Append = true
log4j.appender.S.Threshold = info
log4j.appender.S.File.MaxFileSize = 30MB
log4j.appender.S.layout = org.apache.log4j.PatternLayout
log4j.appender.S.layout.ConversionPattern = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment