阿里云短信服务接入流程

背景

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

一. 熟悉整个对接流程

  1. 进入阿里云短信服务新手指引页面
    可以看到整个对接流程如下图所示:
    在这里插入图片描述

  2. 每个过程如下图所示:
    在这里插入图片描述

二. 具体搭建过程

准备工作

  1. 注册后登录云通信产品试用界面

  2. 进行实名认证,如下图所示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 开通短信服务
    购买免费的短信包, 然后零元购后就可以在短信控制台进行配置
    在这里插入图片描述
    点击进入 阿里云短信服务控制台. 这里可以修改每分钟, 每小时, 每天发送信息的频率
    在这里插入图片描述

  4. 获取AccessKey
    在阿里云短信服务控制台右上角点击AccessKey管理
    在这里插入图片描述
    创建用户组
    在这里插入图片描述
    配置用户组权限
    在这里插入图片描述
    在用户组-添加组成员页面新建用户
    在这里插入图片描述
    新建用户
    在这里插入图片描述
    新建用户配置(该用户属于子用户, 用于发送短信)
    在这里插入图片描述
    复制并保存 AccessKey ID和AccessKey Secret, 以便在后续SDK中使用
    (这一步非常重要, 因为AccessKey ID 和 AccessKey Secret只显示一次, 无法找回, 只能重新生成)

    在这里插入图片描述

添加签名

注意: 如果仅仅测试的话, 可以跳过添加签名添加模板步骤. 直接调用sdk, 并使用无限制的测试签名和模板进行测试

  1. 添加签名设置
    在这里插入图片描述
  2. 根据用途选择适用场景和签名用途, 然后进行审核
    在这里插入图片描述

添加模板

  1. 创建模板
    模板就是指短信模板, 具体就是在发送验证短信时, 短信发送内容的模板
    在这里插入图片描述

  2. 配置短信模板内容后进行审核, 审核通过即可使用
    在这里插入图片描述

发送短信(SDK)

注意: 这里因为使用sdk进行测试调用, 因此无需等待签名和模板审核成功. 使用下面短信测试专用的签名和模板编码即可
SignName: 阿里云短信测试,
TemplateCode: SMS_154950909

整体流程
进入OpenApi页面 -> 添加参数 -> 发起调用 -> 复制生成的sdk代码 -> 下载jar包->封装并复用代码

  1. 配置测试手机号
    因为使用的是测试模板和签名, 因此需要我们配置用于测试的手机号
    在这里插入图片描述
    否则则会提示: 只能向已回复授权信息的手机号发送
    在这里插入图片描述

  2. 在线调用sdk
    这里调用成功后, 就会发送短信.
    在这里插入图片描述

  3. 查看是否调用成功(成功后复制sdk代码)
    发起调用成功并收到短信后(如下图), 复制上图右侧生成的sdk示例代码到项目中
    在这里插入图片描述

  4. 添加依赖( 获取sdk的jar包 )
    如果是maven项目. 直接复制下图展示的Maven坐标
    在这里插入图片描述

注意: 如果是SSM/JavaEE项目(需要手动放入jar), 配置过程如下

  1. 直接将下图包放到指定目录下(博客底部会将jar分享)
    在这里插入图片描述

  2. Project Structure->Libraries 中, 将lib下面的jar添加到项目中
    在这里插入图片描述

  3. 选择jar所在目录, 添加后如下图所示
    在这里插入图片描述

  4. 添加成功后, 对应的sdk代码则不会报红, 项目也可以正常运行

