企业级短信服务解决方案

阿里云短信服务

官网:阿里云短信服务文档使用指引
https://help.aliyun.com/document_detail/59210.html

1.第一步在阿里云注册

在这里插入图片描述
在这里插入图片描述

2.第二步登录并做实名认证

注:实名认证是为了获取阿里云的服务权限
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/223c88bf5e8e42eeb33fce454fe67cfc.png

3.第三步开通短信服务

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
未开通时,界面如下(下图为阿里云老版本短信服务开通界面)
在这里插入图片描述

4.第四步设置短信签名

在这里插入图片描述

在这里插入图片描述

5.第五步设置短信模板

在这里插入图片描述
在这里插入图片描述

6.第六步获取AK和SK

注:AK和SK,是指 AccessKey ID和AccessKey Secret
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
新增用户成功后,显示页面效果
在这里插入图片描述
再次刷新,用户页面的效果
注意:AK/SK都看不到了,点进账号可以看到AK,但是SK不会显示,所以在创建用户后一定要记住SK
在这里插入图片描述

在这里插入图片描述
特别注意:一定要记住AK/SK,发送短信的代码中需要使用

7.第七步下载SDK和DEMO

在这里插入图片描述
在这里插入图片描述

8.项目中引入短信服务(项目1)

1.导包
 <!--阿里云短信服务依赖包-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.1.0</version>
        </dependency>
2.创建常量类
package com.sms.common;
/**
 * @Author: zzy
 * @Desc: 短信发送常量类
 * @Date: 2022-05-22 14:34:59
 */
public class SmsConstant {
		/**
		 * 阿里云-短信服务签名
		 */
		public static final String SIGNATURE_NAME = "阿里云短信模板";
		/**
		 * 阿里云-短信服务用户登录验证码模板CODE
		 */
		public static final String VERIFYCODE_TEMPLATE_CODE = "SMS_177539469";
		/**
		 * 客户登录验证码-session中业务key
		 */
		public static final String USER_VERIFY_CODE = "user_verify_code_";
}

3.导入信息服务工具类
package com.sms.util;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;

/**
 * 短信发送工具类
 */
public class SMSUtils {
   /**
    * 发送短信
    * @param signName 签名
    * @param templateCode 模板
    * @param phoneNumbers 手机号
    * @param param 参数
    */
   public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
      DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5t9HVTr1zoHYsKr1a62G", "lfnSHujuWeftFD85R5ZmoQjPe8wy9n");
      IAcsClient client = new DefaultAcsClient(profile);

      SendSmsRequest request = new SendSmsRequest();
      request.setSysRegionId("cn-hangzhou");
      //短信发送的手机号 多个手机号中间使用【,】逗号分隔
      request.setPhoneNumbers(phoneNumbers);
      //签名的名称
      request.setSignName(signName);
      //模板code
      request.setTemplateCode(templateCode);
      //短信验证码 注意:【code】是和模板内容中的变量名称是一致的
      request.setTemplateParam("{\"code\":\""+param+"\"}");
      try {
         SendSmsResponse response = client.getAcsResponse(request);
         System.out.println("短信发送成功");
      }catch (ClientException e) {
         e.printStackTrace();
      }
   }

}
package com.itheima.service.impl;
import com.itheima.common.SmsConstant;
import com.itheima.mapper.UserMapper;
import com.itheima.service.UserService;
import com.itheima.util.SMSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Random;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public Integer sendMsg(String phone) {
        int verificationCode = new Random().nextInt(9000)+1000;
        System.out.println("手机验证码是"+verificationCode);
        SMSUtils.sendMessage(SmsConstant.SIGNATURE_NAME,SmsConstant.VERIFYCODE_TEMPLATE_CODE,phone,verificationCode+"");
        return verificationCode;
    }

}

在这里插入图片描述

9.第八步查看API文档

注:根据API文档,完成消息的发送

第一步:创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二步:导入项目所需依赖包

在项目的pom.xml中,修改SpringBoot版本为【2.1.14.RELEASE】,原【2.5.1.RELEASE】版本过高

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.14.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.heima</groupId>
    <artifactId>heima_sms</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>heima_sms</name>
    <description>基于SpringBoot 短信发送</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--阿里云Java SDK核心库-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <!--SpringBoot Web项目起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--封装短信工具类会使用到如下依赖包,如果只是测试短信,使用上面两个依赖包即可-->
        <!--阿里 FastJSON,json格式转换-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.39</version>
        </dependency>
        <!--Lombok依赖包,简化POJO书写,提供日志注解-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.12</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
