java阿里短信接口調用


阿里短信接口調用

  1. 導入依賴

  <!-- 登陸短信需要用的jar -->

      

       <dependency>

           <groupId>com.aliyun.mns</groupId>

           <artifactId>aliyun-sdk-mns</artifactId>

           <version>1.1.8</version>

       </dependency>

       <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore-nio -->

       <dependency>

           <groupId>org.apache.httpcomponents</groupId>

           <artifactId>httpcore-nio</artifactId>

           <version>4.4.10</version>

       </dependency>

       <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->

       <dependency>

           <groupId>org.apache.httpcomponents</groupId>

           <artifactId>httpclient</artifactId>

           <version>4.5.6</version>

       </dependency>

       <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->

       <dependency>

           <groupId>org.apache.httpcomponents</groupId>

           <artifactId>httpcore</artifactId>

           <version>4.4.10</version>

       </dependency>

       <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpasyncclient -->

       <dependency>

           <groupId>org.apache.httpcomponents</groupId>

           <artifactId>httpasyncclient</artifactId>

           <version>4.1.4</version>

       </dependency>

      

       <!-- gao阿里短信 -->

       <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->

       <dependency>

           <groupId>com.aliyun</groupId>

           <artifactId>aliyun-java-sdk-core</artifactId>

           <version>3.3.1</version>

       </dependency>

       <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-dysmsapi -->

       <dependency>

           <groupId>com.aliyun</groupId>

           <artifactId>aliyun-java-sdk-dysmsapi</artifactId>

           <version>1.0.0</version>

       </dependency>

 

  1. 登陸阿里雲

創建用戶key等內容

https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.meieQd

 

 

 

該步驟一步一步的創建

 

 

  1. 創建 工具類/Controller類

工具類

package com.cpic.caf.user.LoginController;

 

import com.aliyuncs.DefaultAcsClient;

import com.aliyuncs.IAcsClient;

import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;

import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;

import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;

import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;

import com.aliyuncs.dysmsapi.transform.v20170525.SendSmsResponseUnmarshaller;

import com.aliyuncs.exceptions.ClientException;

import com.aliyuncs.http.FormatType;

import com.aliyuncs.http.HttpResponse;

import com.aliyuncs.profile.DefaultProfile;

import com.aliyuncs.profile.IClientProfile;

 

import java.nio.charset.Charset;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.UUID;

 

/**

 * author

 *

 * Created on 18/8/8.

 * 短信API產品的DEMO程序

 * 執行main函數即可體驗短信產品API功能(只需要將AK替換成開通了雲通信-短信產品功能的AK即可)

 * 工程依賴了2個jar包(存放在工程的libs目錄下)

 * 1:aliyun-java-sdk-core.jar

 * 2:aliyun-java-sdk-dysmsapi.jar

 *

 * 備注:Demo工程編碼采用UTF-8

 * 國際短信發送請勿參照此DEMO

 */

public class SmsDemoToolsCxl {

 

    //產品名稱:雲通信短信API產品,開發者無需替換

    static final String product = "Dysmsapi";

    //產品域名,開發者無需替換

    static final String domain = "dysmsapi.aliyuncs.com";

 

    // TODO 此處需要替換成開發者自己的AK(在阿里雲訪問控制台尋找)

    static final String accessKeyId = "accessKeyId ";

    static final String accessKeySecret = "accessKeySecret ";

 

   

   

    public static SendSmsResponse sendSms(String phoneNumber,String content) throws ClientException {

 

        //可自助調整超時時間

        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");

        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

 

        //初始化acsClient,暫不支持region化

        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);

        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);

        IAcsClient acsClient = new DefaultAcsClient(profile);

 

        //組裝請求對象-具體描述見控制台-文檔部分內容

        SendSmsRequest request = new SendSmsRequest();

        //必填:待發送手機號

        request.setPhoneNumbers(phoneNumber);

        //必填:短信簽名-可在短信控制台中找到

        request.setSignName("喜事碼頭");

        //必填:短信模板-可在短信控制台中找到

        request.setTemplateCode("SMS_141890017");

        //可選:模板中的變量替換JSON串,如模板內容為"親愛的${name},您的驗證碼為${code}"時,此處的值為

        request.setTemplateParam("{\"code\":\""+content+"\"}");

 

        //選填-上行短信擴展碼(無特殊需求用戶請忽略此字段)

        //request.setSmsUpExtendCode("90997");

 

        //可選:outId為提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者

        request.setOutId("yourOutId");

 

        //hint 此處可能會拋出異常,注意catch

        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

 

        return sendSmsResponse;

    }

 

 

    public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {

 

        //可自助調整超時時間

        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");

        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

 

        //初始化acsClient,暫不支持region化

        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);

        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);

        IAcsClient acsClient = new DefaultAcsClient(profile);

 

        //組裝請求對象

        QuerySendDetailsRequest request = new QuerySendDetailsRequest();

        //必填-號碼

        request.setPhoneNumber("15000000000");

        //可選-流水號

        request.setBizId(bizId);

        //必填-發送日期 支持30天內記錄查詢,格式yyyyMMdd

        SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");

        request.setSendDate(ft.format(new Date()));

        //必填-頁大小

        request.setPageSize(10L);

        //必填-當前頁碼從1開始計數

        request.setCurrentPage(1L);

 

        //hint 此處可能會拋出異常,注意catch

        QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);

 

        return querySendDetailsResponse;

    }

 

    /**

     * 隨機生成code

     * @return

     */

    public static String cod(){

         String codd="";

         for(int i=0;i<4;i++){

         String code="123456789qwertyuipasdfghjklzxcvbnmQWERTYUIPASDGFHJKLZXCVBNM";//59個

         char co=code.charAt((int)(Math.random()*58));//通過使用Math.random()函數產生隨機數,

         //charAt(int i)返回對應的下標字符 //再通過*58(排除o,O,0干擾后),強制轉換為int類型

         codd+=String.valueOf(co);//將產生的隨機字符傳入字符串codd

         }

         return codd;

         }

 

 

}

 

 

 

