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

141 lines
5.0 KiB
Java

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());
// }
}