package com.java110.core.factory; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.java110.dto.sms.SmsConfigDto; import com.java110.utils.cache.MappingCache; import com.java110.vo.ResultVo; import org.apache.juli.logging.Log; import org.slf4j.Logger; import com.java110.core.log.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import java.util.Random; /* pom.xml com.aliyun aliyun-java-sdk-core 4.0.3 */ /** * Created by wuxw on 2019/3/23. */ public class AliSendMessageFactory { private final static Logger logger = LoggerFactory.getLogger(AliSendMessageFactory.class); public final static int DEFAULT_MESSAGE_CODE_LENGTH = 6; public final static String ALI_SMS_DOMAIN = "ALI_SMS"; /** * 生成6位短信码 * * @return */ public static String generateMessageCode() { return generateMessageCode(DEFAULT_MESSAGE_CODE_LENGTH); } /** * 生成验证码 * * @param limit 位数 * @return */ public static String generateMessageCode(int limit) { Random random = new Random(); String result = ""; for (int i = 0; i < limit; i++) { result += (random.nextInt(9) + 1); } return result; } public static void sendMessage(String tel, String code) { //开始发送验证码 logger.debug("发送号码为{},短信码为{}", tel, code); DefaultProfile profile = DefaultProfile.getProfile(MappingCache.getValue(ALI_SMS_DOMAIN, "region"), MappingCache.getValue(ALI_SMS_DOMAIN, "accessKeyId"), MappingCache.getValue(ALI_SMS_DOMAIN, "accessSecret")); 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", MappingCache.getValue(ALI_SMS_DOMAIN, "region")); request.putQueryParameter("PhoneNumbers", tel); request.putQueryParameter("SignName", MappingCache.getValue(ALI_SMS_DOMAIN, "signName")); request.putQueryParameter("TemplateCode", MappingCache.getValue(ALI_SMS_DOMAIN, "TemplateCode")); request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}"); try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送验证码信息:{}", response.getData()); LogFactory.saveOutLog("SMS","{\"code\":" + code + "}",new ResponseEntity(response.getData(),HttpStatus.OK)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } } public static ResultVo sendOweFeeSms(String tel, Object param, SmsConfigDto smsConfigDto) { //开始发送验证码 DefaultProfile profile = DefaultProfile.getProfile(smsConfigDto.getRegion().trim(), smsConfigDto.getAccessKeyId().trim(), smsConfigDto.getAccessSecret().trim()); 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", smsConfigDto.getRegion().trim()); request.putQueryParameter("PhoneNumbers", tel); request.putQueryParameter("SignName", smsConfigDto.getSignName().trim()); request.putQueryParameter("TemplateCode", smsConfigDto.getTemplateCode().trim()); request.putQueryParameter("TemplateParam", param.toString()); try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送欠费信息:{}", response.getData()); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } return new ResultVo(ResultVo.CODE_OK,ResultVo.MSG_OK); } }