(二十三)ATP应用测试平台——阿里云短信发送功能集成

Posted 北溟溟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(二十三)ATP应用测试平台——阿里云短信发送功能集成相关的知识,希望对你有一定的参考价值。

前言

本节内容我们主要介绍如何使用阿里云短信服务实现应用系统的短信发送,需要我们在阿里云短信平台提前申请好短信发送模板,以及短信签名、accessKey和accessSecret等资料,这里我们以发送短信验证码为例,实现短信消息的发送。

正文

①引入阿里云短信工具包的maven依赖

<!--阿里云短信包-->
<dependency>
	<groupId>com.aliyun</groupId>
	<artifactId>dysmsapi20170525</artifactId>
	<version>2.0.17</version>
</dependency>

 ②在application.yml中配置阿里云短信发送的关键参数值

 ③创建SmsProperties.class属性类,实现application.yml中短信属性注入

package com.ht.atp.plat.config;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Data
@Component
@ConfigurationProperties(prefix = "sms")
public class SmsProperties 
    @ApiModelProperty(value = "应用key")
    private String accessKeyId;

    @ApiModelProperty(value = "应用secret")
    private String accessKeySecret;

    @ApiModelProperty(value = "应用签名")
    private String signName;

    @ApiModelProperty(value = "应用验证码模板名称")
    private String validTemplateCode;

 ④创建短信发送工具类SmsUtil.class,实现短信的发送

package com.ht.atp.plat.util;

import com.alibaba.fastjson.JSON;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.ht.atp.plat.common.SmsMessage;
import com.ht.atp.plat.config.SmsProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Slf4j
@Component
public class SmsUtil 
    @Autowired
    private SmsProperties smsProperties;

    /**
     * 短信客户端创建
     *
     * @param accessKeyId
     * @param accessKeySecret
     * @return
     * @throws Exception
     */
    private Client createClient(String accessKeyId, String accessKeySecret) throws Exception 
        Config config = new Config()
                //AccessKey ID
                .setAccessKeyId(accessKeyId)
                //AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    

    /**
     * 短信发送
     *
     * @param smsMessage
     */
    public void sendSms(SmsMessage smsMessage) 
        try 
            log.info("发送短信:" + JSON.toJSONString(smsMessage));
            if (StringUtils.isBlank(smsMessage.getPhone())) 
                throw new Exception("手机号不得为空!");
            
            if (StringUtils.isBlank(smsMessage.getTemplateCode())) 
                throw new Exception("短信模板不得为空!");
            
            if (StringUtils.isBlank(smsMessage.getContent())) 
                throw new Exception("短信发送内容不得为空!");
            
            Client client = this.createClient(smsProperties.getAccessKeyId(), smsProperties.getAccessKeySecret());
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                    .setPhoneNumbers(smsMessage.getPhone())
                    .setSignName(smsProperties.getSignName())
                    .setTemplateCode(smsMessage.getTemplateCode())
                    .setTemplateParam(smsMessage.getContent());
            RuntimeOptions runtime = new RuntimeOptions();
            // 复制代码运行请自行打印 API 的返回值
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            log.info(JSON.toJSONString(sendSmsResponse));
            Integer statusCode = sendSmsResponse.statusCode;
            String code = sendSmsResponse.body.code;
            if (statusCode != 200 || !code.equals("OK")) 
                log.error(JSON.toJSONString(sendSmsResponse));
                throw new Exception(sendSmsResponse.getBody().message);
            
         catch (Exception exception) 
            log.info("服务异常!");
        
    

⑤创建短信实体类SmsMessage.class,实现短信消息的封装

package com.ht.atp.plat.common;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;


@Data
public class SmsMessage 
    @ApiModelProperty(value = "短信模板编码")
    private String templateCode;

    @ApiModelProperty(value = "手机号")
    private String phone;

    @ApiModelProperty(value = "短信内容")
    private String content;

⑥通过单元测试验证短信发送功能

⑦输入正确参数,验证阿里云短信验证码发送功能

⑧输入错误参数,验证阿里云短信验证码发送功能

结语

至此,关于阿里云短信发送功能集成测试到这里就结束了,短信发送功能也是我们项目中常常用到的组件和服务之一,这里我们将短信发送工具封装成了一个spring模式的工具类,方便执行调用,在接入其它第三方短信服务的话,我们也可以将其采用工厂的设计模式封装,这样组件就能更加灵活的使用了,希望能够帮助到你,下期见。。。

以上是关于(二十三)ATP应用测试平台——阿里云短信发送功能集成的主要内容,如果未能解决你的问题,请参考以下文章

(十三)ATP应用测试平台——springboot集成kafka案例实战

(二十)ATP应用测试平台——websocket实现微服务版在线客服聊天室实战案例

(二十一)ATP应用测试平台——vue实战之大红灯笼高高挂

(二十一)ATP应用测试平台——vue实战之大红灯笼高高挂

(二十五)ATP应用测试平台——springboot集成knife4j实现API接口文档说明

(二十二)ATP应用测试平台——swagger2集成swagger-bootstrap-ui实现API文档访问