package cn.exrick.xboot.core.common.sms; import cn.exrick.xboot.core.common.constant.SettingConstant; import cn.exrick.xboot.core.common.exception.XbootException; import cn.exrick.xboot.core.entity.Setting; import cn.exrick.xboot.core.service.SettingService; import cn.exrick.xboot.core.vo.SmsSetting; import cn.hutool.core.util.StrUtil; 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.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @author exrick */ @Slf4j @Component public class AliSms implements Sms { @Autowired private SettingService settingService; @Override public SmsSetting getSmsSetting() { Setting setting = settingService.get(SettingConstant.ALI_SMS); if (setting == null || StrUtil.isBlank(setting.getValue())) { throw new XbootException("您还未配置阿里云短信服务"); } return new Gson().fromJson(setting.getValue(), SmsSetting.class); } @Override public void sendSms(String mobile, String params, String templateCode) { SmsSetting s = getSmsSetting(); DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", s.getAccessKey(), s.getSecretKey()); 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"); // 支持对多个手机号码发送短信,手机号码之间以英文逗号(,)分隔,上限为1000个手机号码 request.putQueryParameter("PhoneNumbers", mobile); request.putQueryParameter("SignName", s.getSignName()); request.putQueryParameter("TemplateCode", templateCode); request.putQueryParameter("TemplateParam", params); CommonResponse response; try { response = client.getCommonResponse(request); } catch (ClientException e) { log.error(e.getMessage()); throw new XbootException("请求发送短信验证码失败," + e.getErrMsg()); } JsonObject result = JsonParser.parseString(response.getData()).getAsJsonObject(); String code = result.get("Code").getAsString(); String message = result.get("Message").getAsString(); if (!"OK".equals(code) && !"OK".equals(message)) { throw new XbootException("请求发送验证码失败," + message); } } }