注册用户账号需要使用手机验证码进行操作,而手机验证码发送使用的是阿里云短信服务,发送短信操作可以参考:阿里云短信服务官方文档 。其原理也比较简单,下面是使用步骤:

首先我们需要引入相关依赖:

<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId></dependency>
</dependencies>

下面是我项目中发送验证码使用的一个实例,其方法过程都是固定的,只需要根据项目修改相应的参数即可:

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.wang.allservice.service.msm.MsmService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;import java.util.HashMap;@Service
public class MsmServiceImpl implements MsmService {private String accessKeyId = "";  // 改成自己阿里云上的 accessKeyIdprivate String accessSecretId = ""; // 改成自己阿里云上的 accessSecretId// 发送验证码@Overridepublic boolean sendCode(HashMap<String, Object> param, String phone) {if(StringUtils.isEmpty(phone)) return false;// 创建 Acs 请求客户端DefaultProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessSecretId);IAcsClient client = new DefaultAcsClient(profile);//设置相关固定的参数CommonRequest request = new CommonRequest();//request.setProtocol(ProtocolType.HTTPS);request.setMethod(MethodType.POST);request.setDomain("dysmsapi.aliyuncs.com");request.setVersion("2017-05-25");request.setAction("SendSms");//设置发送相关的参数request.putQueryParameter("PhoneNumbers",phone); //手机号request.putQueryParameter("SignName","我的ES在线教育网站"); //申请阿里云 签名名称request.putQueryParameter("TemplateCode","SMS_199792318"); //申请阿里云 模板coderequest.putQueryParameter("TemplateParam", JSONObject.toJSONString(param)); //验证码数据,转换json数据传递try {//最终发送CommonResponse response = client.getCommonResponse(request);boolean success = response.getHttpResponse().isSuccess();return success;}catch(Exception e) {e.printStackTrace();return false;}}
}

