javaweb使用JSON格式利用雲之訊平臺傳送簡訊(單條)
阿新 • • 發佈:2019-01-03
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; } }