通过阿里大于发送短信,新手入门指导手册

文章目录

  • 阿里大于发短信新手入门
    • 1. 首先阿里云官网注册
    • 2.开通短信服务
      • 第一步: 如果找不到短信服务菜单,请根据下图操作:
      • 第二步:在弹出的搜索框里面,输入短信服务
      • 第三步:根据搜索的短信服务,下面会显示短信服务的页面,选中任意一个点击进去
    • 3. 点击短信服务, 进入短信服务页面进行配置
      • 第一步点击短信服务进入: 如下图:
      • 第二步: 点击免费开通
    • 4. 阿里大于发短信代码实现
    • 5.总结

阿里大于发短信新手入门

1. 首先阿里云官网注册

官网地址: 阿里云官网
支持钉钉账号, 支付宝账号等第三方登录,如果没有这些账号,请注册阿里云账号.

2.开通短信服务

第一步: 如果找不到短信服务菜单,请根据下图操作:

通过阿里大于发送短信,新手入门指导手册_第1张图片

第二步:在弹出的搜索框里面,输入短信服务

通过阿里大于发送短信,新手入门指导手册_第2张图片

第三步:根据搜索的短信服务,下面会显示短信服务的页面,选中任意一个点击进去

通过阿里大于发送短信,新手入门指导手册_第3张图片

3. 点击短信服务, 进入短信服务页面进行配置

第一步点击短信服务进入: 如下图:

通过阿里大于发送短信,新手入门指导手册_第4张图片

第二步: 点击免费开通

通过阿里大于发送短信,新手入门指导手册_第5张图片按照顺序:

  1. 申请签名(说明: 选择短信用途为验证码)
    注意: 现在个人申请很难了,一般都是备案过的企业才可以申请
  2. 申请模板(说明:模板为短信验证码内容)
  3. 系统设置(说明: 选中国内消息设置)
  4. 短信发送(说明:可以通过api和控制台进行测试
  5. 最终配置完成后,在用户信息管理,安全信息管理,看到如下图
    通过阿里大于发送短信,新手入门指导手册_第6张图片

4. 阿里大于发短信代码实现

说明:一般服务器端生成的短信验证码存到redis缓存数据库里面.
使用: 用户收到的短信验证码 提交到后台 ,和 redis里面保存的进行比较
导入依赖,因为用到了redis, 导入了jedis依赖(大家可以spring-boot-starter-redis也可以)

  <dependency>
            <groupId>com.aliyungroupId>
            <artifactId>aliyun-java-sdk-coreartifactId>
            <version>3.3.1version>
        dependency>
        <dependency>
            <groupId>com.aliyungroupId>
            <artifactId>aliyun-java-sdk-dysmsapiartifactId>
            <version>1.1.0version>
        dependency>
        <dependency>
            <groupId>redis.clientsgroupId>
            <artifactId>jedisartifactId>
            <version>2.8.1version>
        dependency>
/*
    1.注册阿里云账户
    2.开通短信服务
        2.1 创建 签名
        2.3 创建 模板
        2.4 充值(发短信花钱)
    3.创建accessKey密匙: key=value
 */
public class SendSmsUtils {
    static final String product = "Dysmsapi";
    // 产品域名,开发者无需替换
    static final String domain = "dysmsapi.aliyuncs.com";

    // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
    static final String accessKeyId = "自己申请的id";
    static final String accessKeySecret = "自己申请的secret";
    public static SendSmsResponse sendSms(String telephone, String code) throws ClientException {
        setNewcode();//每次随机生成四个
        code=String.valueOf(getNewcode());//获取这四个
     
        // 初始化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(telephone);
        // 必填:短信签名-可在短信控制台中找到
        request.setSignName("小码哥的进阶"); //
        // 必填:短信模板-可在短信控制台中找到
        request.setTemplateCode("SMS_174022903");  //
        // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的用户,您的验证码为${code}"时,此处的值为
        request.setTemplateParam("{\"code\":\"" + code + "\"}");
        // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        request.setOutId("yourOutId");

        // hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
            System.out.println("短信发送成功!");
        } else {
            System.out.println("短信发送失败!");//手机号假的,签名,模板,私钥
        }
        return sendSmsResponse;
    }

    //1.提供一个方法:返回一个 4位的 随机验证码:0-9构成, 返回6个随机验证码:0-9a-z
    public static  String  getRandCode(int length){
                    if(length==4){
                        String numbers ="0123456789";
                        String fourCode ="";
                        for (int i = 1; i <=4 ; i++) {
                            Double  d1 = Math.random()*numbers.length();//0-9.999
                            Double  d2 = Math.floor(d1);//0-9
                            int index = d2.intValue();//0-9
                            char c = numbers.charAt(index);
                            fourCode+=c;
                        }
                        return fourCode;
                    }
                    if(length==6){
                        String chars = "0123456789abcdefghijklmnopqrstuvwyxz";
                        StringBuilder sb = new StringBuilder();
                        for (int i = 1; i <=6 ; i++) {
                            //1.得到上面chars字符串的随机索引值
                            int  index = ((Double)Math.floor(Math.random() * chars.length())).intValue();
                            sb.append(chars.charAt(index));
                        }
                        return  sb.toString();
                    }
                return  "传递的长度有误";
    }

    //以下为测试代码,随机生成验证码
    public static int newcode;

    public static int getNewcode() {
        return newcode;
    }

    public static void setNewcode() {//0-9A-Z
        String words="0123456789abcdefhijklmnopqrstuvwxyzABCD";
        //获取words字符串里面的: 四个随机字符
        String str="";
        for (int i = 1; i <=4 ; i++) {
            int index =(int) Math.floor(Math.random()*words.length());//[0, words.length()-1]
            char c = words.charAt(index);
            str+=c;
        }



        newcode = (int) (Math.random() * 9999) + 100;  //获取四个随机数 1000-9999
        //把该验证码保存到redis中,设置过期时间
        Jedis jedis = JedisUtil.getJedis();
        jedis.set( "token"  , String.valueOf(newcode));//把随机产生的四个数字存到redis数据库了
        //设置session的过期时间 时间单位是秒
        jedis.expire("token",60);//给四个数字设置一个过期的时间: 1分钟
    }

    public static void main(String[] args) throws ClientException {
    		//测试
        SendSmsUtils.sendSms("手机号略",String.valueOf(newcode));
    }
}

5.总结

使用场景:

  1. 登录验证时使用
  2. 使用手机号登录时使用
  3. 支付时,安全校验时使用
    比如: 银行转账支付, 电商网站订单支付等
  4. 企业推广时使用,比如: 企业群发短信
  5. 当然还有其它场景

你可能感兴趣的:(阿里大于发送短信,阿里云,腾讯云,云计算)