阿里云---短信服务介绍

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

短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持 快速发送短信验证码、短信通知等。 三网合一专属通道,与工信部携号转网平台实时互 联。电信级运维保障,实时监控自动切换,到达率高达99%。短信服务API提供短信发 送、发送状态查询、短信批量发送等能力,在短信服务控制台上添加签名、模板并通过 审核之后,可以调用短信服务API完成短信发送等操作。

1 注册阿里云账号

阿里云官网:https://www.aliyun.com/
首先我们需要登录阿里云官网,然后去开通一下那个短信服务。现在我们点一下这个链接,打开这个官网。
在这里插入图片描述

然后如果大家没有账号的话,需要先注册一个。我已经注册过了,所以我这儿就直接登录就可以。大家在注册或者登录的时候,可以直接使用这个支付宝进行扫码。
点击官网首页免费注册跳转到如下注册页面:
在这里插入图片描述

2 登录阿里云

我现在已经登录进来了。那登录进来之后,我们直接去找这个短信服务就可以。那怎么找呢?注意观察这儿有一个搜索框对吧?然后我们在这里边直接输入这个短信服务就可以。好,注意观察。下边第一个就是咱们要找的,来点一下。
在这里插入图片描述

好,那现在我们就来到了这个短信服务的首页了,然后这儿有两个选项需要我们了解一下,一个是立即购买,还有一个是免费开通。
在这里插入图片描述

3 开通短信服务

那正常情况下,我们需要先开通这个短信服务,那开通之后,我们才可以使用这个服务去发送短信,能理解吧?但是大家需要注意,就是发送短信它不是免费的,所以我们得干啥?咱是不是得去购买这个短信资源包,没错吧?你比如说这儿有一个资源包是1000条短信,有效期两年,然后是35元。
在这里插入图片描述

好,但是大家不用着急买。为啥?因为这个阿里云的短信服务,它有一个测试功能。然后这个测试功能是不用购买这个短信资源包的。它是按量付费的。也就是说你发一条短信就付一条的费用,那一条应该是几分钱,然后发多少付多少,能理解吧。所以咱使用它的这个测试功能就可以。

咱没必要花这么多钱去买这么多短信,因为我们也用不了,能理解吧?那所以我们现在只需要把这个短信服务给它开通就可以了。我这儿已经开通过了,然后大家那块就按照他的指引去操作就可以了,非常简单。

然后大家在开通之后,就会进入到这个短信服务的控制台。
在这里插入图片描述
在这个页面,我们可以去做一些设置,或者是去查看一些统计信息。比如说这里边有发送量的统计,还有费用统计等等等等。然后对于我们初学者来说,我们可以进入到这个快速学习和测试。来我们现在点进去,好,可以看到这儿是不是有一个快速学习的向导,对吧?
在这里插入图片描述

要想使用这个短信服务,我们需要完成这样的五步,那接下来我们把每一步都看一下。
首先第一步要做的就是新增资质。这个资质是什么意思呢?这儿也提到了,他说这个资质其实就是一些实名化的信息。这个到底是啥呢?

我们可以点进去看一下,可以看到这个资质它分为两种,对吧?一个是自用,还有一个是他用。这个所谓的自用其实就是个人使用。那如果是他用指的就是企业或者是一些机关单位使用。那如果是自用的话,我们需要上传自己的这个身份证信息。那如果是他用,我们需要上传这个企业的营业执照等信息,能理解吧?
然后这些信息上传完成之后,阿里云的后台会进行审核,审核通过之后才可以进入到下一步。
好,然后需要给大家说明一下。由于我们现在要使用的是这个阿里云的测试功能,对吧?这个测试功能是不需要去申请这个资质的,所以这一步我们就可以直接跳过了,大家了解一下就可以。

好,那接下来我们再返回刚才的这个页面。那资质有了之后就可以进入到第二步了。
第二步是申请签名。这个签名又是啥呢?我们来看一下,他是提到了,他说签名指的是短信当中能代表发送者属性的字段。那这个具体指的是啥呢?很简单,我们看一个例子就知道了。
在这里插入图片描述

注意观察同学你看这些短信当中的这个阿里云、腾讯云,或者是这个招商银行,这就是所谓的签名。那他们是不是就能够代表这个发送者的属性,或者是发送者的身份,能理解吧?
然后对于这个测试功能来说,申请签名我们也可以跳过。因为这个测试功能它已经给咱们准备好了一个测试用的签名了,好,那这步完成之后。
我们再看第三步,这一步叫做申请模板,这个模板是啥呢?我们来看一下,他说模板指的就是具体发送的短信内容。来我们可以点进去看一下,注意观察。

我们往下翻,这儿有一个模板的例子,这就是一个所谓的模板。
在这里插入图片描述

然后需要大家特别注意的一点就是这个模板里边是可以使用变量的。比如说他这儿是不是就有一个code,对吧?这实际上就是在引用一个叫做code的变量。那这个变量什么时候传呢?就是在我们发送短信的时候去传,到时候我们需要指定这个模板,以及需要传给这个模板的变量。那这样一来这个完整的短信就能够发送出去了,好,那我们现在这个测试功能,模板也不用自己创建,它也给咱们提供好了。

