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

相关文章

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

IDEA接入Deepseek的图文教程

《IDEA接入Deepseek的图文教程》在本篇文章中,我们将详细介绍如何在JetBrainsIDEA中使用Continue插件接入DeepSeek,让你的AI编程助手更智能,提高开发效率,感兴趣的小... 目录一、前置准备二、安装 Continue 插件三、配置 Continue 连接 DeepSeek四

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea