今天我們來講一講小馬哥旗下的騰訊雲短信服務業務,話不多說進入正題:
第一步:當然是注冊賬號信息啦
第二步:創建簽名,如果不懂其實可以直接添加客服qq詢問
第三步:填寫簽名信息,如果是個人使用而且沒有營業執照的話可以選則公眾號,去微信公眾號官網去創建公眾號
微信公眾號平台:https://mp.weixin.qq.com/
注冊訂閱號:
第四步:創建正文模板也就是短信模板
這里沒啥好講的值得注意的地方就是態度要誠懇不然有你好受的,別問我咋知道的。
第五步:知曉短信服務中重要的信息
在簽名和正文模板都創建好之后,獲取關鍵信息。其中簽名管理中的簽名內容、正文模板中的模板ID以及應用中的SDKAppID、App Key
第六步:正文來了,java開發
1.引入騰訊雲短信依賴
<!--騰訊雲短信發送api--> <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> </dependency>
2.代碼編寫
事先聲明,這里的業務流程是首先向mq發送指令(發送短信指令),然后讓mq去發送短信
/** * 向mq發送消息 讓其發送短信 * @param phone * @return */ public ResponseResult sendMessage(String phone,String code) { /* if(StringUtils.isEmpty(phone)){ ExceptionCast.cast(CommonCode.INVALID_PARAM); } //驗證電話號碼是否存在 User user = userRepository.findByPhone(phone); if(user == null){ ExceptionCast.cast(UserCode.NUMBER_NOT_FOUND); } //向cookie存放驗證碼 this.saveCookie(phone,code); */ //向mq發送消息 HashMap<String, String> map = new HashMap<>(); map.put("phone",phone); map.put("code",code); String jsonString = JSON.toJSONString(map); rabbitTemplate.convertAndSend(RabbitmqConfig.GP_ROUTING_CMS_EXCHANGE,sms_routing_reset,jsonString); return new ResponseResult(UserCode.MESSAGE_SEND_SUCCESS); }
mq接收到消息后:
控制層:
@Component public class SmsSendCode { @Autowired private SmsSendCodeService smsSendCodeService; private static final Logger LOGGER = LoggerFactory.getLogger(SmsSendCode.class); /** * 監聽${gp.mq.sms_queue_reset} 隊列 * @param msg */ @RabbitListener(queues = {"${gp.mq.sms_queue_reset}"}) public void SmsSendCode(String msg){ Map map = JSON.parseObject(msg, Map.class); String phone = (String) map.get("phone"); String code = (String) map.get("code"); if(StringUtils.isEmpty(phone)){ LOGGER.error("receive smsSendCode,phone is null,phone:{}",phone); } if(StringUtils.isEmpty(code)){ LOGGER.error("receive smsSendCode,phone is null,code:{}",code); } smsSendCodeService.SmsSend(phone,code); } }
業務層:
/** * @author 碼農界的小學生 * @description:實現短信發送業務層 * @title: SmsSendCodeService * @projectName graduation-project * @description: TODO * @date 2020/3/27 0:01 */ @Service public class SmsSendCodeService { // 短信應用 SDK AppID int appid = 你的AppID; // SDK AppID 以1400開頭 // 短信應用 SDK AppKey String appkey = "你的AppKey"; // 簽名 String smsSign = "你的簽名內容"; // NOTE: 簽名參數使用的是`簽名內容`,而不是`簽名ID`。這里的簽名"騰訊雲"只是示例,真實的簽名需要在短信控制台申請 /** * 發送驗證碼 * @param phone */ public void SmsSend(String phone,String code) { // 短信模板 ID,需要在短信應用中申請 int templateId = 563864; // NOTE: 這里的模板 ID`7839`只是示例,真實的模板 ID 需要在短信控制台中申請 ArrayList<String> list = new ArrayList<>(); list.add(code); try { SmsSingleSender ssender = new SmsSingleSender(appid, appkey); SmsSingleSenderResult result = ssender.sendWithParam("86", phone, templateId,list, smsSign, "", ""); //System.out.println("驗證碼碼為:"+code); //System.out.println(result); } catch (HTTPException e) { // HTTP 響應碼錯誤 e.printStackTrace(); } catch (JSONException e) { // JSON 解析錯誤 e.printStackTrace(); } catch (IOException e) { // 網絡 IO 錯誤 e.printStackTrace(); } } }
上述代碼中result為發送后的狀態碼等信息,可對應參考官方短信狀態碼查看錯誤信息。
list中放入動態的參數,例如下圖,想往{1}中傳入驗證碼,只需要在list加入的第一個索引添加的是驗證碼,同理如果往{2}{3}傳參需要在list第二第三索引添加參數。切記順序不可亂。
好,今天就寫到這里,順便附帶一張成功的截圖