首页 > 其他分享 >SMS - 基于阿里云实现手机短信验证码登录(无需备案,非测试)

SMS - 基于阿里云实现手机短信验证码登录(无需备案,非测试)

时间:2024-06-09 19:01:21浏览次数:9  
标签:code 短信 String phone SMS 验证码 手机短信 服务

目录

SMS

环境调试

从阿里云云市场中购买第三方短信服务

调试短信验证码功能

实战开发 

封装组件

对外接口

调用演示


SMS


环境调试

从阿里云云市场中购买第三方短信服务

a)进入阿里云首页,然后从云市场中找到 “短信” (一定要从 云市场 去找短信服务,否则需要企业证明,备案) 

 阿里云-计算,为了无法计算的价值阿里云——阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。免费备案,7x24小时售后支持,助企业无忧上云。icon-default.png?t=N7T8https://www.aliyun.com/

b)然后任意挑选一个合适的短信服务(这里以一个为例)

c)点击购买更多

d)然后按照自己的需求购买(还是有很多可以白嫖的)

这样就购买成功了.

e)之后你就可以在控制台里搜索 “云市场”,找到你购买的服务

Ps:将来使用短信服务给手机发送验证码时,就需要指定上面个的 AppCode(千万不可泄漏,防止别人乱刷)

调试短信验证码功能

a)进入你购买的服务后,找到 API 接口,点击 “去调试”

b) 如下界面(用到的参数都可以参照 “商品介绍” 中的描述)

c)调整参数,点击发送请求,随后返回响应,显示 "ok",说明调试成功(此时你就可以看到发送到你手机上的验证码了). 

实战开发 

封装组件

a)复制请求示例中的所有代码,粘贴到你的项目中

b)按照注释中的内容去引入对应的依赖和工具类

c)建议将短信服务专门到一个微服务中(专门用例处理调用第三方服务的接口),将来其他服务需要使用时,进行远程调用接口,解耦合(不要跟我张口闭口性能优化...).

import org.apache.http.HttpResponse;
import org.cyk.gulimall.third.infra.HttpUtils;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;

@Component
public class SmsComponent {

    /**
     * 这里的 host、pat、method、appcode 可以配置到配置文件中,但是没必要
     * 因为将来如果真要换另一个企业的短信服务,接口的需要的参数变化都还是挺大的,所以基本没有复用的必要
     * code: 验证码
     * phone: 手机号
     */
    public void sendMsg(String code, String phone) {
        String host = "https://dfsns.market.alicloudapi.com";
        String path = "/data/send_sms";
        String method = "POST";
        String appcode = "91dasjhfk75e0574afdajsf82g3r3bf923r";
        Map<String, String> headers = new HashMap<>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求,定义相对应的Content-Type
        headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        Map<String, String> querys = new HashMap<>();
        Map<String, String> bodys = new HashMap<>();
        bodys.put("content", "code:" + code);
        bodys.put("template_id", "CST_ptdie100");  //注意,CST_ptdie100该模板ID仅为调试使用,调试结果为"status": "OK" ,即表示接口调用成功,然后联系客服报备自己的专属签名模板ID,以保证短信稳定下发
        bodys.put("phone_number", phone);
        try {
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            System.out.println(response.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

对外接口

@RestController
@RequestMapping("/auth/sms")
class SmsApi(
    val thirdSmsRpcService: ThirdSmsRpcService,
    val redisTemplate: StringRedisTemplate,
) {

    @GetMapping("/send_code/{phone}")
    fun sendCode(
        @PathVariable("phone") phone: String, //此处省略格式校验
    ): ApiResp<Int> {
        //1.验证码防刷
        val rCode = redisTemplate.opsForValue().get(SmsRedisKey.getSMSKey(phone))
        rCode?.let { throw AppException(ApiStatus.CODE_GET_FAST, "验证码获取过于频繁!") }
        //2.生成验证码
        //1) 生成 6 位随机数字
        val code = (1..6).joinToString("") { Random().nextInt(0, 10).toString() }
        //2) 保存到 Redis 上
        redisTemplate.opsForValue().set(SmsRedisKey.getSMSKey(phone), code, 1, TimeUnit.MINUTES)
        //3.向手机发送验证码
        thirdSmsRpcService.sendMsg(code, phone)
        return ApiResp.ok(1)
    }

}

Ps:对于验证码接口防刷,这里可以根据不同需求,做得很复杂

调用演示

调用后,手就可以收到以下短信.

关于短信的模板,可以去联系客服进行申请.

标签:code,短信,String,phone,SMS,验证码,手机短信,服务
From: https://blog.csdn.net/CYK_byte/article/details/139529823

相关文章

  • 6.9找回机制接口安全&验证码token接口
    响应包responseburp截取拦截,改相应包;思路:此处应该若是修改密码,先抓到修改成功数据包(截取验证关键字),在替换为需要绕过的数据包,截取response数据包,修改验证成功关键字达到绕过效果;1.发送验证码2.验证3.重制密码1-3跳过2;短信轰炸实例接口调用发包;应用程序注册模块没用添加......
  • 百度站长最新AI旋转验证码识别
     上个月发现百度站长最新出了一个验证码,是AI生成的。内容每次可能都不一样,所以给识别造成了很大困难。传统的比对放松完全失效。一、介绍这个是最近才出的最新验证码,内容主要以工厂、建筑、山峰、机器人、汽车、盆栽植物等为主。如下图所示优点:解决了图片种类有限的问题......
  • soket 利用http实现验证码的发送
    soket利用http实现验证码的发送在C语言中,可以直接使用socket的TCP连接来实现HTTP协议发送验证码的功能会涉及到底层的网络通信编程。以下是一个简化的步骤和示例代码,如何使用socket在程序中向互亿无线官方中发送HTTPPOST请求来让手机获取验证码。详情可以去官网下载API文档了......
  • Vue简单自定义Canvas验证码组件。
    在您的Vue项目中,是否曾遇到过需要增加验证码来增强账户安全性的情况?这个Vue通用Canvas验证码组件!采用Canvas,实现了高度自定义和灵活的验证码生成方式,让您的网站或应用轻松应对各类验证码需求。在线演示地址:原文可查看演示一,创建一个Captcha验证码组件。<template><can......
  • Sms-Activate是一个很好用的短信接码平台
    在海外有很多好用社交或者服务都需要注册才能使用,但是注册账号需要保证IP是特定的国家和相应国家的验证码,通常在国内就没法接收到验证码了,为了接受验证码我们需要找一个接码平台,而sms-activate就是一个非常好用的短信验证码接码平台,费用就在1.5人民币左右,通过它我们可以快速完成注......
  • 百度文库最新AI旋转验证码识别
    上个月发现百度文库最新出了一个验证码,是AI生成的。内容每次可能都不一样,所以给识别造成了很大困难。传统的比对放松完全失效。一、介绍这个是最近才出的最新验证码,内容主要以工厂、建筑、山峰、机器人、汽车、盆栽植物等为主。如下图所示优点:解决了图片种类有限的问题,AI......
  • 数字加大小写字母组成随机验证码
    凭空想象,随机验证码,Java基础练习,有不懂的同学可以留言或私信,看到会回答,注释写的不太好,I‘msorry..思路:将26个字母大小写使用ASCLL码加入到数组当中,再循环添加一个0-9的数字,加入到数组当中,再从中随机抽取4个(可以修改长度)内容,生成随机验证码代码如下:importjava.util.Random......
  • 手机APP令牌离线生成验证码
    手机APP令牌离线生成验证码当手机APP令牌离线生成验证码时,通常是通过以下步骤实现的:用户在手机APP上选择生成验证码选项。系统会生成一个随机的验证码,并将其显示在APP界面上。用户需要将生成的验证码手动输入到需要验证的系统中。这种离线生成验证码的方式通常用于在......
  • i-am-a-bot:一款基于多个大语言模型的验证码系统安全评估工具
     关于i-am-a-boti-am-a-bot是一款基于多个大语言模型的验证码安全评估工具,该工具提供了一个使用了多模态大语言模型(LLM)的自动化解决方案,可以帮助广大研究人员测试各种类型验证码机制的安全性。从底层上看,i-am-a-bot这个项目利用了Google的VertexAI和一系列自定义代理功能......
  • 利用腾讯云和drf框架去编写一个用户注册的验证码验证
    一、编写利用腾讯云文件在项目—>utils下创建一个文件tencentsms.py:classTengXun(object):defsend_sms(self,code,mobile):#短信应用SDKAppIDappid=APP_ID#SDKAppID是1400开头,你们申请的appid#短信应用SDKAppKey也是你们自己......