Controller類

package com.cpic.caf.user.LoginController;

 

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

 

import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;

import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;

import com.aliyuncs.exceptions.ClientException;

import com.cpic.caf.workers.hall.service.LoginService;

 

@Controller

@RequestMapping("/login")

public class LoginCoreController {

 

    @Autowired

    private LoginService loginService;

   

    /**

     * 跳轉到登陸頁面

     * @return

     */

    @RequestMapping("/index.html")

    public String toLoginIndex(){

        return "user/login";

    }

   

   

    @RequestMapping(value="/workuser",method=RequestMethod.POST)

    @ResponseBody

    public String workUserLogin(@RequestParam("user_code")String user_code,

            @RequestParam("user_psw")String user_psw){

       

        Boolean flag = loginService.WorkUserLogin(user_code, user_psw);

        if (flag) {

            return "true";

        }else {

            return "false";

        }

    }

   

 

    @RequestMapping(value="/getCode")

    @ResponseBody

    public String takeloginCode(@RequestParam("phone")String phone) throws ClientException, InterruptedException{

       

        //發短信

        String code = SmsDemoToolsCxl.cod();

        SendSmsResponse response = SmsDemoToolsCxl.sendSms(phone,code);

        System.out.println("短信接口返回的數據----------------");

        System.out.println("Code=" + response.getCode());

        System.out.println("Message=" + response.getMessage());

        System.out.println("RequestId=" + response.getRequestId());

        System.out.println("BizId=" + response.getBizId());

        Thread.sleep(3000L);

       

        //查明細

        if(response.getCode() != null && response.getCode().equals("OK")) {

            QuerySendDetailsResponse querySendDetailsResponse = SmsDemoToolsCxl.querySendDetails(response.getBizId());

            System.out.println("短信明細查詢接口返回數據----------------");

            System.out.println("Code=" + querySendDetailsResponse.getCode());

            System.out.println("Message=" + querySendDetailsResponse.getMessage());

            int i = 0;

            for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs())

            {

                System.out.println("SmsSendDetailDTO["+i+"]:");

                System.out.println("Content=" + smsSendDetailDTO.getContent());

                System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());

                System.out.println("OutId=" + smsSendDetailDTO.getOutId());

                System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());

                System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());

                System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());

                System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());

                System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());

            }

            System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());

            System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());

        }

        return code;

    }

   

   

}

 

 

 

  1. 前端頁面實現

表單

<li>

 

<input class="code" type="text" required="required" id="codeInput" placeholder="">

 

<button class="code fr" id="getCode">獲取驗證碼</button>

 

 

<input type="hidden" value="<%=request.getContextPath()%>" id="path">

<input type="hidden" value="" id="code">

 

</li>

 

JS部分

<script src="https://cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>

 

 

 

 

Ajax向后台獲得驗證碼(60秒時間限制)

$("#getCode").click(function(){

        var path = $("#path").val();

        var phone = $("#phone").val();

        $.ajax({

            url : path + "/login/getCode",

            type : "post",

            dataType : "text",

            data : {

            "phone":$("#phone").val()

            },

            success :function(data){

                $("#code").val(data);//設置隱藏域

                        var mydate= new Date();//獲取當前時間

                        mydate.setMinutes(mydate.getMinutes()+1); //當前時間加1分鍾

                        var end_time = new Date(mydate).getTime(); //月份是實際月份-1

                        var sys_second = (end_time-new Date().getTime())/1000;

                        var timer = setInterval(function(){

                        if (sys_second > 1) {

                            sys_second -= 1;

                            var second = Math.floor(sys_second % 60);

                            $("#getCode").attr("disabled","true");//添加disabled屬性

                            $("#btn_code").css("color","gray");

                            $("#getCode").html(second+"s后重新獲取驗證碼");

                        } else {

                            $("#getCode").removeAttr("disabled");//移除disabled屬性

                            $("#getCode").css("color","black");

                            $("#getCode").html("獲取驗證碼");

                            clearInterval(timer);//清楚定時器

                        }

                    }, 1000);

            }

        });//ajax

    });

 

 

 

  1. 工具類參數指定

改成提供的內容

AccessId和Key即可,阿里雲短信后台都有提供

  • 項目簽名,一般是中文
  • 短信模板,可以自己定義
  • 模板變量,為json,具體限制在阿里后台有說明

 

 

  1. 工具類方法解說

方法名稱

方法作用

注意事項

sendSms(String, String)

發送短信

需要修改上面的幾個變量

querySendDetails(String)

配置短信

不需要修改

cod()

生成隨機4位(可調)驗證碼

靜態直接調用

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM