Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
37da2b0b
提交
37da2b0b
authored
5月 26, 2019
作者:
sin-ning@aliyun.com
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
- 添加 aliyun 短信发送服务
上级
74724637
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
111 行增加
和
84 行删除
+111
-84
SmsService.java
...i/src/main/java/cn/iocoder/mall/admin/api/SmsService.java
+2
-2
SmsAliYunClient.java
...in/java/cn/iocoder/mall/admin/client/SmsAliYunClient.java
+17
-8
SmsClient.java
...src/main/java/cn/iocoder/mall/admin/client/SmsClient.java
+16
-4
SmsYunPianClient.java
...n/java/cn/iocoder/mall/admin/client/SmsYunPianClient.java
+8
-31
SmsTemplateDO.java
.../java/cn/iocoder/mall/admin/dataobject/SmsTemplateDO.java
+4
-1
SmsServiceImpl.java
...in/java/cn/iocoder/mall/admin/service/SmsServiceImpl.java
+12
-13
application.yaml
...m-service-impl/src/main/resources/config/application.yaml
+3
-5
SmsAliYunClientTest.java
...ava/cn/iocoder/mall/admin/client/SmsAliYunClientTest.java
+33
-0
SmsYunPianClientTest.java
...va/cn/iocoder/mall/admin/client/SmsYunPianClientTest.java
+4
-12
SmsServiceImplTest.java
...ava/cn/iocoder/mall/admin/service/SmsServiceImplTest.java
+12
-8
没有找到文件。
system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/SmsService.java
浏览文件 @
37da2b0b
...
...
@@ -68,10 +68,11 @@ public interface SmsService {
* 模板 - 创建
*
* @param smsSignId 选用的哪个签名
* @param templateCode 模板code
* @param template 模板内容
* @param platform 平台
*/
void
createTemplate
(
Integer
smsSignId
,
String
template
,
Integer
platform
,
Integer
smsType
);
void
createTemplate
(
Integer
smsSignId
,
String
template
Code
,
String
template
,
Integer
platform
,
Integer
smsType
);
/**
* 模板 - 获取
...
...
@@ -97,7 +98,6 @@ public interface SmsService {
*/
void
deleteTemplate
(
Integer
id
);
/**
* 短信发送 - 单个
*
...
...
system/system-service-impl/src/main/java/cn/iocoder/mall/admin/client/SmsAliYunClient.java
浏览文件 @
37da2b0b
package
cn
.
iocoder
.
mall
.
admin
.
client
;
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
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -23,21 +25,26 @@ import java.util.Map;
@Component
public
class
SmsAliYunClient
implements
SmsClient
{
@Value
(
"
sms.aliYun.accessKeyId
"
)
@Value
(
"
${sms.aliYun.accessKeyId}
"
)
private
String
accessKeyId
;
@Value
(
"
sms.aliYun.accessSecret
"
)
@Value
(
"
${sms.aliYun.accessSecret}
"
)
private
String
accessSecret
;
private
static
final
String
DOMAIN
=
"dysmsapi.aliyuncs.com"
;
@Override
public
SendResult
singleSend
(
String
mobile
,
String
sign
,
String
template
,
Map
<
String
,
String
>
params
)
{
public
SendResult
singleSend
(
String
mobile
,
String
sign
,
String
templateCode
,
String
template
,
Map
<
String
,
String
>
templateParams
)
{
IAcsClient
client
=
getClient
();
CommonRequest
request
=
new
CommonRequest
();
request
.
setMethod
(
MethodType
.
POST
);
request
.
setDomain
(
DOMAIN
);
request
.
setVersion
(
"2017-05-25"
);
request
.
setAction
(
"SendSms"
);
request
.
putQueryParameter
(
"PhoneNumbers"
,
mobile
);
request
.
putQueryParameter
(
"SignName"
,
sign
);
request
.
putQueryParameter
(
"TemplateCode"
,
templateCode
);
request
.
putQueryParameter
(
"TemplateParam"
,
JSON
.
toJSONString
(
templateParams
));
try
{
CommonResponse
response
=
client
.
getCommonResponse
(
request
);
...
...
@@ -49,8 +56,8 @@ public class SmsAliYunClient implements SmsClient {
}
@Override
public
SendResult
batchSend
(
List
<
String
>
mobileList
,
String
sign
,
String
template
,
Map
<
String
,
String
>
params
)
{
public
SendResult
batchSend
(
List
<
String
>
mobileList
,
String
sign
,
String
template
Code
,
String
template
,
Map
<
String
,
String
>
templateParams
)
{
// 获取 client
IAcsClient
client
=
getClient
();
...
...
@@ -60,12 +67,14 @@ public class SmsAliYunClient implements SmsClient {
request
.
setDomain
(
DOMAIN
);
request
.
setVersion
(
"2017-05-25"
);
request
.
setAction
(
"SendBatchSms"
);
request
.
putQueryParameter
(
"PhoneNumberJson"
,
JSON
.
toJSONString
(
mobileList
));
request
.
putQueryParameter
(
"SignNameJson"
,
JSON
.
toJSONString
(
Collections
.
singletonList
(
sign
)));
request
.
putQueryParameter
(
"TemplateCode"
,
templateCode
);
request
.
putQueryParameter
(
"TemplateParamJson"
,
JSON
.
toJSONString
(
Collections
.
singletonList
(
templateParams
)));
try
{
CommonResponse
response
=
client
.
getCommonResponse
(
request
);
System
.
out
.
println
(
response
.
getData
());
}
catch
(
ServerException
e
)
{
e
.
printStackTrace
();
}
catch
(
ClientException
e
)
{
e
.
printStackTrace
();
}
...
...
system/system-service-impl/src/main/java/cn/iocoder/mall/admin/client/SmsClient.java
浏览文件 @
37da2b0b
...
...
@@ -28,14 +28,26 @@ public interface SmsClient {
/**
* 短信发送 - 单个
*
* @return
* @param mobile 手机号
* @param sign 签名
* @param templateCode 短信模板code
* @param template 短信模板
* @param templateParams 短信模板 params
* @return 发送后信息
*/
SendResult
singleSend
(
String
mobile
,
String
sign
,
String
template
,
Map
<
String
,
String
>
params
);
SendResult
singleSend
(
String
mobile
,
String
sign
,
String
templateCode
,
String
template
,
Map
<
String
,
String
>
templateParams
);
/**
* 短信发送 - 批量
*
* @return
* @param mobileList 手机号
* @param sign 签名
* @param templateCode 短信模板 code
* @param template 短信模板
* @param templateParams 短信模板params
* @return 发送后信息
*/
SendResult
batchSend
(
List
<
String
>
mobileList
,
String
sign
,
String
template
,
Map
<
String
,
String
>
params
);
SendResult
batchSend
(
List
<
String
>
mobileList
,
String
sign
,
String
templateCode
,
String
template
,
Map
<
String
,
String
>
templateParams
);
}
system/system-service-impl/src/main/java/cn/iocoder/mall/admin/client/SmsYunPianClient.java
浏览文件 @
37da2b0b
...
...
@@ -2,7 +2,6 @@ package cn.iocoder.mall.admin.client;
import
cn.iocoder.common.framework.exception.ServiceException
;
import
cn.iocoder.mall.admin.api.constant.AdminErrorCodeEnum
;
import
cn.iocoder.mall.admin.api.constant.SmsApplyStatusEnum
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
org.apache.http.HttpEntity
;
...
...
@@ -96,8 +95,7 @@ public class SmsYunPianClient implements SmsClient {
private
String
apiKey
;
@Override
public
SendResult
singleSend
(
String
mobile
,
String
sign
,
String
template
,
Map
<
String
,
String
>
templateParams
)
{
public
SendResult
singleSend
(
String
mobile
,
String
sign
,
String
templateCode
,
String
template
,
Map
<
String
,
String
>
templateParams
)
{
// build 模板
template
=
buildTemplate
(
sign
,
template
,
templateParams
);
...
...
@@ -123,8 +121,7 @@ public class SmsYunPianClient implements SmsClient {
}
@Override
public
SendResult
batchSend
(
List
<
String
>
mobileList
,
String
sign
,
String
template
,
Map
<
String
,
String
>
templateParams
)
{
public
SendResult
batchSend
(
List
<
String
>
mobileList
,
String
sign
,
String
templateCode
,
String
template
,
Map
<
String
,
String
>
templateParams
)
{
// build 模板
template
=
buildTemplate
(
sign
,
template
,
templateParams
);
...
...
@@ -174,17 +171,19 @@ public class SmsYunPianClient implements SmsClient {
*
* @param sign
* @param template
* @param
p
arams
* @param
templateP
arams
* @return
*/
private
static
String
buildTemplate
(
String
sign
,
String
template
,
Map
<
String
,
String
>
params
)
{
if
(
CollectionUtils
.
isEmpty
(
params
))
{
private
static
String
buildTemplate
(
String
sign
,
String
template
,
Map
<
String
,
String
>
templateParams
)
{
if
(
CollectionUtils
.
isEmpty
(
templateParams
))
{
return
template
;
}
LOGGER
.
debug
(
"模板构建 before -> {}"
,
template
);
for
(
Map
.
Entry
<
String
,
String
>
entry
:
p
arams
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
String
>
entry
:
templateP
arams
.
entrySet
())
{
String
paramsKey
=
entry
.
getKey
();
String
value
=
entry
.
getValue
();
String
paramPlace
=
String
.
format
(
PARAM_TEMPLATE
,
paramsKey
);
...
...
@@ -196,28 +195,6 @@ public class SmsYunPianClient implements SmsClient {
return
template
;
}
/**
* 短信 status 和 云片状态 映射关系
*
* @param checkStatus
* @return
*/
private
static
Integer
smsStatusMapping
(
String
checkStatus
)
{
Integer
applyStatus
;
switch
(
checkStatus
)
{
case
"SUCCESS"
:
applyStatus
=
SmsApplyStatusEnum
.
SUCCESS
.
getValue
();
break
;
case
"FAIL"
:
applyStatus
=
SmsApplyStatusEnum
.
FAIL
.
getValue
();
break
;
default
:
applyStatus
=
SmsApplyStatusEnum
.
CHECKING
.
getValue
();
break
;
}
return
applyStatus
;
}
/**
* 基于HttpClient 4.3的通用POST方法
*
...
...
system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dataobject/SmsTemplateDO.java
浏览文件 @
37da2b0b
...
...
@@ -20,11 +20,14 @@ public class SmsTemplateDO extends DeletableDO {
* 编号
*/
private
Integer
id
;
// TODO FROM 芋艿 TO 小范,短信类型,分成,验证码类、通知类、营销类。
/**
* 模板编号 (第三方的)
*/
private
Integer
smsSignId
;
/**
* 模板 code(第三方平台 code)
*/
private
String
templateCode
;
/**
* 短信签名 id
*/
...
...
system/system-service-impl/src/main/java/cn/iocoder/mall/admin/service/SmsServiceImpl.java
浏览文件 @
37da2b0b
...
...
@@ -2,18 +2,17 @@ package cn.iocoder.mall.admin.service;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.exception.ServiceException
;
import
cn.iocoder.mall.admin.api.DataDictService
;
import
cn.iocoder.mall.admin.api.constant.SmsApplyStatusEnum
;
import
cn.iocoder.mall.admin.api.constant.SmsPlatformEnum
;
import
cn.iocoder.mall.admin.client.SmsClient
;
import
cn.iocoder.mall.admin.api.SmsService
;
import
cn.iocoder.mall.admin.api.bo.sms.SmsSignBO
;
import
cn.iocoder.mall.admin.api.bo.sms.PageSmsSignBO
;
import
cn.iocoder.mall.admin.api.bo.sms.SmsTemplateBO
;
import
cn.iocoder.mall.admin.api.bo.sms.PageSmsTemplateBO
;
import
cn.iocoder.mall.admin.api.bo.sms.SmsSignBO
;
import
cn.iocoder.mall.admin.api.bo.sms.SmsTemplateBO
;
import
cn.iocoder.mall.admin.api.constant.AdminErrorCodeEnum
;
import
cn.iocoder.mall.admin.api.constant.SmsApplyStatusEnum
;
import
cn.iocoder.mall.admin.api.constant.SmsPlatformEnum
;
import
cn.iocoder.mall.admin.api.dto.sms.PageQuerySmsSignDTO
;
import
cn.iocoder.mall.admin.api.dto.sms.PageQuerySmsTemplateDTO
;
import
cn.iocoder.mall.admin.client.SmsClient
;
import
cn.iocoder.mall.admin.convert.SmsSignConvert
;
import
cn.iocoder.mall.admin.convert.SmsTemplateConvert
;
import
cn.iocoder.mall.admin.dao.SmsSignMapper
;
...
...
@@ -44,8 +43,6 @@ import java.util.Map;
@org
.
apache
.
dubbo
.
config
.
annotation
.
Service
(
validation
=
"true"
,
version
=
"${dubbo.provider.SmsService.version}"
)
public
class
SmsServiceImpl
implements
SmsService
{
private
static
final
String
SMS_TEMPLATE
=
"【%s】%s"
;
@Autowired
private
SmsSignMapper
smsSignMapper
;
@Autowired
...
...
@@ -57,8 +54,6 @@ public class SmsServiceImpl implements SmsService {
@Autowired
@Qualifier
(
"smsAliYunClient"
)
private
SmsClient
smsAliYunClient
;
@Autowired
private
DataDictService
dataDictService
;
@Override
public
PageSmsSignBO
pageSmsSign
(
PageQuerySmsSignDTO
queryDTO
)
{
...
...
@@ -201,7 +196,8 @@ public class SmsServiceImpl implements SmsService {
@Override
@Transactional
public
void
createTemplate
(
Integer
smsSignId
,
String
template
,
Integer
platform
,
Integer
smsType
)
{
public
void
createTemplate
(
Integer
smsSignId
,
String
templateCode
,
String
template
,
Integer
platform
,
Integer
smsType
)
{
SmsSignDO
smsSignDO
=
smsSignMapper
.
selectOne
(
new
QueryWrapper
<
SmsSignDO
>().
eq
(
"id"
,
smsSignId
));
...
...
@@ -216,6 +212,7 @@ public class SmsServiceImpl implements SmsService {
(
SmsTemplateDO
)
new
SmsTemplateDO
()
.
setId
(
null
)
.
setSmsSignId
(
smsSignId
)
.
setTemplateCode
(
templateCode
)
.
setTemplate
(
template
)
.
setPlatform
(
platform
)
.
setSmsType
(
smsType
)
...
...
@@ -314,7 +311,8 @@ public class SmsServiceImpl implements SmsService {
// 获取 client
SmsClient
smsClient
=
getSmsClient
(
smsTemplateDO
.
getPlatform
());
// 发送短信
smsClient
.
singleSend
(
mobile
,
smsSignDO
.
getSign
(),
smsTemplateDO
.
getTemplate
(),
params
);
smsClient
.
singleSend
(
mobile
,
smsSignDO
.
getSign
(),
smsTemplateDO
.
getTemplateCode
(),
smsTemplateDO
.
getTemplate
(),
params
);
}
@Override
...
...
@@ -339,7 +337,8 @@ public class SmsServiceImpl implements SmsService {
// 获取 client
SmsClient
smsClient
=
getSmsClient
(
smsTemplateDO
.
getPlatform
());
// 发送短信
smsClient
.
batchSend
(
mobileList
,
smsSignDO
.
getSign
(),
smsTemplateDO
.
getTemplate
(),
params
);
smsClient
.
batchSend
(
mobileList
,
smsSignDO
.
getSign
(),
smsTemplateDO
.
getTemplateCode
(),
smsTemplateDO
.
getTemplate
(),
params
);
}
/**
...
...
system/system-service-impl/src/main/resources/config/application.yaml
浏览文件 @
37da2b0b
...
...
@@ -27,12 +27,10 @@ mybatis-plus:
# sms
sms
:
yunPian
:
apiKey
:
d4705399e71e822fe3a90f801ed95bd9
apiKey
:
${YUN_PIAN}
aliYun
:
accessKeyId
:
d4705399e71e822fe3a90f801ed95bd9
accessSecret
:
d4705399e71e822fe3a90f801ed95bd9
accessKeyId
:
${ALI_YUN_KEY_ID}
accessSecret
:
${ALI_YUN_SECRET}
# dubbo
dubbo
:
...
...
system/system-service-impl/src/test/java/cn/iocoder/mall/admin/client/SmsAliYunClientTest.java
0 → 100644
浏览文件 @
37da2b0b
package
cn
.
iocoder
.
mall
.
admin
.
client
;
import
cn.iocoder.mall.admin.SystemApplicationTest
;
import
com.google.common.collect.ImmutableMap
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
/**
* 阿里云 短信 test
*
* @author Sin
* @time 2019/5/26 10:08 AM
*/
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
(
classes
=
SystemApplicationTest
.
class
)
public
class
SmsAliYunClientTest
{
@Autowired
private
SmsAliYunClient
smsAliYunClient
;
@Test
public
void
singleSendTest
()
{
String
sign
=
"阿里云短信测试专用"
;
String
mobile
=
"13302926050"
;
String
templateCode
=
"SMS_137110043"
;
String
template
=
"验证码#code#,您正在进行身份验证,打死不要告诉别人哦!"
;
smsAliYunClient
.
singleSend
(
mobile
,
sign
,
templateCode
,
template
,
ImmutableMap
.
of
(
"code"
,
"8888"
));
}
}
system/system-service-impl/src/test/java/cn/iocoder/mall/admin/client/SmsYunPianClientTest.java
浏览文件 @
37da2b0b
package
cn
.
iocoder
.
mall
.
admin
.
client
;
import
cn.iocoder.mall.admin.SystemApplicationTest
;
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
com.google.common.collect.ImmutableMap
;
import
org.assertj.core.util.Lists
;
import
org.junit.Before
;
...
...
@@ -18,8 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.util.Map
;
/**
* 短信 sms client test
*
...
...
@@ -44,13 +34,15 @@ public class SmsYunPianClientTest {
public
void
sendMobileTest
()
{
String
mobile
=
"13302926050"
;
String
template
=
"您的验证码是#code#,打死也不告诉别人哦。"
;
smsYunPianClient
.
singleSend
(
mobile
,
sign
,
template
,
ImmutableMap
.
of
(
"code"
,
"1111"
));
smsYunPianClient
.
singleSend
(
mobile
,
sign
,
null
,
template
,
ImmutableMap
.
of
(
"code"
,
"1111"
));
}
@Test
public
void
batchSendTest
()
{
String
mobile
=
"13302926050"
;
String
template
=
"您的验证码是#code#,打死也不告诉别人哦。"
;
smsYunPianClient
.
batchSend
(
Lists
.
newArrayList
(
mobile
),
sign
,
template
,
ImmutableMap
.
of
(
"code"
,
"2222"
));
smsYunPianClient
.
batchSend
(
Lists
.
newArrayList
(
mobile
),
sign
,
null
,
template
,
ImmutableMap
.
of
(
"code"
,
"2222"
));
}
}
system/system-service-impl/src/test/java/cn/iocoder/mall/admin/service/SmsServiceImplTest.java
浏览文件 @
37da2b0b
...
...
@@ -31,8 +31,8 @@ public class SmsServiceImplTest {
@Test
public
void
createSignTest
()
{
smsService
.
createSign
(
"悦跑运动"
,
SmsPlatformEnum
.
YunPian
.
getValue
());
//
smsService.createSign("悦跑运动", SmsPlatformEnum.YunPian.getValue());
smsService
.
createSign
(
"登录确认验证码"
,
SmsPlatformEnum
.
AliYun
.
getValue
());
}
@Test
...
...
@@ -50,7 +50,6 @@ public class SmsServiceImplTest {
Assert
.
assertTrue
(
"更新不成功!"
,
smsSignBO
.
getSign
().
equals
(
newSign
));
}
@Test
public
void
deletedSignTest
()
{
smsService
.
deleteSign
(
3
);
...
...
@@ -61,23 +60,28 @@ public class SmsServiceImplTest {
@Test
public
void
createTemplateTest
()
{
String
template
=
"您的验证码是#code#,打死也不告诉别人哦。"
;
smsService
.
createTemplate
(
3
,
template
,
SmsPlatformEnum
.
YunPian
.
getValue
(),
Integer
sign
=
4
;
String
templateCode
=
"SMS_137110043"
;
String
template
=
"验证码#code#,您正在登录,若非本人操作,请勿泄露。"
;
smsService
.
createTemplate
(
sign
,
templateCode
,
template
,
SmsPlatformEnum
.
AliYun
.
getValue
(),
SmsTypeEnum
.
VERIFICATION_CODE
.
getValue
());
}
@Test
public
void
singleSendTest
()
{
String
mobile
=
"13302926050"
;
Integer
templateId
=
5
;
Integer
templateId
=
7
;
smsService
.
singleSend
(
mobile
,
templateId
,
ImmutableMap
.
of
(
"code"
,
"8888"
));
}
@Test
public
void
batchSendTest
()
{
String
mobile
=
"13302926050"
;
Integer
templateId
=
5
;
Integer
templateId
=
7
;
smsService
.
batchSend
(
Lists
.
newArrayList
(
mobile
),
templateId
,
ImmutableMap
.
of
(
"code"
,
"8888"
));
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论