[TOC] java實現發簡訊功能 前言 如今發簡訊功能已經成為互聯網公司的標配,本篇文章將一步步實現java發送簡訊 考察了許多提供簡訊服務的三方,幾乎所有都需要企業認證才可以使用,這對於個人學習非常不方便。多方比較之後,選擇了騰訊雲(此處並非做廣告),原因有兩點: 1. 支持微信公眾號認證(門檻 ...
目錄
java實現發簡訊功能
前言
如今發簡訊功能已經成為互聯網公司的標配,本篇文章將一步步實現java發送簡訊
考察了許多提供簡訊服務的三方,幾乎所有都需要企業認證才可以使用,這對於個人學習非常不方便。多方比較之後,選擇了騰訊雲(此處並非做廣告),原因有兩點:
- 支持微信公眾號認證(門檻低)
- 每月贈送100條免費簡訊(適合個人學習)(這一點請礦家子弟自行忽略)
開發環境
請參照: 基於SpringBoot構建分模塊項目
騰訊雲 ---簡訊
找到簡訊服務
開通之後,點擊添加應用
設置簡訊簽名(以公眾號為例),簽名類型選擇公眾號或小程式,其餘按照要求填寫即可
簽名完成之後,創建簡訊模板
等待以上信息審核完成之後,便可以開始使用了,騰訊簡訊服務需要用到SDK AppID 和App Key ,在這裡:
代碼
pom.xml引入依賴
<properties> <java.version>1.8</java.version> <!-- 你的其他依賴。。。 --> <tencent.qcloudsms.version>1.0.6</tencent.qcloudsms.version> </properties> <dependencies> <!-- 你的其他依賴。。。 --> <!-- 騰訊簡訊 --> <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> <version>${tencent.qcloudsms.version}</version> </dependency> </dependencies>
發送簡訊工具類
package com.wayne.common.utils; import com.github.qcloudsms.*; import com.github.qcloudsms.httpclient.HTTPException; import com.wayne.common.entity.CmsMessageConfig; import com.wayne.common.exception.CustomException; import com.wayne.common.form.MessageForm; import org.json.JSONException; import java.io.IOException; /** * 發送簡訊工具類 * @author Wayne * @date 2019/6/26 */ public class MessageUtils { /** * 按模板發送簡訊 支持單發和群發 * @param isSingle 是否單發 true: 單發,false: 群發 * @param form 需要發送的簡訊內容及收信人手機號 * @param config 簡訊配置 * @throws CustomException 發送失敗時捕獲的異常信息 */ public static void sendMessage(Boolean isSingle, MessageForm form, CmsMessageConfig config) throws CustomException { validateMessage(form, config); String regex = ";"; String[] params = {form.getCaptcha()}; String[] phoneNumbers = form.getMobiles().split(regex); SmsResultBase result; try { // 是否單發 if (isSingle) { SmsSingleSender ssender = new SmsSingleSender(config.getAppId(), config.getAppKey()); result = ssender.sendWithParam("86", phoneNumbers[0], config.getTemplateId(), params, config.getSmsSign(), "", ""); } else { SmsMultiSender msender = new SmsMultiSender(config.getAppId(), config.getAppKey()); result = msender.sendWithParam("86", phoneNumbers, config.getTemplateId(), params, config.getSmsSign(), "", ""); } System.out.println(result); } catch (HTTPException e) { e.printStackTrace(); throw new CustomException("HTTP響應碼錯誤"); } catch (JSONException e) { e.printStackTrace(); throw new CustomException("json解析錯誤"); } catch (IOException e) { e.printStackTrace(); throw new CustomException("網路IO錯誤"); } } /** * 校驗參數 */ private static void validateMessage(MessageForm messageForm, CmsMessageConfig messageConfig) throws CustomException { ValidatorUtils.validateEntity(messageForm); if (null == messageConfig) { throw new CustomException("系統參數異常"); } } }
CmsMessageConfig配置類
package com.wayne.common.entity; import lombok.Data; import javax.persistence.*; @Data @Table(name = "cms_message_config") public class CmsMessageConfig { /** * 主鍵 */ @Id @Column(name = "ID") private Integer id; /** * AppID */ @Column(name = "APP_ID") private Integer appId; /** * AppKey */ @Column(name = "APP_KEY") private String appKey; /** * 簡訊模板ID */ @Column(name = "TEMPLATE_ID") private Integer templateId; /** * 簽名內容 */ @Column(name = "SMS_SIGN") private String smsSign; /** * 是否刪除,0:否,1:是 */ @Column(name = "IS_DELETE") private String isDelete; /** * 狀態,0:使用,1:未使用 (同一時間應最多只有一條數據處於使用狀態) */ @Column(name = "IS_USE") private String isUse; /** * 創建者ID */ @Column(name = "CREATE_ADMIN_ID") private Integer createAdminId; @Column(name = "EXTEND1") private String extend1; @Column(name = "EXTEND2") private String extend2; @Column(name = "EXTEND3") private String extend3; @Column(name = "EXTEND4") private String extend4; @Column(name = "EXTEND5") private String extend5; @Column(name = "EXTEND6") private String extend6; }
Service
@Override public ResponseBean sendMessage(MessageForm messageForm) { ValidatorUtils.validateEntity(messageForm); // 獲取正在使用的簡訊配置: 此處為 從資料庫中查詢 CmsMessageConfig messageConfig = getCurrUseMessageConfig(); try { // 發送簡訊 MessageUtils.sendMessage(Boolean.FALSE, messageForm, messageConfig); } catch (CustomException e) { e.printStackTrace(); return ResponseBean.createInstance(Boolean.FALSE, 401, e.getMessage()); } return ResponseBean.createInstance(); }
Controller
@PostMapping("/message/sendMessage") public ResponseBean sendMessage(MessageForm messageForm) { return messageService.sendMessage(messageForm); }
效果
一號簡訊模板
二號簡訊模板
設置簡訊配置信息
結束語
最後,本人已開通公眾號,歡迎大家前來灌水