快速实现短信发送功能(SpringBoot)

Springboot集成短信发送
准备工作:确定要使用的第三方容联云通讯接口因为是免费测试送8元礼包才选择的,首先注册一个账户,主界面的账户信息是我们所需的,复制代码后,包名、位置自己解决;

一、导入依赖包

<dependency>
            <groupId>com.rly.sms</groupId>
            <artifactId>sms</artifactId>
            <version>1.0.0</version>
        </dependency>

Jar包资源链接记得放入你本地仓库(com/rly/sms)
百度云:https://pan.baidu.com/s/1qPVEJt616k5MUXpyN13xAg
二、application.yml配置文件 等于application.properties

   #短信发送配置信息 acount账户id  token密匙 appId appId app的id 对应上面截图的值
    rly:
       acount: 8a216da866f71d040166fcfabaf40270
       token: 76d7258443294f1aad9902e3433ad61d
       appId: 8a216da866f71d040166fcfabb440276

三、代码实现
SmsService

  package com.yyg.sms;
    /**
     * 短信服务接口
     * Date 2018/11/10
     * @Auther 阳彦刚
     */
    public interface SmsService {
        public void smsSend(String phone,String validateTime);
    }

SmsServiceImpl

 package com.yyg.api.impl;
    import java.io.File;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Service;
    import com.yyg.api.SmsService;
    /**
     * 短信服务
     * Date 2018/11/10
     * @Auther 阳彦刚
     */
    import com.yyg.utils.SmsSendUtils;
    @Service("SmsService") //交给spring创建bean
    public class SmsServiceImpl implements SmsService {
        @Autowired
        SmsSendUtils sendUtils;
        @Override
        public void smsSend(String phone, String validateTime) {
            // TODO Auto-generated method stub
            sendUtils.smsSend(phone, validateTime);
        }
        }

SmsSendUtils

 package com.yyg.utils;
        import java.util.HashMap;
        import java.util.Random;
        import java.util.Set;
        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.stereotype.Component;
        import com.cloopen.rest.sdk.CCPRestSmsSDK;
        @Component //启动的时候扫描到注解
        public class SmsSendUtils{
        //从apllication.yml获取值
            @Value("${rly.acount}")
            String acount;//账户id
            @Value("${rly.token}")
            String token;//密匙 key
            @Value("${rly.appId}")
            String appId;
            public void smsSend(String phone,String validateTime) {
                HashMap<String, Object> result = null;
                //初始化SDK
                CCPRestSmsSDK restAPI = new CCPRestSmsSDK();
                //******************************注释
                //*初始化服务器地址和端口                                                       *
                //*沙盒环境(用于应用开发调试):                
                restAPI.init("sandboxapp.cloopen.com", "8883");*
                //*生产环境(用户应用上线使用):restAPI.init("app.cloopen.com", "8883");       *
                //*******************************注释
                restAPI.init("app.cloopen.com", "8883");
                //*初始化主帐号和主帐号令牌,对应官网开发者主账号下的ACCOUNT SID和AUTH TOKEN     *
                //*ACOUNT SID和AUTH TOKEN在登陆官网后,在“应用-管理控制台”中查看开发者主账号获取*
                //*参数顺序:第一个参数是ACOUNT SID,第二个参数是AUTH TOKEN。 
                    restAPI.setAccount(acount, token);
                //******************************注释
                //*初始化应用ID                                                                 *
                //*测试开发可使用“测试Demo”的APP ID,
                                //正式上线需要使用自己创建的应用的App ID    
                   //*应用ID的获取:登陆官网,在“应用-应用列表”,
                                    //点击应用名称,看应用详情获取APP ID
                    restAPI.setAppId(appId);
                //******************************注释
                //*调用发送模板短信的接口发送短信                                                                  
                //*参数顺序说明:                                                                                  *
                //*第一个参数:是要发送的手机号码,可以用逗号分隔,一次最多支持100个手机号                          
                //*第二个参数:是模板ID,在平台上创建的短信模板的ID值;测试的时候可以使用系统的默认模板,id为1。    
                //*系统默认模板的内容为“【云通讯】您使用的是云通讯短信模板,您的验证码是{1},请于{2}分钟内正确输入”*
                //*第三个参数是要替换的内容数组。                                                                                                                               *
                //*假设您用测试Demo的APP ID,则需使用默认模板ID 1,发送手机号是13800000000,传入参数为6532和5,则调用方式为           *
                //*result = restAPI.sendTemplateSMS("13800000000","1" ,new String[]{"6532","5"});                                                                          *
                //*则13800000000手机号收到的短信内容是:【云通讯】您使用的是云通讯短信模板,您的验证码是xxxxx,请于xx分钟内正确输入 
                String randCode = randCode(5);//生成随机数验证码
                System.out.println(randCode);
                result = restAPI.sendTemplateSMS(phone,"1" ,new String[]{randCode,validateTime});
            
            System.out.println("SDKTestGetSubAccounts result=" + result);
            if("000000".equals(result.get("statusCode"))){
                //正常返回输出data包体信息(map)
                HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");
                Set<String> keySet = data.keySet();
                for(String key:keySet){
                    Object object = data.get(key);
                    System.out.println(key +" = "+object);
                }
            }else{
                //异常返回输出错误码和错误信息
                System.out.println("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));
            }
        }
        //随机验证码
        public static String randCode(Integer len){
            StringBuilder builder=new StringBuilder();
            Random random=new Random();
            for (int i = 0; i <len; i++) {
                //产生0-9的随机数 根据len参数
                int nextInt = random.nextInt(10);
                //把int类型转换成string类型
                builder.append(String.valueOf(nextInt));
            }
            return builder.toString();
        }
        }
    

四、测试

 package test;
    import static org.junit.Assert.*;
    import java.util.HashMap;
    import java.util.Random;
    import java.util.Set;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.mail.MailSender;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import com.alibaba.dubbo.config.annotation.Reference;
    import com.cloopen.rest.sdk.CCPRestSmsSDK;
    import com.yyg.SMSRunApp;
    import com.yyg.api.SmsService;
    import com.yyg.utils.SmsSendUtils;
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes=SMSRunApp.class)
    public class SDKTestSendTemplateSMS {
        @Autowired
        SmsService serviceSms;
        @Reference
        MailService mailService;
        @Test
        public void testSMS() throws Exception {
            System.out.println(serviceSms);
            serviceSms.smsSend("13888888888","1");
        }
    }

五、记得绑定测试号码
需要发送给哪个手机号就绑定哪个,第四步测试也是相同号码,因为我这是为了截图,号码不一致,不用管

有疑问的欢迎联系2822256710,加v :yygtq0818126,欢迎点评

猜你喜欢

转载自blog.csdn.net/Yangyg_0818/article/details/83963576
今日推荐