SmsUtil.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package cn.efunbox.base.util;
  2. import cn.efunbox.base.result.ApiCode;
  3. import cn.efunbox.base.result.ApiResult;
  4. import com.alibaba.fastjson.JSON;
  5. import com.aliyuncs.DefaultAcsClient;
  6. import com.aliyuncs.IAcsClient;
  7. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
  8. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
  9. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
  10. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  11. import com.aliyuncs.exceptions.ClientException;
  12. import com.aliyuncs.profile.DefaultProfile;
  13. import com.aliyuncs.profile.IClientProfile;
  14. import lombok.extern.slf4j.Slf4j;
  15. import java.text.SimpleDateFormat;
  16. import java.util.Date;
  17. /**
  18. * Created on 17/6/7.
  19. * 短信API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过
  20. * 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可)
  21. * 工程依赖了2个jar包(存放在工程的libs目录下)
  22. * 1:aliyun-java-sdk-core.jar
  23. * 2:aliyun-java-sdk-dysmsapi.jar
  24. *
  25. * 备注:Demo工程编码采用UTF-8
  26. * 国际短信发送请勿参照此DEMO
  27. */
  28. @Slf4j
  29. public class SmsUtil {
  30. // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
  31. static final String accessKeyId = "LTAIKVC7LxUTi9tO";
  32. static final String accessKeySecret = "4mZUJGWfwbBZUkmYjVJJTAF6uNEKgf";
  33. public static ApiResult sendSms(String phone) {
  34. //可自助调整超时时间
  35. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  36. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  37. //初始化acsClient,暂不支持region化
  38. DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", accessKeyId, accessKeySecret);
  39. IAcsClient acsClient = new DefaultAcsClient(profile);
  40. //组装请求对象-具体描述见控制台-文档部分内容
  41. SendSmsRequest request = new SendSmsRequest();
  42. //必填:待发送手机号
  43. request.setPhoneNumbers(phone);
  44. //必填:短信签名-可在短信控制台中找到
  45. request.setSignName("义方快乐学堂");
  46. //必填:短信模板-可在短信控制台中找到
  47. request.setTemplateCode("SMS_92260012");
  48. String code=Code();
  49. //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  50. request.setTemplateParam("{\"code\":"+code+"}");
  51. //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
  52. //request.setSmsUpExtendCode("90997");
  53. //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
  54. request.setOutId("yourOutId");
  55. //hint 此处可能会抛出异常,注意catch
  56. SendSmsResponse sendSmsResponse = null;
  57. try {
  58. sendSmsResponse = acsClient.getAcsResponse(request);
  59. } catch (ClientException e) {
  60. e.printStackTrace();
  61. }
  62. log.info("sendSms response : {}", JSON.toJSONString(sendSmsResponse));
  63. if ("OK".equalsIgnoreCase(sendSmsResponse.getCode())) {
  64. return ApiResult.ok(code);
  65. }
  66. return ApiResult.error(ApiCode.SIGN);
  67. }
  68. public static QuerySendDetailsResponse querySendDetails(String bizId, String phone) throws ClientException {
  69. //可自助调整超时时间
  70. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  71. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  72. //初始化acsClient,暂不支持region化
  73. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
  74. IAcsClient acsClient = new DefaultAcsClient(profile);
  75. //组装请求对象
  76. QuerySendDetailsRequest request = new QuerySendDetailsRequest();
  77. //必填-号码
  78. request.setPhoneNumber(phone);
  79. //可选-流水号
  80. request.setBizId(bizId);
  81. //必填-发送日期 支持30天内记录查询,格式yyyyMMdd
  82. SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
  83. request.setSendDate(ft.format(new Date()));
  84. //必填-页大小
  85. request.setPageSize(10L);
  86. //必填-当前页码从1开始计数
  87. request.setCurrentPage(1L);
  88. //hint 此处可能会抛出异常,注意catch
  89. QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
  90. return querySendDetailsResponse;
  91. }
  92. /**
  93. * 验证码的生成
  94. * @return
  95. */
  96. public static String Code(){
  97. return String.valueOf((int)(Math.random()*9000)+1000);
  98. }
  99. public static void main(String[] args) throws ClientException, InterruptedException {
  100. for(int i = 0; i< 1000; i++){
  101. System.out.println(Code());
  102. }
  103. // String phone="18611822573";
  104. // System.out.println(Code());
  105. // //发短信
  106. //// SendSmsResponse response = sendSms(phone);
  107. // String response = sendSms(phone);
  108. // System.out.println("短信接口返回的数据----------------");
  109. // System.out.println("Code=" + response.getCode());
  110. // System.out.println("Message=" + response.getMessage());
  111. // System.out.println("RequestId=" + response.getRequestId());
  112. // System.out.println("BizId=" + response.getBizId());
  113. //
  114. // Thread.sleep(3000L);
  115. // // String phone="";
  116. // //查明细
  117. // if(response.getCode() != null && response.getCode().equals("OK")) {
  118. // QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId(),phone);
  119. // System.out.println("短信明细查询接口返回数据----------------");
  120. // System.out.println("Code=" + querySendDetailsResponse.getCode());
  121. // System.out.println("Message=" + querySendDetailsResponse.getMessage());
  122. // int i = 0;
  123. // for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs())
  124. // {
  125. // System.out.println("SmsSendDetailDTO["+i+"]:");
  126. // System.out.println("Content=" + smsSendDetailDTO.getContent());
  127. // System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());
  128. // System.out.println("OutId=" + smsSendDetailDTO.getOutId());
  129. // System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());
  130. // System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());
  131. // System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());
  132. // System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());
  133. // System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());
  134. // String regEx="[^0-9]";
  135. // Pattern p = Pattern.compile(regEx);
  136. // Matcher m = p.matcher(smsSendDetailDTO.getContent());
  137. // String sign = m.replaceAll("").trim();
  138. // System.out.println("验证码-===="+sign);
  139. // }
  140. // System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());
  141. // System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());
  142. // }
  143. }
  144. public static void sendRegisterSms(String mobileNo) {
  145. //可自助调整超时时间
  146. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  147. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  148. //初始化acsClient,暂不支持region化
  149. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
  150. IAcsClient acsClient = new DefaultAcsClient(profile);
  151. //组装请求对象-具体描述见控制台-文档部分内容
  152. SendSmsRequest request = new SendSmsRequest();
  153. //必填:待发送手机号
  154. request.setPhoneNumbers(mobileNo);
  155. //必填:短信签名-可在短信控制台中找到
  156. request.setSignName("学有义方");
  157. //必填:短信模板-可在短信控制台中找到
  158. request.setTemplateCode("SMS_218279684");
  159. // String code=Code();
  160. //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  161. // request.setTemplateParam("{\"name\":\"Tom\", \"code\":"+code+"}");
  162. //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
  163. //request.setSmsUpExtendCode("90997");
  164. //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
  165. request.setOutId("yourOutId");
  166. //hint 此处可能会抛出异常,注意catch
  167. SendSmsResponse sendSmsResponse = null;
  168. try {
  169. sendSmsResponse = acsClient.getAcsResponse(request);
  170. } catch (ClientException e) {
  171. e.printStackTrace();
  172. }
  173. log.info("sendSms response : {}", JSON.toJSONString(sendSmsResponse));
  174. }
  175. }