package com.matrix.core.tools; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.http.MethodType; import com.matrix.config.properties.AliSmsProperties; import com.matrix.core.exception.GlobleException; import com.matrix.system.hive.bean.SysSmsTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Map; /** * @Author wzy * @Date 2020/3/15 * @email wangdoubleone@gmail.com * @Version V1.0 **/ @Component public class SmsUtils { // private static AliSmsProperties aliSmsProperties = WebUtil.getApplicationContext().getBean(AliSmsProperties.class); @Autowired private IAcsClient iAcsClient; @Resource private AliSmsProperties aliSmsProperties; private CommonRequest commonRequest(String action) { CommonRequest request = new CommonRequest(); request.setMethod(MethodType.POST); request.setDomain("dysmsapi.aliyuncs.com"); request.setVersion("2017-05-25"); request.setAction(action); request.putQueryParameter("SignName", aliSmsProperties.getSignName()); return request; } /** * 发送短信,带变量参数 * * @param phoneNum 手机号 * @param templateCode 短信模板编号 * @param values 变量参数 */ public void sendSms(String phoneNum, String templateCode, Map values) { CommonRequest request = commonRequest(SysSmsTemplate.SMS_ACTION_SEND); request.putQueryParameter("PhoneNumbers", phoneNum); request.putQueryParameter("TemplateCode", templateCode); request.putQueryParameter("TemplateParam", JSONUtil.parse(values).toString()); CommonResponse response = null; try { response = iAcsClient.getCommonResponse(request); LogUtil.info("ali api result:{}", response.getData()); } catch (ClientException e) { e.printStackTrace(); } System.out.println(response.getData()); } /** * 批量发送短信消息,并没有变量参数 * * @param phoneNums 手机号,多个逗号隔开,最多批量1000 * @param templateCode 短信模板编号 */ public String sendBatchSms(String phoneNums, String templateCode) { CommonRequest request = commonRequest(SysSmsTemplate.SMS_ACTION_SEND); request.putQueryParameter("PhoneNumbers", phoneNums); request.putQueryParameter("TemplateCode", templateCode); CommonResponse response = null; try { response = iAcsClient.getCommonResponse(request); LogUtil.info("ali api result:{}", response.getData()); } catch (ClientException e) { e.printStackTrace(); } JSONObject result = JSON.parseObject(response.getData()); if ("OK".equals(result.getString("Code"))) { return result.getString("Code"); } else { throw new GlobleException(result.getString("Message")); } } /** * 添加阿里短信模板 * * @param type 类型 0:验证码 1:短信通知 2:推广短信 3:国际/港澳台消息 * @param name 短信模板名称 * @param content 短信模板内容 * @param remark 短信模板申请说明 */ public String addSmsTemplate(String type, String name, String content, String remark) { CommonRequest request = commonRequest(SysSmsTemplate.SMS_ACTION_ADD); request.putQueryParameter("TemplateType", type); request.putQueryParameter("TemplateName", name); request.putQueryParameter("TemplateContent", content); request.putQueryParameter("Remark", remark); CommonResponse response = null; try { response = iAcsClient.getCommonResponse(request); } catch (ClientException e) { e.printStackTrace(); } JSONObject result = JSON.parseObject(response.getData()); LogUtil.info("ali api result:{}", response.getData()); if ("OK".equals(result.get("Code"))) { return result.get("TemplateCode").toString(); } else { throw new GlobleException(result.get("Message").toString()); } } /** * 查询阿里短信模板 * * @param code 短信模板code */ public String querySmsTemplate(String code) { CommonRequest request = commonRequest(SysSmsTemplate.SMS_ACTION_QUERY); request.putQueryParameter("TemplateCode", code); CommonResponse response = null; try { response = iAcsClient.getCommonResponse(request); LogUtil.info("ali api result:{}", response.getData()); } catch (ClientException e) { e.printStackTrace(); } return response.getData(); } /** * 删除阿里信息模板 * * @param code 短信模板code */ public String deleteSmsTemplate(String code) { CommonRequest request = commonRequest(SysSmsTemplate.SMS_ACTION_DELETE); request.putQueryParameter("TemplateCode", code); CommonResponse response = null; try { response = iAcsClient.getCommonResponse(request); } catch (ClientException e) { e.printStackTrace(); } LogUtil.info("ali api result:{}", response.getData()); JSONObject result = JSON.parseObject(response.getData()); if ("OK".equals(result.get("Code"))) { return result.get("Code").toString(); } else { throw new GlobleException(result.get("Message").toString()); } } }