短信服务-阿里云

短信服务-阿里云

  • 1、短信服务介绍
  • 2、阿里云短信服务介绍
  • 3、阿里云短信服务准备
    • 3.1、注册账号
    • 3.2、开通短信服务
    • 3.3、设置短信签名
    • 3.4、设置短信模板
    • 3.5、设置AccessKey
      • 1、创建子用户AccessKey
    • 3.6、配置权限
    • 3.7、禁用/删除AccessKey
    • 3.8、代码开发

1、短信服务介绍

在项目中,如果我们要实现短信发送功能,我们无需自己实现,也无需和运营商直接对接,只需要调用第三方提供的短信服务即可。目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员,并且按照提供的开发文档进行调用就可以发送短信。需要说明的是,这些短信服务一般都是收费服务。

常用短信服务:

  • 阿里云

  • 华为云

  • 腾讯云

  • 京东

  • 梦网

  • 乐信

2、阿里云短信服务介绍

阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。

应用场景:

场景 案例
验证码 APP、网站注册账号,向手机下发验证码; 登录账户、异地登录时的安全提醒; 找回密码时的安全验证; 支付认证、身份校验、手机绑定等。
短信通知 向注册用户下发系统相关信息,包括: 升级或维护、服务开通、价格调整、 订单确认、物流动态、消费确认、 支付通知等普通通知短信。
推广短信 向注册用户和潜在客户发送通知和推广信息,包括促销活动通知、业务推广等商品与活动的推广信息。增加企业产品曝光率、提高产品的知名度。

阿里云短信服务官方网站: https://www.aliyun.com/product/sms?spm=5176.19720258.J_8058803260.52.5c432c4a11Dcwf

短信服务-阿里云_第1张图片

3、阿里云短信服务准备

3.1、注册账号

阿里云官网:https://www.aliyun.com/

短信服务-阿里云_第2张图片

短信服务-阿里云_第3张图片

当我们把账号注册完毕之后,我们就可以登录到阿里云系统控制台。

短信服务-阿里云_第4张图片

短信服务-阿里云_第5张图片

3.2、开通短信服务

短信服务-阿里云_第6张图片

3.3、设置短信签名

短信服务-阿里云_第7张图片

  • 注:个人申请签名不太好申请,所以我们可以选择 测试方式申请

image-20230413202031957

短信服务-阿里云_第8张图片

注意:

目前,阿里云短信服务申请签名主要针对企业开发,个人申请时有一定难度的,在审核时,会审核资质,需要上传营业执照 ;

所以,我主要是演示一下短信验证码如何发送,大家只需要学习这块的开发流程、实现方式即可,无需真正的发送短信。毕竟咱们也只是先为了学习么。

3.4、设置短信模板

  • 签名申请通过之后,才可以申请短信模板

什么是短信模板?

  • 短信模板包含短信发送内容、场景、变量信息

短信服务-阿里云_第9张图片

image-20230413202331312

  • 添加模板:按要求申请即可(关联签名:只有申请通过后,才会显示)

短信服务-阿里云_第10张图片

添加的短信模板,也是需要进行审核的只有审核通过,才可以正常使用。

3.5、设置AccessKey

AccessKey 是访问阿里云 API 的密钥,具有账户的完全权限,我们要想在后面通过API调用阿里云短信服务的接口发送短信,那么就必须要设置AccessKey。

我们点击右上角的用户头像,选择"AccessKey管理",这时就可以进入到AccessKey的管理界面。

短信服务-阿里云_第11张图片

进入到AccessKey的管理界面之后,提示两个选项 “继续使用AccessKey” 和 “开始使用子用户AccessKey”,两个区别如下:

1). 继续使用AccessKey

  • 如果选择的是该选项,我们创建的是阿里云账号的AccessKey,是具有账户的完全权限,有了这个AccessKey以后,我们就可以通过API调用阿里云的服务,不仅是短信服务,其他服务(OSS,语音服务,内容安全服务,视频点播服务…等)也可以调用。 相对来说,并不安全,当前的AccessKey泄露,会影响到我当前账户的其他云服务。

