SmsTenCentCloudUtil.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package jnpf.util.message;
  2. import com.tencentcloudapi.common.Credential;
  3. import com.tencentcloudapi.common.profile.ClientProfile;
  4. import com.tencentcloudapi.common.profile.HttpProfile;
  5. import com.tencentcloudapi.sms.v20210111.SmsClient;
  6. import com.tencentcloudapi.sms.v20210111.models.*;
  7. import jnpf.util.ParameterUtil;
  8. import lombok.extern.slf4j.Slf4j;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * 腾讯云发送短信类
  14. *
  15. * @author JNPF
  16. * @版本: V3.2.0
  17. * @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com)
  18. * @作者: JNPF开发平台组
  19. * @日期: 2021/4/21 11:58
  20. */
  21. @Slf4j
  22. public class SmsTenCentCloudUtil {
  23. /**
  24. * 创建客户端
  25. *
  26. * @param accessKeyId
  27. * @param accessKeySecret
  28. * @return
  29. */
  30. private static SmsClient createClient(String accessKeyId, String accessKeySecret, String endpoint, String region) {
  31. SmsClient smsClient = null;
  32. try {
  33. Credential cred = new Credential(accessKeyId, accessKeySecret);
  34. // 实例化一个http选项,可选的,没有特殊需求可以跳过
  35. HttpProfile httpProfile = new HttpProfile();
  36. httpProfile.setEndpoint(endpoint);
  37. // 实例化一个client选项,可选的,没有特殊需求可以跳过
  38. ClientProfile clientProfile = new ClientProfile();
  39. clientProfile.setHttpProfile(httpProfile);
  40. // 实例化要请求产品的client对象,clientProfile是可选的
  41. smsClient = new SmsClient(cred, region, clientProfile);
  42. } catch (Exception e) {
  43. log.error("创建客户端失败:" + e.getMessage());
  44. }
  45. return smsClient;
  46. }
  47. /**
  48. * 查询短信模板详情
  49. *
  50. * @param accessKeyId
  51. * @param accessKeySecret
  52. * @param templateId
  53. */
  54. public static List<String> querySmsTemplateRequest(String accessKeyId, String accessKeySecret, String endpoint, String region, String templateId) {
  55. try {
  56. SmsClient smsClient = createClient(accessKeyId, accessKeySecret, endpoint, region);
  57. // 实例化一个请求对象,每个接口都会对应一个request对象
  58. DescribeSmsTemplateListRequest req = new DescribeSmsTemplateListRequest();
  59. req.setTemplateIdSet(new Long[]{Long.valueOf(templateId)});
  60. req.setInternational(0L);
  61. // 返回的resp是一个DescribeSmsTemplateListResponse的实例,与请求对象对应
  62. DescribeSmsTemplateListResponse resp = smsClient.DescribeSmsTemplateList(req);
  63. // 输出json格式的字符串回包
  64. System.out.println(DescribeSmsTemplateListResponse.toJsonString(resp));
  65. DescribeTemplateListStatus[] describeTemplateStatusSet = resp.getDescribeTemplateStatusSet();
  66. for (DescribeTemplateListStatus describeTemplateListStatus : describeTemplateStatusSet) {
  67. String templateContent = describeTemplateListStatus.getTemplateContent();
  68. List<String> list = new ArrayList<>();
  69. ParameterUtil.parse("{", "}", templateContent, list);
  70. return list;
  71. }
  72. } catch (Exception e) {
  73. log.error("查询短信模板参数失败:" + e.getMessage());
  74. }
  75. return null;
  76. }
  77. /**
  78. * 查询短信模板详情
  79. *
  80. * @param accessKeyId
  81. * @param accessKeySecret
  82. * @param templateId
  83. */
  84. public static String querySmsTemplateContent(String accessKeyId, String accessKeySecret, String endpoint, String region, String templateId) {
  85. try {
  86. SmsClient smsClient = createClient(accessKeyId, accessKeySecret, endpoint, region);
  87. // 实例化一个请求对象,每个接口都会对应一个request对象
  88. DescribeSmsTemplateListRequest req = new DescribeSmsTemplateListRequest();
  89. req.setTemplateIdSet(new Long[]{Long.valueOf(templateId)});
  90. req.setInternational(0L);
  91. // 返回的resp是一个DescribeSmsTemplateListResponse的实例,与请求对象对应
  92. DescribeSmsTemplateListResponse resp = smsClient.DescribeSmsTemplateList(req);
  93. // 输出json格式的字符串回包
  94. System.out.println(DescribeSmsTemplateListResponse.toJsonString(resp));
  95. DescribeTemplateListStatus[] describeTemplateStatusSet = resp.getDescribeTemplateStatusSet();
  96. for (DescribeTemplateListStatus describeTemplateListStatus : describeTemplateStatusSet) {
  97. String templateContent = describeTemplateListStatus.getTemplateContent();
  98. return templateContent;
  99. }
  100. } catch (Exception e) {
  101. log.error("查询短信模板参数失败:" + e.getMessage());
  102. }
  103. return null;
  104. }
  105. /**
  106. * 发送短信
  107. *
  108. * @param accessKeyId
  109. * @param accessKeySecret
  110. * @param phoneNumbers
  111. * @param appId
  112. * @param signContent
  113. * @param templateId
  114. * @param map
  115. * @return
  116. */
  117. public static String sentSms(String accessKeyId, String accessKeySecret, String endpoint, String region, String phoneNumbers, String appId, String signContent, String templateId, Map<String, Object> map) {
  118. try {
  119. SmsClient client = createClient(accessKeyId, accessKeySecret, endpoint, region);
  120. // 实例化一个请求对象,每个接口都会对应一个request对象
  121. SendSmsRequest req = new SendSmsRequest();
  122. // 接收人
  123. String[] split = phoneNumbers.split(",");
  124. req.setPhoneNumberSet(split);
  125. // AppId
  126. req.setSmsSdkAppId(appId);
  127. // TemplateId
  128. req.setTemplateId(templateId);
  129. // SignName
  130. req.setSignName(signContent);
  131. // 参数
  132. List<String> list = new ArrayList<>();
  133. for (String key : map.keySet()) {
  134. String value = map.get(key) != null ? String.valueOf(map.get(key)) : "";
  135. list.add(value);
  136. }
  137. req.setTemplateParamSet(list.toArray(new String[list.size()]));
  138. // 返回的resp是一个SendSmsResponse的实例,与请求对象对应
  139. SendSmsResponse resp = client.SendSms(req);
  140. // 判断是否发送成功
  141. SendStatus[] sendStatusSet = resp.getSendStatusSet();
  142. for (SendStatus sendStatus : sendStatusSet) {
  143. String code = sendStatus.getCode();
  144. if ("Ok".equalsIgnoreCase(code)) {
  145. return "Ok";
  146. } else {
  147. log.error("发送短信失败:" + sendStatus.getMessage());
  148. return "发送短信失败:" + sendStatus.getMessage();
  149. }
  150. }
  151. } catch (Exception e) {
  152. log.error("发送短信失败:" + e.getMessage());
  153. return "发送短信失败:" + e.getMessage();
  154. }
  155. return null;
  156. }
  157. }