由于发送短信的内容是动态的,导致短信内容的参数需要进行替换,且短信签名的相关信息也需要动态生成,特在此记录。
短信参数模板如下:
亲爱的用户,你的火车票已出票成功,取票号为[0]。[1][2]出发[3]-[4],[5]车次[6],[7],请合理安排出行时间
动态获取参数内容并依次填充到相应位置
public class ParseUtil
{
public static String parse(String template, String[] args)
{
Assert.isTrue(args != null && args.length > 0, "替换参数不能为空");
String[] originArr = new String[args.length];
for (int i = 0; i < args.length; i++)
{
originArr[i] = "[" + i + "]";
}
return StringUtils.replaceEach(template, originArr, args);
}
}
调用实例如下:
ParseUtil.parse(outSucTemplate,
new String[] {trainOrder.getTicketNo(), trainOrderChild.getPassengerName(),
sdf1.format(trainOrder.getDepartureTime()), trainOrder.getFromStation(), trainOrder.getToStation()
短信工具类请求第三方模板如下:
@Component
public class Send
{
Logger logger = LoggerFactory.getLogger(Send.class);
/**
* 短信地址
*/
@Value("${sms.smsurl}")
private String smsurl;
/**
* 商户编号
*/
@Value("${sms.spCode}")
private String SpCode;
/**
* 账户名
*/
@Value("${sms.loginName}")
private String LoginName;
/**
* 账户密码
*/
@Value("${sms.password}")
private String Password;
/**
*
* <一句话功能简述>
* <功能详细描述>
* @param UserNumber 手机号码
* @param MessageContent 发送的内容
* @return
* @see [类、类#方法、类#成员]
*/
public BaseResponse send(String UserNumber, String MessageContent,String spCode)
{
logger.info("短信用户名为"+LoginName+",密码为"+Password);
/**
* 产生流水号
*/
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String dateString = dateFormat.format(date);
int random = new Random(1000).nextInt(1000);
String serialNumber = dateString + random;
try
{
Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter(LoginName,Password));
WebResource webResource = client.resource(smsurl);
MultivaluedMapImpl formData = new MultivaluedMapImpl();
formData.add("mobile", UserNumber);
String codes = StringUtils.isBlank(spCode) ? SpCode : spCode;
formData.add("message", MessageContent+""+codes);
ClientResponse response = webResource.type( "application/x-www-form-urlencoded").
post(ClientResponse.class, formData);
String textEntity = response.getEntity(String.class);
JSONObject obj = JSONObject.parseObject(textEntity);
String resultType = obj.getString("error");
if (resultType.equals("0"))
{
logger.info("成功--" + UserNumber + "发送短信:\'" + MessageContent + "\'");
return BaseResponse.success("发送成功");
}
logger.info("失败--" + UserNumber + "发送短信:\'" + MessageContent + ",reason:" + "发送失败");
return BaseResponse.success("发送失败");
}
catch (Exception e)
{
e.printStackTrace();
}
return BaseResponse.fail("系统异常:发送短信失败");
}
}
文中的spcode参数,即为短信签名的动态传入,为空则使用备案中的默认签名
注意,短信模板需在第三方平台备案,否则会出现发送不成功的情况