直接上代码,亲测可用
package org.jeecg.common.util;
import java.security.SecureRandom;
import java.util.Random;import org.apache.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;import lombok.extern.slf4j.Slf4j;
/**
*
* @ClassName: AliCloudSmsUtils
* @Description: 阿里云发送短信
* @author WangJing
* @date 2020年2月4日
*
*/
@Slf4j
public class AliCloudSmsUtils {// 产品名称:云通信短信API产品,开发者无需替换
private static final String product = "Dysmsapi";
// 产品域名,开发者无需替换
private static final String domain = "dysmsapi.aliyuncs.com";
// 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
private final static String ACCESS_KEY_ID = "";
private final static String ACCESS_KEY_SECRET = "";public static void main(String[] args) throws ClientException {
// 发短信
String phoneNumbers = "";//接收短信的手机号码
String templateParam = "";//短信模板变量对应的实际值,JSON格式
String templateCode = "";//短信模板ID。请在控制台模板管理页面模板CODE一列查看
String signName = "";//短信签名名称。请在控制台签名管理页面签名名称一列查看
String smsUpExtendCode = null;//上行短信扩展码,无特殊需要此字段的用户请忽略此字段
String outId = null;//外部流水扩展字段
PairsendCurrencySMS = AliCloudSmsUtils.sendCurrencySMS(phoneNumbers, templateParam, templateCode,
signName, smsUpExtendCode, outId);
System.out.println("短信接口返回的数据----------------");
System.out.println("key=" + sendCurrencySMS.getKey());//true 发送成功,false 发送失败
System.out.println("value=" + sendCurrencySMS.getValue());//发送失败的msg
}/**
*
* @Title: sendCurrencySMS
* @Description: 发送通用短信
* @param @param phoneNumbers 接收短信的手机号码
* @param @param templateParam 短信模板变量对应的实际值,JSON格式
* @param @param templateCode 短信模板ID。请在控制台模板管理页面模板CODE一列查看
* @param @param signName 短信签名名称。请在控制台签名管理页面签名名称一列查看
* @param @param smsUpExtendCode 上行短信扩展码,无特殊需要此字段的用户请忽略此字段
* @param @param outId 外部流水扩展字段
* @param @return
* @param @throws ClientException 参数
* @return Pair返回类型
* @throws
*/
public static PairsendCurrencySMS(String phoneNumbers, String templateParam, String templateCode,
String signName, String smsUpExtendCode, String outId) throws ClientException{
Pairpair = new Pair (true, "发送成功");
try {
if(StringUtils.isBlank(phoneNumbers)
|| StringUtils.isBlank(templateCode)
|| StringUtils.isBlank(signName)){
log.error("AliCloudSmsUtils--sendCurrencySMS--必填字段不可为空");
pair = new Pair(true, "必填字段不可为空");
return pair;
}
SendSmsResponse sendSms = sendSms(phoneNumbers, templateParam, templateCode, signName, smsUpExtendCode, outId);
if(!"OK".equals(sendSms.getCode())){
log.info("AliCloudSmsUtils--sendCurrencySMS,sendSms返回发送失败;msg:{}", JSONObject.toJSONString(sendSms));
pair = new Pair(false, sendSms.getMessage());
}else{
pair = new Pair(true, "发送成功");
}
} catch (Exception e) {
pair = new Pair(false, "接口异常");
log.error("AliCloudSmsUtils--sendCurrencySMS--发生异常,error:{}", e);
}
return pair;
}
/**
*
* @Title: sendSms
* @Description: 发送短信验证码
* @param @param phoneNumbers 接收短信的手机号码
* @param @param templateParam 短信模板变量对应的实际值,JSON格式
* @param @param templateCode 短信模板ID。请在控制台模板管理页面模板CODE一列查看
* @param @param signName 短信签名名称。请在控制台签名管理页面签名名称一列查看
* @param @param smsUpExtendCode 上行短信扩展码,无特殊需要此字段的用户请忽略此字段
* @param @param outId 外部流水扩展字段
* @param @return
* @param @throws ClientException 参数
* @return SendSmsResponse 返回类型
* @throws
*/
public static SendSmsResponse sendSms(String phoneNumbers, String templateParam, String templateCode,
String signName, String smsUpExtendCode, String outId) throws ClientException {// 可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
// 初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);// 组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
// 必填:待发送手机号
request.setPhoneNumbers(phoneNumbers);
// 必填:短信签名-可在短信控制台中找到
request.setSignName(signName);
// 必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode);
// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
if (StringUtils.isNotBlank(templateParam)) {
request.setTemplateParam(templateParam);
}
// 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
if (StringUtils.isNotBlank(smsUpExtendCode)) {
request.setSmsUpExtendCode(smsUpExtendCode);
}
// 选填:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
if (StringUtils.isNotBlank(outId)) {
request.setSmsUpExtendCode(outId);
}
// hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
return sendSmsResponse;
}/**
*
* @Title: sendPINSms
* @Description: 发送4位短信验证码
* @param @param signName 签名
* @param @param templateCode 手机号
* @param @param phoneNumbers 模板
* @param @return 参数
* @return Pair返回类型
* @throws
*/
public static PairsendPINSms(String signName, String templateCode, String phoneNumbers) {
Pairpair = new Pair (true, "发送成功");
try {
JSONObject templateParam = new JSONObject();
String nonce_str = getNonce_str();
templateParam.put("code", nonce_str);pair = new Pair
(true, nonce_str);
SendSmsResponse sendSms = sendSms(phoneNumbers, templateParam.toJSONString(), templateCode, signName, null, null);
if(!"OK".equals(sendSms.getCode())){
log.info("AliCloudSmsUtils--sendPINSms,sendSms返回发送失败;msg:{}", JSONObject.toJSONString(sendSms));
pair = new Pair(false, nonce_str);
}else{
pair = new Pair(true, nonce_str);
}
} catch (Exception e) {
pair = new Pair(false, "接口异常");
log.error("AliCloudSmsUtils--sendPINSms--发生异常,error:{}", e);
}
return pair;
}//===========================================生成4位临时验证码
private static final String SYMBOLS = "0123456789"; // 数字
// 字符串
private static final Random RANDOM = new SecureRandom();public static String getNonce_str() {
// 如果需要6位,那 new char[6] 即可,其他位数同理可得
char[] nonceChars = new char[4];
for (int index = 0; index < nonceChars.length; ++index) {
nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
}
return new String(nonceChars);
}
}
注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!