三. 封装sdk方法

  1. 将上一步的sdk方法进行封装
    这里主要有三个方法: 第一个用于使用AK&SK初始化账号Client, 第二个用于生成6位验证码. 第三个用于获取发送短信结果

    import com.aliyun.dysmsapi20170525.Client;
    import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
    import com.aliyun.tea.TeaException;
    import com.aliyun.teaopenapi.models.Config;
    import org.springframework.stereotype.Component;
    
    /**
     * info:
     *
     * @Author caoHaiYang
     * @Date 2022/8/29 11:47
     */
    @Component
    public class SendSms {
    
        public static final String accessKeyId = "你的accessKeyId ";
        public static final String accessKeySecret = "你的accessKeySecret ";
        public static final String templateCode = "SMS_154950909";
        public static final String signName = "阿里云短信测试";
    
        /**
         * 使用AK&SK初始化账号Client
         * @param accessKeyId
         * @param accessKeySecret
         * @return Client
         * @throws Exception
         */
        public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
            Config config = new com.aliyun.teaopenapi.models.Config()
                    // 您的 AccessKey ID
                    .setAccessKeyId(accessKeyId)
                    // 您的 AccessKey Secret
                    .setAccessKeySecret(accessKeySecret);
            // 访问的域名
            config.endpoint = "dysmsapi.aliyuncs.com";
            return new com.aliyun.dysmsapi20170525.Client(config);
        }
    
        /**
         * 获取6位验证码
         * @return
         */
        public  String getVerifyCode() {
            Long codeL = System.nanoTime();
            String codeStr = Long.toString(codeL);
            String verifyCode = codeStr.substring(codeStr.length() - 6);
            System.out.println("生成的6位验证码为:" + verifyCode);
            return verifyCode;
        }
    
        /**
         * 发送短信
         * @param phoneNumber   手机号
         * @throws Exception
         * @return   短信验证码(如果为null说明出现错误)
         */
        public String sendMessage(String phoneNumber) throws Exception {
            //随机生成6位验证码
            String verifyCode = this.getVerifyCode();
    
            Client client = SendSms.createClient(accessKeyId, accessKeySecret);
            com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                    .setPhoneNumbers(phoneNumber)
                    .setSignName(signName)
                    .setTemplateCode(templateCode)
                    .setTemplateParam("{\"code\":\""+verifyCode+"\"}");
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            try {
                // 复制代码运行请自行打印 API 的返回值
                SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
                System.out.println(sendSmsResponse.getBody().getMessage());
                return verifyCode;
            } catch (TeaException error) {
                // 如有需要,请打印 error
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                // 如有需要,请打印 error
                com.aliyun.teautil.Common.assertAsString(error.message);
            }
            return null;
        }
        
    }
    
    
  2. 新建短信发送业务

    /**
     * 发送短信业务
     * @Author caoHaiYang
     * @Date 2022/8/29 13:47
     */
    public interface SendMessageService {
    
        /**
         * 短信发送接口
         * @param phoneNumber
         * @return
         */
        int sendMessage(String phoneNumber) throws Exception;
    
        /**
         * 验证短信码
         * @param phoneNumber
         * @param verifyCode
         * @return
         */
        int verifyMessageCode(String phoneNumber, String verifyCode);
    }
    
  3. 创建业务实现类

    这里的逻辑就是:
    发送短信接口传入手机号之后, 调用 sendSms.sendMessage 返回验证码, 然后将手机号作为key验证码作为value放入redis中并设置过期时间. 而在验证短信码接口调用时: 根据传入的手机号去redis中查验证码, 将查询到的验证码和接口传入的验证码进行比对. 成功返回1, 不成功返回0

    import com.ring.config.Constants;
    import com.ring.config.JedisPoolUtil;
    import com.ring.model.BannerBean;
    import com.ring.service.SendMessageService;
    import com.ring.sms.SendSms;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.stereotype.Service;
    import redis.clients.jedis.Jedis;
    
    import javax.annotation.Resource;
    
    /**
     * info:
     *
     * @Author caoHaiYang
     * @Date 2022/8/29 16:07
     */
    @Service
    public class SendMessageServiceImpl implements SendMessageService {
        @Resource
        private SendSms sendSms;
    
    
        @Override
        public int sendMessage(String phoneNumber) throws Exception {
            //通过阿里sms发送短信
            String verifyCode = sendSms.sendMessage(phoneNumber);
            if (StringUtils.isEmpty(verifyCode)) {
                return 0;
            }
            //将短信保存到redis中
            Jedis jedis = null;
            try {
                jedis = JedisPoolUtil.getJedis();
                jedis.auth(Constants.REDIS_PASSWORD);
                jedis.select(Constants.REDIS_DB);
                jedis.setex(phoneNumber, 600, verifyCode);
                return 1;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return -1;
        }
    
        @Override
        public int verifyMessageCode(String phoneNumber, String verifyCode) {
            Jedis jedis = null;
            try {
                jedis = JedisPoolUtil.getJedis();
                jedis.auth(Constants.REDIS_PASSWORD);
                jedis.select(Constants.REDIS_DB);
                String currentVerifyCode = jedis.get(phoneNumber);
                if (verifyCode.equals(currentVerifyCode)) {
                    return 1;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return 0;
        }
    }
    
  4. 生成代码操作
    在测试完短信验证码后, 我们可以根据以下流程流程编写其他接口代码
    进入OpenApi页面 -> 添加参数 -> 发起调用 -> 复制生成的sdk代码 -> 封装并复用代码

  5. 当前阿里云短信服务可以提供的接口如下图所示
    在这里插入图片描述
    在这里插入图片描述

查询发送详情

发送成功后, 可以在短信服务控制台查看发送详情
查看指定时段短信发送量
在这里插入图片描述
查看短信具体发送内容
在这里插入图片描述 https://pan.baidu.com/s/1a3FeYANNIEo8ZvO5tIPeJg?pwd=pces


链接:https://pan.baidu.com/s/1a3FeYANNIEo8ZvO5tIPeJg
关注后进入私聊, 回复括号内关键字[ 短信服务 ] 获取阿里云短信服务jar包提取码

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: 单片机接入阿里云服务器的方式可以通过UDP连接实现。首先,单片机需要有一个网络模块,例如ESP8266或者W5500等,具备UDP通信功能,并支持与阿里云服务器建立连接。其次,需要在阿里云服务器上配置相应的网络设置,如公网IP地址和开放UDP端口等。接下来,单片机需要通过编程控制网络模块,与阿里云服务器建立UDP连接。 在单片机的代码中,首先需要初始化网络模块,并配置网络参数,例如设置阿里云服务器的IP地址和UDP端口号等。然后,通过网络模块的API函数,建立与阿里云服务器的UDP连接。在连接建立后,单片机可以通过发送UDP数据包的方式与阿里云服务器进行通信。例如,可以通过定时发送数据包的方式,将传感器采集到的数据发送给阿里云服务器进行处理。 在阿里云服务器端,可以使用相应的服务来接收和处理单片机发送的UDP数据包。例如,可以使用阿里云提供的IoT平台或者云服务器搭建的应用程序等,接收UDP数据包并进行相应的处理。处理过程中,可以对接收到的数据进行解析、存储、分析等操作。同时,也可以通过UDP连接向单片机发送相应的指令或者数据,与单片机进行双向通信。 总之,通过UDP连接,单片机可以实现与阿里云服务器的通信,从而实现数据的传输和处理。这样可以将单片机的功能扩展到云端,实现更加灵活和强大的应用。 ### 回答2: 要将单片机接入UDP连接阿里云服务器,需要进行以下步骤: 1. 配置阿里云服务器:首先,需要在阿里云上创建一个服务器实例,并获得服务器的公网IP地址、端口号和登录凭证(用户名和密码)。 2. 单片机网络配置:将单片机与网络连接,分配一个合适的IP地址。可以使用以太网模块或Wi-Fi模块实现连接。 3. 编写单片机程序:使用单片机开发工具,如Keil等,编写程序以实现UDP连接功能。需要使用相应的库函数,如lwIP库等。 4. 连接服务器:使用单片机的网络接口,建立与阿里云服务器的UDP连接。通过指定服务器的IP地址和端口号,单片机可以与服务器进行通信。 5. 发送和接收数据:可以在程序中定义需要发送和接收的数据格式。根据需要,选择发送和接收指定的信息。 6. 数据处理:对于接收到的数据,单片机可以进行相应的处理,如解析数据、执行控制指令等。 7. 错误处理和调试:进行错误处理和调试,确保单片机与阿里云服务器之间的通信可靠性和稳定性。 总之,将单片机连接到UDP阿里云服务器需要进行网络配置和编写程序,建立连接,发送和接收数据,并进行相应的数据处理和调试。这样,单片机就能够接入UDP连接阿里云服务器,并与服务器进行通信。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间静止不是简史

感谢你的肯定, 我将继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值