qa-prevention-gwj/src/main/java/com/zcloud/util/SendSmsUtil.java

177 lines
6.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<String, Object> 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<String, Object> 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);
}
}