• 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位(可调)验证码

    静态直接调用

           

     

  • 相关阅读:
    [Python][小知识][NO.3] Python 使用系统默认浏览器打开指定URL的网址
    [Python][小知识][NO.2] Python 字符串跨行连接,或拆分为多行显示
    [Python] wxPython 状态栏组件、消息对话框组件 学习总结(原创)
    [Python][小知识][NO.1] Python字符串前 加 u、r、b 的含义
    [Python] wxPython 编辑框组件学习总结 (原创)
    [Python] wxPython 菜单栏控件学习总结(原创)
    [Python] wxPython 基本控件 (转)
    HDU 2086 A1 = ? (找规律推导公式 + 水题)(Java版)
    HDU 1840 Equations (简单数学 + 水题)(Java版)
    UVA 1152 4 Values whose Sum is 0 (枚举+中途相遇法)(+Java版)(Java手撕快排+二分)
  • 原文地址:https://www.cnblogs.com/chengxiaolong/p/10199551.html
Copyright © 2020-2023  润新知