Springboot集成阿里云短信服务

提示:文章如有错误的地方请指出,以免误人子弟!


提示:以下是本篇文章正文内容,下面案例可供参考

阿里云短信控制台配置

阿里云控制台地址

  1. accessKey管理
    在这里插入图片描述
  2. 推荐使用子账户
    在这里插入图片描述
  3. 创建子用户
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 设置权限
    在这里插入图片描述
    在这里插入图片描述
  5. 正常流程是得先 申请签名和模板,但是现在规则改了,个人申请得有部署的系统地址才行,所以个人测试的话还是用 阿里给的测试模板。
    在这里插入图片描述
    在这里插入图片描述
  6. 账户充值 一块钱差不多就够用了
    在这里插入图片描述
    在这里插入图片描述

封装工具类

  1. mavan依赖
<dependency>
    <groupId>com.aliyun</groupId>
     <artifactId>dysmsapi20170525</artifactId>
     <version>2.0.18</version>
 </dependency>
  1. 代码,这边用了lombokredis,需要的自己引入下,生成验证码的参考链接放文章最后了。
package com.hqll.fileMessage.util;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;
import com.hqll.common.util.FinalCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author Mr.Tigger
 * @date 2022/9/12 15:15
 */
@Slf4j
@Component
public class SendCodeMessage {

    @Autowired
    private RedisUtil redisUtil;

    /**
     * description: 生成指定位数短信验证码
     *
     * @param count 指定位数
     * @return java.lang.String
     * @author Tigger
     */
    private String getRandCode(int count) {
        return String.valueOf((int)((Math.random()*9+1)* Math.pow(10,count-1)));
    }

    /**
     * description: 使用AK&SK初始化账号Client
     *
     * @param accessKeyId accessKeyId
     * @param accessKeySecret accessKeySecret
     * @return com.aliyun.dysmsapi20170525.Client
     * @author Tigger
     */
    public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config()
                // 您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }

    /**
     * description: 发送短信
     *
     * @param sendPhoneNumber 发送账号
     * @return java.lang.String
     * @author Tigger
     */
    public String sendMessage(String sendPhoneNumber) throws Exception {
        // 替换成自己的
        String accesskeyId = "accesskeyId";
        String accesskeySecret = "accesskeySecret";

        Client client = SendCodeMessage.createClient(accesskeyId, accesskeySecret);
        String randCode = getRandCode(6);
        log.info("短信验证码-{}", randCode);
        JSONObject jsonObject = new JSONObject(1);
        jsonObject.put("code", randCode);
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setSignName("阿里云短信测试")
                .setTemplateCode("SMS_154950909")
                .setPhoneNumbers(sendPhoneNumber)
                .setTemplateParam(jsonObject.toJSONString());
        RuntimeOptions runtime = new RuntimeOptions();
        String returnMessage = null;
        try {
            // 复制代码运行请自行打印 API 的返回值
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            // 获取返回体code
            String code = sendSmsResponse.getBody().getCode();
            // 获取返回体状态
            Integer statusCode = sendSmsResponse.getStatusCode();
            if (FinalCode.STATUS_MESSAGE.equals(code) && statusCode == FinalCode.STATUS_CODE) {
                // 将验证码放入redis
                boolean set = redisUtil.set(sendPhoneNumber + FinalCode.REDIS_ACCOUNT_SMS, randCode, FinalCode.MILLISECOND_NUMBER);
                if (set) {
                    log.info("短信验证码缓存成功");
                }
                returnMessage = "验证码发送成功";
            }
        } catch (TeaException error) {
            // 如有需要,请打印 error
            log.info(Common.assertAsString(error.message));
        } catch (Exception errorMsg) {
            TeaException error = new TeaException(errorMsg.getMessage(), errorMsg);
            // 如有需要,请打印 error
            log.info(Common.assertAsString(error.message));
        }
        return returnMessage;
    }
}

验证码生成参考链接


希望对你有所帮助!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值