阿里云短信发送

本文档详细介绍了如何通过阿里云平台获取并使用短信服务接口。首先,需要在阿里云官网开通短信服务,创建签名和模板,并进行充值。然后,通过Java SDK设置accessKey和accessSecret,实现短信发送功能。示例代码展示了如何发送短信,包括验证码的生成与存储,并提供了测试代码。
摘要由CSDN通过智能技术生成

三大运营商没有对外开放发短信接口

可以通过阿里或腾讯进行申请

一下通过阿里进行展示

登录 阿里官网 搜索短信服务

1

可以进行 免费 开通

概览 里面进行四步操作
2

完成之后会生成一个秘钥

阿里官网提供了 使用的实例
阿里 Java SDK实例

/*
    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("---");  //
        // 可选:模板中的变量替换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));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值