2). 开始使用子用户AccessKey

  • 可以创建一个子用户,这个子用户我们可以分配比较低的权限,比如仅分配短信发送的权限,不具备操作其他的服务的权限,即使这个AccessKey泄漏了,也不会影响其他的云服务, 相对安全。

1、创建子用户AccessKey

短信服务-阿里云_第12张图片

  • 创建成功

image-20230413203410092

3.6、配置权限

短信服务-阿里云_第13张图片

经过上述的权限配置之后,那么新创建的这个sms 用户,仅有短信服务操作的权限,不具备别的权限,即使当前的AccessKey泄漏了,也只会影响短信服务,其他服务是不受影响的。

3.7、禁用/删除AccessKey

如果在使用的过程中 AccessKey 不小心泄漏了,我们可以在阿里云控制台中, 禁用或者删除该AccessKey。

短信服务-阿里云_第14张图片

然后再创建一个新的AccessKey, 保存好AccessKeyId和AccessKeySecret。

注意: 创建好了AccessKey后,请及时保存AccessKeyId 和 AccessKeySecret ,弹窗关闭后将无法再次获取该信息,但您可以随时创建新的 AccessKey。

3.8、代码开发

官方文档: https://help.aliyun.com/product/44282.html?spm=5176.12212571.help.dexternal.57a91cbewHHjKq

短信服务-阿里云_第15张图片

  • 导入依赖
<dependency>
    <groupId>com.aliyungroupId>
    <artifactId>aliyun-java-sdk-coreartifactId>
    <version>4.5.3version>
dependency>
<dependency>
    <groupId>com.aliyungroupId>
    <artifactId>aliyun-java-sdk-dysmsapiartifactId>
    <version>2.1.0version>
dependency>
  • 随机生成验证码工具类
public class ValidateCodeUtils {
    /**
     * 随机生成验证码
     * @param length 长度为4位或者6位
     * @return
     */
    public static Integer generateValidateCode(int length){
        Integer code =null;
        if(length == 4){
            // 生成随机数,最大为9999
            code = new Random().nextInt(9999);
            if(code < 1000){
                // 保证随机数为4位数字
                code = code + 1000;
            }
        }else if(length == 6){
            // 生成随机数,最大为999999
            code = new Random().nextInt(999999);
            if(code < 100000){
                // 保证随机数为6位数字
                code = code + 100000;
            }
        }else{
            throw new RuntimeException("只能生成4位或6位数字验证码");
        }
        return code;
    }

    /**
     * 随机生成指定长度字符串验证码
     * @param length 长度
     * @return
     */
    public static String generateValidateCode4String(int length){
        Random rdm = new Random();
        String hash1 = Integer.toHexString(rdm.nextInt());
        String capstr = hash1.substring(0, length);
        return capstr;
    }
}
  • 发送短信工具类
public class SMSUtils {

    // 签名名称
    private static final String SIGN = "阿里云短信测试";
    // 模板CODE
    private static final String TEMPLATE_CODE = "SMS_154950909";

    public static void main(String[] args) {
        sendMessage(SIGN,
                TEMPLATE_CODE,
                "接收短信的手机号",
                // 验证码
                String.valueOf(ValidateCodeUtils.generateValidateCode(6)));
    }

    /**
     * 发送短信
     *
     * @param signName     签名(就是短信前面【xxx】)
     * @param templateCode 模板(就是模板内容)
     * @param phoneNumbers 手机号
     * @param param        参数
     */
    public static void sendMessage(String signName, String templateCode, String phoneNumbers, String param) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKey Id", "AccessKey Secret");
        IAcsClient client = new DefaultAcsClient(profile);

        SendSmsRequest request = new SendSmsRequest();
        request.setSysRegionId("cn-hangzhou");
        request.setPhoneNumbers(phoneNumbers);
        request.setSignName(signName);
        request.setTemplateCode(templateCode);
        request.setTemplateParam("{\"code\":\"" + param + "\"}");
        try {
            SendSmsResponse response = client.getAcsResponse(request);
            System.out.println("短信发送成功");
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(阿里云,腾讯云,云计算)