注册过程如下

  • 前端填写完用户注册信息之后,点击发送验证码按钮调用短信验证码服务模块接口获取验证码;

  • 服务器收到发送验证请求之后,首先会根据手机号码去 redis 中获取数据,因为有可能之前已经发送过了,为了防止一定时间内重复发送问题。如果能获取到则直接返回相应的验证码值,如果没有获取到则创建一个验证码值并调用上面的阿里云短发发送接口进行发送;

  • 发送成功之后,就把发送成功验证码放到 redis 里面,并设置有效时间为5分钟,流程如下:

    @Api(tags = {"阿里云短信服务"})
    @RestController
    @RequestMapping(value = "/edumsm/msm")
    @CrossOrigin
    public class MsmController {@Autowiredprivate MsmService msmService;@Autowiredprivate RedisTemplate<String, String> redisTemplatel;// 发送短信@ApiOperation(value = "发送短信")@GetMapping("/send/{phone}")public RetMsg sendMsm(@ApiParam(name = "phone", value = "手机号码", required = true)@PathVariable String phone) {// 从redis获取验证码,如果获取得到则直接返回String code = redisTemplatel.opsForValue().get(phone);if (!StringUtils.isEmpty(code)) {return RetMsg.ok();}// 生产随机值,传递给阿里云进行发送code = RandomUtils.getFourBitRandom();HashMap<String, Object> param = new HashMap<>();param.put("code", code);// 调用service发送短信的接口boolean isSend = msmService.sendCode(param, phone);if (isSend) {// 发送成功,把发送成功验证码放到redis里面,并设置有效时间为5分钟redisTemplatel.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);return RetMsg.ok();} else {return RetMsg.error().message("短信发送失败");}}
    }
    
  • 前端收到验证码后点击注册按钮,发送注册请求到用户注册模块中进行注册,下面是一个注册流程代码:

    public void register(RegisterVo registerVo) {// 获取用户注册的数据String mobile = registerVo.getMobile(); // 手机号String nickname = registerVo.getNickname(); // 用户名String password = registerVo.getPassword(); // 密码String code = registerVo.getCode(); // 验证码// 非空判断if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(nickname)|| StringUtils.isEmpty(password) || StringUtils.isEmpty(code)) {throw new EduShopException(20001, "注册失败");}// 判断验证码是否有效String redisCode = redisTemplate.opsForValue().get(mobile);if (!code.equals(redisCode)) {throw new EduShopException(20001, "注册失败");}// 判断手机号是否已注册QueryWrapper<UcenterMember> wrapper = new QueryWrapper<>();wrapper.eq("mobile", mobile);Integer count = this.baseMapper.selectCount(wrapper);if (count > 0) {throw new EduShopException(20001, "注册失败");}// 注册用户数据到数据库中UcenterMember member = new UcenterMember();member.setMobile(mobile);member.setPassword(MD5Utils.encrypt(password)); // 密码需要MD5加密member.setNickname(nickname);member.setIsDisabled(false);  // 设置用户不禁用member.setAvatar("http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132");this.baseMapper.insert(member);}
    

【编程开发】之短信注册用户流程相关推荐

  1. 微信小程序开发-短信注册功能

    关注公众号"码农帮派",查看更多系列技术文章: 微信小程序开发,实现手机号注册的功能模块,去除了网络请求,网络请求的地方可以使用wx提供的网络请求的API完成. [效果展示] [目 ...

  2. 源码国际短信平台路由流程搭建后台软件定制-移讯云短信系统

    源码国际短信平台路由流程搭建后台软件定制-移讯云短信系统 短信路由流程 这里说下我们在开发实践过程中实现短信路由的流程 1:设置账号的全网通道.2:设置通道可发的地区.3:设置内容关键字的通道 流程: ...

  3. 阿里云短信服务接入流程

    背景 在最近的项目需求中, 需要将复用阿里短信能力, 实现用户手机号验证: 如果用户号码验证通过后, 可以让用户上传文件资料并进行打印. 故核心内容就是: 阿里云短信服务接入, 下面我们主要来介绍下阿 ...

  4. 安卓开发实现短信验证码的功能

    Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发 ...

  5. 手机短信注册验证与登录功能

    文章目录 一.前言 二.准备工作 三.发布短信 1.基本测试发布 ①可-使用测试模板进行调试 ②测试结果 ③注意,可能会调试失败,是因为没有余额.进入首页点击头像>进入余额充值:一条大概4分钱 ...

  6. 有奖调研 | 致云通信短信服务用户的一封信

    简介:感谢您一直以来对阿里云通信短信服务的支持.为了提升用户体验,为您在数字化转型的通信之路提供助力,云通信短信服务将发起一次满意度调研.有关短信服务,无论使用情况,抑或功能需求,还是文档.产品介绍页 ...

  7. android 开发 短信,Android开发之短信发送

    今天要讲的是使用Android开发发送短信程序.我们先来看下运行效果 图(1)                                                              ...

  8. 短信开发系列(二):GSM手机短信开发之短信解码

    短信开发系列目录: 短信开发系列(一):GSM手机短信开发初探 短信开发系列(二):GSM手机短信开发之短信解码 短信开发系列(三):短信接收引擎 昨天写了短信的发送,今天我们在来谈谈如果读取SIM卡 ...

  9. 开发一个短信推送工具需要怎么做

    开发一个短信推送工具需要以下几步: 选择合适的编程语言,比如说 Python.Java 等. 选择短信 API 提供商,比如 Twilio.Alibaba Cloud 等. 注册一个账号,获取 API ...

最新文章

  1. 必看2019年学员信息系统项目管理师长篇备考经验
  2. pandas用均值填充nan_Pandas学习笔记(三)
  3. Excel中Countif()函数运用技巧
  4. 经典面试题SALES TAXES思路分析和源码分享
  5. Linux配置scheme环境,用 Xcode Configuration 和 Scheme 配置项目环境
  6. Spark内核解析2
  7. 多进程IterableDataset流式读取数据的坑:每个进程会读取一遍完整数据
  8. Android彻底组件化方案实践
  9. 开源GIS(二)——openlayers加载Arcgis和geoserver在线离线切片
  10. “我的开源项目被科技巨头拿去做产品了,注释中连名字都被删掉了”
  11. eclipse导入javaWeb项目
  12. kafka报org.apache.kafka.common.errors.RecordTooLargeException
  13. 解读《美国国家BIM标准》 – BIM能力成熟度模型(四)
  14. TPYBoard MircoPython 外接SPI AD7705
  15. 好用免费的web报表工具
  16. Arduino 工控板开发
  17. Git提交项目到GitHub完整流程
  18. 音频信号的基波、谐波
  19. Spring学习-初识Spring
  20. 各种书籍免费下载地址(持续更新中)

热门文章

  1. js .style javaScript控制css属性
  2. linux media 权限,root用户在media文件夹下修改文件权限无效
  3. linux tso gso关系,1.3.1 TSO/GSO
  4. 使用python对url编码解码 (转)
  5. Java常用工具类练习题
  6. C++模板template的使用
  7. 新思科技凭借Coverity Scan帮助NGINX确保代码质量和安全
  8. 李彦宏被泼水 !!!
  9. c语言求同时被3和7,c语言输入一个数 判断该数能否同时被3和7整除 如果能整除 则输出yes...
  10. 如何将eclipse设置全黑背景!