yshop阿里云短信验证码接入

2024-08-29 13:20

本文主要是介绍yshop阿里云短信验证码接入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目需要使用验证码的方式实现登录或者注册,想起之前yshop项目也用过阿里云的短信验证码,在此记录下如何接入项目。

@Data
public class VerityParam {@NotBlank(message = "手机号必填")private String phone;//验证码登录/注册private String type;
}
	/*** 阿里云短信验证码* @param param* @return*/@AnonymousAccess@PostMapping("/register/verify")@ApiOperation(value = "短信验证码发送", notes = "短信验证码发送")public ApiResult<String> verify(@Validated @RequestBody VerityParam param) {//查询手机号记录是否存在YxUser yxUser = userService.getOne(Wrappers.<YxUser>lambdaQuery().eq(YxUser::getPhone,param.getPhone()),false);//手机号存在且为注册操作if (SmsTypeEnum.REGISTER.getValue().equals(param.getType()) && ObjectUtil.isNotNull(yxUser)) {return ApiResult.fail("手机号已注册");}//手机号不存在且为登录操作if (SmsTypeEnum.LOGIN.getValue().equals(param.getType()) && ObjectUtil.isNull(yxUser)) {return ApiResult.fail("账号不存在");}String codeKey = "code_" + param.getPhone();//6位数随机验证码String code = RandomUtil.randomNumbers(ShopConstants.YSHOP_SMS_SIZE);//多租户系统确认租户String tenantId = TenantContextHandler.getTenantId();//使用redis存储验证码redisUtil.set(tenantId + ":" + codeKey, code, ShopConstants.YSHOP_SMS_REDIS_TIME);//发送阿里云短信JSONObject json = new JSONObject();json.put("code",code);try {SmsUtils.sendSms(param.getPhone(),json.toJSONString());} catch (ClientException e) {redisUtil.del(codeKey);e.printStackTrace();return ApiResult.ok("发送失败:"+e.getErrMsg());}return ApiResult.ok("发送成功,请注意查收");}
	/*** 发送短信* @param phoneNumbers 手机号* @param templateParam 短信模板变量对应的实际值,JSON格式* accessKeyId、secret、sign(SignName)需要自行设置*/public static void sendSms(String phoneNumbers, String templateParam) throws ClientException {//租户String tenantId = TenantContextHandler.getTenantId();//根据租户从redis中取相应的值String regionId = redisUtils.getY(tenantId + ":" +"sms_region");String accessKeyId = redisUtils.getY(tenantId + ":" + "sms_access_key");String accessKeySecret = redisUtils.getY(tenantId + ":" +"sms_access_secret");String sign = redisUtils.getY(tenantId + ":" +"sms_sign");String templateId = redisUtils.getY(tenantId + ":"+ "sms_templateId");//链接阿里云DefaultProfile profile = DefaultProfile.getProfile(regionId,accessKeyId,accessKeySecret);//构建成客户端IAcsClient client = new DefaultAcsClient(profile);//构建请求CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);request.setDomain("dysmsapi.aliyuncs.com");request.setVersion("2017-05-25");request.setAction("SendSms");//区域request.putQueryParameter("RegionId", regionId);//手机号码request.putQueryParameter("PhoneNumbers", phoneNumbers);//签名名称request.putQueryParameter("SignName", sign);//模板的coderequest.putQueryParameter("TemplateCode", templateId);//构建一个短信验证码request.putQueryParameter("TemplateParam", templateParam);//向阿里云请求发送验证码CommonResponse response = client.getCommonResponse(request);System.out.println(response.getData());}
	/*** 验证码登陆** @param loginParam* @return*/@AnonymousAccess@PostMapping(value = "/login/captcha")public ApiResult logincaptcha(@Validated @RequestBody HLoginParam loginParam) {//去请求原有的逻辑获取用户信息ApiResult<YxUser> yxUserApiResult = remoteMemberUserService.HLogin(loginParam);//用户不存在if (yxUserApiResult.getStatus() != 200) {throw new YshopException(yxUserApiResult.getMsg());}System.out.println(loginParam);//租户String tenantId = TenantContextHandler.getTenantId();//查询redis中是否有验证码记录Object codeObj = redisUtil.get(tenantId + ":" + "code_" + loginParam.getUsername());if (codeObj == null) {return ApiResult.fail("请先获取验证码");}String code = codeObj.toString();//比对redis中和输入的验证码if (!StrUtil.equals(code, loginParam.getPassword())) {return ApiResult.fail("验证码错误");}return getCaptchaMapApiResult(yxUserApiResult,loginParam.getPassword());}

这篇关于yshop阿里云短信验证码接入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117981

相关文章

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

SpringBoot如何集成Kaptcha验证码

《SpringBoot如何集成Kaptcha验证码》本文介绍了如何在Java开发中使用Kaptcha生成验证码的功能,包括在pom.xml中配置依赖、在系统公共配置类中添加配置、在控制器中添加生成验证... 目录SpringBoot集成Kaptcha验证码简介实现步骤1. 在 pom.XML 配置文件中2.

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

Spring 验证码(kaptcha)

首先引入需要的jar包: <dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency> 配置验证码相关设置: <bean id="captchaProducer" class="com.

阿里云服务器ces

允许公网通过 HTTP、HTTPS 等服务访问实例 https://help.aliyun.com/document_detail/25475.html?spm=5176.2020520101.0.0.3ca96b0b3KGTPq#allowHttp

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了个性化生成的效率和效果。 UniPortrait以统一的方式定制单 ID 和多 ID 图像,提供高保真身份保存、广泛的面部可编辑性、自由格式的文本描述,并且无需预先确定的布局。

图片验证码

导入依赖 <dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.25</version></dependency></dependencies> 代码 @Servicepublic class ValidateCodeService