package foreiger.utils;
import net.sf.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Properties;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.commons.lang.StringUtils;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.SSLContext;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
public class TelMessageUtils {
private static String sid = "在個人賬號裏找";
private static String token = "在個人賬號裏找";
private static String appid = "在個人賬號裏找";
private static String templateid[] = {};//雲之訊的短信模板
private static JsonReqClient InstantiationRestAPI() {
return new JsonReqClient();
}
public static String sendMessage(String mobile,String param,int no) {
return InstantiationRestAPI().sendSms(sid, token, appid, templateid[no], param, mobile);
}
}
class SysConfig {
private Properties props = null;// config.properties
private static volatile SysConfig conf;
private SysConfig() {
props = new Properties();
loadConfigProps();
}
public static SysConfig getInstance() {
if (conf == null) {
synchronized (SysConfig.class) {
if (conf == null) {
conf = new SysConfig();
}
}
}
return conf;
}
public void loadConfigProps() {
InputStream is = null;
try {
is = getClass().getResourceAsStream(
"/WEB-INF/classes/config.properties");
if (is == null) {
is = getClass().getResourceAsStream("/config.properties");
}
InputStreamReader reader = new InputStreamReader(is, "UTF-8");
props.load(reader);
Iterator<String> iter = props.stringPropertyNames().iterator();
while (iter.hasNext()) {
String key = iter.next();
props.setProperty(key, props.getProperty(key));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
is = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public String getProperty(String key) {
String tmp = props.getProperty(key);
if (StringUtils.isNotEmpty(tmp)) {
return tmp.trim();
}
return tmp;
}
}
class HttpConnectionManager {
private PoolingHttpClientConnectionManager cm = null;
private static HttpConnectionManager connectionManager;
public static HttpConnectionManager getInstance() {
if (connectionManager == null) {
synchronized (HttpConnectionManager.class) {
if (connectionManager == null) {
connectionManager = new HttpConnectionManager();
connectionManager.init();
}
}
}
return connectionManager;
}
private void init() {
LayeredConnectionSocketFactory sslsf = null;
try {
sslsf = new SSLConnectionSocketFactory(SSLContext.getDefault());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
.register("https", sslsf).register("http", new PlainConnectionSocketFactory()).build();
cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(20);
}
public CloseableHttpClient getHttpClient() {
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
return httpClient;
}
}
class HttpClientUtil {
public static boolean isTest=Boolean.parseBoolean(SysConfig.getInstance().getProperty("is_test"));
public static String postJson(String url, String body, String charset) {
String result = null;
if (isTest) {
if (null == charset) {
charset = "UTF-8";
}
CloseableHttpClient httpClient = null;
HttpPost httpPost = null;
try {
httpClient = HttpConnectionManager.getInstance().getHttpClient();
httpPost = new HttpPost(url);
// 設置連接超時,設置讀取超時
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(10000)
.setSocketTimeout(10000)
.build();
httpPost.setConfig(requestConfig);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-Type", "application/json;charset=utf-8");
// 設置參數
StringEntity se = new StringEntity(body, "UTF-8");
httpPost.setEntity(se);
HttpResponse response = httpClient.execute(httpPost);
if (response != null) {
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = EntityUtils.toString(resEntity, charset);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
result = "config.properties中 is_test 屬性值爲false, 若已正確設置請求值,請設置爲true後再次測試";
}
return result;
}
}
class JsonReqClient{
public String server=SysConfig.getInstance().getProperty("rest_server");
public String sendSms(String sid, String token, String appid, String templateid, String param, String mobile) {
String result = "";
try {
String url = getStringBuffer().append("/sendsms").toString();
JSONObject jsonObject = new JSONObject();
jsonObject.put("sid", sid);
jsonObject.put("token", token);
jsonObject.put("appid", appid);
jsonObject.put("templateid", templateid);
jsonObject.put("param", param);
jsonObject.put("mobile", mobile);
String body = jsonObject.toString();
System.out.println("body = " + body);
result = HttpClientUtil.postJson(url, body, null);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private StringBuffer getStringBuffer() {
StringBuffer sb = new StringBuffer("https://");
sb.append(server).append("/ol/sms");
return sb;
}
}
javaweb使用JSON格式利用雲之訊平臺發送短信(單條)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.