Aliyun.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.nuliji.tools.third.aliyuncs;
  2. import com.aliyuncs.DefaultAcsClient;
  3. import com.aliyuncs.IAcsClient;
  4. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
  5. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
  6. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
  7. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  8. import com.aliyuncs.exceptions.ClientException;
  9. import com.aliyuncs.profile.DefaultProfile;
  10. import com.aliyuncs.profile.IClientProfile;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.beans.factory.annotation.Value;
  13. import org.springframework.boot.context.properties.ConfigurationProperties;
  14. import org.springframework.context.annotation.Configuration;
  15. import org.springframework.stereotype.Component;
  16. import java.text.SimpleDateFormat;
  17. import java.util.Date;
  18. /**
  19. * Created by GaoJie on 2017/11/3.
  20. */
  21. public class Aliyun {
  22. static final String product = "Dysmsapi";
  23. static final String domain = "dysmsapi.aliyuncs.com";
  24. // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
  25. private String accessKeyId = "";
  26. private String accessKeySecret = "";
  27. private String sign = "";
  28. private String regionId = "";
  29. public Aliyun(String accessKeyId, String accessKeySecret, String sign, String regionId){
  30. this.accessKeyId = accessKeyId;
  31. this.accessKeySecret = accessKeySecret;
  32. this.sign = sign;
  33. this.regionId = regionId;
  34. }
  35. public SendSmsResponse sendSms(String mobile, String templateId, String code) throws ClientException {
  36. //可自助调整超时时间
  37. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  38. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  39. //初始化acsClient,暂不支持region化
  40. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
  41. DefaultProfile.addEndpoint(regionId, regionId, product, domain);
  42. IAcsClient acsClient = new DefaultAcsClient(profile);
  43. //组装请求对象-具体描述见控制台-文档部分内容
  44. SendSmsRequest request = new SendSmsRequest();
  45. //必填:待发送手机号
  46. request.setPhoneNumbers(mobile);
  47. //必填:短信签名-可在短信控制台中找到
  48. request.setSignName(sign);
  49. //必填:短信模板-可在短信控制台中找到
  50. request.setTemplateCode(templateId);
  51. request.setTemplateParam("{\"code\":\"" + code + "\"}");
  52. //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  53. // request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");
  54. //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
  55. //request.setSmsUpExtendCode("90997");
  56. //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
  57. // request.setOutId("yourOutId");
  58. //hint 此处可能会抛出异常,注意catch
  59. SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
  60. return sendSmsResponse;
  61. }
  62. public QuerySendDetailsResponse smsDetail(String mobile) throws ClientException {
  63. //可自助调整超时时间
  64. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  65. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  66. //初始化acsClient,暂不支持region化
  67. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
  68. DefaultProfile.addEndpoint(regionId, regionId, product, domain);
  69. IAcsClient acsClient = new DefaultAcsClient(profile);
  70. //组装请求对象
  71. QuerySendDetailsRequest request = new QuerySendDetailsRequest();
  72. //必填-号码
  73. request.setPhoneNumber(mobile);
  74. //可选-流水号
  75. //必填-发送日期 支持30天内记录查询,格式yyyyMMdd
  76. SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
  77. request.setSendDate(ft.format(new Date()));
  78. //必填-页大小
  79. request.setPageSize(10L);
  80. //必填-当前页码从1开始计数
  81. request.setCurrentPage(1L);
  82. //hint 此处可能会抛出异常,注意catch
  83. QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
  84. return querySendDetailsResponse;
  85. }
  86. public void main(String[] args) throws ClientException, InterruptedException {
  87. //发短信
  88. SendSmsResponse response = sendSms("15072416873", "SMS_105305060", "");
  89. System.out.println("短信接口返回的数据----------------");
  90. System.out.println("Code=" + response.getCode());
  91. System.out.println("Message=" + response.getMessage());
  92. System.out.println("RequestId=" + response.getRequestId());
  93. System.out.println("BizId=" + response.getBizId());
  94. Thread.sleep(3000L);
  95. //查明细
  96. if (response.getCode() != null && response.getCode().equals("OK")) {
  97. QuerySendDetailsResponse querySendDetailsResponse = smsDetail(response.getBizId());
  98. System.out.println("短信明细查询接口返回数据----------------");
  99. System.out.println("Code=" + querySendDetailsResponse.getCode());
  100. System.out.println("Message=" + querySendDetailsResponse.getMessage());
  101. int i = 0;
  102. for (QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs()) {
  103. System.out.println("SmsSendDetailDTO[" + i + "]:");
  104. System.out.println("Content=" + smsSendDetailDTO.getContent());
  105. System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());
  106. System.out.println("OutId=" + smsSendDetailDTO.getOutId());
  107. System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());
  108. System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());
  109. System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());
  110. System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());
  111. System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());
  112. }
  113. System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());
  114. System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());
  115. }
  116. }
  117. }