快乐项目:基于阿里云服务器的JAVA发送短信验证码服务


前言:

  今天通过学习B站狂神视频,知道了怎么利用阿里云服务器来发送验证短信,同时模拟实际业务将短信缓存到redis,在限制时间内不重发验证码短信,做完项目觉得挺快乐的,分享一下整个项目部署过程,不难,基本上有什么操作我都仔细罗列出来了,但是需要一些前提条件:阿里云服务器,java的学习基础,有需要的小伙伴可以去我的github上面参考代码,加油,同时也给狂神视频分享一波~支持支持!!!
-------------------------------------B站狂神阿里云短信业务-------------------------------------


准备条件

  一台阿里云服务器;
  java学习基础;
  SpringBoot学习基础;(有这个更好,因为我个人是基于Spingboot部署的小demo,没有的话看了文章相信你也可以完成这个小项目的)

1、登录阿里云

  点击头像选择AccessKey,AccessKey就是后面我们需要连接阿里云服务器的ID
在这里插入图片描述

  确认使用子用户AccessKey:
在这里插入图片描述

2、添加用户组

  (1)创建用户组,分配权限

在这里插入图片描述

  (2)创建用户组注意细节:

在这里插入图片描述

3、给用户组添加权限

  (1)点击新建的用户组

在这里插入图片描述

  (2)添加权限:

在这里插入图片描述

  (3)搜索以下三个权限,其中DysmsFullAccess就是短信验证服务:

在这里插入图片描述

  (4)添加成功后显示

在这里插入图片描述

4、添加用户

在这里插入图片描述

  (1)添加用户细节

在这里插入图片描述

  (2)将用户组添加到用户组,获取对应权限

在这里插入图片描述

  (3)选中用户组,确认添加

在这里插入图片描述

  (4)关键:创建AccessKey

  点击创建,我这里创建过所以是灰色的,同时阿里云会发送验证短信让你验证,验证完毕后会提示是否下载AccessKey.csv文件,一定要下载,就提示一次,上面可是有你的账号密码的,到时候代码就是要通过这个AccessKey ID和AccessKey Secret连接阿里云的。
在这里插入图片描述

  (5)供大家参考的资费

  小于十万一条 0.045
在这里插入图片描述

5、创建模板

  搜索短信服务:
在这里插入图片描述

  点进去后确认开通:
在这里插入图片描述

  先给自己账户充钱! 完全不慌
在这里插入图片描述

  点击国内消息,选择添加模板
在这里插入图片描述

  模板内容:一般审核十几分钟,填写理由正当即可
在这里插入图片描述

   重点模版CODE

  记住这个模版CODE,这个就是我们代码块中使用到的模板TemplateCode参数对应的value
在这里插入图片描述

6、添加签名

  尽量正当理由,不要用学习之类的理由。这是狂神说的,反正我没用学习的理由~嘿嘿.
在这里插入图片描述

   重点签名名称

   签名名称是等会代码中的“SignName”参数对应的value,等下代码我也会注释的~
在这里插入图片描述


  准备工作做完了,就进入写代码阶段,这里略过创建代码过程,最基本的Springboot的项目带web依赖就行,web依赖不带也行!个人的往期Springboot学习文章也有介绍的~点这里去小小白菜供大猪的更多博客!


7、添加阿里云短信依赖

        <!--        阿里短信依赖-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.3</version>
        </dependency>
        <!--        fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>
        <!--        redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>

8、添加redis服务器地址

#设置redis服务器
redis:
  host: 127.0.0.1   #redis的服务器地址
  #password: weida        #设置密码
  jedis:
    pool:
      max-active: 8
      max-wait: -1
      max-idle: 500
      min-idle: 0
  lettuce:
    shutdown-timeout: 30000

9、在service层下新建接口以及接口实现类

  ISmsService:

public interface ISmsService {
    /**
     * 发送验证短信需求
     * @param phone  发送手机号
     * @param templateCode  发送模板代码
     * @param map   模板中需要的代码块
     * @return
     */
    boolean sendSms(String phone,String templateCode,Map<String,Object> map);

    /**
     * 发送无代码短信需求
     * @param phone          需要发送到的手机号码
     * @param templateCode   发送的短信模板
     * @return
     */
    boolean sendSms(String phone,String templateCode);
}

  SmsServiceImpl :
  核心代码块就是这一部分,相关的私人信息已经屏蔽,AccessKey ID,AccessKey Secret就是前面我们csv文件保存的账号密码(可以这样理解),然后几个自定义参数:
  PhoneNumbers:手机号码
  SignName:签名
  TemplateCode:模板代码
  TemplateParam:模板参数

  使用该代码只需要修改一下这些相关信息即可


