package com.zcloud.util; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; 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; import java.util.HashMap; import java.util.Map; /** * 重点工程发送短信工具类 */ @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); } public static boolean customizeSMSSending(String mobile, String template, Map content) { String value = SIGNATURE + template; for (String key : content.keySet()) { value = StrUtil.replace(value, "${" + key + "}", Convert.toStr(content.get(key))); } 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("mobile", mobile); json.put("content", value); HttpRequest request = HttpRequest.post("https://api-bj-shss01-mix2.zthysms.com/v2/sendSms"); request.body(json.toJSONString(), MediaType.APPLICATION_JSON_UTF8_VALUE); request.timeout(60000); String body; try (HttpResponse response = request.execute()) { body = response.body(); } catch (Exception e) { log.error("短信发送异常", e); return false; } JSONObject object = JSON.parseObject(body); return object == null || object.getInteger("code") == 200; } /** * 封装要发送的电话以及要替换的内容 * * @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 { //定义替换参数 Map map = new HashMap<>(); map.put("acci_date", DateUtil.format(new Date(), DatePattern.CHINESE_DATE_PATTERN)); map.put("acci_addr", "xx省xx市xxx"); map.put("acci_type", "测试类型"); map.put("inju_member", "0"); map.put("task_post", "测试"); String value = SIGNATURE + "安全事故通知:${acci_date},在${acci_addr}发生了${acci_type}的安全事故,有${inju_member}的伤亡人数,您的职责是:${task_post}"; for (String key : map.keySet()) { value = StrUtil.replace(value, "${" + key + "}", Convert.toStr(map.get(key))); } if (value.length() >= 1000) { throw new RuntimeException("短信内容,最多支持1000个字符"); } Long tKey = System.currentTimeMillis() / 1000; String passWord = MD5.md5(PASSWORD + tKey); JSONObject map2 = new JSONObject(); map2.put("username", USERNAME); map2.put("tKey", tKey); map2.put("password", passWord); map2.put("mobile", "18630387571"); map2.put("content", value); HttpRequest request = HttpRequest.post("https://api-bj-shss01-mix2.zthysms.com/v2/sendSms"); request.body(map2.toJSONString(), MediaType.APPLICATION_JSON_UTF8_VALUE); System.out.println(map2.toJSONString()); request.timeout(60000); String s = request.execute().body(); System.out.println(s); // JSONArray jsonArray = new JSONArray(); // //接受返回结果 // JSONObject records = new JSONObject(); // //定义替换参数 // JSONObject tpContent = new JSONObject(); // tpContent.put("OUTSOURCEDNAME","测试"); // records = SendSmsUtil.getRecords("18630387571",tpContent); // jsonArray.add(records); // SendSmsUtil.sendSms("121451",jsonArray,null); } }