package com.ruoyi.auth.utils;
|
|
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.nacos.common.utils.StringUtils;
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
import java.io.PrintWriter;
|
import java.net.URL;
|
import java.net.URLConnection;
|
import java.security.MessageDigest;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.Base64;
|
import java.util.List;
|
import lombok.extern.slf4j.Slf4j;
|
|
/**
|
* 聚通达短信发送工具类
|
*
|
* @author mitao
|
* @date 2024/6/17
|
*/
|
@Slf4j
|
public class JuTongDaSMSUtil {
|
|
private static final String UID = "201000";
|
private static final String PWD = "926893";
|
private static final String template = "【酒鼎老酒】您的验证码为:${code},该验证码5分钟内有效,请勿泄露于他人!";
|
|
public static void main(String[] args) {
|
String moblies = "18283820718";
|
String content = "123456";
|
String ext = "";
|
String attime = "";
|
String result = JuTongDaSMSUtil.smsSend(moblies, content, ext, attime);
|
System.out.println("result=" + result);
|
}
|
|
// 发送短信
|
public static String smsSend(String mobile, String content,
|
String ext, String attime) {
|
String errMess = "";
|
StringBuffer sendData = new StringBuffer("");
|
try {
|
sendData.append("uid=").append(UID); // 用户名
|
String pwd = getMD5(PWD);// 原始密码做MD5加密,32位大写格式
|
sendData.append("&password=").append(pwd); // 密码
|
|
sendData.append("&encode=").append("GBK"); // encode=GBK或者encode=utf8
|
content = template.replace("${code}", content);
|
String contentBase64 = Base64.getEncoder()
|
.encodeToString(content.getBytes("gbk"));// 先用encode中定义的格式编码,再用base64加密内容
|
sendData.append("&encodeType=base64"); // 固定
|
sendData.append("&content=").append(contentBase64); // base64加密后的内容
|
|
sendData.append("&mobile=").append(mobile); // 手机号
|
// sendData.append("&cid=").append("45955855252252555"); // 唯一标识,选填,如果不填系统自动生成作为当前批次的唯一标识
|
if (!StringUtils.isNotBlank(ext)) {
|
sendData.append("&extNumber=").append(ext); // 扩展
|
}
|
|
if (!StringUtils.isNotBlank(attime)) {
|
sendData.append("&schtime=").append(attime); // 定时时间,选填,格式2008-06-09 12:00:00
|
}
|
errMess = sendPost("https://sms3api.jvtd.cn/jtdsms/smsSend",
|
sendData.toString());// 普通短信
|
// errMess =sendPost("http://ip:8090/jtdsms/sendData.do", sendData.toString());//个性短信
|
} catch (Exception e) {
|
errMess = "-601";
|
}
|
return errMess;
|
}
|
|
public static void smsSendBatch(List<String> mobileList, String content,
|
String ext, String attime) {
|
log.info("发送短信:号码{},内容:{}", JSONObject.toJSONString(mobileList), content);
|
for (String mobile : mobileList) {
|
String errMess = "";
|
StringBuffer sendData = new StringBuffer("");
|
try {
|
sendData.append("uid=").append(UID); // 用户名
|
String pwd = getMD5(PWD);// 原始密码做MD5加密,32位大写格式
|
sendData.append("&password=").append(pwd); // 密码
|
|
sendData.append("&encode=").append("GBK"); // encode=GBK或者encode=utf8
|
String contentBase64 = Base64.getEncoder()
|
.encodeToString(content.getBytes("gbk"));// 先用encode中定义的格式编码,再用base64加密内容
|
sendData.append("&encodeType=base64"); // 固定
|
sendData.append("&content=").append(contentBase64); // base64加密后的内容
|
|
sendData.append("&mobile=").append(mobile); // 手机号
|
// sendData.append("&cid=").append("45955855252252555"); // 唯一标识,选填,如果不填系统自动生成作为当前批次的唯一标识
|
if (!StringUtils.isNotBlank(ext)) {
|
sendData.append("&extNumber=").append(ext); // 扩展
|
}
|
|
if (!StringUtils.isNotBlank(attime)) {
|
sendData.append("&schtime=").append(attime); // 定时时间,选填,格式2008-06-09 12:00:00
|
}
|
errMess = sendPost("https://sms3api.jvtd.cn/jtdsms/smsSend",
|
sendData.toString());// 普通短信
|
// errMess =sendPost("http://ip:8090/jtdsms/sendData.do", sendData.toString());//个性短信
|
} catch (Exception e) {
|
log.error("发送短信异常:", e);
|
errMess = "-601";
|
}
|
}
|
}
|
public static String sendPost(String url, String param) {
|
PrintWriter out = null;
|
BufferedReader in = null;
|
String result = "";
|
try {
|
URL realUrl = new URL(url);
|
// 打开和URL之间的连接
|
URLConnection conn = realUrl.openConnection();
|
// 设置通用的请求属性
|
conn.setRequestProperty("accept", "*/*");
|
conn.setRequestProperty("connection", "Keep-Alive");
|
conn.setRequestProperty("user-agent",
|
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
|
// 发送POST请求必须设置如下两行
|
conn.setDoOutput(true);
|
conn.setDoInput(true);
|
// 获取URLConnection对象对应的输出流
|
out = new PrintWriter(conn.getOutputStream());
|
// 发送请求参数
|
out.print(param);
|
// flush输出流的缓冲
|
out.flush();
|
// 定义BufferedReader输入流来读取URL的响应
|
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
String line;
|
while ((line = in.readLine()) != null) {
|
result += line;
|
}
|
} catch (Exception e) {
|
System.out.println("发送 POST 请求出现异常!" + e);
|
e.printStackTrace();
|
}
|
// 使用finally块来关闭输出流、输入流
|
finally {
|
try {
|
if (out != null) {
|
out.close();
|
}
|
if (in != null) {
|
in.close();
|
}
|
} catch (IOException ex) {
|
ex.printStackTrace();
|
}
|
}
|
return result;
|
}
|
|
|
public static String getMD5(String sourceStr) {
|
String resultStr = "";
|
try {
|
byte[] temp = sourceStr.getBytes();
|
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
md5.update(temp);
|
byte[] b = md5.digest();
|
for (int i = 0; i < b.length; i++) {
|
char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
|
'9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
char[] ob = new char[2];
|
ob[0] = digit[(b[i] >>> 4) & 0X0F];
|
ob[1] = digit[b[i] & 0X0F];
|
resultStr += new String(ob);
|
}
|
return resultStr;
|
} catch (NoSuchAlgorithmException e) {
|
e.printStackTrace();
|
return null;
|
}
|
}
|
}
|