【SpringBoot集成阿里云短信服务实现短信验证码发送功能】 教学指南

【SpringBoot集成阿里云短信服务实现短信验证码发送功能】 教学指南

事前准备

阿里云密钥申请-需要此密钥来绑定你的阿里云账号

  1. 登录阿里云官网,找到RAM控制台申请密钥,此密钥为子密钥,不是你的账号主密钥,虽然主密钥有最高权限,但是不推荐使用主账号,避免泄露风险
    在这里插入图片描述
    2.在这里插入图片描述3. 短信服务购买,根据自己情况,价格很便宜,如果你账号有余额,应该不买也行,发送短信会自动从余额扣款,我就没有买扣的账户里的钱
    在这里插入图片描述
    在这里插入图片描述4. 短信签名和模版申请 - 就是你的短信最后会以什么样式来发送
    在这里插入图片描述
    在这里插入图片描述
    个人学习选择测试和学习就可以了,一般来说一个多小时就可以审核通过了,不要起名太官方,写明自己是测试使用的,除非你是商用,有执照
    模版申请同理

SpringBoot集成短信服务

pom.xml
        
		<properties>
	        <spring-boot.version>2.4.5</spring-boot.version>
	        <java.version>1.8</java.version>
	        <mysql-connector-java.version>8.0.16</mysql-connector-java.version>
	        <druid-spring-boot-starter.version>1.2.15</druid-spring-boot-starter.version>
	        <mybatis-spring-boot-starter.version>1.3.5</mybatis-spring-boot-starter.version>
	        <mybatis-generator-maven-plugin.version>1.3.2</mybatis-generator-maven-plugin.version>
	        <lombok.version>1.18.22</lombok.version>
	        <commons-lang3.version>3.12.0</commons-lang3.version>
	        <aliyun-java-sdk-core.version>4.5.16</aliyun-java-sdk-core.version>
	        <aliyun-java-sdk-dysmsapi.version>1.1.0</aliyun-java-sdk-dysmsapi.version>
	        <fastjson.version>1.2.15</fastjson.version>
	        <apache-httpcomponents.httpclient.version>4.5.14</apache-httpcomponents.httpclient.version>
	        <apache-httpcomponents.httpcore.version>4.4.4</apache-httpcomponents.httpcore.version>
    	</properties>
		<dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid-spring-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>${aliyun-java-sdk-core.version}</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
                <version>${aliyun-java-sdk-dysmsapi.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${apache-httpcomponents.httpclient.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>${apache-httpcomponents.httpcore.version}</version>
            </dependency>
        </dependencies>
Java代码实现
@Slf4j
@Component
public class AlibabaSendMessageService {

    // cn-beijing
    @Value("${aliyun.region.id}")
    private String regionId;
    // 你自己的密钥
    @Value("${aliyun.access.key.id}")
    private String accessKeyId;
    // 你自己的密钥
    @Value("${aliyun.secret}")
    private String secret;


    /**
     * @param phoneNumber 手机号 要发给谁
     * @param code 验证码 自己代码生成
     * @param templateCode 你申请的模版code
     * @param signName 你申请的签名
     */
    public ResultDTO<Boolean> sendMessage(String phoneNumber, String code, String templateCode, String signName) {
        // 参数校验
        if (StringUtils.isBlank(phoneNumber) || StringUtils.isBlank(code) || StringUtils.isBlank(templateCode) || StringUtils.isBlank(signName)) {
            String errorMsg = CommonErrorEnum.PARAMETER_VALIDATION_ERROR.getErrorMessage()
                    + ", please check if the following parameters are passed: phoneNumber,code,templateCode,signName";
            return ResultDTO.error(CommonErrorEnum.PARAMETER_VALIDATION_ERROR.getErrorCode(), errorMsg);
        }

        SendSmsRequest request = new SendSmsRequest();
        // 接收短信的手机号码
        request.setPhoneNumbers(phoneNumber);
        // 短信签名名称
        request.setSignName(signName);
        // 短信模板CODE
        request.setTemplateCode(templateCode);
        // 短信模板变量对应的实际值 模版当中${code}, 必须以json格式传递请注意!!!
        String jsonParam = "{\"code\":" + code + "}";
        request.setTemplateParam(jsonParam);
        try {
            DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, secret);
            IAcsClient client = new DefaultAcsClient(profile);
            SendSmsResponse response = client.getAcsResponse(request);
            if (CommonConstant.MessageResponse.OK.equals(response.getCode())) {
                return ResultDTO.success(true);
            } else {
                String errorMsg = CommonErrorEnum.SEND_MESSAGE_ERROR.getErrorMessage() + " responseCode = "
                        + response.getCode() + " requestId = " + response.getRequestId()
                        + " requestParam = " + JSON.toJSONString(request);
                log.error(errorMsg);
                return ResultDTO.error(CommonErrorEnum.SEND_MESSAGE_ERROR.getErrorCode(),
                        CommonErrorEnum.SEND_MESSAGE_ERROR.getErrorMessage());
            }
        } catch (Exception e) {
            log.error(CommonErrorEnum.COMMON_UNKNOWN_ERROR.getErrorCode()
                    + " requestParam = " + JSON.toJSONString(request), e);
            return ResultDTO.error(CommonErrorEnum.COMMON_UNKNOWN_ERROR.getErrorCode(),
                    CommonErrorEnum.COMMON_UNKNOWN_ERROR.getErrorMessage());
        }
    }
}

我直接将代码抽成服务了,@Value是读取的application.properties,由于是我自己的密钥不方便展示了,测试也可以直接写成main方法也可以

服务引入方式参考

在这里插入图片描述

在这里插入图片描述

启动项目测试

访问8080端口调用服务
在这里插入图片描述
在这里插入图片描述
测试成功

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值