@Service
public class SmsServiceImpl  implements ISmsService {
    @Override
    public boolean sendSms(String phone,String templateCode,Map<String,Object> map) {
        //连接阿里云
        DefaultProfile profile =
                DefaultProfile.getProfile("AccessKey ID",
                        "AccessKey Secret");
        IAcsClient client = new DefaultAcsClient(profile);

        //构建请求
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);

        /**版本信息不做修改*/
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");

        //连接事件
        request.setSysAction("SendSms");

        /**
         * 参数:需要发送的手机号,验证码,签名、模板
         */
        //手机号
        request.putQueryParameter("PhoneNumbers", phone );
        //签名
        request.putQueryParameter("SignName", "Vinda的学习网站");
        //模板
        request.putQueryParameter("TemplateCode", templateCode);
        //验证码
        request.putQueryParameter("TemplateParam", JSON.toJSONString(map));
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            return true;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean sendSms(String phone, String templateCode) {
        //连接阿里云
        DefaultProfile profile =
                DefaultProfile.getProfile("AccessKey ID",
                        "AccessKey Secret");
        IAcsClient client = new DefaultAcsClient(profile);

        //构建请求
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);

        /**版本信息不做修改*/
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");

        //连接事件
        request.setSysAction("SendSms");

        /**
         * 参数:需要发送的手机号,验证码,签名、模板
         */
        //手机号
        request.putQueryParameter("PhoneNumbers", phone );
        //签名
        request.putQueryParameter("SignName", "Vinda的学习网站");
        //模板
        request.putQueryParameter("TemplateCode", templateCode);

        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            return true;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }
}

10、添加Controller类

记得打开 跨域支持:@CrossOrigin

@CrossOrigin //跨域支持
@RestController
public class SmsController {

    @Autowired
    ISmsService smsService;

    @Autowired
    SmsConfig smsConfig;

    @Autowired
    RedisUtils RedisUtils;

    @GetMapping("/sendsms/{phone}")
    public String sendCode(@PathVariable("phone")String phone){
        //从redis缓存中拿取用户手机号码,在实际开发中应该加上手机号码和用户id作为唯一的key
        String phone1 = (String) RedisUtils.get(phone);
        //确认没有这个号码
        if(StringUtils.isEmpty(phone1)){
            //存入数据库
            RedisUtils.set("phone",phone);
        }
        //查询是否在5分钟前发过该短信,验证码应该也是唯一的,加上用户ID
        String code = (String) RedisUtils.get("code");
        //如果没有这个验证码
        if(StringUtils.isEmpty(code)){
            //新建验证码:
             code = UUID.randomUUID().toString().substring(0, 4);
        }else {
            RedisUtils.set("code",code, (long) (1 * 60));
            return "手机号码为:"+ phone + "的用户,在1分钟内不能重复发送验证码";
        }


        //调用发送方法
        Map<String,Object> param = new HashMap<>();
        param.put("code",code);
        //调用发送:
        boolean b = smsService.sendSms(phone, smsConfig.YZMCODE, param);
        if (b){
            //发送成功再将验证码存入缓存
            RedisUtils.set("code",code, (long) (1 * 60));
            return "手机号码为:"+ phone + "的用户,成功发送验证码:"+code;
        }else return "手机号码为:"+ phone + "的用户,发送短信失败";
    }


}

11、启动程序

  在地址栏中输入:localhost:8080/sendsms/你的手机号码,这里我测试了自己的手机,冲!

在这里插入图片描述

  再次发送:
在这里插入图片描述

  手机接收:
在这里插入图片描述


  测试成功!


12、小结

  短信发送到自己手机上是真的挺开心的,到时候可以通过服务器向用户发送验证码起到登录验证、注册验证功能详细的代码在我的github上,有些redis的工具类代码没有放出来,只有核心代码,同时还有一些私人信息没有修改,使用的话记得修改对应的模板code,标签,手机号码的等相关信息,如需使用redis记得修改对应的redis服务器地址,并且打开redis服务器服务。需要的小伙伴自行下载,没有springboot基础也是可以做的,只要能正确的调用相关的API,当然,前提是你也要学会借助官方的帮助文档,链接在这:阿里云短信服务官方帮助文档

  同时也是可以看看狂神视频学习啦~前进道路是充满困难的,但也是充满希望的,加油!

----------------------------点我到Vinda的Github获取相关代码--------------------------------

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值