SpringBoot集成阿里云短信服务发送短信

应用背景:用户手机验证码登录、注册都需要验证码,这里讲的就是Springboot集成阿里云发送短信的具体实现。

一、首先打开阿里云短信服务

SpringBoot集成阿里云短信服务发送短信_第1张图片
在这里能获取到我们需要的4个参数,分别是accessKeyId、accessKeySecret、短信签名、模板code。
SpringBoot集成阿里云短信服务发送短信_第2张图片
短信签名和模板code直接点击创建就行了。

二、后台实现

1、创建SendSmsService.java文件,用来处理信息的发送:

package com.lmj.sendSms.service;

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;
import com.aliyuncs.profile.IClientProfile;

import java.util.Random;

/**
 * @author Abell
 * @descibe 阿里云短信
 * @date 2020/6/16 16:10
 */
public class SendSmsService {
    /* 短信API产品名称(短信产品名固定,无需修改) */
    private static final String product = "Dysmsapi";

    /* 短信API产品域名,接口地址固定,无需修改 */
    private static final String domain = "dysmsapi.aliyuncs.com";

    /* 此处需要替换成开发者自己的accessKeyId和accessKeySecret(在阿里云访问控制台寻找) */
    private static final String accessKeyId = "你的accessKeyId "; //TODO: 这里要写成你自己生成的
    private static final String accessKeySecret = "你的accessKeySecret ";//TODO: 这里要写成你自己生成的

   /* 短信发送 */
    public static SendSmsResponse sendSms(String phone) throws ClientException {
        String code = getMsgCode();
        /* 超时时间,可自主调整 */
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        /* 初始化acsClient,暂不支持region化 */
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);

        /* 组装请求对象-具体描述见控制台-文档部分内容 */
        SendSmsRequest request = new SendSmsRequest();
        /* 必填:待发送手机号 */
        request.setPhoneNumbers(phone);
        /* 必填:短信签名-可在短信控制台中找到 */
        request.setSignName("浪漫纪"); //TODO: 这里是你短信签名
        /* 必填:短信模板code-可在短信控制台中找到 */
        request.setTemplateCode("SMS_164750191"); //TODO: 这里是你的模板code
        /* 可选:模板中的变量替换JSON串,如模板内容为"亲爱的用户,您的验证码为${code}"时,此处的值为 */
        request.setTemplateParam("{\"code\":\"" + code + "\"}");

        System.out.println("给电话为" + phone + "发送的验证码为:" + code);

        // hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
            System.out.println("短信发送成功!验证码:" + code);
        } else {
            System.out.println("短信发送失败!");
        }
        return sendSmsResponse;
    }

    /**
     * 随机生成验证码
     *
     * @return
     */
    private static String getMsgCode() {
        int n = 6;
        StringBuilder code = new StringBuilder();
        Random ran = new Random();
        for (int i = 0; i < n; i++) {
            code.append(Integer.valueOf(ran.nextInt(10)).toString());
        }
        return code.toString();
    }
}

上面有4个TODO的地方,就是填写你的四个从阿里云短信服务获取的4个参数。
2、创建SendSmsController.java:

package com.lmj.sendSms.controller;

import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.lmj.sendSms.service.SendSmsService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Abell
 * @descibe 阿里云短信
 * @date 2020/6/16 16:23
 */
@RestController
public class SendSmsController {


    //发送短信
    @RequestMapping(value = "/sendCode")
    public Object sendCode(String phone) {
        SendSmsResponse sendSmsResponse;
        try {
            sendSmsResponse = SendSmsService.sendSms(phone);
        } catch (Exception e) {
            return "发送失败!";
        }
        return sendSmsResponse;
    }

}

3、pom依赖

        
        
            com.aliyun
            aliyun-java-sdk-core
            4.1.0
            
                
                    commons-codec
                    commons-codec
                
                
                    activation
                    javax.activation
                
            
        
        
            com.aliyun
            aliyun-java-sdk-dysmsapi
            1.1.0
        

4、下面我们来运行访问一下,比如:

http://localhost:8080/sendCode?phone=手机号

SpringBoot集成阿里云短信服务发送短信_第3张图片
我们发现返回的是OK的数据,在我们手机上也收到了对应信息:
SpringBoot集成阿里云短信服务发送短信_第4张图片
这样我们关于整合阿里云发送短信就完事了。具体的应用具体进行controller的修改就可以了。如有疑问请留言。

ps:可以点击这里下载源码:下载源码

你可能感兴趣的:(阿里云短信服务,阿里云)