1.项目中引入Maven
阿里云地址
不同编程语言都有对应的SDK,你们下载自己需要的即可。
pom.xml中添加maven坐标
<!--阿里云短信服务-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-dysmsapi20170525</artifactId>
<version>2.0.22</version>
</dependency>
2.业务代码
接下来的代码不是单纯的使用短信服务商提供的发送代码来完成短信的发送那样子就太简单了,我想你们也不想看这样的文章了CSDN一抓一大把,或者看官方文档即可。为了通用短信服务商,可以是腾讯云,阿里云等提供的短信业务。
这篇文章已经推迟更新十多天了,都没时间来更新,业务代码和项目已经都是完成了我放在gitee上,到时候仓库我会公共出来,这样你们也可以拉取下来改成对应的短信发送系统。
项目使用
下面就是开始讲下项目需要配置那些数据就可以开箱即用。
系统需求
- JDK >= 1.8
- MySQL >= 5.7
- Maven >= 3.0
必要配置
- 修改数据库连接,编辑
resources
目录下的application-dev.yml
# 应用服务 WEB 访问端口
server:
#应用的端口号
port: 8080
servlet:
#应用的访问路径
context-path: /
# DataSource Config
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/itmei-sms?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true
username: root
password: root
doc
目录下有准备好使用的itmei-sms.sql
文件,到时候自己创建一个库把sql导入
- 修改短信服务商配置信息,编辑
resources
目录下的SmsParamsConfig.yml
## 配置短信
itmei-sms-config:
#是否开启短信发送
sms_send_or_not: true
# 对接的短信服务商
aliyun_sms:
accessKeyId: xxx
accessKeySecret: xxx
signName: xxx
#场景
sms_scene:
#场景类型
appointment_success: xxx
will_arrive_store: xxx
send_it_the_night_before: xxx
verification_code_sms: xxx
# 腾讯云服务商
tencent_sms:
accessKeyId: #你自己的accessKeyId
accessKeySecret: #你自己的accessKeySecret
signName: #你自己的签名
#场景
sms_scene:
#场景类型
appointment_success: #你自己的短信模板
will_arrive_store: #你自己的短信模板
send_it_the_night_before: #你自己的短信模板
verification_code_sms: #你自己的短信模板
注意:
对接的服务商名称tencent_sms,aliyun_sms
可不是乱取的,每个服务商对应一个service,这个service需要实现SmsInterface
接口
已经完成的阿里云短信实现类:
关于场景类型名称的key
需要配置到SmsSceneEnum
枚举类中定义。
由于会把SmsParamsConfig.yml
配置的数据转换成JSONObject对象来使用。这样我们在后续的代码中可以通过对应服务商的特征来使用对应的配置如下图调用。
SmsSupplierConfig
类用于获取我们定义的yml文件并且把数据转成Map<String, Object>
在转成JSONObject
对象。
短信服务商类
已我已经完成的阿里云短信服务为例:
在service包下imp创建对应短信发服务类如SmsAliyunServiceImpl
后需要实现SmsInterface
接口重写里面发方法sendSms
和getDepartmentTemplateParam
,对应服务商都会提供示例代码和对应的jar包或者是maven坐标我们引入到系统即可,把示例代码写到sendSms
方法中并且创建服务类中的唯一标识并且添加到SmsSupplierEnum
短信服务商枚举中
按照我写好的阿里云示例代码编写好你们对接的短信服务商后,我们就开始组装需要的参数并且发送信息。
发送短信测试
项目中引入了测试类,我在SmsApplicationTests类中编写了发送测试的代码
@Test
void testSmsSend() {
//配置需要使用的短信服务商信息等
SmsTemplateConfig config = new SmsTemplateConfig();
config.setSceneEnum(SmsSceneEnum.APPOINTMENT_SUCCESS.getCode());
config.setSupplierEnum(SmsSupplierEnum.ALIYUN_SMS.getCode());
config.setSourceEnum(SmsSendSourceEnum.PC.getCode());
//自己短信模板的对应参数
Map<String, Object> templateParam = new HashMap<>();
templateParam.put("name", "itmei");
templateParam.put("date_time", DateUtil.now());
templateParam.put("address", "万达广场");
templateParam.put("customer_phone", "19999999999");
templateParam.put("landline", "wxid_itmei");
config.setTemplateParam(templateParam);
smsServiec.sendSms("19999999999", config, true);
}
完成
短信发送成功保存到数据库中。