所以接下来我们再看下边一步,下一步是系统设置。这个系统设置是什么呢?我们点进去看一看就可以了,注意观察,
在这里插入图片描述

这其实就是这个所谓的系统设置。在这儿我们主要可以设置一些阈值比如说这个短信发送量的阈值,包括日发送量阈值和月发送量阈值。再有就是发送频率的阈值。
设置这些阈值的主要作用,其实就是为了防止因盗刷而产生的高额费用,能理解吧?这些内容我们暂时就先不设置了。好,我们再回到这个快速学习。
在完成了前面这四个步骤之后,我们就可以去发送短信了。

那接下来我们就去做一个测试,下边就有一个发送测试对吧?那这个发送短信的方式有两种,一个是通过我们调用它的API接口去发送,还有一个是直接在这个控制台发送。

3.1 了解控制台发送

在这里插入图片描述

现在我们先测试一下控制台发送,然后在开始之前,我们需要读一下这三个注意事项。
首先第一个,由于发送短信需要付费,对吧?所以说我们在发送之前,需要确保咱们这个账户里面是有资金的那如果大家是新注册的账号,需要先去充值一下。这个大家不用充多了,充个几块钱就可以。
然后再有一个,就是说这个功能仅限于测试阶段。那如果是生产环境下,咱们必须得按照前面那四个步骤一步一步的去做好。
然后还有一点就是这个测试功能,他只能将短信发送到我们绑定的手机号码。所以一会儿大家在测试之前,需要先去绑定一下手机号码,这个咱们绑定自己的就可以。

好,给大家总结一下,也就是说大家在测试之前需要做两件事儿。第一个得先充几块钱,第2个得绑定一下这个测试的手机号码,没错吧?好,那这些做完之后,我们就可以去进行这个发送的测试了。

那接下来我发一条试一下。首先我们需要选择一个产品类型,这块儿可以选择国内短信或者是国际短信,我们选国内就行。我们需要选择一个签名,签名里边有一个测试专用的,我们点它就可以。然后再往下就是选择模板了,这个模板也有一个测试专用的,我们也选它。好,接下来我们还需要输入一下这个接收号码,也就是说你这个短信发给谁,对吧?然后需要大家注。注意的是,这个接收号码必须得从前边绑定的这些手机号码里边选,能理解吧?

好,如果大家也能够成功的发送和接收到这个短信,那就证明大家的这个短信服务是没有问题的,那接下来我们就可以去看一下,我们怎样在程序当中调用这个短信服务去发送短信了。

3.2 了解程序当中发送短信

3.2.1 配置所需依赖

如需调用阿里云的短信服务,需使用其提供的SDK,具体可参考官方文档

在这里插入图片描述
可以看到他这儿提供了多种语言的版本,对吧?其中有java,有typesscript,有go,有PHP等等。
那我们现在看这个java就可以。来,我们往下翻,注意这儿有一个环境要求,他说最低要求使用java 8,那我们现在用的是java 17,所以这个是满足的。
好,继续往下翻,这儿还有一个安装方式。那咱这个项目是不是就是使用maven去管理依赖的,对吧?所以我们按照要求增加一个这样的dependency依赖就可以。这个咱一会儿直接复制粘贴就行
在这里插入图片描述

3.2.2 编写相关代码

好,我们继续往下翻。下边是一个完整的代码,是,这个例子我们得好好看一下,来我们看一看他到底是如何发送短信的,来往下翻。

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化账号Client</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.dysmsapi20170525.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }
}


那要想调用这个短信服务去发送短信,那我们首先得去创建一个Client客户端,能理解吧?好,我们看一下这个Client是如何创建的,可以看到它这儿是先创建了一个Config对象,对吧?那Config里边是不是可以配置一些参数,对不对?我们看一下都有哪些参数。首先就是一个AccessKeyId,还有一个AccessKeySecret,这俩其实就相当于是阿里云的账号和密码。
也就是说我们在调用这个短信服务的时候是需要进行认证的,能理解吧?好,那除此之外,我们还得去设置一个endpoint,这个endpoint就是这个短信服务的地址。
好,那这样一来,这个Config就算是配置好了,那完之后就可以去创建这个Client对象了。我们需要把这个Config放到Client的构造器当中,那有了这个Client对象之后,我们就可以通过它去调用这个短信服务了。

接下来我们看一看具体是如何调用的,来往下翻,注意观察同学。

   public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.dysmsapi20170525.Client client = Sample.createClient();
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setPhoneNumbers("your_value")
                .setSignName("your_value");
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.sendSmsWithOptions(sendSmsRequest, new com.aliyun.teautil.models.RuntimeOptions());
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }

我们要想发送短信,得先去创建一个SendSmsRequest这样一个对象。直译过来其实就是发送短信的请求,没错吧?我们需要在这个请求对象当中去设置目标手机号码,设置签名。这个签名就是我们前面提到的那个概念。
然后除此之外,我们还可以设置模板,以及给模板传入的参数等等等等。
好,这个请求对象创建完毕之后,我们就可以调用这个Client的sendSmsWithOptions的方法去发送这个请求了。
这样一来,当这个短信服务收到这个请求之后,就会向咱们这个目标手机号码发送短信了。能理解吧?好,这就是这个SDK的一个基础用法。

4 申请AccessKey ID和AccessKey Secret

设置AccessKey ID
在发送短信时需要进行身份认证,只有认证通过才能发送短信。要设置用于 发送短信时进行身份认证的key和密钥。鼠标放在页面右上角当前用户头像上,会出现下 拉菜单:
在这里插入图片描述
好,进来之后,我们点击继续使用AccessKey 。可以看到我这儿已经有1·个AccessKey 了,这个是我之前创建的,然后大家他那块儿可能是没有的那不管有没有,我们现在都创建一个新的AccessKey 来,我们点一下这个按钮。
在这里插入图片描述
好,点完之后这儿需要做一个安全验证,对吧?那现在我验证一下OK可以看到验证完之后,这个AccessKey就创建出来了,对吧?

在这里插入图片描述
然后大家需要注意一下,这个AccessKey它只在创建的时候展示一次,那后续就不能再查询了。所以我们必须得给它保存好,接下来我们复制一下,首先把这个AccessKey ID和AccessKey Secret复制一下之后,放到我们项目当中的配置文件当中这个位置,那这几个参数就准备好了。

需要给大家强调一下,就是这个阿里云的AccessKey是非常重要的,如果有一个人他拿到了你的AccessKey那他其实就可以以你的身份去操作你的各项阿里云的服务了。那这个是非常恐怖的,所以大家一定要确保自己的AccessKey不会泄露。

5 编写相关代码

首先先给大家说一下这个大致的思路。刚才大家也看到了,就是我们要想调用这个阿里云的短信服务,咱得先有一个Client对象,没错吧?我们把这个短信服务的Client交给spring容器去管理。
我们哪里需要它,再在哪里注入就可以了,能理解吧?
然后这个Client的创建是不是也需要用到3个参数?分别是AccessKey ID,AccessKey Secret, 还有一个就是这个endpoint ,然后这三个参数我们肯定也不能写死在代码当中,那应该怎么办?是不是也应该配置到application.yml这个配置文件当中,我们再把它映射到配置类当中。

5.1 导入maven坐标

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>dysmsapi20170525</artifactId>
  <version>3.0.0</version>
</dependency>

5.2 配置发送短信客户端

application.yml中增加如下内容

aliyun:
  sms:
    access-key-id: <access-key-id>
    access-key-secret: <access-key-secret>
    endpoint: dysmsapi.aliyuncs.com

注意

上述access-key-idaccess-key-secret需根据实际情况进行修改。

下边我们其实就可以先把这几个参数给它映射到一个配置类了

@Data
@ConfigurationProperties(prefix = "aliyun.sms")
public class AliyunSMSProperties {

    private String accessKeyId;

    private String accessKeySecret;

    private String endpoint;
}

好,那这几个参数就映射完毕了,那接下来我们是不是就可以去配置Client这个Ban了

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(AliyunSMSProperties.class)
@ConditionalOnProperty(name = "aliyun.sms.endpoint")
public class AliyunSMSConfiguration {

    @Autowired
    private AliyunSMSProperties properties;

    @Bean
    public Client smsClient() {
    // 注意引入正确的包
        Config config = new Config();
        config.setAccessKeyId(properties.getAccessKeyId());
        config.setAccessKeySecret(properties.getAccessKeySecret());
        config.setEndpoint(properties.getEndpoint());
        try {
            return new Client(config);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}

5.3 编写Service层逻辑

  • SmsService中增加如下内容
public interface SmsService {
    void sendCode(String phone, String verifyCode);
}
  • SmsServiceImpl中增加如下内容
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.atguigu.lease.web.app.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SmsServiceImpl implements SmsService {
    @Autowired
    private Client client;

    /**
     * 发送短信
     * @param phone
     * @param code
     */
    @Override
    public void sendCode(String phone, String code) {

        SendSmsRequest smsRequest = new SendSmsRequest();
        smsRequest.setPhoneNumbers(phone);
        // 签名
        smsRequest.setSignName("阿里云短信测试");
        // 模板code
        smsRequest.setTemplateCode("SMS_154950909");
        // 模板参数
        smsRequest.setTemplateParam("{\"code\":\"" + code + "\"}");
        try {
            client.sendSms(smsRequest);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

以上的签名,模板code,可从 调用测试签名模板API 当中复制
在这里插入图片描述

5.4 编写测试代码

@SpringBootTest
class SmsServiceImplTest {

    @Autowired
    private SmsService smsService;

    @Test
    void sendCode() {
    //由于这是使用的阿里云通过的测试短信发送服务,所以这里的手机号需要在阿里云短信服务中配置绑定
        smsService.sendCode("189xxxxxxxx", "1234");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值