当前位置:   article > 正文

短信发送详细教程_sendsmsrequest

sendsmsrequest

一、短信服务介绍

阿里云官方:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

二、阿里云短信服务

 

 

 

三、代码开发

  1. package com.example.regiee_take_out.utils;
  2. import com.aliyuncs.DefaultAcsClient;
  3. import com.aliyuncs.IAcsClient;
  4. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
  5. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  6. import com.aliyuncs.exceptions.ClientException;
  7. import com.aliyuncs.profile.DefaultProfile;
  8. /**
  9. * 短信发送工具类
  10. */
  11. public class SMSUtils {
  12. /**
  13. * 发送短信
  14. * @param signName 签名
  15. * @param templateCode 模板
  16. * @param phoneNumbers 手机号
  17. * @param param 参数
  18. */
  19. public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
  20. DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");
  21. IAcsClient client = new DefaultAcsClient(profile);
  22. SendSmsRequest request = new SendSmsRequest();
  23. request.setSysRegionId("cn-hangzhou");
  24. request.setPhoneNumbers(phoneNumbers);
  25. request.setSignName(signName);
  26. request.setTemplateCode(templateCode);
  27. request.setTemplateParam("{\"code\":\""+param+"\"}");
  28. try {
  29. SendSmsResponse response = client.getAcsResponse(request);
  30. System.out.println("短信发送成功");
  31. }catch (ClientException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. }
  1. package com.example.regiee_take_out.utils;
  2. import java.util.Random;
  3. /**
  4. * 随机生成验证码工具类
  5. */
  6. public class ValidateCodeUtils {
  7. /**
  8. * 随机生成验证码
  9. * @param length 长度为4位或者6位
  10. * @return
  11. */
  12. public static Integer generateValidateCode(int length){
  13. Integer code =null;
  14. if(length == 4){
  15. code = new Random().nextInt(9999);//生成随机数,最大为9999
  16. if(code < 1000){
  17. code = code + 1000;//保证随机数为4位数字
  18. }
  19. }else if(length == 6){
  20. code = new Random().nextInt(999999);//生成随机数,最大为999999
  21. if(code < 100000){
  22. code = code + 100000;//保证随机数为6位数字
  23. }
  24. }else{
  25. throw new RuntimeException("只能生成4位或6位数字验证码");
  26. }
  27. return code;
  28. }
  29. /**
  30. * 随机生成指定长度字符串验证码
  31. * @param length 长度
  32. * @return
  33. */
  34. public static String generateValidateCode4String(int length){
  35. Random rdm = new Random();
  36. String hash1 = Integer.toHexString(rdm.nextInt());
  37. String capstr = hash1.substring(0, length);
  38. return capstr;
  39. }
  40. }

 

  1. package com.example.regiee_take_out.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.example.regiee_take_out.common.R;
  4. import com.example.regiee_take_out.entity.User;
  5. import com.example.regiee_take_out.service.UserService;
  6. import com.example.regiee_take_out.utils.SMSUtils;
  7. import com.example.regiee_take_out.utils.ValidateCodeUtils;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.apache.commons.lang.StringUtils;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.web.bind.annotation.PostMapping;
  12. import org.springframework.web.bind.annotation.RequestBody;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RestController;
  15. import javax.servlet.http.HttpSession;
  16. import java.util.Map;
  17. /**
  18. * @date :Created in 2023/3/15 17:35
  19. * @description
  20. * @modified By:
  21. * @version:
  22. */
  23. @RestController
  24. @RequestMapping("/user")
  25. @Slf4j
  26. public class UserController {
  27. @Autowired
  28. private UserService userService;
  29. /**
  30. *
  31. * @param user
  32. * @return
  33. */
  34. @PostMapping("/sendMsg")
  35. public R<String> sendMsg(@RequestBody User user, HttpSession session){
  36. // 获取手机号
  37. String phone = user.getPhone();
  38. if ( StringUtils.isNotEmpty(phone) ){
  39. // 生成随机的4位验证码
  40. String code = ValidateCodeUtils.generateValidateCode(4).toString();
  41. log.info("code={}",phone);
  42. log.info("code={}",code);
  43. // 调用阿里云提供的短信服务API完成发送短信
  44. // SMS_xxxx阿里云测试专用
  45. // SMSUtils.sendMessage("岭师小白","SMS_xxxx",phone,code);
  46. // SMSUtils.sendMessage("岭师小白","SMS_xxxx",phone,code);
  47. // 需要将生成的验证码保存到Session
  48. session.setAttribute(phone,code);
  49. return R.success("手机验证码短信发送成功");
  50. }
  51. return R.success("短信发送失败");
  52. }
  53. /**
  54. * 移动端登录
  55. * @param map
  56. * @param session
  57. * @return
  58. */
  59. @PostMapping("/login")
  60. public R<User> login(@RequestBody Map map, HttpSession session){
  61. log.info(map.toString());
  62. // 获取手机号
  63. String phone = map.get("phone").toString();
  64. // 获取验证码
  65. String code = map.get("code").toString();
  66. // 从Session中获取保存的验证码
  67. Object codeInSession = session.getAttribute(phone);
  68. // 进行验证码的对比(页面提交的验证码和Session中保存的验证码
  69. if ( codeInSession!=null&&codeInSession.equals(code) ){
  70. // 如果比对成功,说明登录成功
  71. LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
  72. queryWrapper.eq(User::getPhone,phone);
  73. User user = userService.getOne(queryWrapper);
  74. if ( user==null ){
  75. // 判断当前手机号对应的用户是否为新用户,如果是新用户就自动注册
  76. user = new User();
  77. user.setPhone(phone);
  78. user.setStatus(1);
  79. userService.save(user);
  80. }
  81. // 不加的话会闪退
  82. session.setAttribute("user",user.getId());
  83. return R.success(user);
  84. }
  85. return R.error("登录失败");
  86. }
  87. }

手机验证码

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/666934
推荐阅读
相关标签
  

闽ICP备14008679号