package com.yczx.dgbao;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.ClientException;
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.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.yczx.dgbao.redis.RedisUtil;
import com.yczx.dgbao.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Random;
import java.util.regex.Pattern;
/**
* created by zyj on 2018/6/12
*/
@Component
public class DySmsUtil {
/**
* 这些短信的配置信息我是放在配置文件中的 可自己调节
*/
@Value("${alConfig.signName}")
private String signName;
@Value("${alConfig.accessKeyId}")
private String accessKeyId;
@Value("${alConfig.accessKeySecret}")
private String accessKeySecret;
@Autowired
private RedisUtil redisUtil;
/**
* 生成模板内容
* @param map
* @return
*/
public String getTemplateParme(HashMap<String,String> map){
if (map != null && !map.isEmpty()) {
String templateParme = JSON.toJSONString(map);
return templateParme;
}
return null;
}
/**
*发送短信
* @param phoneNum 手机号
* @param templateCode 模板号
* @param templateParam 模板内容
* @param type 是否需要存验证码
* 如果项目有多个模板需要发送验证码并保存 可以自己增加参数
* @return
*/
public Result sendCode(String phoneNum, String templateCode,String templateParam,boolean type) {
if (phoneNum != null && !"".equals(phoneNum)) {
//自己写的正则 可以根据自身需求修改
if (!Pattern.matches("^(1[3-9]|2[0-9])[0-9]{9}$", phoneNum)) {
return new Result(500, "手机号不正确!");
}
} else {
return new Result(500, "手机号不能为空!");
}
//设置超时时间-可自行调整
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 = "";//你的accessKeyId,参考本文档步骤2
// final String accessKeySecret ="";//你的accessKeySecret,参考本文档步骤2
//初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
accessKeySecret);
try {
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
} catch (ClientException e) {
e.printStackTrace();
} catch (com.aliyuncs.exceptions.ClientException e) {
e.printStackTrace();
}
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象
SendSmsRequest request = new SendSmsRequest();
//使用post提交
request.setMethod(MethodType.POST);
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request.setPhoneNumbers(phoneNum);
//必填:短信签名-可在短信控制台中找到
request.setSignName(signName);
request.setTemplateCode(templateCode);
if (templateParam!=null&& !"".equals(templateParam)) {
request.setTemplateParam(templateParam);
}
SendSmsResponse sendSmsResponse = null;
try {
sendSmsResponse = acsClient.getAcsResponse(request);
} catch (Exception e) {
e.printStackTrace();
}
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
if (type){
JSONObject jsonObject = JSON.parseObject(templateParam);
//这里的key以模板中的参数名称为准 本项目中的模板参数为code 可以在短信控制台找到
String code = jsonObject.getString("code");
redisUtil.set(phoneNum + "_code",code , 600);
}
return new Result(200, "发送成功!");
} else {
String c = sendSmsResponse.getCode();
System.out.println("错误代码:" + c);
return new Result(500, "发送失败");
}
}
/**
* 生成验证码
* @return
*/
private String getCode() {
Random ran = new Random();
String code = "";
for (int i = 0; i < 6; i++) {
int i1 = ran.nextInt(10);
code += i1;
}
return code;
}
}
整理阿里短信工具类
最新推荐文章于 2021-11-05 16:31:48 发布