短信验证码发送

本文详细介绍了如何在阿里云平台上设置短信服务,包括申请资质、创建accessKey和accessKeySecret、绑定测试手机号、购买短信额度以及使用SDK进行验证码发送的过程。
摘要由CSDN通过智能技术生成

在实现验证码发送之前,我们先去选择发送短信支持的云服务。腾讯云,阿里云...都可以(只要支持)

本文提供的是阿里云服务。

前置工作    

在阿里云官网(阿里云-计算,为了无法计算的价值)搜索短信服务,进入控制台

1, 进入控制台后,申请资质,申请签名(资质不通过,签名也不会通过),申请模板。(很简单,点点点就行)。

2, 申请accesskey和accesskeysecret  点击进入申请即可。特别注意(accesskeysecret只在第一次申请成功后显示,后续就不会在显示!!!一定要保存好这两个key,后续代码签名验证时会用到)

3, 绑定测试手机号,因为测试需要,不绑定手机号无法完成对应手机的短信下发

4,购买短信额度(新用户可以免费领取一百条短信额度)  链接(阿里云通信产品免费试用)

5,在控制台点击"快速学习和测试",选择审核通过的签名和模板。调用API,选择审核通过的测试手机号,先进行一次测试(必填项下拉框都有提示)

 

 后置工作

在测试无误后  选择SDK示例查看对应计算机语言代码

复制对应代码即可,由于阿里云给出的代码包含main函数(方便测试),而实际开发可能完全不需要,所以大家可以借鉴以下我修改后的代码(v2.0代码)

package com.DemoText.listen;

import cn.hutool.core.util.RandomUtil;
import com.DemoText.config.PublicKEY;
import com.DemoText.config.RabbitKEY;
import com.DemoText.pojo.resp.SendRESP;
import com.aliyun.tea.*;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

@Component
public class PhoneListen {
    // 从配置文件读取accesskey和accesskeysecret
    @Value("${aliyun.accesskey}")
    private String accessKeyId;

    @Value("${aliyun.accesskeysecret}")
    private String accessKeySecret;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RabbitListener(queues = RabbitKEY.PHONEQUEUE)
    public void SendMSM(SendRESP sendRESP, Message message, Channel channel) {
        try {
            // 生成验证码
            String code = RandomUtil.randomNumbers(6);
            com.aliyun.dysmsapi20170525.Client client = createClient(accessKeyId, accessKeySecret);
            com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                    .setSignName("审核通过的签名")
                    .setTemplateCode("模板code")
                    .setPhoneNumbers(接收短信的测试手机号)
                    .setTemplateParam("{\"code\":\"" + code + "\"}");
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            client.sendSmsWithOptions(sendSmsRequest, runtime);
            // 手机验证码放入redis
            stringRedisTemplate.opsForValue().set(PublicKEY.PHONE + sendRESP.getPhone(), code, 60, TimeUnit.MINUTES);
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (Exception e) {
            try {
                channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
            throw new RuntimeException(e);
        }
    }

    /**
     * 使用AK&SK初始化账号Client
     *
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }
}

 这样,短信下发就圆满完成啦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值