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");
}
}
五、记得绑定测试号码
需要发送给哪个手机号就绑定哪个,第四步测试也是相同号码,因为我这是为了截图,号码不一致,不用管