package com.dg.core.util;
|
|
import com.aliyuncs.CommonRequest;
|
import com.aliyuncs.CommonResponse;
|
import com.aliyuncs.DefaultAcsClient;
|
import com.aliyuncs.IAcsClient;
|
import com.aliyuncs.exceptions.ClientException;
|
import com.aliyuncs.http.MethodType;
|
import com.aliyuncs.profile.DefaultProfile;
|
import com.dg.core.AliyunConfig;
|
import com.dg.core.ResultData;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.HashMap;
|
import java.util.Random;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* 阿里云短信工具类
|
*/
|
@Component
|
public class SmsUtil {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(SmsUtil.class);
|
|
// 注入阿里云配置
|
@Resource
|
AliyunConfig aliyunConfig;
|
|
// 注入redisTemplate
|
@Resource
|
RedisTemplate<String, Object> redisTemplate;
|
|
// 发送短信
|
public ResultData<Object> sendSms(String tel) {
|
//cn-hangzhou 是阿里定义的签名固定值。填写阿里云申请短信签名的key和secret值
|
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", aliyunConfig.getKey(), aliyunConfig.getScrect());
|
/*阿里云提供的短信发送api的近期的相关代码,代码以最新的阿里api提供为准*/
|
IAcsClient client = new DefaultAcsClient(profile);
|
CommonRequest request = new CommonRequest();
|
request.setSysMethod(MethodType.POST);
|
request.setSysDomain("dysmsapi.aliyuncs.com");
|
request.setSysVersion("2017-05-25");
|
request.setSysAction("SendSms");
|
request.putQueryParameter("RegionId", "cn-hangzhou");
|
// 接收人电话
|
request.putQueryParameter("PhoneNumbers", tel);
|
// 短信签名
|
request.putQueryParameter("SignName", aliyunConfig.getSignName());
|
// 短信模板
|
request.putQueryParameter("TemplateCode", aliyunConfig.getTemplateCode());
|
Random rd = new Random();
|
int code = rd.nextInt(900000) + 100000;
|
// 短信内容
|
request.putQueryParameter("TemplateParam", "{code:" + code + "}");
|
// 获取短信发送的响应结果
|
try {
|
CommonResponse rs = client.getCommonResponse(request);
|
LOGGER.debug(rs.getData().toString());
|
// 把json格式的字符串装换成java的map的数据类型
|
ObjectMapper mapper = new ObjectMapper();
|
try {
|
HashMap<String, Object> m = mapper.readValue(rs.getData().toString(), HashMap.class);
|
if (m.get("Message").equals("OK")) {
|
redisTemplate.opsForValue().set(tel, code + "", 5, TimeUnit.MINUTES);
|
return ResultData.success("短信发送成功!");
|
}
|
} catch (JsonProcessingException e) {
|
e.printStackTrace();
|
return ResultData.error("短信发送失败");
|
}
|
} catch (ClientException e) {
|
e.printStackTrace();
|
return ResultData.error("短信发送失败");
|
}
|
return ResultData.error("短信发送失败");
|
}
|
}
|