第三步:拷贝"使用示例"代码
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/*
pom.xml
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>请参见最新版本号</version>
</dependency>
*/
public class SendSms {
    public static void main(String[] args) {
        /*
         * ap-northeast-1代表RegionID
         * 表明使用那个服务区域服务器发生短信,建议根据项目所在服务器选择
         * 具体情况可以参考下面的【阿里云服务器地域介绍】
         */
        DefaultProfile profile = DefaultProfile.getProfile("ap-northeast-1", "<accessKeyId>", "<accessSecret>");
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        //注意:使用该域名会报com.aliyuncs.exceptions.ServerException: ServiceUnavailable错误
        request.setSysDomain("dysmsapi.ap-southeast-1.aliyuncs.com");
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("PhoneNumbers", "1503871****");
        request.putQueryParameter("SignName", "阿里大于测试专用");
        request.putQueryParameter("TemplateCode", "SMS_209335004");
        request.putQueryParameter("TemplateParam", "{\"code\":\"1111\"}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}
第四步:替换示例代码中关键信息
package com.sms.heima_sms;

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/**
 * @Auth: zhuan
 * @Desc: 阿里云短信发送测试
 */
public class AliyunSendSms {
    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tMrs89r3VVjNeMrWfFz", "HWL7HRx4fHaDNvIHElWqg8jpy6jkbO");
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("PhoneNumbers", "187********");
        request.putQueryParameter("SignName", "用户注册模版");
        request.putQueryParameter("TemplateCode", "SMS_177539469");
        request.putQueryParameter("TemplateParam", "{\"code\":\"6666\"}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}
第五步:完成发送短信测试

阿里云服务器地域介绍

中国地域

地域名称所在城市Region ID可用区数量
华北 1青岛cn-qingdao2
华北 2北京cn-beijing8
华北 3张家口cn-zhangjiakou3
华北 5呼和浩特cn-huhehaote2
华北 6乌兰察布cn-wulanchabu2
华东 1杭州cn-hangzhou8
华东 2上海cn-shanghai7
华南 1深圳cn-shenzhen5
华南 2河源cn-heyuan2
西南 1成都cn-chengdu2
中国香港香港cn-hongkong2

其他国家

地域名称所在城市Region ID可用区数量
亚太东南 1新加坡ap-southeast-13
亚太东南 2悉尼ap-southeast-22
亚太东南 3吉隆坡ap-southeast-32
亚太东南 5雅加达ap-southeast-52
亚太南 1孟买ap-south-12
亚太东北 1东京ap-northeast-12
美国西部 1硅谷us-west-12
美国东部 1弗吉尼亚us-east-12
欧洲中部 1法兰克福eu-central-12
英国(伦敦)伦敦eu-west-12
中东东部 1迪拜me-east-11

封装工具类

1.定义短信发送工具类

2.改造测试代码

package com.sms.sms_sms.util;

import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;

/**
 * @Auth: zhuan
 * @Desc: 阿里云短信发送工具类
 */
@Slf4j
public class AliyunSmsUtil {
    //短信发送成功状态码
    private static final String OK = "OK";
    //-------------------------阿里云短信发送相关参数设置,保持不变即可------------------
    private static final String REGIONID = "cn-hangzhou";
    private static final String DOMAIN = "dysmsapi.aliyuncs.com";
    private static final String VERSION = "2017-05-25";
    private static final String ACTION = "SendSms";
    //
    private static final String accessKeyId = "LTAI5tMrs89r3VVjNeMrWfFz";
    private static final String secret = "HWL7HRx4fHaDNvIHElWqg8jpy6jkbO";
    /**
     * 功能描述: 阿里云短信发送接口,支持通知、验证码、激活码类短信
     * @param map
     *  map中所需参数,参数名称固定,如下(注意:参数首字母都是小写的):
     *      phoneNumbers : 手机号码,支持多个中间以“,”英文逗号分隔 (必填)
     *      signName :签名(必填)
     *      templateCode :模板code(必填)
     *      templateParam :模板参数(不必填,如果是通知类短信,该参数可以不设置)
     * @return : java.lang.Boolean
     *  true-短信发送成功;false-短信发送失败
     */
    public static Boolean sendSms(Map<String,String> map){
        Boolean flag = false;
        DefaultProfile profile = DefaultProfile.getProfile(REGIONID, accessKeyId, secret);
        IAcsClient client = new DefaultAcsClient(profile);
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        //发送短信域名,不要改变
        request.setSysDomain(DOMAIN);
        request.setSysVersion(VERSION);
        request.setSysAction(ACTION);
        request.putQueryParameter("PhoneNumbers", map.get("phoneNumbers"));
        request.putQueryParameter("SignName", map.get("signName"));
        request.putQueryParameter("TemplateCode", map.get("templateCode"));
        //通知类短信,模板不需要参数。判断传递的模板参数是否为空,如果为空可能是通知类短信,则不需要添加模板参数条件
        if(map.get("templateParam") != null){
            request.putQueryParameter("TemplateParam", map.get("templateParam"));
        }
        try {
            //发送短信
            CommonResponse response = client.getCommonResponse(request);
            //发送短信结果转为Map类型
            Map<String,String> responseMap = JSON.parseObject(response.getData(), Map.class);
            //判断短信发送是否成功
            if(OK.equals(responseMap.get("Code"))){
                flag = true;
            }
            log.debug("send fail[code={}, message={}]", responseMap.get("Code"), responseMap.get("Message"));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return flag;
    }
}```
### 3.测试工具类

```java
package com.heima.heima_sms;

import com.heima.heima_sms.util.AliyunSmsUtil;
import java.util.HashMap;
import java.util.Map;
/**
 * @Auth: zhuan
 * @Desc: 工具类短信发送测试
 */
public class AliyunSendSmsTest {

    public static void main(String[] args) {
        //第一步:封装工具类所需参数
        Map<String,String> map = new HashMap<>();
        map.put("phoneNumbers","187********");
        map.put("signName","用户注册模版");
        map.put("templateCode","SMS_177539469");
        map.put("templateParam","{\"code\":\"6666\"}");
        //第二步:调用工具类完成短信发送
        Boolean success = AliyunSmsUtil.sendSms(map);
        //第三步:验证工具类短信发送是否成功
        if(success){
            System.out.println("短信发送成功");
        }else{
            System.out.println("短信发送失败");
        }
    }
}
 /**
  * 特别注意:上述代码中
  * templateCode--->SMS_177539469
  * templateParam--->{\"code\":\"6666\"}中code名称和模板中的参数名称是一致的
  * 总结:指定的【模板(SMS_177539469)】中需要的【参数名称(code)】是固定的,有对应关系,不能随便写
  */

在这里插入图片描述

封装短信组件

注:封装SpringBoot起步依赖

一、创建阿里云短信服务工程

1)创建springboot工程

在这里插入图片描述
在pom.xml中导入短信服务所需依赖包,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.14.RELEASE</version>
    </parent>
    <groupId>com.heima</groupId>
    <artifactId>heima-sms-aliyun</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>heima-sms-aliyun</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--阿里云Java SDK核心库-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <!--Lombok依赖包,简化POJO书写,提供日志注解-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.12</version>
            <scope>provided</scope>
        </dependency>
        <!--阿里 FastJSON,json格式转换-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.39</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
2)创建阿里云短信发送配置加载类
package com.sms.sms.aliyun;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * @Auth: zhuan
 * @Desc: 阿里云短信发送配置加载类
 */
@Data
@ConfigurationProperties(prefix = "aliyun.sms")
public class AliyunSmsProperties {
    /**
     * Endpoint
     */
    private String endpoint = "cn-hangzhou";

    /**
     * accessKeyId
     */
    private String accessKeyId;

    /**
     * accessKeySecret
     */
    private String accessKeySecret;

    /**
     * 短信签名
     */
    private String signName;
}
3)创建阿里云短信发送处理器
package com.sms.sms.aliyun;

import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;
/**
 * @Auth: zhuan
 * @Desc: 阿里云短信发送-处理器
 */
@Slf4j
public class AliyunSmsHandler {

    private IAcsClient client;
    //短信发送成功状态码
    private static final String OK = "OK";
    //-------------------------阿里云短信发送相关参数设置,保持不变即可------------------
    private static final String DOMAIN = "dysmsapi.aliyuncs.com";
    private static final String VERSION = "2017-05-25";
    private static final String ACTION = "SendSms";
    /**
     * 功能描述:
     *
     * @param properties
     * @return : 构造方法,初始化构造短信发送对象-IAcsClient
     */
    public AliyunSmsHandler(AliyunSmsProperties properties) {

        String endPoint = properties.getEndpoint();
        String accessKeyId = properties.getAccessKeyId();
        String accessKeySecret = properties.getAccessKeySecret();

        DefaultProfile profile = DefaultProfile.getProfile(endPoint, accessKeyId, accessKeySecret);
        client = new DefaultAcsClient(profile);
    }
    /**
     * 功能描述: 阿里云短信发送接口,支持通知、验证码、激活码类短信
     *
     * @param map map中所需参数,参数名称固定,如下(注意:参数首字母都是小写的):
     *      phoneNumbers : 手机号码,支持多个中间以“,”英文逗号分隔 (必填)
     *      signName :签名(必填)
     *      templateCode :模板code(必填)
     *      templateParam :模板参数(不必填,如果是通知类短信,该参数可以不设置)
     * @return : java.lang.Boolean
     * true-短信发送成功;false-短信发送失败
     */
    public Boolean sendSms(Map<String, String> map) {
        Boolean flag = false;
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        //发送短信域名,不要改变
        request.setSysDomain(DOMAIN);
        request.setSysVersion(VERSION);
        request.setSysAction(ACTION);
        request.putQueryParameter("PhoneNumbers", map.get("phoneNumbers"));
        request.putQueryParameter("SignName", map.get("signName"));
        request.putQueryParameter("TemplateCode", map.get("templateCode"));
        //通知类短信,模板不需要参数。判断传递的模板参数是否为空,如果为空可能是通知类短信,则不需要添加模板参数条件
        if (map.get("templateParam") != null) {
            request.putQueryParameter("TemplateParam", map.get("templateParam"));
        }
        try {
            //发送短信
            CommonResponse response = client.getCommonResponse(request);
            //发送短信结果转为Map类型
            Map<String, String> responseMap = JSON.parseObject(response.getData(), Map.class);
            //判断短信发送是否成功
            if (OK.equals(responseMap.get("Code"))) {
                flag = true;
            }
            log.debug("send fail[code={}, message={}]", responseMap.get("Code"), responseMap.get("Message"));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return flag;
    }
}

注意:下述【heima-sms-aliyun-starter】和【heima-sms-aliyun-starter-autoconfigure】两个项目名称取反了,代码不用动,把所有涉及到名称的地方替换一下即可。

二、创建阿里云短信服务起步依赖工程

1)创建springboot工程

在这里插入图片描述
在pom.xml中添加依赖包管理

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.14.RELEASE</version>
    </parent>
    <groupId>com.heima</groupId>
    <artifactId>heima-sms-aliyun-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>heima-sms-aliyun-starter</name>
    <description>黑马-阿里云短信服务组件-starter</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--阿里云短信服务工程坐标-->
        <dependency>
            <groupId>com.heima</groupId>
            <artifactId>heima-sms-aliyun</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>
2)编写【阿里云短信服务】自动配置类

在com.heima.sms.aliyun包下创建自动配置类AliyunSmsAutoConfiguration

package com.sms.sms.aliyun;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Auth: zhuan
 * @Desc: 阿里云短信服务-自动配置类
 */
@Configuration
@ConditionalOnClass({AliyunSmsHandler.class})
@EnableConfigurationProperties({AliyunSmsProperties.class})
public class AliyunSmsAutoConfiguration {
    
    /**
     * 功能描述: 初始化构建【AliyunSmsHandler】阿里云短信发送处理器对象
     * @param properties
     * @return : com.heima.sms.aliyun.AliyunSmsHandler
     */
    @Bean
    @ConditionalOnMissingBean(AliyunSmsHandler.class)
    public AliyunSmsHandler aliyunSendHandler(AliyunSmsProperties properties) {
        AliyunSmsHandler aliyunSmsHandler = new AliyunSmsHandler(properties);
        return aliyunSmsHandler;
    }
}

3)开启【阿里云短信服务】自动配置类

在resources目录下创建META-INF/spring.factories,并填写如下内容
在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.heima.sms.aliyun.AliyunSmsAutoConfiguration

三、测试【阿里云短信服务组件】

1)创建heima-sms测试工程

