import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.ClientException;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class SMSUtils {
private SMSUtils() {
}
//定义日志
private static final Logger log = LoggerFactory.getLogger(SMSUtils.class);
private static String regionId;
private static String accessKeyId;
private static String secret;
private static String signName;//必须在线上配置好的
private static String templateCode;//必须在线上配置好的
private volatile static DefaultProfile profile;
private volatile static IAcsClient client;
private static final String ALIYUN_DOMAIN = "dysmsapi.aliyuncs.com";
private static final String ALIYUN_VERSION = "2017-05-25";
private static final String ALIYUN_SENDSMS = "SendSms";
private static final String ALIYUN_SENDBATCHSMS = "SendBatchSms";
private static CommonRequest request = new CommonRequest();
private static ResultUtils<Map<String, Object>> result = new ResultUtils<>();
@Value("${sms.regionId}")
public void setRegionld(String regionId) {
this.regionId = regionId;
}
@Value("${sms.accessKeyId}")
public void setAccessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
}
@Value("${sms.secret}")
public void setSecret(String secret) {
this.secret = secret;
}
@Value("${sms.signName}")
public void setSignName(String signName) {
this.signName = signName;
}
@Value("${sms.templateCode}")
public void setTemplateCode(String templateCode) {
this.templateCode = templateCode;
}
public static IAcsClient getClient() {
if (Strings.isEmpty(client)) {
synchronized (SMSUtils.class) {
if (Strings.isEmpty(client)) {
try {
profile = DefaultProfile.getProfile(regionId, accessKeyId, secret);
client = new DefaultAcsClient(profile);
} catch (Exception e) {
log.error("sms初始化失败!请检查配置文件" + e.getMessage());
}
}
}
}
return client;
}
/**
* @param mobile 手机号
* @param templateCode 模板code yml中配置默认
* @param templateParam 参数 {"code":"786523"}
* @param signName 签名 yml中配置默认
* @return
*/
public static ResultUtils<Map<String, Object>> sendSms(Long mobile, String templateCode, String templateParam, String signName) {
request.setSysMethod(MethodType.POST);
request.setSysDomain(ALIYUN_DOMAIN);
request.setSysVersion(ALIYUN_VERSION);
request.setSysAction(ALIYUN_SENDSMS);
request.putQueryParameter("RegionId", regionId);
request.putQueryParameter("PhoneNumbers", String.valueOf(mobile));
request.putQueryParameter("TemplateCode", Strings.isEmpty(templateCode)? SMSUtils.templateCode:templateCode);
request.putQueryParameter("TemplateParam", templateParam);
request.putQueryParameter("SignName", Strings.isEmpty(signName)? SMSUtils.signName:signName);
try {
CommonResponse response = getClient().getCommonResponse(request);
Map<String, Object> map = JSONObject.parseObject(response.getData(), Map.class);
if (map == null) {
result.setMsg(ResultUtils.MSG_1111);
result.setCode(ResultUtils.CODE_1111);
return result;
}
result.setCode("OK".equalsIgnoreCase(String.valueOf(map.get("Code"))) ? ResultUtils.CODE_0000 : ResultUtils.CODE_1111);
result.setMsg(map.get("Message").toString());
} catch (ClientException e) {
e.printStackTrace();
} catch (com.aliyuncs.exceptions.ServerException e) {
e.printStackTrace();
} catch (com.aliyuncs.exceptions.ClientException e) {
e.printStackTrace();
}
return result;
}
/**
* @param phoneNumberJson 手机号 ["手机号1","手机号2"]
* @param templateCode 模板code
* @param templateParamJson 参数 [{"name":"TemplateParamJson",{"name":"TemplateParamJson"}]
* @param signNameJson 签名 ["签名1","签名2"]
* @return
*/
public static ResultUtils<Map<String, Object>> sendBatchSms(String phoneNumberJson, String templateCode, String templateParamJson, String signNameJson) {
request.setSysMethod(MethodType.POST);
request.setSysDomain(ALIYUN_DOMAIN);
request.setSysVersion(ALIYUN_VERSION);
request.setSysAction(ALIYUN_SENDBATCHSMS);
request.putQueryParameter("RegionId", regionId);
request.putQueryParameter("PhoneNumberJson", phoneNumberJson);
request.putQueryParameter("TemplateCode", templateCode);
request.putQueryParameter("TemplateParamJson", templateParamJson);
request.putQueryParameter("SignNameJson", signNameJson);
try {
CommonResponse response = getClient().getCommonResponse(request);
Map<String, Object> map = JSONObject.parseObject(response.getData(), Map.class);
if (map == null) {
result.setMsg(ResultUtils.MSG_1111);
result.setCode(ResultUtils.CODE_1111);
return result;
}
result.setCode("OK".equalsIgnoreCase(String.valueOf(map.get("Code"))) ? ResultUtils.CODE_0000 : ResultUtils.CODE_1111);
result.setMsg(map.get("Message").toString());
} catch (ClientException e) {
e.printStackTrace();
} catch (com.aliyuncs.exceptions.ServerException e) {
e.printStackTrace();
} catch (com.aliyuncs.exceptions.ClientException e) {
e.printStackTrace();
}
return result;
}
}