在用這個阿里大於發送短信的時候,首先應該詳細的去閱讀阿里短信服務的說明,我以前本身寫的時候是用用於企業發送短信的,用的是企業帳號申請的簽名和短信模板,我的好像不可使用,即使可使用可是簽名必須是本身的真實姓名才能夠。java
接下來講一下基本步驟:json
首先閱讀阿里短信服務官方文檔,而後申請accesskeyId和accessKeySecret,接着去申請短信簽名,這個須要網址域名獲取企業的三證合一證件。接下來申請模板,通常都是短信模板(只帶驗證碼)還有就是其餘類型的短信模板(好比說一些通知提示類短信).api
短信模板申請下來以後請記得短信模板CODE如圖:dom
這些都有以後附上阿里大於發送短信的java代碼:post
首先引入jar包:spa
1 <!--阿里短信--> 2 <dependency> 3 <groupId>com.aliyun</groupId> 4 <artifactId>aliyun-java-sdk-core</artifactId> 5 <version>3.7.1</version> 6 </dependency> 7 <dependency> 8 <groupId>com.aliyun</groupId> 9 <artifactId>aliyun-java-sdk-dysmsapi</artifactId> 10 <version>1.1.0</version> 11 </dependency>
接下來是代碼:.net
1 import com.alibaba.fastjson.JSONObject; 2 import com.aliyuncs.DefaultAcsClient; 3 import com.aliyuncs.IAcsClient; 4 import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; 5 import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; 6 import com.aliyuncs.exceptions.ClientException; 7 import com.aliyuncs.exceptions.ServerException; 8 import com.aliyuncs.http.MethodType; 9 import com.aliyuncs.profile.DefaultProfile; 10 import com.aliyuncs.profile.IClientProfile; 11 12 import java.util.logging.Logger; 13 14 /** 15 * @author kabuqinuo 16 * @date 2018/7/18 9:01 17 */ 18 /*發送短信模板(使用阿里大於)*/ 19 public class ShortmsgUtils { 20 21 22 private static Logger logger = Logger.getLogger(String.valueOf(ShortmsgUtils.class)); 23 24 25 static ShortmsgUtils shortmsgUtils; 26 27 public static ShortmsgUtils getInstance() { 28 if (shortmsgUtils == null) { 29 shortmsgUtils = new ShortmsgUtils(); 30 } 31 return shortmsgUtils; 32 } 33 34 /** 35 * 發送驗證碼 36 * @param phonenumm 手機號 37 * @param smsverificationcode 隨機生成的要發送的驗證碼 38 */ 39 public void getShortMessage(String phonenumm, int smsverificationcode){ 40 //設置超時時間-可自行調整 41 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); 42 System.setProperty("sun.net.client.defaultReadTimeout", "10000"); 43 //初始化ascClient須要的幾個參數 44 final String product = "Dysmsapi";//短信API產品名稱(短信產品名固定,無需修改) 45 final String domain = "dysmsapi.aliyuncs.com";//短信API產品域名(接口地址固定,無需修改) 46 //替換成你的AK 47 final String accessKeyId = Parameter.APPKEY;//你的accessKeyId 48 final String accessKeySecret =Parameter.SECRET;//你的accessKeySecret 49 //初始化ascClient,暫時不支持多region(請勿修改) 50 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, 51 accessKeySecret); 52 try { 53 DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); 54 } catch (ClientException e1) { 55 // TODO Auto-generated catch block 56 e1.printStackTrace(); 57 } 58 IAcsClient acsClient = new DefaultAcsClient(profile); 59 //組裝請求對象 60 SendSmsRequest request = new SendSmsRequest(); 61 //使用post提交 62 request.setMethod(MethodType.POST); 63 64 //必填:待發送手機號。支持以逗號分隔的形式進行批量調用,批量上限爲1000個手機號碼,批量調用相對於單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式;發送國際/港澳臺消息時,接收號碼格式爲00+國際區號+號碼,如「0085200000000」 65 request.setPhoneNumbers(phonenumm); 66 //必填:短信簽名-可在短信控制檯中找到申請的簽名 67 request.setSignName(""); 68 //必填:短信模板-可在短信控制檯中找到 69 request.setTemplateCode(SmsModel.SMS_YZM); 70 //可選:模板中的變量替換JSON串,如模板內容爲"親愛的${name},您的驗證碼爲${code}"時,此處的值爲 71 //友情提示:若是JSON中須要帶換行符,請參照標準的JSON協議對換行符的要求,好比短信內容中包含\r\n的狀況在JSON中須要表示成\\r\\n,不然會致使JSON在服務端解析失敗 72 request.setTemplateParam("{code:'" + smsverificationcode + "'}"); 73 //可選-上行短信擴展碼(擴展碼字段控制在7位或如下,無特殊需求用戶請忽略此字段) 74 //request.setSmsUpExtendCode("90997"); 75 //可選:outId爲提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者 76 // request.setOutId("yourOutId"); 77 //請求失敗這裏會拋ClientException異常 78 SendSmsResponse sendSmsResponse = null; 79 try { 80 sendSmsResponse = acsClient.getAcsResponse(request); 81 } catch (ServerException e) { 82 // 異常 83 e.printStackTrace(); 84 } catch (ClientException e) { 85 // 異常 86 e.printStackTrace(); 87 } 88 if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { 89 logger.info("發送驗證碼成功!"); 90 //請求成功 91 } 92 } 93 94 /**帶參數通知短信模板*/ 95 /** 96 * 97 * @param phonenumm//手機號 98 * @param sms//封裝的要帶的參數 99 */ 100 public static void getShortMessages(String phonenumm,smsParamVo sms){ 101 //設置超時時間-可自行調整 102 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); 103 System.setProperty("sun.net.client.defaultReadTimeout", "10000"); 104 //初始化ascClient須要的幾個參數 105 final String product = "Dysmsapi";//短信API產品名稱(短信產品名固定,無需修改) 106 final String domain = "dysmsapi.aliyuncs.com";//短信API產品域名(接口地址固定,無需修改) 107 //替換成你的AK 108 final String accessKeyId = Parameter.APPKEY;//你的accessKeyId,參考本文檔步驟2 109 final String accessKeySecret =Parameter.SECRET;//你的accessKeySecret,參考本文檔步驟2 110 //初始化ascClient,暫時不支持多region(請勿修改) 111 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, 112 accessKeySecret); 113 try { 114 DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); 115 } catch (ClientException e1) { 116 // TODO Auto-generated catch block 117 e1.printStackTrace(); 118 } 119 IAcsClient acsClient = new DefaultAcsClient(profile); 120 //組裝請求對象 121 SendSmsRequest request = new SendSmsRequest(); 122 //使用post提交 123 request.setMethod(MethodType.POST); 124 125 //必填:待發送手機號。支持以逗號分隔的形式進行批量調用,批量上限爲1000個手機號碼,批量調用相對於單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式;發送國際/港澳臺消息時,接收號碼格式爲00+國際區號+號碼,如「0085200000000」 126 request.setPhoneNumbers(phonenumm); 127 //必填:短信簽名-可在短信控制檯中找到 128 request.setSignName(""); 129 //必填:短信模板-可在短信控制檯中找到 130 request.setTemplateCode(SmsModel.SMS_TZDX); 131 //可選:模板中的變量替換JSON串,如模板內容爲"親愛的${name},您的驗證碼爲${code}"時,此處的值爲 132 //友情提示:若是JSON中須要帶換行符,請參照標準的JSON協議對換行符的要求,好比短信內容中包含\r\n的狀況在JSON中須要表示成\\r\\n,不然會致使JSON在服務端解析失敗 133 request.setTemplateParam(JSONObject.toJSONString(sms)); 134 //可選-上行短信擴展碼(擴展碼字段控制在7位或如下,無特殊需求用戶請忽略此字段) 135 //request.setSmsUpExtendCode("90997"); 136 //可選:outId爲提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者 137 // request.setOutId("yourOutId"); 138 //請求失敗這裏會拋ClientException異常 139 SendSmsResponse sendSmsResponse = null; 140 try { 141 sendSmsResponse = acsClient.getAcsResponse(request); 142 } catch (ServerException e) { 143 // 異常 144 e.printStackTrace(); 145 } catch (ClientException e) { 146 // 異常 147 e.printStackTrace(); 148 } 149 if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { 150 logger.info("短信通知發送成功!"); 151 //請求成功 152 } 153 } 154 }
上面基本每一步都有相應的註釋,在一些必要參數都獲取成功以後這端代碼可直接拿來調用。3d