在这里插入图片描述
在pom.xml中导入【阿里云短信服务组件】

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.14.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.heima</groupId>
    <artifactId>heima_sms</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>heima_sms</name>
    <description>基于SpringBoot-阿里云短信服务-短信发送</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--阿里云短信服务组件-->
        <dependency>
            <groupId>com.heima</groupId>
            <artifactId>heima-sms-aliyun-starter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--SpringBoot Web项目起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>
</project>
2)配置【阿里短信服务组件】AK/SK

在application.yml中配置如下内容

aliyun:
  sms:
  	#下面替换成自己的ak、sk即可
    accessKeyId: LTAI5tMrs89r3VVjNeMrWfFz
    accessKeySecret: HWL7HRx4fHaDNvIHElWqg8jpy6jkbO
3)编写控制层代码
package com.sms.sms_sms.controller;

import com.heima.sms.aliyun.AliyunSmsHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/sms")
public class SmsController {
    @Autowired
    private AliyunSmsHandler aliyunSmsHandler;

    @PostMapping("sendVerifyCode")
    public String sendVerifyCode(@RequestBody Map map){
        String return_msg = "失败";
        Boolean flag = aliyunSmsHandler.sendSms(map);
        if(flag){
            return_msg = "成功";
        }
        return "短信发送测试:"+return_msg;
    }
}
4)使用Postman工具完成测试

在这里插入图片描述

请求地址:http://localhost:8080/sms/sendVerifyCode
请求方式:POST
参数格式:JSON
请求参数:
	{
        "phoneNumbers":"18753163301",
        "signName":"黑马品优购用户注册模版",
        "templateCode":"SMS_177539469",
        "templateParam":"{\"code\":\"6666\"}"
	}
5)最终测试效果图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值