参数说明:
参数名 | 参数说明 | 说明 | 单人 | 多人 |
ACCESS_KEY_ID | ID | 需要自己申请(单人和多人一样) | -------- | |
ACCESS_KEY_SECRET | KEY | 需要自己申请 单人和多人一样) | -------- | |
setSysMethod | 默认值 | MethodType.POST | ||
setSysDomain | 短信服务的服务接入地址 | 默认值 | dysmsapi.aliyuncs.com | |
setSysVersion | API的版本号 | 默认值 | 2017-05-25 | |
setSysAction | 短信发送接口
| SendSms | SendBatchSms | |
putQueryParameter("参数", 值) | 接收短信的手机号 | PhoneNumbers | PhoneNumberJson | |
短信签名名称 | 需要和手机号保持相同的个数 | SignName | SignNameJson | |
短信模板Code,注意这个模板要和签名对应 | 短信模板code | TemplateCode | TemplateCode | |
短信模板变量对应的实际值 | 需要和手机号保持相同的个数 | TemplateParam | TemplateParamJson |
单个短信发送
/**
* 发送短信 单个
* @param phone 手机号
* @param name 模板中的数据
* @return*/
public static SmsAliYunUtilVo sentSms(String phone,String name) {
SmsAliYunUtilVo smsAliYunUtilVo = new SmsAliYunUtilVo();
try {
//default 地域节点,默认就好; 后面是 阿里云的 id和秘钥
DefaultProfile profile = DefaultProfile.getProfile("default", SmsParams.ACCESS_KEY_ID, SmsParams.ACCESS_KEY_SECRET);
IAcsClient client = new DefaultAcsClient(profile);
//这里不能修改
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
//短信服务的服务接入地址
request.setSysDomain(SmsParams.DOMAIN);
//API的版本号
request.setSysVersion("2017-05-25");
//接收短信的手机号码
request.setSysAction("SendSms");
//API的名称
request.putQueryParameter("PhoneNumbers", phoneNumbers);
// 短信签名名称
request.putQueryParameter("SignName", SmsParams.SIGN_NAME);
// 短信模板Code,注意这个模板要和签名对应
request.putQueryParameter("TemplateCode", SmsParams.TEMPLATE_CODE);
//短信模板变量对应的实际值
request.putQueryParameter("TemplateParam", "{\"name\":\"" + name + "\"}");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
String infojson = response.getData();
Gson gson2 = new Gson();
Map map = gson2.fromJson(infojson, Map.class);
String message = map.get("Message").toString();
String codes = map.get("Code").toString();
System.out.println("codes="+codes);
System.out.println("Message="+message);
smsAliYunUtilVo.setCode(codes);
smsAliYunUtilVo.setMessage(message);
}catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return smsAliYunUtilVo;
}
群发短信
/**
* 发送短信 群体
* 注: 手机号,签名名称,模板参数等改为集合形式传参,并且集合中的签名名称数量,模板参数数量必须和手机号数量保持一致!!! 并且 模板code必须和模板参数保持一致!!!
* @param
* @param param1 模板中的参数1
* @param param2 模板中的参数2
* @param param3 模板中的参数3
* @return*/
public static SmsAliYunUtilVo sentSmsUsers(List<String> list, String param1, String param2, String param3) {
SmsAliYunUtilVo smsAliYunUtilVo = new SmsAliYunUtilVo();
ObjectMapper objectMapper = new ObjectMapper();
Gson gson = new Gson();
try {
String phone=gson.toJson(list);
//拼接数据
String[] SignNameJson=new String[list.size()];
List<SmsAliYunObj> smsAliYunObjList= new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
SmsAliYunObj smsAliYunObj= new SmsAliYunObj();
smsAliYunObj.setParam1(param1);
smsAliYunObj.setParam2(param2);
smsAliYunObj.setParam3(param3);
smsAliYunObjList.add(smsAliYunObj);
SignNameJson[i]=SmsParams.SIGN_NAME;
}
String jsonPhone = objectMapper.writeValueAsString(list);
String jsonSmsAliYunObjList = objectMapper.writeValueAsString(smsAliYunObjList);
String jsonSignName = objectMapper.writeValueAsString(SignNameJson);
//default 地域节点,默认就好; 后面是 阿里云的 id和秘钥
DefaultProfile profile = DefaultProfile.getProfile("default", SmsParams.ACCESS_KEY_ID, SmsParams.ACCESS_KEY_SECRET);
IAcsClient client = new DefaultAcsClient(profile);
//这里不能修改
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
//短信服务的服务接入地址
request.setSysDomain(SmsParams.DOMAIN);
//API的版本号
request.setSysVersion("2017-05-25");
//接收短信的手机号码
request.setSysAction("SendBatchSms");
//API的名称
request.putQueryParameter("PhoneNumberJson", jsonPhone);
// 短信签名名称
request.putQueryParameter("SignNameJson", jsonSignName);
// 短信模板Code,注意这个模板要和签名对应
request.putQueryParameter("TemplateCode", SmsParams.TEMPLATE_CODE);
//短信模板变量对应的实际值
request.putQueryParameter("TemplateParamJson", jsonSmsAliYunObjList);
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
String infojson = response.getData();
Gson gson2 = new Gson();
Map map = gson2.fromJson(infojson, Map.class);
String message = map.get("Message").toString();
String codes = map.get("Code").toString();
smsAliYunUtilVo.setCode(codes);
smsAliYunUtilVo.setMessage(message);
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
return smsAliYunUtilVo;
}
return smsAliYunUtilVo;
}
工具类(可以配置到XML文件中)
package java.untis;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Slf4j
@Data
@Component
@ConfigurationProperties(prefix = "config")
public class SmsParams implements InitializingBean {
@Value("${config.SmsAccessKeyId}")
private String smsAccessKeyId;
@Value("${config.SmsAccessKeySecret}")
private String smsAccessKeySecret;
@Value("${config.SmsSignName}")
private String smsSignName;
@Value("${config.Smsdomain}")
private String smsdomain;
@Value("${config.SmstTmplateCode}")
private String smstTmplateCode;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String SIGN_NAME;
public static String DOMAIN;
public static String TEMPLATE_CODE;
@Override
public void afterPropertiesSet() throws Exception {
ACCESS_KEY_ID=smsAccessKeyId;
ACCESS_KEY_SECRET=smsAccessKeySecret;
SIGN_NAME=smsSignName;
DOMAIN=smsdomain;
TEMPLATE_CODE=smstTmplateCode;
}
}
组装模板参数的实体
package Java.untis;
import lombok.Data;
/**
*申请的模板里面的参数
*/
@Data
public class SmsAliYunObj {
private String param1;
private String param2;
private String param3;
}