批量发送短信
阿里云短信文档如下:短信批量发送API(SendBatchSms)
文章目录
步骤 1 创建阿里云账号 步骤 2 获取阿里云访问密钥
假设前2步你已经完成。步骤 3 在控制台完成模板与签名的申请,获得调用接口必备的参数
短信签名和短信模板你已经设置好
spring boot 项目引入阿里云短信依赖
或者自己下载SDK工具包
我们这里使用引入依赖
1.引入库
代码如下(示例):
<dependency><!-- 阿里云短信 -->
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<dependency><!-- 阿里云短信 -->
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
写一个工具类
SmsUtil工具类代码如下(示例):
//设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化ascClient需要的几个参数
final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
//替换成你的AK
final String accessKeyId = "yourAccessKeyId";//你的accessKeyId,参考本文档步骤2
final String accessKeySecret = "yourAccessKeySecret";//你的accessKeySecret,参考本文档步骤2
//初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
封装好等下步使用。
spring boot 请求
提示:以下代码仅供思路参考,完全复制粘贴可能会报错。
package com.wuliu.fa.Controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.github.pagehelper.Page;
import com.wuliu.fa.entity.company;
import com.wuliu.fa.service.CompanyService;
import com.wuliu.fa.util.ResponseResult;
@RestController
public class manymessagsController extends BaseController{
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private CompanyService companyservice;
//预约发货短信
@PostMapping( "/ssssmsXxs")
@ResponseBody
public ResponseResult<Map<String,String>> ssssmsXxs(String phone) throws Exception {
Map<String,String> m=new HashMap<String,String>();
int maxNums=100; //每次最多发送100条,我们一次批量发100条
int times =0;// 循环几个100 用List的长度 除 100
int size=0; //
//查询结果列表
Page<company> companylist=companyservice.GetBycname("", 0, 101);
size=companylist.size();
if(size<100) {
times=1;
}else{
times=(size-1)/maxNums +1; //为什么要-1 因为如果是200的时候,理论上次数应该是2,而不是3,如果是101,那么次数也是2,这样就保证次数准确。
}
List<String> phoneList= new ArrayList<>();
List<String> templateList =new ArrayList<>();
List<String > signNameList=new ArrayList<>();
StringBuffer phoneNumberJson;
StringBuffer templateParamJson;
StringBuffer signNameJson;
for(int j=0;j<times;j++){
if(j>0&&(j*maxNums +1 >size)){
//边界判定,如果刚好是100条,那么times的值为2,这时候j 为1的时候 101 大于100结束循环,100条以内不生效
break;
}else{
phoneNumberJson =new StringBuffer();
templateParamJson =new StringBuffer();
signNameJson= new StringBuffer();
phoneNumberJson.append("[");
templateParamJson.append("[");
signNameJson.append("[");
for(int k=j*maxNums;k<size && k<(j+1)*maxNums;k++){
phoneNumberJson.append("\""+companylist.get(k).getTel()+"\",");
signNameJson.append("\"你的签名\",");
templateParamJson.append("{"+
"\"name\":\""+companylist.get(k).getName()+"\","+
"},");
phoneNumberJson.deleteCharAt(phoneNumberJson.length()-1);//移除最后一个逗号字符,
templateParamJson.deleteCharAt(templateParamJson.length()-1);//移除最后一个逗号字符
signNameJson.deleteCharAt(signNameJson.length()-1);
phoneNumberJson.append("]");
templateParamJson.append("]");
signNameJson.append("]");
}
phoneList.add(phoneNumberJson.toString());
templateList.add(templateParamJson.toString());
signNameList.add(signNameJson.toString());
}
}
//组装请求对象
if(size>0&×==phoneList.size()){
for(int i=0;i<times;i++){
// SendBatchSmsRequest request = new SendBatchSmsRequest();
// request.setMethod(MethodType.POST);
// request.setPhoneNumberJson(phoneList.get(i));
// request.setSignNameJson(singNameList.get(i));
// request.setTemplateParamJson(templateList.get(i));
// request.setTEmplateCode(AliSmsCode);
// SendBatchSmsResponse sendSmsREsponse= acsClient.getAcsRAcsREsponse(request);
// if(sendSmsREsponse.getCode()!=null && sendSmsREsponse.getCode().equalse("OK")){
// //批量请求发送短信成功
// System.out.println("批量短信发送成功:"+phoneList.size()+"条");
// }else{
// System.out.println("批量短信发送失败!");
// }
}
Thread.sleep(100) ;//批量发送暂停100ms;
m.put("msg", "发送成功");
return new ResponseResult<Map<String,String>>(SUCCESS,m);
}else{
m.put("msg", "发送失败");
return new ResponseResult<Map<String,String>>(SUCCESS,m);
}
}
}