1.所用的服務器是阿里雲的
所需相關jar包
aliyun-java-sdk-core-3.3.1
aliyun-java-sdk-dysmsapi-1.0.0
相關jar可以在阿里雲的官網上下載
2.具體流程
①前台通過觸發后台的發送短信的功能,需要傳遞過來用戶的手機號(ajax什么都行)。
②正式的后台代碼,這里返回前台的是否發送成功,比較簡單的一個demo,建議用之前先看看官網的api文檔和demo。
@ResponseBody @RequestMapping(value="api-user-sendMess") public String sendMess(@RequestParam(value="phone")String phone,HttpSession session){ // 設置超時時間-可自行調整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); //初始化ascClient需要的幾個參數 final String product = "Dysmsapi";//短信API產品名稱(短信產品名固定,無需修改) final String domain = "dysmsapi.aliyuncs.com";//短信API產品域名(接口地址固定,無需修改) // 替換成你的AK final String accessKeyId = "xxx";// 你的accessKeyId final String accessKeySecret = "xxx";// 你的accessKeySecret //初始化ascClient,暫時不支持多region(請勿修改) IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); } IAcsClient acsClient = new DefaultAcsClient(profile); //組裝請求對象 SendSmsRequest request = new SendSmsRequest(); //使用post提交 request.setMethod(MethodType.POST); // 必填:待發送手機號。支持以逗號分隔的形式進行批量調用,批量上限為20個手機號碼,批量調用相對於單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式 request.setPhoneNumbers("xxx"); // 必填:短信簽名-可在短信控制台中找到 request.setSignName("xxx"); // 必填:短信模板-可在短信控制台中找到//SMS_112780058//13704098349 request.setTemplateCode("SMS_112780058"); // 可選:模板中的變量替換JSON串,如模板內容為"親愛的${name},您的驗證碼為${code}"時,此處的值為 // 可選:outId為提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者 int x = new Random().nextInt(1000000);
//參數為json字符串形式,其中key值為固定的 name code 不可變 request.setTemplateParam("{\"name\":\"xxx\",\"code\":\"" + x + "\"}"); request.setSmsUpExtendCode("66666"); // 請求失敗這里會拋ClientException異常 SendSmsResponse sendSmsResponse=null; try { sendSmsResponse = acsClient.getAcsResponse(request); } catch (ServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); } String result=null; if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { // 請求成功 result= "1"; session.setAttribute("code", x); }else if(sendSmsResponse.getCode().equals("isv.BUSINESS_LIMIT_CONTROL")){ result= "0"; session.setAttribute("code", ""); } //錯誤提示sendSmsResponse.getCode() return result; }
