短信发送工具类

     由于发送短信的内容是动态的,导致短信内容的参数需要进行替换,且短信签名的相关信息也需要动态生成,特在此记录。

     短信参数模板如下:

  

亲爱的用户,你的火车票已出票成功,取票号为[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参数,即为短信签名的动态传入,为空则使用备案中的默认签名

注意,短信模板需在第三方平台备案,否则会出现发送不成功的情况

你可能感兴趣的:(Java)