JavaSmsSenderImpl.java
package com.sandy.ecp.framework.service;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.Proxy;
import java.net.URL;
import java.nio.charset.Charset;
import org.springframework.core.env.Environment;
import sun.net.www.protocol.http.HttpURLConnection;
/**
* @see https://www.smschinese.com.cn/main/
* @see https://www.smschinese.com.cn/Login.shtml
* @author Sandy
* 大于0 提交成功 短信发送数量
* -1 没有该用户账户
* -2 接口密钥不正确 [查看密钥]不是账户登陆密码
* -21 MD5接口密钥加密不正确
* -3 短信数量不足
* -6 IP限制
* -11 该用户被禁用
* -14 短信内容出现非法字符
* -4 手机号格式不正确
* -41 手机号码为空
* -42 短信内容为空
* -51 短信签名格式不正确接口签名格式为:【签名内容】
* -52 短信签名太长建议签名10个字符以内
* 短信余额:5000 条
* 2024-05-03 短信余额:4979 条
*/
public class JavaSmsSenderImpl {
protected Environment environment;
private String username;
private String password;
private String url;
private String contentType;
private String defaultEncoding;
private Integer timeout = 3000;
public JavaSmsSenderImpl() {
super();
}
public void setEnvironment(Environment environment) {
this.environment = environment;
}
public String send(String text, String mobile) {
java.net.HttpURLConnection conn = null;
InputStream in = null;
PrintWriter out = null;
if (defaultEncoding == null) {
defaultEncoding = Charset.defaultCharset().name();
}
final StringBuilder sb = new StringBuilder();
try {
try {
final Class<?> clazz = ClassLoader.getSystemClassLoader().loadClass("sun.net.www.protocol.http.HttpURLConnection");
if (clazz != null) {
conn = new HttpURLConnection(new URL(url), (Proxy) null);
}
} catch (ClassNotFoundException ex) {
conn = (java.net.HttpURLConnection) new URL(url).openConnection();
}
conn.setRequestMethod("POST");
conn.setConnectTimeout(timeout);
conn.setReadTimeout(timeout);
if (contentType != null) {
conn.setRequestProperty("Content-Type", contentType);
}
conn.setRequestProperty("Charset", defaultEncoding);
conn.setRequestProperty("Content-Encoding", defaultEncoding);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
out = new PrintWriter(conn.getOutputStream());
sb.append("Uid=").append(username);
sb.append("&Key=").append(password);
sb.append("&smsText=").append(text);
sb.append("&smsMob=").append(mobile);
out.write(sb.toString());
out.flush();
final int statusCode = conn.getResponseCode();
if (statusCode == HttpURLConnection.HTTP_OK) {
in = conn.getInputStream();
} else {
in = conn.getErrorStream();
}
final byte[] buffer = new byte[2048];
int count = 0;
sb.delete(0, sb.length());
while ((count = in.read(buffer)) > 0) {
sb.append(new String(buffer, 0, count, defaultEncoding));
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return sb.toString();
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUrl(String url) {
this.url = url;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public void setDefaultEncoding(String defaultEncoding) {
this.defaultEncoding = defaultEncoding;
}
public void setTimeout(Integer timeout) {
this.timeout = timeout;
}
}