使用阿里云发送短信

使用阿里云短信服务有两种方式
在这里插入图片描述
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

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

完结,撒花

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值