package com.sandu.common.sms.impl; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; 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.sandu.common.execption.BusinessException; import com.sandu.common.sms.AliyunSmsResult; import com.sandu.common.sms.ISmsSender; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.HashMap; import java.util.Map; /** * 阿里云短信服务 * * @author chenjiantian */ public class AliyunSmsSender implements ISmsSender { private final String accessKeyId; private final String accessKeySecret; private final String templateId; private final String sign; public AliyunSmsSender(String accessKeyId, String accessKeySecret, String templateId, String sign) { this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; this.templateId = templateId; this.sign = sign; } @Override public AliyunSmsResult sendWithTemplate(String phone, String[] params) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); // request.setSysMethod(MethodType.POST); // request.setSysDomain("dysmsapi.ap-southeast-1.aliyuncs.com"); // request.setSysVersion("2018-05-01"); // request.setSysAction("SendMessageWithTemplate"); request.setSysMethod(MethodType.POST); //短信服务的服务接入地址 request.setSysDomain("dysmsapi.aliyuncs.com"); //API的版本号 request.setSysVersion("2017-05-25"); //API的名称 request.setSysAction("SendSms"); //接收短信的手机号码 request.putQueryParameter("PhoneNumbers", phone); //短信签名名称 request.putQueryParameter("SignName", sign); //短信模板ID request.putQueryParameter("TemplateCode", templateId); String templateParam = "{}"; if (params.length == 1) { Map data = new HashMap<>(); data.put("code", params[0]); templateParam = JSON.toJSONString(data); } else if (params.length > 1) { Map data = new HashMap<>(); data.put("code", params[0]); for (int i = 1; i < params.length; i++) { data.put("code" + i, params[i]); } templateParam = JSON.toJSONString(data); } request.putQueryParameter("TemplateParam", templateParam); try { CommonResponse response = client.getCommonResponse(request); return JSONUtil.toBean(response.getData(), AliyunSmsResult.class); } catch (ClientException e) { e.printStackTrace(); throw new BusinessException("短信发送失败," + e.getErrMsg()); } } }