package com.zcloud.util; import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.springframework.http.MediaType; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 重点工程发送短信工具类 */ @Slf4j public class SendSmsUtil { private static String USERNAME = "qhdzyhy"; private static String PASSWORD = "3ba40593f514f0c1ebdfc278dddfc9ce"; private static String SIGNATURE = "【秦港双控】"; private static String URL = "https://api.mix2.zthysms.com/v2/sendSmsTp"; /** * 发送短信 * * @param records * @param time 发送时间 为空或小于当前时间则立即发送 * records格式实例 records是 JSONArray 里边的内容通过调用下方方法getRecords获取 JSONObject 定义一个JSONArray后 put进去即可 * "records":[ * { * "mobile":"138****0000", * "tpContent":{ * "var1":"变量1", * "var2":"变量2" * } * }, * { * "mobile":"138****0001", * "tpContent":{ * "var1":"变量2", * "var2":"变量2" * } * } * ] */ public static void sendSms(String tpId, JSONArray records, String time) throws ParseException { JSONObject json = new JSONObject(); Long tKey = System.currentTimeMillis() / 1000; String passWord = MD5.md5(PASSWORD + tKey); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //扔参数 json.put("username", USERNAME); json.put("password", passWord); json.put("tKey", tKey); json.put("signature", SIGNATURE); json.put("tpId", tpId); if (StringUtils.isNotBlank(time)) { if (sdf.parse(time).after(new Date())) { json.put("time", time); } } json.put("records", records); System.out.println(json.toJSONString()); String result = HttpRequest.post(URL) .timeout(60000) .body(json.toJSONString(), MediaType.APPLICATION_JSON_UTF8_VALUE).execute().body(); System.out.println(result); } // {"msg":"template error","tpId":"null","code":4014,"msgId":"172950016144709288961"} // {"msg":"success","tpId":"121487","code":200,"msgId":"172950025828957168641","invalidList":[]} public static boolean sendSms(String tpId, JSONObject records, String time, String phone) throws ParseException { JSONObject json = new JSONObject(); json.put("username", USERNAME); json.put("tKey", System.currentTimeMillis() / 1000); json.put("password", MD5.md5(PASSWORD + json.getLong("tKey"))); json.put("signature", SIGNATURE); json.put("tpId", tpId); if (StringUtils.isNotBlank(time) && DateUtil.parseDateTime(time).after(new Date())) { json.put("time", time); } JSONArray array = new JSONArray(); array.add(getRecords(phone, records)); json.put("records", array); HttpRequest request = HttpRequest.post(URL) .timeout(60000) .body(json.toJSONString(), MediaType.APPLICATION_JSON_UTF8_VALUE); try (HttpResponse response = request.execute()) { return JSON.parseObject(response.body()).getInteger("code") == 200; } catch (Exception e) { log.error("发送短信异常", e); return false; } } /** * 封装要发送的电话以及要替换的内容 * * @param mobile 手机号 * @param tpContent 替换内容 * @return 格式实例 var1表示要替换的内容 与要替换的内容保持一致即可 变量1表示替换的内容 * { * "mobile":"138****0000", * "tpContent":{ * "var1":"变量1", * "var2":"变量2" * } * } */ public static JSONObject getRecords(String mobile, JSONObject tpContent) { JSONObject json = new JSONObject(); json.put("mobile", mobile); if (ObjectUtils.hashCode(tpContent) != 0) { json.put("tpContent", tpContent); } return json; }//d22f8a5d4a35b3761dc9525186e652a0 //测试接口 // public static void main(String[] args) throws ParseException { // //定义替换参数 // JSONObject tpContent = new JSONObject(); // tpContent.put("HIDDENDESCR", "卓云企业测试"); // JSONObject object = sendSms("121487", tpContent, DateUtil.formatDateTime(new Date()), "18630387571"); // System.out.println(object.toJSONString()); // } }