package com.ks.app.controller.client.api; import com.github.qcloudsms.SmsSingleSenderResult; import com.ks.app.entity.config.SystemConfigKey; import com.ks.app.service.inter.config.SystemConfigService; import com.ks.app.service.manager.VerifyCodeManager; import com.ks.app.vo.AcceptData; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.StringUtil; import org.yeshi.utils.sms.TencentSMSUtil; import org.yeshi.utils.sms.VerifyCodeFactory; import javax.annotation.Resource; import java.util.concurrent.TimeUnit; /** * @author hxh * @title: UserController * @description: 用户接口 * @date 2021/11/16 17:37 */ @Controller @RequestMapping("api/v1/sms") public class SMSController { @Resource private SystemConfigService systemConfigService; @Resource private VerifyCodeManager verifyCodeManager; @Resource private RedisTemplate redisTemplate; /** * @return java.lang.String * @author hxh * @description 发送验证码 * @date 18:31 2021/11/16 * @param: acceptData * @param: phone **/ @ResponseBody @RequestMapping("sendSMS") public String sendSMS(AcceptData acceptData, String phone) { if (StringUtil.isMobile(phone)) { return JsonUtil.loadFalseResult("手机号格式错误"); } String key = "sendsms-" + phone; if (redisTemplate.opsForValue().setIfAbsent(key, "1", 60, TimeUnit.SECONDS)) { String code = VerifyCodeFactory.createNumber(6); String msg = systemConfigService.getValueCache(acceptData.getSystem(), SystemConfigKey.tencentVerifySMSTemplate); String appId = systemConfigService.getValueCache(acceptData.getSystem(), SystemConfigKey.tencentSMSAppId); String appKey = systemConfigService.getValueCache(acceptData.getSystem(), SystemConfigKey.tencentSMSAppKey); SmsSingleSenderResult result = TencentSMSUtil.sendSingleMsg(Integer.parseInt(appId), appKey, phone, msg.replace("{验证码}", code)); if (result.result == 0) { verifyCodeManager.sendSMSSuccess(acceptData.getSystem(), phone, code); return JsonUtil.loadTrueResult(""); } else { return JsonUtil.loadFalseResult("验证码发送失败,请稍后再试"); } } else { return JsonUtil.loadFalseResult("服务器繁忙,请稍后再试"); } } }