package com.dg.core.util; import com.alibaba.fastjson.JSONObject; 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 com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; 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.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; 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 redisTemplate; private String LoginName="DSC1210052"; private String Pwd="pzhsjj@123"; private String FeeType="2"; /** * 发送短信登录验证码 * * @param tel * 电话 */ public ResultData 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", "集慧科技"); // 短信模板 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 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("短信发送失败"); } /** * 发送短信登录验证码(电信平台) * * @param tel * 电话 */ public ResultData sendSmsNew(String tel) { String url = "https://dxsdk.028lk.com:8082/Api/SendSms?"+"LoginName="+LoginName+"&Pwd="+Pwd+"&FeeType="+FeeType+"&Mobile="+tel+"&Content="; Random rd = new Random(); int code = rd.nextInt(900000) + 100000; String content="您的验证码为:"+code+",用于手机验证,15分钟内有效,请勿泄露于他人!"; url=url+content; OkHttpClient client = new OkHttpClient(); Response response; //解密数据 String rsa = null; Request request = new Request.Builder() .url(url) .get() .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); try { response = client.newCall(request).execute(); redisTemplate.opsForValue().set(tel, code + "", 5, TimeUnit.MINUTES); // rsa = response.body().string().split("|")[0]; rsa = response.message(); if (!rsa.equals("OK")){ return ResultData.success("短信发送失败"); } } catch (IOException e) { e.printStackTrace(); return ResultData.success("短信发送失败"); } return ResultData.success("短信发送成功"); } /** * 发送工单超时短信 * * @param tel * 电话 * @param name * 工单名 */ public ResultData sendSmsOvertime(String tel,String name) { //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", "集慧科技"); // 短信模板 request.putQueryParameter("TemplateCode", aliyunConfig.getTemplateCodeOvertime()); Random rd = new Random(); // 短信内容 request.putQueryParameter("TemplateParam", "{name:'" + name + "'}"); // 获取短信发送的响应结果 try { CommonResponse rs = client.getCommonResponse(request); LOGGER.debug(rs.getData().toString()); // 把json格式的字符串装换成java的map的数据类型 ObjectMapper mapper = new ObjectMapper(); try { HashMap m = mapper.readValue(rs.getData().toString(), HashMap.class); if (m.get("Message").equals("OK")) { return ResultData.success("短信发送成功!"); } } catch (JsonProcessingException e) { e.printStackTrace(); return ResultData.error("短信发送失败"); } } catch (ClientException e) { e.printStackTrace(); return ResultData.error("短信发送失败"); } return ResultData.error("短信发送失败"); } /** * 发送工单超时短信(电信) * * @param tel * 电话 * @param name * 工单名 */ public ResultData sendSmsOvertimeNew(String tel,String name) { String url = "https://dxsdk.028lk.com:8082/Api/SendSms?"+"LoginName="+LoginName+"&Pwd="+Pwd+"&FeeType="+FeeType+"&Mobile="+tel+"&Content="; Random rd = new Random(); String content=name+"的导办工单超时未处理,请及时通知!"; url=url+content; OkHttpClient client = new OkHttpClient(); Response response; //解密数据 String rsa = null; Request request = new Request.Builder() .url(url) .get() .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); try { response = client.newCall(request).execute(); rsa = response.message(); if (!rsa.equals("OK")){ return ResultData.success("短信发送失败"); } } catch (IOException e) { e.printStackTrace(); return ResultData.success("短信发送失败"); } return ResultData.success("短信发送成功"); } /** * 发送工单完成短信 * * @param tel * 电话 * @param name * 工单名 */ public ResultData sendSmsComplete(String tel,String name) { //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", "集慧科技"); // 短信模板 request.putQueryParameter("TemplateCode", aliyunConfig.getTemplateCodeComplete()); Random rd = new Random(); // 短信内容 request.putQueryParameter("TemplateParam", "{name:'" + name + "'}"); // 获取短信发送的响应结果 try { CommonResponse rs = client.getCommonResponse(request); LOGGER.debug(rs.getData().toString()); // 把json格式的字符串装换成java的map的数据类型 ObjectMapper mapper = new ObjectMapper(); try { HashMap m = mapper.readValue(rs.getData().toString(), HashMap.class); if (m.get("Message").equals("OK")) { return ResultData.success("短信发送成功!"); } } catch (JsonProcessingException e) { e.printStackTrace(); return ResultData.error("短信发送失败"); } } catch (ClientException e) { e.printStackTrace(); return ResultData.error("短信发送失败"); } return ResultData.error("短信发送失败"); } /** * 发送工单完成短信 * * @param tel * 电话 * @param name * 工单名 */ public ResultData sendSmsCompleteNew(String tel,String name) { String url = "https://dxsdk.028lk.com:8082/Api/SendSms?"+"LoginName="+LoginName+"&Pwd="+Pwd+"&FeeType="+FeeType+"&Mobile="+tel+"&Content="; Random rd = new Random(); String content="您的"+name+"导办工单已由工作人员处理完成,请通过个人中心-我的申请导办查询。"; url=url+content; OkHttpClient client = new OkHttpClient(); Response response; //解密数据 String rsa = null; Request request = new Request.Builder() .url(url) .get() .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); try { response = client.newCall(request).execute(); rsa = response.message(); if (!rsa.equals("OK")){ return ResultData.success("短信发送失败"); } } catch (IOException e) { e.printStackTrace(); return ResultData.success("短信发送失败"); } return ResultData.success("短信发送成功"); } /** * 发送工单提交短信 * * @param tel * 电话 * @param name * 工单名 */ public ResultData sendSmsSubmit(String tel,String name) { //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", "集慧科技"); // 短信模板 request.putQueryParameter("TemplateCode", aliyunConfig.getTemplateCodeSubmit()); Random rd = new Random(); // 短信内容 request.putQueryParameter("TemplateParam", "{name:'" + name + "'}"); // 获取短信发送的响应结果 try { CommonResponse rs = client.getCommonResponse(request); LOGGER.debug(rs.getData().toString()); // 把json格式的字符串装换成java的map的数据类型 ObjectMapper mapper = new ObjectMapper(); try { HashMap m = mapper.readValue(rs.getData().toString(), HashMap.class); if (m.get("Message").equals("OK")) { return ResultData.success("短信发送成功!"); } } catch (JsonProcessingException e) { e.printStackTrace(); return ResultData.error("短信发送失败"); } } catch (ClientException e) { e.printStackTrace(); return ResultData.error("短信发送失败"); } return ResultData.error("短信发送失败"); } /** * 发送工单提交短信(电信平台) * * @param tel * 电话 * @param name * 工单名 */ public ResultData sendSmsSubmitNew(String tel,String name) { String url = "https://dxsdk.028lk.com:8082/Api/SendSms?"+"LoginName="+LoginName+"&Pwd="+Pwd+"&FeeType="+FeeType+"&Mobile="+tel+"&Content="; Random rd = new Random(); String content="您在"+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) +"收到新的导办工单,请"+name+"尽快处理。"; url=url+content; OkHttpClient client = new OkHttpClient(); Response response; //解密数据 String rsa = null; Request request = new Request.Builder() .url(url) .get() .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); try { response = client.newCall(request).execute(); rsa = response.message(); if (!rsa.equals("OK")){ return ResultData.success("短信发送失败"); } } catch (IOException e) { e.printStackTrace(); return ResultData.success("短信发送失败"); } return ResultData.success("短信发送成功"); } /** * 发送工单提交短信(电信平台) * * @param tel * 电话 * @param name * 工单名 */ public ResultData sendSmsOvertimeRemind(String tel,String name) { String url = "https://dxsdk.028lk.com:8082/Api/SendSms?"+"LoginName="+LoginName+"&Pwd="+Pwd+"&FeeType="+FeeType+"&Mobile="+tel+"&Content="; Random rd = new Random(); String content="您的待处理导办工单已超时,请 "+name+"尽快处理。"; url=url+content; OkHttpClient client = new OkHttpClient(); Response response; //解密数据 String rsa = null; Request request = new Request.Builder() .url(url) .get() .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); try { response = client.newCall(request).execute(); rsa = response.message(); if (!rsa.equals("OK")){ return ResultData.success("短信发送失败"); } } catch (IOException e) { e.printStackTrace(); return ResultData.success("短信发送失败"); } return ResultData.success("短信发送成功"); } }