package cn.minbb.iot.service; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.qcloudsms.SmsMultiSender; import com.github.qcloudsms.SmsMultiSenderResult; import com.github.qcloudsms.SmsSingleSender; import com.github.qcloudsms.SmsSingleSenderResult; import com.github.qcloudsms.httpclient.HTTPException; import org.json.JSONException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; /** * 腾讯云短信服务 */ @Service public class SmsService { private static Logger logger = LoggerFactory.getLogger(SmsService.class); private final ObjectMapper objectMapper; // 短信应用SDK AppID private int appid = 1400220297; // 短信应用SDK AppKey private String appkey = "271645b0861c24747aa83e27085e022d"; // 短信模板ID private int templateId = 350485; // 签名 NOTE: 签名需要在短信控制台中申请,签名参数使用的是`签名内容`,而不是`签名ID` private String smsSign = "王育民开发"; @Autowired public SmsService(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } /** * 指定模板 ID 单发短信 * * @param phoneNumber * @param name * @param date * @param deviceName * @return */ public boolean sendSingleSms(String phoneNumber, String name, String deviceName, String date) { boolean success = false; try { // 设备报警提醒:尊敬的用户{1}您好,您所绑定的设备{2}于{3}触发了报警装置,请您及时关注并检查设备状态。 String[] params = {name, deviceName, date}; SmsSingleSender sender = new SmsSingleSender(appid, appkey); SmsSingleSenderResult result = sender.sendWithParam("86", phoneNumber, templateId, params, smsSign, "", ""); logger.info("发送短信 = {}", objectMapper.writeValueAsString(result)); if (result != null) { success = true; } } catch (HTTPException | JSONException | IOException e) { // HTTP响应码错误 | JSON解析错误 | 网络IO错误 logger.error("{} - {}", e.getCause(), e.getMessage()); } return success; } /** * 指定模板 ID 群发短信 * * @param phoneNumbers */ public void sendMSms(String[] phoneNumbers) { try { String[] params = {"5678"};//数组具体的元素个数和模板中变量个数必须一致,例如事例中templateId:5678对应一个变量,参数数组中元素个数也必须是一个 SmsMultiSender sender = new SmsMultiSender(appid, appkey); SmsMultiSenderResult result = sender.sendWithParam("86", phoneNumbers, templateId, params, smsSign, "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信 logger.info("提醒短信发送成功 = {}", objectMapper.writeValueAsString(result)); } catch (HTTPException | JSONException | IOException e) { // HTTP响应码错误 | JSON解析错误 | 网络IO错误 logger.error("{} - {}", e.getCause(), e.getMessage()); } } }