1.短信功能调整
2.接口返回信息调整
This commit is contained in:
@@ -1,13 +1,7 @@
|
||||
package com.njcn.user.service.impl;
|
||||
|
||||
import com.aliyuncs.DefaultAcsClient;
|
||||
import com.aliyuncs.IAcsClient;
|
||||
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
|
||||
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
|
||||
import com.aliyuncs.exceptions.ClientException;
|
||||
import com.aliyuncs.http.MethodType;
|
||||
import com.aliyuncs.profile.DefaultProfile;
|
||||
import com.aliyuncs.profile.IClientProfile;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.common.pojo.constant.PatternRegex;
|
||||
@@ -29,6 +23,7 @@ import com.njcn.user.pojo.po.User;
|
||||
import com.njcn.user.pojo.po.UserSet;
|
||||
import com.njcn.user.pojo.po.app.AppSendMsg;
|
||||
import com.njcn.user.service.*;
|
||||
import com.njcn.user.util.SmsUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
@@ -66,6 +61,8 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
|
||||
private final AppInfoSetFeignClient appInfoSetFeignClient;
|
||||
|
||||
private final SmsUtil smsUtil;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String setMessage(String phone, String devCode, String type) {
|
||||
@@ -73,40 +70,9 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
throw new BusinessException(UserResponseEnum.REGISTER_PHONE_WRONG);
|
||||
}
|
||||
SendSmsResponse sendSmsResponse = null;
|
||||
String msgTemplate = null;
|
||||
String msgTemplate = SmsUtil.getMessageTemplate(type);
|
||||
String vcode = null;
|
||||
try {
|
||||
switch (type) {
|
||||
case "0":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(0);
|
||||
break;
|
||||
case "1":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(1);
|
||||
break;
|
||||
case "2":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(2);
|
||||
break;
|
||||
case "3":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(3);
|
||||
break;
|
||||
case "4":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(4);
|
||||
break;
|
||||
case "5":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(5);
|
||||
break;
|
||||
case "6":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(6);
|
||||
break;
|
||||
case "7":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(7);
|
||||
break;
|
||||
case "8":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(8);
|
||||
break;
|
||||
default:
|
||||
throw new BusinessException(UserResponseEnum.CODE_TYPE_ERROR);
|
||||
}
|
||||
//type为4,账号替换为新手机号
|
||||
if (!msgTemplate.equalsIgnoreCase(MessageEnum.REGISTER.getTemplateCode())) {
|
||||
User user = this.lambdaQuery().eq(User::getPhone,phone).one();
|
||||
@@ -125,36 +91,9 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
}
|
||||
}
|
||||
}
|
||||
//开始执行短信发送
|
||||
//设置超时时间-可自行调整
|
||||
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
|
||||
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
|
||||
//初始化ascClient需要的几个参数
|
||||
//短信API产品名称(短信产品名固定,无需修改)
|
||||
final String product = "Dysmsapi";
|
||||
//短信API产品域名(接口地址固定,无需修改)
|
||||
final String domain = "dysmsapi.aliyuncs.com";
|
||||
//替换成你的AK
|
||||
//你的accessKeyId,参考本文档步骤2
|
||||
final String accessKeyId = "LTAI4FxsR76x2dq3w9c5puUe";
|
||||
//你的accessKeySecret,参考本文档步骤2
|
||||
final String accessKeySecret = "GxkTR8fsrvHtixTlD9UPmOGli35tZs";
|
||||
//初始化ascClient,暂时不支持多region(请勿修改)
|
||||
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
|
||||
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
|
||||
IAcsClient acsClient = new DefaultAcsClient(profile);
|
||||
SendSmsRequest request = new SendSmsRequest();
|
||||
request.setMethod(MethodType.POST);
|
||||
request.setPhoneNumbers(phone);
|
||||
//必填:短信签名-可在短信控制台中找到
|
||||
request.setSignName("灿能云");
|
||||
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
|
||||
request.setTemplateCode(msgTemplate);
|
||||
vcode = getMessageCode();
|
||||
String code = "{\"code\":\"" + vcode + "\"}";
|
||||
request.setTemplateParam(code);
|
||||
//请求失败这里会抛ClientException异常
|
||||
sendSmsResponse = acsClient.getAcsResponse(request);
|
||||
//获取短信发送结果
|
||||
sendSmsResponse = smsUtil.sendSms(phone,msgTemplate,"code",vcode);
|
||||
String key = RedisKeyEnum.SMS_LOGIN_KEY.getKey() + phone;
|
||||
if (sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) {
|
||||
//成功发送短信验证码后,保存进redis,验证码失效为5分钟
|
||||
@@ -169,6 +108,9 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
//短信入库
|
||||
addSendMessage(phone,vcode,msgTemplate,sendSmsResponse);
|
||||
}
|
||||
if (Objects.isNull(sendSmsResponse)){
|
||||
throw new BusinessException(UserResponseEnum.MESSAGE_SEND_FAIL);
|
||||
}
|
||||
return sendSmsResponse.getCode();
|
||||
}
|
||||
|
||||
@@ -182,6 +124,8 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
throw new BusinessException(UserResponseEnum.DEV_CODE_WRONG);
|
||||
}
|
||||
judgeCode(phone, code);
|
||||
String password = null;
|
||||
SendSmsResponse sendSmsResponse = null;
|
||||
//先根据手机号查询是否已被注册
|
||||
User user = this.lambdaQuery().eq(User::getPhone,phone).one();
|
||||
if (!Objects.isNull(user)){
|
||||
@@ -203,7 +147,20 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
appInfoSet.setDataInfo(1);
|
||||
appInfoSetFeignClient.add(appInfoSet);
|
||||
//发送用户初始密码
|
||||
sendPasswordMessage(phone,newUser.getId());
|
||||
try {
|
||||
password = redisUtil.getStringByKey(newUser.getId());
|
||||
sendSmsResponse = smsUtil.sendSms(phone,MessageEnum.getTemplateByCode(3),"pwd",password);
|
||||
if (sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) {
|
||||
//成功发送短信验证码后,删除用户密码信息
|
||||
redisUtil.delete(newUser.getId());
|
||||
} else {
|
||||
throw new BusinessException(UserResponseEnum.SEND_CODE_FAIL);
|
||||
}
|
||||
addSendMessage(phone,password,MessageEnum.getTemplateByCode(3),sendSmsResponse);
|
||||
} catch (ClientException e) {
|
||||
logger.error("发送短信异常,异常为:"+e.getMessage());
|
||||
addSendMessage(phone,password,MessageEnum.getTemplateByCode(3),sendSmsResponse);
|
||||
}
|
||||
//删除验证码
|
||||
deleteCode(phone);
|
||||
}
|
||||
@@ -281,7 +238,6 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
if (!Objects.isNull(user)){
|
||||
throw new BusinessException(UserResponseEnum.REGISTER_PHONE_REPEAT);
|
||||
}
|
||||
user = new User();
|
||||
User user2 = this.lambdaQuery().eq(User::getId,userId).one();
|
||||
user2.setName(phoneNew);
|
||||
user2.setLoginName(phoneNew);
|
||||
@@ -299,7 +255,6 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
this.update(lambdaUpdateWrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 自定义获取验证码,固定为字母和数字的组合
|
||||
*/
|
||||
@@ -328,60 +283,6 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
redisUtil.delete(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送默认密码短信给用户
|
||||
* @param phone
|
||||
* @param userId
|
||||
*/
|
||||
public void sendPasswordMessage(String phone, String userId) {
|
||||
SendSmsResponse sendSmsResponse = null;
|
||||
String password = null;
|
||||
String msgTemplate = MessageEnum.getTemplateByCode(3);
|
||||
//开始执行短信发送
|
||||
//设置超时时间-可自行调整
|
||||
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
|
||||
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
|
||||
//初始化ascClient需要的几个参数
|
||||
//短信API产品名称(短信产品名固定,无需修改)
|
||||
final String product = "Dysmsapi";
|
||||
//短信API产品域名(接口地址固定,无需修改)
|
||||
final String domain = "dysmsapi.aliyuncs.com";
|
||||
//替换成你的AK
|
||||
//你的accessKeyId,参考本文档步骤2
|
||||
final String accessKeyId = "LTAI4FxsR76x2dq3w9c5puUe";
|
||||
//你的accessKeySecret,参考本文档步骤2
|
||||
final String accessKeySecret = "GxkTR8fsrvHtixTlD9UPmOGli35tZs";
|
||||
//初始化ascClient,暂时不支持多region(请勿修改)
|
||||
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
|
||||
try {
|
||||
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
|
||||
IAcsClient acsClient = new DefaultAcsClient(profile);
|
||||
SendSmsRequest request = new SendSmsRequest();
|
||||
request.setMethod(MethodType.POST);
|
||||
request.setPhoneNumbers(phone);
|
||||
//必填:短信签名-可在短信控制台中找到
|
||||
request.setSignName("灿能云");
|
||||
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
|
||||
request.setTemplateCode(msgTemplate);
|
||||
password = redisUtil.getStringByKey(userId);
|
||||
String code = "{\"pwd\":\"" + password + "\"}";
|
||||
request.setTemplateParam(code);
|
||||
//请求失败这里会抛ClientException异常
|
||||
sendSmsResponse = acsClient.getAcsResponse(request);
|
||||
if (sendSmsResponse.getCode() != null && "OK".equals(sendSmsResponse.getCode())) {
|
||||
//成功发送短信验证码后,删除用户密码信息
|
||||
redisUtil.delete(userId);
|
||||
} else {
|
||||
throw new BusinessException(UserResponseEnum.SEND_CODE_FAIL);
|
||||
}
|
||||
addSendMessage(phone,password,msgTemplate,sendSmsResponse);
|
||||
} catch (ClientException e) {
|
||||
logger.error("发送短信异常,异常为:"+e.getMessage());
|
||||
addSendMessage(phone,password,msgTemplate,sendSmsResponse);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private User cloneUserBoToUser(String phone, String devCode, UserSet userSet) {
|
||||
User user = new User();
|
||||
//设置用户id
|
||||
@@ -423,8 +324,13 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> impleme
|
||||
appSendMsg.setPhone(phone);
|
||||
appSendMsg.setMessage(vcode);
|
||||
appSendMsg.setSendTime(LocalDateTime.now());
|
||||
appSendMsg.setSendStatus(sendSmsResponse.getCode() == null ? "无状态" : sendSmsResponse.getCode());
|
||||
appSendMsg.setRemark(sendSmsResponse.getMessage());
|
||||
if (Objects.isNull(sendSmsResponse)){
|
||||
appSendMsg.setSendStatus("无状态");
|
||||
appSendMsg.setRemark(null);
|
||||
} else {
|
||||
appSendMsg.setSendStatus(sendSmsResponse.getCode() == null ? "无状态" : sendSmsResponse.getCode());
|
||||
appSendMsg.setRemark(sendSmsResponse.getMessage());
|
||||
}
|
||||
appSendMsg.setTemplate(template);
|
||||
appSendMsgService.save(appSendMsg);
|
||||
}
|
||||
|
||||
125
pqs-user/user-boot/src/main/java/com/njcn/user/util/SmsUtil.java
Normal file
125
pqs-user/user-boot/src/main/java/com/njcn/user/util/SmsUtil.java
Normal file
@@ -0,0 +1,125 @@
|
||||
package com.njcn.user.util;
|
||||
|
||||
import com.aliyuncs.DefaultAcsClient;
|
||||
import com.aliyuncs.IAcsClient;
|
||||
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
|
||||
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
|
||||
import com.aliyuncs.exceptions.ClientException;
|
||||
import com.aliyuncs.http.MethodType;
|
||||
import com.aliyuncs.profile.DefaultProfile;
|
||||
import com.aliyuncs.profile.IClientProfile;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.user.config.Message;
|
||||
import com.njcn.user.enums.MessageEnum;
|
||||
import com.njcn.user.enums.UserResponseEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
/**
|
||||
* 类的介绍:
|
||||
*
|
||||
* @author xuyang
|
||||
* @version 1.0.0
|
||||
* @createTime 2023/8/25 13:51
|
||||
*/
|
||||
@Data
|
||||
@Configuration
|
||||
@AllArgsConstructor
|
||||
public class SmsUtil {
|
||||
|
||||
private final Message message;
|
||||
|
||||
/**
|
||||
* 短信API产品名称(短信产品名固定,无需修改)
|
||||
*/
|
||||
private static final String PRODUCT = "Dysmsapi";
|
||||
|
||||
/**
|
||||
* 短信API产品域名(接口地址固定,无需修改)
|
||||
*/
|
||||
private static final String DOMAIN = "dysmsapi.aliyuncs.com";
|
||||
|
||||
/**
|
||||
* 区域
|
||||
*/
|
||||
private static final String AREA = "cn-hangzhou";
|
||||
|
||||
/**
|
||||
* 超时时间参数
|
||||
*/
|
||||
private static final String DEFAULTCONNECTTIMEOUT = "sun.net.client.defaultConnectTimeout";
|
||||
|
||||
/**
|
||||
* 过期时间
|
||||
*/
|
||||
private static final String DEFAULTREADTIMEOUT = "sun.net.client.defaultReadTimeout";
|
||||
|
||||
|
||||
public static String getMessageTemplate(String type) {
|
||||
String msgTemplate = null;
|
||||
switch (type) {
|
||||
case "0":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(0);
|
||||
break;
|
||||
case "1":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(1);
|
||||
break;
|
||||
case "2":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(2);
|
||||
break;
|
||||
case "3":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(3);
|
||||
break;
|
||||
case "4":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(4);
|
||||
break;
|
||||
case "5":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(5);
|
||||
break;
|
||||
case "6":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(6);
|
||||
break;
|
||||
case "7":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(7);
|
||||
break;
|
||||
case "8":
|
||||
msgTemplate = MessageEnum.getTemplateByCode(8);
|
||||
break;
|
||||
default:
|
||||
throw new BusinessException(UserResponseEnum.CODE_TYPE_ERROR);
|
||||
}
|
||||
return msgTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息
|
||||
* @param phone 手机号
|
||||
* @param template 模板号
|
||||
* @param param 短信模板中定义的参数名称
|
||||
* @param value 参数实际值
|
||||
* @return sendSmsResponse 发送消息结果
|
||||
* @throws ClientException
|
||||
*/
|
||||
public SendSmsResponse sendSms(String phone, String template, String param, String value) throws ClientException {
|
||||
System.setProperty(DEFAULTCONNECTTIMEOUT, message.getTime());
|
||||
System.setProperty(DEFAULTREADTIMEOUT, message.getTime());
|
||||
//初始化ascClient,暂时不支持多region(请勿修改)
|
||||
IClientProfile profile = DefaultProfile.getProfile(AREA, message.getAccessKeyId(), message.getAccessKeySecret());
|
||||
DefaultProfile.addEndpoint(AREA, AREA, PRODUCT, DOMAIN);
|
||||
IAcsClient acsClient = new DefaultAcsClient(profile);
|
||||
SendSmsRequest request = new SendSmsRequest();
|
||||
request.setMethod(MethodType.POST);
|
||||
request.setPhoneNumbers(phone);
|
||||
//必填:短信签名-可在短信控制台中找到
|
||||
request.setSignName(message.getAutoGraph());
|
||||
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
|
||||
request.setTemplateCode(template);
|
||||
String code = "{\""+param+"\":\"" + value + "\"}";
|
||||
request.setTemplateParam(code);
|
||||
//请求失败这里会抛ClientException异常
|
||||
return acsClient.getAcsResponse(request);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user