Springboot 使用阿里云api批量发送短信

批量发送短信

阿里云短信文档如下:短信批量发送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&&times==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);
		}
	}
}
	

猜你喜欢

转载自blog.csdn.net/Wyangcsdb/article/details/109530047