a666f5767773375824a853a0b105faf1a2f4c4f1.svn-base 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package cn.com.goldenwater.dcproj.utils;
  2. import com.aliyuncs.DefaultAcsClient;
  3. import com.aliyuncs.IAcsClient;
  4. import com.aliyuncs.dysmsapi.model.v20170525.*;
  5. import com.aliyuncs.exceptions.ClientException;
  6. import com.aliyuncs.http.MethodType;
  7. import com.aliyuncs.profile.DefaultProfile;
  8. import com.aliyuncs.profile.IClientProfile;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Date;
  11. import java.util.Random;
  12. /**
  13. * Created by li on 2018-2-24.
  14. */
  15. public class SmsUtil {
  16. public static final String CODE_OK = "OK";
  17. public static final Long SEND_STATUS_WAITING_RECEIPT = 1L;
  18. public static final Long SEND_STATUS_FAILURE = 2L;
  19. public static final Long SEND_STATUS_SUCCESS = 3L;
  20. private static final String product = "Dysmsapi";
  21. private static final String domain = "dysmsapi.aliyuncs.com";
  22. private static final String endpointName = "cn-hangzhou";
  23. private static final String regionId = "cn-hangzhou";
  24. private static final String accessKeyId = "LTAIcedbS4TWjMl3";
  25. private static final String accessKeySecret = "Pm7ZFyf195buPjH7YdxZGSbCadEX6p";
  26. // private static final String signName = "河长制";
  27. // private static final String templateCode = "SMS_137545086";
  28. private static final SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
  29. static {
  30. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  31. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  32. }
  33. public static SendSmsResponse send(String mobile, String templateParam, String outId, String templateCode, String signName) throws ClientException {
  34. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
  35. DefaultProfile.addEndpoint(endpointName, regionId, product, domain);
  36. IAcsClient acsClient = new DefaultAcsClient(profile);
  37. SendSmsRequest request = new SendSmsRequest();
  38. request.setPhoneNumbers(mobile);
  39. request.setSignName(signName);
  40. request.setTemplateCode(templateCode);
  41. request.setTemplateParam(templateParam);
  42. request.setOutId(outId);
  43. SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
  44. return sendSmsResponse;
  45. }
  46. public static QuerySendDetailsResponse query(String mobile, String bizId) throws ClientException {
  47. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
  48. DefaultProfile.addEndpoint(endpointName, regionId, product, domain);
  49. IAcsClient acsClient = new DefaultAcsClient(profile);
  50. QuerySendDetailsRequest request = new QuerySendDetailsRequest();
  51. request.setPhoneNumber(mobile);
  52. request.setBizId(bizId);
  53. request.setSendDate(ft.format(new Date()));
  54. request.setPageSize(10L);
  55. request.setCurrentPage(1L);
  56. QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
  57. return querySendDetailsResponse;
  58. }
  59. public static String genVerifyCode(int length) {
  60. String chars = "0123456789";
  61. StringBuilder sb = new StringBuilder();
  62. Random rd = new Random();
  63. for (int i = 0; i < length; i++) {
  64. sb.append(chars.charAt(rd.nextInt(chars.length() - 1)));
  65. }
  66. System.out.println("------------ genVerifyCode(): " + sb.toString());
  67. return sb.toString();
  68. }
  69. /**
  70. *
  71. * 群发
  72. * */
  73. public static SendBatchSmsResponse sendQun(String phoneNumberJson, String signNameJson, String paramJson, String templateCode)throws Exception{
  74. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
  75. accessKeySecret);
  76. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
  77. IAcsClient acsClient = new DefaultAcsClient(profile);
  78. //组装请求对象
  79. SendBatchSmsRequest request = new SendBatchSmsRequest();
  80. //使用post提交
  81. request.setMethod(MethodType.POST);
  82. //必填:待发送手机号。支持JSON格式的批量调用,批量上限为100个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
  83. request.setPhoneNumberJson(phoneNumberJson);
  84. //必填:短信签名-支持不同的号码发送不同的短信签名
  85. request.setSignNameJson(signNameJson);
  86. //必填:短信模板-可在短信控制台中找到
  87. request.setTemplateCode(templateCode);
  88. //必填:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  89. //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
  90. request.setTemplateParamJson(paramJson);
  91. //请求失败这里会抛ClientException异常
  92. SendBatchSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
  93. return sendSmsResponse;
  94. }
  95. /**
  96. * Just for test.
  97. */
  98. public static void main(String[] args) throws ClientException, InterruptedException {
  99. String mobile = "18548900068";
  100. // Send the message.
  101. SendSmsResponse response = send(mobile, "{\"code\":\"123456\"}", "1234567890", "SMS_483475287","金水云平台");
  102. System.out.println("Response of send ----------------");
  103. System.out.println("Code=" + response.getCode());
  104. System.out.println("Message=" + response.getMessage());
  105. System.out.println("RequestId=" + response.getRequestId());
  106. System.out.println("BizId=" + response.getBizId());
  107. Thread.sleep(3000L);
  108. // Query the details.
  109. if (response.getCode() != null && response.getCode().equals(CODE_OK)) {
  110. QuerySendDetailsResponse querySendDetailsResponse = query(mobile, response.getBizId());
  111. System.out.println("Response of query ----------------");
  112. System.out.println("Code=" + querySendDetailsResponse.getCode());
  113. System.out.println("Message=" + querySendDetailsResponse.getMessage());
  114. System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());
  115. System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());
  116. for (int i = 0; i < querySendDetailsResponse.getSmsSendDetailDTOs().size(); ++i) {
  117. QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO = querySendDetailsResponse.getSmsSendDetailDTOs().get(i);
  118. System.out.println("SmsSendDetailDTO[" + i + "]:");
  119. System.out.println("Content=" + smsSendDetailDTO.getContent());
  120. System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());
  121. System.out.println("OutId=" + smsSendDetailDTO.getOutId());
  122. System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());
  123. System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());
  124. System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());
  125. System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());
  126. System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());
  127. }
  128. }
  129. }
  130. }