使用阿里云发送短信

使用阿里云短信服务有两种方式
在这里插入图片描述
API 发送和 控制台发送,控制台发送到话有太多限制,这里我们使用API 通过 调用服务端代码进行发送。

整体结构如下:
在这里插入图片描述

导入依赖

<!--阿里云短信发送-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.2.6</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.0.0</version>
        </dependency>

外放接口

    /**
     * 发送手机验证码
     */
    @ApiOperation(value = "发送手机验证码", notes = "发送手机验证码")
    @PostMapping("/sendSMS")
    public ApiResult sendSMS(@RequestParam("phone") String phone) {
        //六位数随机数
        long rand = (long)(Math.random()*900000+100000);
        String mCode = String.valueOf(rand);
        boolean mS = SengSmsUtils.sendSMS(phone,mCode);
        //返回数据
        SmsReturnVO smsReturnVO = new SmsReturnVO();
        smsReturnVO.setSendSuccess(true);
        smsReturnVO.setMCode(MD5Utils.toMD5(mCode));
        if (!mS){
            smsReturnVO.setSendSuccess(false);
        }
        return ApiResult.ok(smsReturnVO);
    }

MD5加密

/**
 * Md5加密,加密规则与客户端一致*/
public class MD5Utils {

    public static String toMD5(String s){
        String mStr = "头部特殊字符" + s + "尾部特殊字符";
        try {
            mStr = DigestUtils.md5DigestAsHex(mStr.getBytes(StandardCharsets.UTF_8));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mStr;
    }

}

发送工具类

/**
 * 发送短信通知
 * 多发
 *List<String> mobiles = new ArrayList<>();
 *mobiles.add("15*******13");
 *mobiles.add("13*******27");
 *mobiles.add("17*******56");
 *String s= getSplitString(mobiles);
 */
public class SengSmsUtils {

    // 签名
    private static final String signName = "签名管理-签名名称";
    // 模板
    private static final String templateCode = "模板管理-模板CODE";
    // 阿里云短信配置信息
    private static final String accessKeyId = "AccessKey管理-创建AccessKey";
    private static final String accessKeySecret = "创建后会显示";
    private static final String REGION_ID = "cn-hangzhou"; //固定不用改
    private static final String PRODUCT = "Dysmsapi"; //固定不用改
    private static final String DOMAIN = "dysmsapi.aliyuncs.com"; //固定不用改


    public static boolean sendSMS(String mobile,String mCode) {
        try {
            IClientProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);
            DefaultProfile.addEndpoint(REGION_ID, REGION_ID, PRODUCT, DOMAIN);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            SendSmsRequest request = new SendSmsRequest();
            request.setMethod(MethodType.POST);
            // 手机号可以单个也可以多个(多个用逗号隔开,如:15*******13,13*******27,17*******56)
            request.setPhoneNumbers(mobile);
            request.setSignName(signName);
            request.setTemplateCode(templateCode);
            request.setTemplateParam("{\"code\":"+"'"+mCode+"'"+"}");
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            if ((sendSmsResponse.getCode() != null) && (sendSmsResponse.getCode().equals("OK"))) {
                return true;
            } else {
                return false;
            }
        } catch (ClientException e) {
            return false;
        }
    }

    /**
     * 获取逗号分隔的拼接字符串
     */
    public static String getSplitString(List<String> str) {
        StringBuilder newS = new StringBuilder();
        if (str != null && str.size() > 0) {
            for (String s : str) {
                newS.append(s).append(",");
            }
        }
        if (newS.length() > 0){
            newS.deleteCharAt(newS.length() - 1);// 删除最后一个多余的逗号
        }

        return newS.toString();
    }
}

接口返回数据

/**
 * 发送验证码返回数据类*/
@Data
public class SmsReturnVO {

    //是否发送成功
    private Boolean sendSuccess;

    //发送成功携带验证码
    private String mCode;

}
此时,调用接口后,会将加密后的验证码返回给接口调用端,接口调用端 在输入框数据验证码后进行MD5 加密,与服务端给的对比即可 (加密规则要与服务端对应)

补充,在发送工具类中的参数在阿里云中如何查看

签名管理-签名名称

在这里插入图片描述

模板管理-模板CODE

在这里插入图片描述

AccessKey管理-创建AccessKey

在这里插入图片描述
在这里插入图片描述

完结,撒花

### 实现后端集成阿里云SDK发送短信 为了实现在后端通过阿里云服务发送短信的功能,需先完成一系列准备工作并编写相应的代码逻辑。 #### 准备工作 确保已开通阿里云账号,并按照指引完成了短信服务的开通操作[^1]。这包括但不限于访问阿里云官网,在首页搜索框内输入“短信服务”,随后点击进入相应页面来启动服务配置流程[^2]。 #### 添加依赖项 对于Java项目而言,需要引入阿里云提供的官方SDK作为依赖。如果采用Maven构建工具,则可以在`pom.xml`文件中加入如下声明: ```xml <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.78</version> </dependency> ``` 以上版本号仅供参考,请根据实际需求选择最新稳定版[^3]。 #### 编写发送函数 下面展示了一个简单的例子用于说明如何调用API接口向指定手机号码发送验证码: ```java import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; public class SmsSender { private static final String REGION_ID = "cn-hangzhou"; public void sendVerificationCode(String phoneNumber, String templateCode, Map<String, Object> params) throws ClientException { DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, "<your-access-key-id>", "<your-access-key-secret>"); IAcsClient client = new DefaultAcsClient(profile); SendSmsRequest request = new SendSmsRequest(); request.setPhoneNumbers(phoneNumber); request.setSignName("<your-sign-name>"); request.setTemplateCode(templateCode); request.setTemplateParam(new Gson().toJson(params)); SendSmsResponse response = client.getAcsResponse(request); System.out.println("Send result:" + response.getCode()); } } ``` 请注意替换上述代码中的占位符(如`<your-access-key-id>`、`<your-access-key-secret>` 和 `<your-sign-name>`),这些参数可以从阿里云控制台获取或设置。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值