阿里短信调用封装
package com.znph.argi.common.sms;import java.util.HashMap;
import java.util.Map;import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;import com.alibaba.fastjson.JSONObject;
import com.znph.base.commons.util.HttpUtils;/*** 阿里發(fā)送手機驗證碼* * @author znph_張春玲**/
public class AliSms {// private final static String APP_KEY = "AppKey"; // AppKey從控制臺獲取// // private final static String APP_SECRET = "AppSecret"; //// AppSecret從控制臺獲取// private final static String SIGN_NAME = "簽名名稱"; // 簽名名稱從控制臺獲取,必須是審核通過的// private final static String TEMPLATE_CODE = "模板CODE"; //// 模板CODE從控制臺獲取,必須是審核通過的// private final static String HOST = "sms.market.alicloudapi.com"; //// API域名從控制臺獲取/*** 給指定手機發(fā)送自定義驗證碼* * @param phoneNum* 手機號碼,多個手機號可用英文逗號隔開* @param code* 自定義驗證碼* @return true :發(fā)送成功,false:發(fā)送失敗*/public boolean sendMessage(String phoneNum, String code) {String host = "http://sms.market.alicloudapi.com";String path = "/singleSendSms";String method = "GET";String appcode = "acacbfc4fac24729ad442296b284你自己的appcode_90cd77c8be";String signName = "慧種地系統(tǒng)";String templateCode = "SMS_76145002";Map<String, String> headers = new HashMap<String, String>();headers.put("Authorization", "APPCODE " + appcode);Map<String, String> querys = new HashMap<String, String>();querys.put("ParamString", "{'msg':'" + code + "'}");querys.put("RecNum", phoneNum); // 手機號querys.put("SignName", signName);// 簽名名稱從控制臺獲取,必須是審核通過的querys.put("TemplateCode", templateCode);// 模板CODE從控制臺獲取,必須是審核通過的try {HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);// 獲取response的body里的數(shù)據(jù)String result = EntityUtils.toString(response.getEntity());JSONObject jsonObject = JSONObject.parseObject(result);// 返回發(fā)送短信的狀態(tài)(false/true)return jsonObject.getBoolean("success");} catch (Exception e) {e.printStackTrace();return false;}}/*** 給指定手機發(fā)送6位隨機數(shù)字的驗證碼* * @param phoneNum* 手機號碼,多個手機號可用英文逗號隔開* @return true :發(fā)送成功,false:發(fā)送失敗*/public boolean sendMessage(String phoneNum) {int mobile_code = (int) ((Math.random() * 9 + 1) * 100000);return sendMessage(phoneNum, mobile_code + "");}/*** 給指定手機發(fā)送6位隨機數(shù)字的驗證碼* * @param phoneNum* 手機號碼,多個手機號可用英文逗號隔開* @param resend* 發(fā)送失敗后是否自動重新嘗試幾次發(fā)送。 true:需要重新發(fā)送;,false:不重發(fā)* @return true:發(fā)送成功;false,發(fā)送失敗*/public boolean sendMessage(String phoneNum, boolean resend) {int mobile_code = (int) ((Math.random() * 9 + 1) * 100000);return sendMessage(phoneNum, mobile_code + "", resend);}// 記錄發(fā)送次數(shù)private int resendNum = 1;// 重發(fā)次數(shù)限制private int MaxResendNum = 2;/*** 給指定手機發(fā)送自定義驗證碼* * @param phoneNum* 手機號碼,多個手機號可用英文逗號隔開* @param code* 驗證碼* @param resend* 發(fā)送失敗后是否自動重新嘗試幾次發(fā)送。 true:需要重新發(fā)送;,false:不重發(fā)* @return true:發(fā)送成功;false,發(fā)送失敗*/public boolean sendMessage(String phoneNum, String code, boolean resend) {boolean result = sendMessage(phoneNum, code);if (!result) {resendNum++;//System.out.println("發(fā)送驗證碼失敗,第 "+resendNum+" 次向 "+phoneNum+" 發(fā)送短信 >>>>>>>>>>>>");if (resend) {if (resendNum <= MaxResendNum) {return sendMessage(phoneNum, code, resend);}} }return result;}public static void main(String[] args) {new AliSms().sendMessage("188105", true);}
}
需要的HttpUtils代碼:
package com.znph.base.commons.util; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map;import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager;import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair;public class HttpUtils {/*** get* * @param host* @param path* @param method* @param headers* @param querys* @return* @throws Exception*/public static HttpResponse doGet(String host, String path, String method, Map<String, String> headers, Map<String, String> querys)throws Exception { HttpClient httpClient = wrapClient(host);HttpGet request = new HttpGet(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}/*** post form* * @param host* @param path* @param method* @param headers* @param querys* @param bodys* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, Map<String, String> bodys)throws Exception { HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (bodys != null) {List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();for (String key : bodys.keySet()) {nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));}UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");request.setEntity(formEntity);}return httpClient.execute(request);} /*** Post String* * @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, String body)throws Exception { HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}/*** Post stream* * @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, byte[] body)throws Exception { HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);}/*** Put String* @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPut(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, String body)throws Exception { HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}/*** Put stream* @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPut(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, byte[] body)throws Exception { HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);}/*** Delete* * @param host* @param path* @param method* @param headers* @param querys* @return* @throws Exception*/public static HttpResponse doDelete(String host, String path, String method, Map<String, String> headers, Map<String, String> querys)throws Exception { HttpClient httpClient = wrapClient(host);HttpDelete request = new HttpDelete(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {StringBuilder sbUrl = new StringBuilder();sbUrl.append(host);if (!StringUtils.isBlank(path)) {sbUrl.append(path);}if (null != querys) {StringBuilder sbQuery = new StringBuilder();for (Map.Entry<String, String> query : querys.entrySet()) {if (0 < sbQuery.length()) {sbQuery.append("&");}if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {sbQuery.append(query.getValue());}if (!StringUtils.isBlank(query.getKey())) {sbQuery.append(query.getKey());if (!StringUtils.isBlank(query.getValue())) {sbQuery.append("=");sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));} }}if (0 < sbQuery.length()) {sbUrl.append("?").append(sbQuery);}}return sbUrl.toString();}private static HttpClient wrapClient(String host) {HttpClient httpClient = new DefaultHttpClient();if (host.startsWith("https://")) {sslClient(httpClient);}return httpClient;}private static void sslClient(HttpClient httpClient) {try {SSLContext ctx = SSLContext.getInstance("TLS");X509TrustManager tm = new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkClientTrusted(X509Certificate[] xcs, String str) {}public void checkServerTrusted(X509Certificate[] xcs, String str) {}};ctx.init(null, new TrustManager[] { tm }, null);SSLSocketFactory ssf = new SSLSocketFactory(ctx);ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);ClientConnectionManager ccm = httpClient.getConnectionManager();SchemeRegistry registry = ccm.getSchemeRegistry();registry.register(new Scheme("https", 443, ssf));} catch (KeyManagementException ex) {throw new RuntimeException(ex);} catch (NoSuchAlgorithmException ex) {throw new RuntimeException(ex);}} }總結
- 上一篇: 阿里天气数据接口调用实现(Java和JS
- 下一篇: Linux系统下安装rz/sz命令及使用