SmsService.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package cn.minbb.iot.service;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.github.qcloudsms.SmsMultiSender;
  4. import com.github.qcloudsms.SmsMultiSenderResult;
  5. import com.github.qcloudsms.SmsSingleSender;
  6. import com.github.qcloudsms.SmsSingleSenderResult;
  7. import com.github.qcloudsms.httpclient.HTTPException;
  8. import org.json.JSONException;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import java.io.IOException;
  14. /**
  15. * 腾讯云短信服务
  16. */
  17. @Service
  18. public class SmsService {
  19. private static Logger logger = LoggerFactory.getLogger(SmsService.class);
  20. private final ObjectMapper objectMapper;
  21. // 短信应用SDK AppID
  22. private int appid = 1400220297;
  23. // 短信应用SDK AppKey
  24. private String appkey = "271645b0861c24747aa83e27085e022d";
  25. // 短信模板ID
  26. private int templateId = 350485;
  27. // 签名 NOTE: 签名需要在短信控制台中申请,签名参数使用的是`签名内容`,而不是`签名ID`
  28. private String smsSign = "王育民开发";
  29. @Autowired
  30. public SmsService(ObjectMapper objectMapper) {
  31. this.objectMapper = objectMapper;
  32. }
  33. /**
  34. * 指定模板 ID 单发短信
  35. *
  36. * @param phoneNumber
  37. * @param name
  38. * @param date
  39. * @param deviceName
  40. * @return
  41. */
  42. public boolean sendSingleSms(String phoneNumber, String name, String deviceName, String date) {
  43. boolean success = false;
  44. try {
  45. // 设备报警提醒:尊敬的用户{1}您好,您所绑定的设备{2}于{3}触发了报警装置,请您及时关注并检查设备状态。
  46. String[] params = {name, deviceName, date};
  47. SmsSingleSender sender = new SmsSingleSender(appid, appkey);
  48. SmsSingleSenderResult result = sender.sendWithParam("86", phoneNumber, templateId, params, smsSign, "", "");
  49. logger.info("发送短信 = {}", objectMapper.writeValueAsString(result));
  50. if (result != null) {
  51. success = true;
  52. }
  53. } catch (HTTPException | JSONException | IOException e) {
  54. // HTTP响应码错误 | JSON解析错误 | 网络IO错误
  55. logger.error("{} - {}", e.getCause(), e.getMessage());
  56. }
  57. return success;
  58. }
  59. /**
  60. * 指定模板 ID 群发短信
  61. *
  62. * @param phoneNumbers
  63. */
  64. public void sendMSms(String[] phoneNumbers) {
  65. try {
  66. String[] params = {"5678"};//数组具体的元素个数和模板中变量个数必须一致,例如事例中templateId:5678对应一个变量,参数数组中元素个数也必须是一个
  67. SmsMultiSender sender = new SmsMultiSender(appid, appkey);
  68. SmsMultiSenderResult result = sender.sendWithParam("86", phoneNumbers, templateId, params, smsSign, "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信
  69. logger.info("提醒短信发送成功 = {}", objectMapper.writeValueAsString(result));
  70. } catch (HTTPException | JSONException | IOException e) {
  71. // HTTP响应码错误 | JSON解析错误 | 网络IO错误
  72. logger.error("{} - {}", e.getCause(), e.getMessage());
  73. }
  74. }
  75. }