赞
踩
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,欢迎点评
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。