Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
roncoo
roncoo-education
提交
a29b41c8
R
roncoo-education
项目概览
roncoo
/
roncoo-education
大约 1 年 前同步成功
通知
146
Star
5
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roncoo-education
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
1
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a29b41c8
编写于
11月 14, 2022
作者:
F
fengyw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加领课云短信功能
上级
9c4a6246
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
227 addition
and
69 deletion
+227
-69
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/Aliyun.java
.../java/com/roncoo/education/common/core/aliyun/Aliyun.java
+5
-5
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/AliyunSmsUtil.java
...om/roncoo/education/common/core/aliyun/AliyunSmsUtil.java
+62
-62
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/sms/Sms.java
...c/main/java/com/roncoo/education/common/core/sms/Sms.java
+31
-0
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/sms/SmsUtil.java
...in/java/com/roncoo/education/common/core/sms/SmsUtil.java
+126
-0
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/biz/ApiUsersBiz.java
...om/roncoo/education/user/service/api/biz/ApiUsersBiz.java
+3
-2
未找到文件。
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/Aliyun.java
浏览文件 @
a29b41c8
...
...
@@ -20,10 +20,10 @@ public class Aliyun implements Serializable {
private
String
aliyunOssEndpoint
;
private
String
aliyunOssBucket
;
// 短信签名
private
String
aliyunSmsSignName
;
private
String
aliyunSmsAccessKeyId
;
private
String
aliyunSmsAccessKeySecret
;
private
String
aliyunSmsAuthCode
;
//
// 短信签名
//
private String aliyunSmsSignName;
//
private String aliyunSmsAccessKeyId;
//
private String aliyunSmsAccessKeySecret;
//
private String aliyunSmsAuthCode;
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/aliyun/AliyunSmsUtil.java
浏览文件 @
a29b41c8
package
com.roncoo.education.common.core.aliyun
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
com.aliyuncs.CommonRequest
;
import
com.aliyuncs.DefaultAcsClient
;
import
com.aliyuncs.IAcsClient
;
import
com.aliyuncs.http.MethodType
;
import
com.aliyuncs.profile.DefaultProfile
;
import
com.aliyuncs.profile.IClientProfile
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author fengyw
*/
@Slf4j
public
final
class
AliyunSmsUtil
{
private
AliyunSmsUtil
()
{
}
/**
* 发送验证码
*
* @param mobile
* @param code
* @param aliyun
*/
public
static
Boolean
sendVerCode
(
String
mobile
,
String
code
,
Aliyun
aliyun
)
{
String
templateParam
=
"{\"code\":\"{code}\"}"
.
replace
(
"{code}"
,
code
);
return
send
(
mobile
,
templateParam
,
aliyun
.
getAliyunSmsSignName
(),
aliyun
.
getAliyunSmsAuthCode
(),
aliyun
.
getAliyunSmsAccessKeyId
(),
aliyun
.
getAliyunSmsAccessKeySecret
());
}
private
static
Boolean
send
(
String
phone
,
String
templateParam
,
String
signName
,
String
templateCode
,
String
accessKeyId
,
String
accessKeySecret
)
{
System
.
setProperty
(
"sun.net.client.defaultConnectTimeout"
,
"10000"
);
System
.
setProperty
(
"sun.net.client.defaultReadTimeout"
,
"10000"
);
IClientProfile
profile
=
DefaultProfile
.
getProfile
(
"cn-hangzhou"
,
accessKeyId
,
accessKeySecret
);
IAcsClient
acsClient
=
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
(
"RegionId"
,
"cn-hangzhou"
);
request
.
putQueryParameter
(
"PhoneNumbers"
,
phone
);
request
.
putQueryParameter
(
"SignName"
,
signName
);
request
.
putQueryParameter
(
"TemplateCode"
,
templateCode
);
request
.
putQueryParameter
(
"TemplateParam"
,
templateParam
);
try
{
JSONObject
resultJson
=
JSONUtil
.
parseObj
(
acsClient
.
getCommonResponse
(
request
).
getData
());
if
(!
"OK"
.
equals
(
resultJson
.
getStr
(
"Code"
)))
{
log
.
error
(
"短信发送错误={}"
,
resultJson
.
getStr
(
"Message"
));
return
false
;
}
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"系统繁忙"
,
e
);
return
false
;
}
}
}
//
package com.roncoo.education.common.core.aliyun;
//
//
import cn.hutool.json.JSONObject;
//
import cn.hutool.json.JSONUtil;
//
import com.aliyuncs.CommonRequest;
//
import com.aliyuncs.DefaultAcsClient;
//
import com.aliyuncs.IAcsClient;
//
import com.aliyuncs.http.MethodType;
//
import com.aliyuncs.profile.DefaultProfile;
//
import com.aliyuncs.profile.IClientProfile;
//
import lombok.extern.slf4j.Slf4j;
//
/
//
**
//
* @author fengyw
//
*/
//
@Slf4j
//
public final class AliyunSmsUtil {
//
//
private AliyunSmsUtil() {
//
}
//
//
/**
//
* 发送验证码
//
*
//
* @param mobile
//
* @param code
//
* @param aliyun
//
*/
//
public static Boolean sendVerCode(String mobile, String code, Aliyun aliyun) {
//
String templateParam = "{\"code\":\"{code}\"}".replace("{code}", code);
//
return send(mobile, templateParam, aliyun.getAliyunSmsSignName(), aliyun.getAliyunSmsAuthCode(), aliyun.getAliyunSmsAccessKeyId(), aliyun.getAliyunSmsAccessKeySecret());
//
}
//
//
private static Boolean send(String phone, String templateParam, String signName, String templateCode, String accessKeyId, String accessKeySecret) {
//
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
//
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
//
IAcsClient acsClient = 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("RegionId", "cn-hangzhou");
//
request.putQueryParameter("PhoneNumbers", phone);
//
request.putQueryParameter("SignName", signName);
//
request.putQueryParameter("TemplateCode", templateCode);
//
request.putQueryParameter("TemplateParam", templateParam);
//
try {
//
JSONObject resultJson = JSONUtil.parseObj(acsClient.getCommonResponse(request).getData());
//
if (!"OK".equals(resultJson.getStr("Code"))) {
//
log.error("短信发送错误={}", resultJson.getStr("Message"));
//
return false;
//
}
//
return true;
//
} catch (Exception e) {
//
log.error("系统繁忙", e);
//
return false;
//
}
//
}
//
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/sms/Sms.java
0 → 100644
浏览文件 @
a29b41c8
package
com.roncoo.education.common.core.sms
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* @author wujing
*/
@Data
@Accessors
(
chain
=
true
)
public
class
Sms
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
Integer
smsPlatform
;
// Lkyun短信签名
private
String
lkyunSmsSignName
;
private
String
lkyunSmsAccessKeyId
;
private
String
lkyunSmsAccessKeySecret
;
private
String
lkyunSmsAuthCode
;
// Aliyun短信签名
private
String
aliyunSmsSignName
;
private
String
aliyunSmsAccessKeyId
;
private
String
aliyunSmsAccessKeySecret
;
private
String
aliyunSmsAuthCode
;
}
roncoo-education-common/roncoo-education-common-core/src/main/java/com/roncoo/education/common/core/sms/SmsUtil.java
0 → 100644
浏览文件 @
a29b41c8
package
com.roncoo.education.common.core.sms
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.crypto.SecureUtil
;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
com.aliyuncs.CommonRequest
;
import
com.aliyuncs.DefaultAcsClient
;
import
com.aliyuncs.IAcsClient
;
import
com.aliyuncs.http.MethodType
;
import
com.aliyuncs.profile.DefaultProfile
;
import
com.aliyuncs.profile.IClientProfile
;
import
com.roncoo.education.common.core.enums.SmsPlatformEnum
;
import
com.roncoo.education.common.core.tools.JSUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.SortedMap
;
import
java.util.TreeMap
;
/**
* @author fengyw
*/
@Slf4j
public
class
SmsUtil
{
public
static
Boolean
sendVerCode
(
String
mobile
,
String
code
,
Sms
sms
)
{
if
(
sms
.
getSmsPlatform
().
equals
(
SmsPlatformEnum
.
LK_YUN
.
getCode
()))
{
return
lkyun
(
mobile
,
getParamForCode
(
code
),
sms
.
getLkyunSmsSignName
(),
sms
.
getLkyunSmsAuthCode
(),
sms
.
getLkyunSmsAccessKeyId
(),
sms
.
getLkyunSmsAccessKeySecret
());
}
else
if
(
sms
.
getSmsPlatform
().
equals
(
SmsPlatformEnum
.
ALI_YUN
.
getCode
()))
{
String
templateParam
=
"{\"code\":\"{code}\"}"
.
replace
(
"{code}"
,
code
);
return
aliyun
(
mobile
,
templateParam
,
sms
.
getAliyunSmsSignName
(),
sms
.
getAliyunSmsAuthCode
(),
sms
.
getAliyunSmsAccessKeyId
(),
sms
.
getAliyunSmsAccessKeySecret
());
}
log
.
error
(
"该短信平台暂没实现,smsPlatform={}"
,
sms
.
getSmsPlatform
());
return
false
;
}
private
static
String
getParamForCode
(
String
code
)
{
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"code"
,
code
);
return
JSUtil
.
toJsonString
(
map
);
}
private
static
String
sign
(
Map
<
String
,
Object
>
paramMap
,
String
key
)
{
SortedMap
<
String
,
Object
>
treeMap
=
new
TreeMap
<>(
paramMap
);
StringBuilder
sb
=
new
StringBuilder
();
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
treeMap
.
entrySet
())
{
if
(!
"sign"
.
equals
(
entry
.
getKey
())
&&
StrUtil
.
isNotBlank
(
String
.
valueOf
(
entry
.
getValue
())))
{
sb
.
append
(
entry
.
getKey
()).
append
(
"="
).
append
(
entry
.
getValue
()).
append
(
"&"
);
}
}
sb
.
append
(
"key="
).
append
(
key
);
return
SecureUtil
.
md5
(
sb
.
toString
());
}
/**
* 领课云
*
* @param phone
* @param templateParam
* @param signName
* @param templateCode
* @param accessKeyId
* @param accessKeySecret
* @return
*/
private
static
Boolean
lkyun
(
String
phone
,
String
templateParam
,
String
signName
,
String
templateCode
,
String
accessKeyId
,
String
accessKeySecret
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"accessKeyId"
,
accessKeyId
);
map
.
put
(
"phoneNumbers"
,
phone
);
map
.
put
(
"templateCode"
,
templateCode
);
map
.
put
(
"templateParam"
,
templateParam
);
map
.
put
(
"signName"
,
signName
);
map
.
put
(
"signatureNonce"
,
String
.
valueOf
(
System
.
currentTimeMillis
()));
map
.
put
(
"sign"
,
sign
(
map
,
accessKeySecret
));
JSONObject
jn
=
JSONUtil
.
parseObj
(
HttpUtil
.
post
(
"https://cloud.roncoos.com/gateway/user/api/sms/send/sms"
,
map
));
if
(
jn
.
getInt
(
"code"
).
equals
(
200
))
{
return
true
;
}
else
{
log
.
error
(
"发送错误"
,
jn
.
getStr
(
"msg"
));
return
false
;
}
}
/**
* 阿里云
*
* @param phone
* @param templateParam
* @param signName
* @param templateCode
* @param accessKeyId
* @param accessKeySecret
* @return
*/
private
static
Boolean
aliyun
(
String
phone
,
String
templateParam
,
String
signName
,
String
templateCode
,
String
accessKeyId
,
String
accessKeySecret
)
{
System
.
setProperty
(
"sun.net.client.defaultConnectTimeout"
,
"10000"
);
System
.
setProperty
(
"sun.net.client.defaultReadTimeout"
,
"10000"
);
IClientProfile
profile
=
DefaultProfile
.
getProfile
(
"cn-hangzhou"
,
accessKeyId
,
accessKeySecret
);
IAcsClient
acsClient
=
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
(
"RegionId"
,
"cn-hangzhou"
);
request
.
putQueryParameter
(
"PhoneNumbers"
,
phone
);
request
.
putQueryParameter
(
"SignName"
,
signName
);
request
.
putQueryParameter
(
"TemplateCode"
,
templateCode
);
request
.
putQueryParameter
(
"TemplateParam"
,
templateParam
);
try
{
JSONObject
resultJson
=
JSONUtil
.
parseObj
(
acsClient
.
getCommonResponse
(
request
).
getData
());
if
(!
"OK"
.
equals
(
resultJson
.
getStr
(
"Code"
)))
{
log
.
error
(
"短信发送错误={}"
,
resultJson
.
getStr
(
"Message"
));
return
false
;
}
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"发送错误"
,
e
);
return
false
;
}
}
}
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/service/api/biz/ApiUsersBiz.java
浏览文件 @
a29b41c8
...
...
@@ -3,9 +3,9 @@ package com.roncoo.education.user.service.api.biz;
import
cn.hutool.core.util.IdUtil
;
import
cn.hutool.crypto.digest.DigestUtil
;
import
com.roncoo.education.common.cache.CacheRedis
;
import
com.roncoo.education.common.core.aliyun.AliyunSmsUtil
;
import
com.roncoo.education.common.core.base.Result
;
import
com.roncoo.education.common.core.enums.LoginStatusEnum
;
import
com.roncoo.education.common.core.sms.SmsUtil
;
import
com.roncoo.education.common.core.tools.BeanUtil
;
import
com.roncoo.education.common.core.tools.Constants
;
import
com.roncoo.education.common.core.tools.JWTUtil
;
...
...
@@ -144,7 +144,8 @@ public class ApiUsersBiz extends BaseBiz {
public
Result
<
String
>
sendCode
(
SendCodeReq
req
)
{
String
code
=
NOUtil
.
getVerCode
();
if
(
AliyunSmsUtil
.
sendVerCode
(
req
.
getMobile
(),
code
,
feignSysConfig
.
getAliyun
()))
{
if
(
SmsUtil
.
sendVerCode
(
req
.
getMobile
(),
code
,
feignSysConfig
.
getSms
()))
{
// 缓存5分钟
cacheRedis
.
set
(
Constants
.
RedisPre
.
CODE
+
req
.
getMobile
(),
code
,
5
,
TimeUnit
.
MINUTES
);
return
Result
.
success
(
"发送成功"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录