SmsAliSendUtil.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package com.minpay.common.util;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import com.aliyuncs.DefaultAcsClient;
  5. import com.aliyuncs.IAcsClient;
  6. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
  7. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
  8. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
  9. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  10. import com.aliyuncs.exceptions.ClientException;
  11. import com.aliyuncs.profile.DefaultProfile;
  12. import com.aliyuncs.profile.IClientProfile;
  13. import com.minpay.common.constant.ServConstant;
  14. import com.minpay.common.service.IPublicService;
  15. import com.startup.minpay.frame.exception.MINBusinessException;
  16. import com.startup.minpay.frame.service.base.Service;
  17. /**
  18. * 短信发送类---阿里云
  19. * @author ZHANGZZ@MINPAY.CC
  20. */
  21. public class SmsAliSendUtil {
  22. //产品名称:云通信短信API产品,开发者无需替换
  23. static final String product = "Dysmsapi";
  24. //产品域名,开发者无需替换
  25. static final String domain = "dysmsapi.aliyuncs.com";
  26. // 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
  27. static final String accessKeyId = ServConstant.ALI_ACCKEY_ID;
  28. static final String accessKeySecret = ServConstant.ALI_ACCKEY_SECRET;
  29. /**
  30. * 发送阿里短信
  31. * @param mobile
  32. * @param signName
  33. * @param tempCode
  34. * @param jsonParam
  35. * @param channel
  36. * @return
  37. * @throws ClientException
  38. * @throws MINBusinessException
  39. */
  40. public static SendSmsResponse sendSms(String mobile, String signName, String tempCode, String jsonParam, String channel) throws ClientException, MINBusinessException {
  41. //可自助调整超时时间
  42. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  43. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  44. String accessKeyId = Service.lookup(IPublicService.class).getSysParValue(channel+"_ALI_ACCESSKEYID");
  45. String accessKeySecret = Service.lookup(IPublicService.class).getSysParValue(channel+"_ALI_ACCESSKEYSECRET");
  46. //初始化acsClient,暂不支持region化
  47. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
  48. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
  49. IAcsClient acsClient = new DefaultAcsClient(profile);
  50. //组装请求对象-具体描述见控制台-文档部分内容
  51. SendSmsRequest request = new SendSmsRequest();
  52. //必填:待发送手机号
  53. request.setPhoneNumbers(mobile);
  54. //必填:短信签名-可在短信控制台中找到
  55. request.setSignName(signName);
  56. //必填:短信模板-可在短信控制台中找到
  57. request.setTemplateCode(tempCode);
  58. //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  59. request.setTemplateParam(jsonParam);
  60. //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
  61. //request.setSmsUpExtendCode("90997");
  62. //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
  63. request.setOutId("yourOutId");
  64. //hint 此处可能会抛出异常,注意catch
  65. SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
  66. return sendSmsResponse;
  67. }
  68. public static QuerySendDetailsResponse querySendDetails(String bizId) 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. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
  75. IAcsClient acsClient = new DefaultAcsClient(profile);
  76. //组装请求对象
  77. QuerySendDetailsRequest request = new QuerySendDetailsRequest();
  78. //必填-号码
  79. request.setPhoneNumber("15000000000");
  80. //可选-流水号
  81. request.setBizId(bizId);
  82. //必填-发送日期 支持30天内记录查询,格式yyyyMMdd
  83. SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
  84. request.setSendDate(ft.format(new Date()));
  85. //必填-页大小
  86. request.setPageSize(10L);
  87. //必填-当前页码从1开始计数
  88. request.setCurrentPage(1L);
  89. //hint 此处可能会抛出异常,注意catch
  90. QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
  91. return querySendDetailsResponse;
  92. }
  93. public static void main(String[] args) throws ClientException, InterruptedException {
  94. /* //发短信
  95. SendSmsResponse response = sendSms("18654574122", Constant.BTXZS_NAME, "SMS_145590111", "{code:123322}");
  96. System.out.println("短信接口返回的数据----------------");
  97. System.out.println("Code=" + response.getCode());
  98. System.out.println("Message=" + response.getMessage());
  99. System.out.println("RequestId=" + response.getRequestId());
  100. System.out.println("BizId=" + response.getBizId());
  101. Thread.sleep(3000L);
  102. //查明细
  103. if(response.getCode() != null && response.getCode().equals("OK")) {
  104. QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId());
  105. System.out.println("短信明细查询接口返回数据----------------");
  106. System.out.println("Code=" + querySendDetailsResponse.getCode());
  107. System.out.println("Message=" + querySendDetailsResponse.getMessage());
  108. int i = 0;
  109. for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs())
  110. {
  111. System.out.println("SmsSendDetailDTO["+i+"]:");
  112. System.out.println("Content=" + smsSendDetailDTO.getContent());
  113. System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());
  114. System.out.println("OutId=" + smsSendDetailDTO.getOutId());
  115. System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());
  116. System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());
  117. System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());
  118. System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());
  119. System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());
  120. }
  121. System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());
  122. System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());
  123. }*/
  124. }
  125. }