diff --git a/cash-api/account-server/src/main/java/com/czg/controller/CommonController.java b/cash-api/account-server/src/main/java/com/czg/controller/CommonController.java new file mode 100644 index 000000000..13e1bb89d --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/CommonController.java @@ -0,0 +1,28 @@ +package com.czg.controller; + +import com.czg.account.service.CommonService; +import com.czg.resp.CzgResult; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 公共接口 + * @author Administrator + */ +@RestController("/admin/common") +public class CommonController { + @Resource + private CommonService commonService; + + /** + * 发送验证码 + * @param type 验证码类型 + * @return 是否成功 + */ + @PostMapping + public CzgResult sendSms(@RequestParam String type) { + return CzgResult.success(commonService.sendSms(type)); + } +} diff --git a/cash-api/account-server/src/main/resources/application.yml b/cash-api/account-server/src/main/resources/application.yml index 3d587cfa1..d16a67884 100644 --- a/cash-api/account-server/src/main/resources/application.yml +++ b/cash-api/account-server/src/main/resources/application.yml @@ -22,4 +22,7 @@ alipay: privateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCAjDBuS8K/IJb9ui+KuNm/sTUdEiaji4BNpZ92avO1N5JpNlGmac6ec4p3tNFT950sBLcQkClcUpQxUHQzAT6DYNNXOKyvfI/EmcqwCw6PaMNLs/8cV//J2WWZBUhLaOsjKurpm9/3W5MnTh4BGxIfBoeBMA8f8K3BgKdmyKtvIEV2h2cyjsMskdn+g6oNZcmWcms0pvpPHyH46mRaGFhpp0v19wX3WsamGldh1L2VntmaDN3C2XbSrXv90XYp5bEUqwTbLwXpMAlzTibF56d/iqv9oYi8cpAKougUFLOymnbutLNs2tLrEDSFwHcmG2/wbZHybZyYcIgFgv4arf+tAgMBAAECggEAf7hKKlw1y6Z6vvAtalxNZUuRZSfyog3p1bwYWxTavZPQcZ7Zs0lvVDmiO1u5m/7q96BbryY9IhCeUv0H5uF2lhwu/3s9AEL3qTPQkeb6eXxyhhX6A9RfPdM1Qbtg4CQHdHKg4qjP9znSVHwmDZ0y/QaEvdPdQzPjv92u9c2tn4N4x6XyBYcU5gzxiJNnIugCmBgcJo/3H2fgV+XXEhORPvy5of9b4oATHEaLS/8dAS2wuOjhzaGS4MXp3VkXn3XaYjwSzaL03qYWA+xm+aO5sJv8bmqZW7sNVck5o3sPo7cQ4VkBFVzyrRdmJcxcSRJ9MsB9JsrhoKI8pgaXrVie4QKBgQDU2vai0lpBIK/0jzRpPNoqdT8lnafnnWni8nU4kfAh+gCLi+HBPhQRT0kv4unQc2q2/gALE7sgZVO00JGY5a3R0orsojPoUSZlpypGW7GGqKy576NHn0nw4o/PdfysT92VWgt1hlfTf6qfCDhfE9APU+RGvlSWXcT8nxVel3iUaQKBgQCamoJN6+4v+chJvL2nqV8NVVRLp0vDIHxs1QOtKwUodx8Qp1D6CJYtavCXn8aNUFVNQJPJ7TQPpJjXP2rI4SN01weDwx+I+wh8PBGHV6/234R+6TvFgY1PrYgCdfNP4i/E7B4uyEhAxdU73PB8qkqRAeJGok05p7oG71KCOBiYpQKBgEZfGflcuDAeAW5GRhqg3rP4zWa/R7qgZVh9tll8jjp9b96y4XFE99d9MgId8BVVgyt6sEL5Q/2C4ni+F9TH4n6jMADp42VkJuCmsqhOOlP9whU67+2G8Sgtj0QUivPg964f9ffl8XVgGOW5DwIIB9p5btggptCLscufQK5kP545AoGADBvf6tR4wl8w9b2HqTMV08iEIqzGvVC1Dh0c/Zop/EJgN4CzUfIMOSBwGaAVAApzs+pD6QPgGP2OTwWTioo/qa4R05sbxDHNN1XJFa2jhZV6HiqMWOrNs5jm1zJ/zRjtHuJTdtyO9CvKiLbESy9XScY4/8lEfSiK5HIoJzTXkFUCgYAkYkvkW6psJpWj05XWq44UN0n6QOU/Igl35Um/iuOMVhsTmIt09STQVTuzJzfH82+sCqoRsD1blE5unKNUC1DK77aNKTv3Z0dxN9R7FAyfZRiYQXTrbBPBqWjay6FCNxn8e8UsJN4Z6FIV2LGlQI114krSap1MALKLVvnld0NaUQ== alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQkrz+emAuS1mB3KKDOMmAZRd/BlPbh7fAIHAqAj1+QCZNcV3o2BTLIIqnuKpSlFXDG3uDzp2VsBxcizXuBbFyPGylnD9CgCj5abyh3+FIHPAZ2IM3TtpqImZ0TSPGXrMli4Nir7MvZktgccCqQKCC4o6iaDGz+UwWwJUIPna8fm2tiTZ+KH150CZbKVj4ZGNpBh5XSV/1dRgyQIV9D/EwSbkZ0n6VgKQLJBi0C2UE3QB17aL1Ir6+gDXIDbknN8O7GUD3aMGdThYdSRUb5wp9CZ5qfV7vCS/CgaRo38nhH3NOzkTL+7v0m1ZDHPmqEkn9VzZN6sCQdL7PoAOjHOCwIDAQAB encryptKey: Hp1TbhOqevbHCA5ji/VlqQ== - + sms: + key: LTAI5tPdEfYSZcqHbjCrtPRD + secret: DZjyHBq3nTujF0NMLxnZgsecU8ZCvy + templateCode: SMS_244665149 diff --git a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java index a7f191722..a16edfc6b 100644 --- a/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java +++ b/cash-common/cash-common-redis/src/main/java/com/czg/config/RedisCst.java @@ -8,4 +8,5 @@ package com.czg.config; public interface RedisCst { String LOGIN_CODE = "login:code:"; + String SMS_CODE = "sms:code:"; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/CommonService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CommonService.java new file mode 100644 index 000000000..ff072d685 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CommonService.java @@ -0,0 +1,8 @@ +package com.czg.account.service; + +/** + * @author Administrator + */ +public interface CommonService { + Boolean sendSms(String type); +} diff --git a/cash-common/cash-common-tools/pom.xml b/cash-common/cash-common-tools/pom.xml index 613e27374..7ce224ede 100644 --- a/cash-common/cash-common-tools/pom.xml +++ b/cash-common/cash-common-tools/pom.xml @@ -27,6 +27,10 @@ cn.hutool hutool-all + + com.aliyun + dysmsapi20170525 + com.alibaba.fastjson2 fastjson2 diff --git a/cash-dependencies/pom.xml b/cash-dependencies/pom.xml index ccee40135..e49973757 100644 --- a/cash-dependencies/pom.xml +++ b/cash-dependencies/pom.xml @@ -33,6 +33,7 @@ 3.3.3 3.3.3 4.40.54.ALL + 2.0.24 @@ -42,6 +43,15 @@ cash-common-tools ${project.version} + + + + com.aliyun + dysmsapi20170525 + ${aliyun-sms.version} + + + com.alipay.sdk alipay-sdk-java diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java index d05306134..eb30e3735 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java @@ -10,7 +10,6 @@ import com.czg.account.service.*; import com.czg.account.vo.LoginVO; import com.czg.config.RedisCst; import com.czg.exception.ApiNotPrintException; -import com.czg.exception.CzgException; import com.czg.sa.StpKit; import com.czg.service.RedisService; import com.czg.service.account.mapper.SysMenuMapper; diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CommonServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CommonServiceImpl.java new file mode 100644 index 000000000..8644e3c54 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CommonServiceImpl.java @@ -0,0 +1,40 @@ +package com.czg.service.account.service.impl; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.czg.account.entity.SysUser; +import com.czg.account.service.CommonService; +import com.czg.account.service.SysUserService; +import com.czg.config.RedisCst; +import com.czg.exception.ApiNotPrintException; +import com.czg.sa.StpKit; +import com.czg.service.RedisService; +import com.czg.service.account.util.SmsUtil; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +/** + * @author Administrator + */ +@Service +public class CommonServiceImpl implements CommonService { + @Resource + private SmsUtil smsUtil; + @Resource + private SysUserService sysUserService; + @Resource + private RedisService redisService; + + @Override + public Boolean sendSms(String type) { + SysUser sysUser = sysUserService.queryChain().eq(SysUser::getId, StpKit.ADMIN.getLoginIdAsLong()).one(); + if (StrUtil.isBlank(sysUser.getPhone())) { + throw new ApiNotPrintException("账号未绑定手机号"); + } + int code = RandomUtil.randomInt(100000, 1000000); + redisService.set(RedisCst.SMS_CODE + sysUser.getPhone() + ":" + type, code, 300); + smsUtil.sendCode(sysUser.getPhone(), String.valueOf(code)); + return true; + } +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/util/SmsUtil.java b/cash-service/account-service/src/main/java/com/czg/service/account/util/SmsUtil.java new file mode 100644 index 000000000..59b7dd503 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/util/SmsUtil.java @@ -0,0 +1,78 @@ +package com.czg.service.account.util; + +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import com.czg.exception.ApiNotPrintException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 验证码工具类 + * + * @author Administrator + */ +@Component +@Slf4j +public class SmsUtil { + + /** + * 阿里云key + */ + @Value("${alipay.sms.key}") + private String key; + /** + * 阿里云secret + */ + @Value("${alipay.sms.secret}") + private String secret; + /** + * 短信模板id + */ + @Value("${alipay.sms.templateCode}") + private String templateCode; + + public Client createClient() throws Exception { + Config config = new Config(); + config.accessKeyId = key; + config.accessKeySecret = secret; + return new Client(config); + } + + public void sendCode(String phone, String checkCode) { + try { + Client client = createClient(); + // 1.发送短信 + com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest() + .setSignName("银收客") + .setTemplateCode(templateCode) + .setTemplateParam("{\"code\":" + "'" + checkCode + "'" + "}") + .setPhoneNumbers(phone); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + log.info("短信发送请求参数: 手机号: {}, 短信模板: {}, 短信内容: {}", phone, templateCode, checkCode); + SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); + if (sendSmsResponse.getStatusCode() != 200) { + throw new ApiNotPrintException("短信发送失败"); + } + }catch (Exception e) { + log.info("发送短信失败", e); + } + } + + public static void main(String[] args) throws Exception { + Config config = new Config(); + config.accessKeyId = "LTAI5tPdEfYSZcqHbjCrtPRD"; + config.accessKeySecret = "DZjyHBq3nTujF0NMLxnZgsecU8ZCvy"; + Client client = new Client(config); + // 1.发送短信 + com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest() + .setSignName("银收客") + .setTemplateCode("SMS_244665149") + .setTemplateParam("{\"code\":" + "'" + "23123" + "'" + "}") + .setPhoneNumbers("19502966242"); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); + System.out.println(sendSmsResponse); + } +}