Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.zhenzi.sms.ZhenziSmsClient Maven / Gradle / Ivy
package com.zhenzi.sms;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
public class ZhenziSmsClient {
private static final String DEFAULT_CHARSET = "UTF-8";
// private static final String url = "http://localhost:8080/zhenzisms";
// private static final String url = "http://sms.zhenzikj.com";
private String apiUrl = "";
private static final int connectTimeout = 20 * 1000;
private static final int readTimeout = 20 * 1000;
private String appId;
private String appSecret;
public ZhenziSmsClient(String apiUrl, String appId, String appSecret) {
this.apiUrl = apiUrl;
this.appId = appId;
this.appSecret = appSecret;
}
/**
* 发送短信
*/
public String send(String number, String message) throws Exception {
return send(number, message, "");
}
/**
* 发送短信(需要状态回调)
*/
public String send(String number, String message, String messageId) throws Exception {
Map params = new HashMap();
params.put("appId", appId);
params.put("appSecret", appSecret);
params.put("message", message);
params.put("number", number);
params.put("messageId", messageId);
String result = doPost(apiUrl+"/sms/send.do", params, DEFAULT_CHARSET, connectTimeout,
readTimeout);
return result;
}
/**
* 查询余额
*/
public String balance() throws Exception {
Map params = new HashMap();
params.put("appId", appId);
params.put("appSecret", appSecret);
String result = doPost(apiUrl+"/account/balance.do", params, DEFAULT_CHARSET, connectTimeout,
readTimeout);
return result;
}
/**
* 查询短信
*/
public String findSmsByMessageId(String messageId) throws Exception {
Map params = new HashMap();
params.put("appId", appId);
params.put("appSecret", appSecret);
params.put("messageId", messageId);
String result = doPost(apiUrl+"/smslog/findSmsByMessageId.do", params, DEFAULT_CHARSET, connectTimeout,
readTimeout);
return result;
}
private String doPost(String url, Map params, String charset, int connectTimeout,
int readTimeout) throws Exception {
String ctype = "application/x-www-form-urlencoded;charset=" + charset;
String query = buildQuery(params, charset);
byte[] content = new byte[0];
if (query != null) {
content = query.getBytes(charset);
}
HttpURLConnection conn = null;
OutputStream out = null;
String rsp = null;
try {
conn = getConnection(new URL(url), "POST", ctype, null);
conn.setConnectTimeout(connectTimeout);
conn.setReadTimeout(readTimeout);
out = conn.getOutputStream();
out.write(content);
rsp = StreamUtil.read(conn.getInputStream(), DEFAULT_CHARSET);
} finally {
if (out != null) {
out.close();
}
if (conn != null) {
conn.disconnect();
}
}
return rsp;
}
public String buildQuery(Map params, String charset) throws Exception {
if ((params == null) || (params.isEmpty())) {
return null;
}
StringBuilder query = new StringBuilder();
Set> entries = params.entrySet();
boolean hasParam = false;
for (Map.Entry entry : entries) {
String name = (String) entry.getKey();
String value = (String) entry.getValue();
if (name != null && !name.trim().equals("")) {
if (hasParam) {
query.append("&");
} else {
hasParam = true;
}
query.append(name).append("=").append(URLEncoder.encode(value, charset));
}
}
return query.toString();
}
private HttpURLConnection getConnection(final URL url, String method, String ctype, Map headerMap)
throws IOException, NoSuchAlgorithmException, KeyManagementException {
String protocol = url.getProtocol();
if(protocol.toLowerCase().equals("https")){//https协议
SmsX509TrustManager xtm = new SmsX509TrustManager();//
SSLContext sslContext = null;
sslContext = SSLContext.getInstance("TLS");
X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };
sslContext.init(null, xtmArray, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession sslSession) {
hostname = trim(hostname);
if(hostname.trim().equals("") || !url.getHost().equals(hostname))
return false;
return true;
}
});
}
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Host", url.getHost());
conn.setRequestProperty("Accept", "text/xml,text/javascript,text/html");
conn.setRequestProperty("Content-Type", ctype);
if (headerMap != null) {
for (Map.Entry entry : headerMap.entrySet()) {
conn.setRequestProperty((String) entry.getKey(), (String) entry.getValue());
}
}
return conn;
}
private String trim(String s){
if(s == null)
return "";
return s.trim();
}
/**
* 自定义证书管理器,信任所有证书
* @author pc
*
*/
public static class SmsX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws java.security.cert.CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
}
}