騰訊雲——短信服務


今天我們來講一講小馬哥旗下的騰訊雲短信服務業務,話不多說進入正題:

第一步:當然是注冊賬號信息啦

第二步:創建簽名,如果不懂其實可以直接添加客服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第二第三索引添加參數。切記順序不可亂。

 

 好,今天就寫到這里,順便附帶一張成功的截圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM