微信小程序 獲取 手機驗證碼 短信驗證碼 后端功能實現解析


本文原創首發CSDN,鏈接 https://mp.csdn.net/console/editor/html/106041472 ,作者博客https://blog.csdn.net/qq_41464123 ,轉載請帶上本段內容,尤其是腳本之家、碼神島等平台,謝謝配合。 


目錄

前言

第一步:   a) 創建短信簽名、創建短信正文模板

b)短信簽名

c)短信模板

第二步:使用Java SDK調用短信發送API接口


在之前的小程序項目中,爭對用戶信息的有效性問題(比如手機號是否真實),我使用了微信小程序自帶的獲取手機號的功能,獲取到用戶的手機號,因為微信綁定的手機號一定經過微信的嚴格驗證,能夠確保手機號真實。但是根據客戶的需求,需要實現使用短信驗證碼登入的功能,那么沒辦法,客戶是上帝,我只能去實現它。

 

前言

 

對於獲取微信綁定的手機號來確保小程序用戶的真實性,可以看我這篇文章,我寫的很詳細。

接下來講解如何實現短信驗證碼來校驗用戶的有效性。

本文主要講解實現微信小程序獲取手機短信驗證碼的后端部分,希望能幫到大家


實現過程如下

  1. 騰訊雲中創建短信簽名、創建短信正文模板,人工審核
  2. 使用Java SDK調用短信發送API接口
  3. 短信發送成功

(因為客戶要求使用騰訊雲服務器,所以我這里用騰訊雲為例) 

 

第一步:創建短信簽名、創建短信正文模板

首先理解一下相關概念:

短信簽名

短信簽名是位於短信正文前【】中的署名,用於標識公司或業務,例如【騰訊科技】。申請時企業用戶需要上傳資質證明,個人用戶需要上傳個人身份證明。短信簽名需要審核通過后才可使用。
簽名示例:
認證企業為:深圳市騰訊計算機系統有限公司,可以申請與企業名相關的簽名【騰訊科技】,也可以申請公司旗下的產品名稱相關的簽名【微信】【騰訊雲】等。

簡而言之,如果短信內容為:

【騰訊科技】您的QQ登錄驗證碼是1234,5分鍾內有效。

那么,短信簽名就是——騰訊科技。這樣看懂了吧?


短信模板

短信模板即具體發送的短信正文內容,短信模板支持驗證碼模板、通知類短信模板和營銷短信模板。短信內容可以通過模板參數實現個性化定制。

如果短信內容為:

騰訊科技需要發送短信驗證碼:【騰訊科技】您的QQ登錄驗證碼是1234,2分鍾內有效。

那么,短信模板就是:您的QQ登錄驗證碼是{1},{2}分鍾內有效
模板參數中{1},{2}是變量,且按序排列,他們的值可以在實際下發時通過設置模板參數的值來自定義。


為了避免開發者濫發短信,所以短信簽名、短信模板需要騰訊雲進行人工審核,具體操作如下:

打開騰訊雲官網,進入右上角控制台,進入短信界面,然后創建簽名。

然后同樣的方法,創建短信模板

接着就是人工審核,大概10分鍾左右就夠了。


第二步:使用Java SDK調用短信發送API接口

所謂使用SDK,也就是說,騰訊已經給你寫好發送短信的API接口,連調用API接口的模板都給你寫好了,你只要拿來用就可以。

SDK下載地址(Github):https://github.com/TencentCloud/tencentcloud-sdk-java

當然這個SDK里面所有功能都實現了,比如發送短信,群發短信,拉取回執狀態,統計短信發送數據,包括國內的,境外的,全都有。但是功能多,導包的時間也長,而我們只需要發送國內短信即可,所以我自己把他精簡了一下,因為我這里只需要發送短信的功能。

我這里以IDEA為例,打開IDEA,新建一個MAVEN項目

勾上Create from archetype

選擇org.apache.maven.archetypes:maven-archetype-webapp

添加屬性

name:archetypeCatalog,value:internal

為什么要這么做?是因為系統默認從Maven獲取依賴,但是很慢,我們可以選擇從本地導入,這樣基本不需要時間,達到快速創建項目的效果。 


創建完Maven項目,只需要修改兩個文件

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>yanzhengma</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <java.version>11</java.version>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.github.qcloudsms</groupId>
            <artifactId>qcloudsms</artifactId>
            <version>1.0.6</version>
        </dependency>
    </dependencies>
</project>

2.隨意包下的Main函數

import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import org.json.JSONException;
import java.io.IOException;
public class Main {
    public static void main(String[] args) {
        // 短信應用 SDK AppID
        int appid = 1400xxxx84; // SDK AppID 以1400開頭
        // 短信應用 SDK AppKey
        String appkey = "d4e5bxxxxxxxxxx02c907501b4ee8645";
        // 需要發送短信的手機號碼
        String[] phoneNumbers = {"178xxxxxx85"};
        // 短信模板 ID,需要在短信應用中申請
        int templateId = 60xxx8; // NOTE: 這里的模板 ID`7839`只是示例,真實的模板 ID 需要在短信控制台中申請
        // 簽名
        String smsSign = "XXXX"; // NOTE: 簽名參數使用的是`簽名內容`,而不是`簽名ID`。這里的簽名"騰訊雲"只是示例,真實的簽名需要在短信控制台申請
        try {
            String[] params = {"5678","5"};
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumbers[0],
                    templateId, params, smsSign, "", "");
            System.out.println(result);
        } catch (HTTPException e) {
            // HTTP 響應碼錯誤
            e.printStackTrace();
        } catch (JSONException e) {
            // JSON 解析錯誤
            e.printStackTrace();
        } catch (IOException e) {
            // 網絡 IO 錯誤
            e.printStackTrace();
        }
    }
}

還有要這四個jar包

我們就像Java運行Hello World那樣,運行一下主函數,短信就發出來了


接下來來解析一下代碼:

1.短信賬號,密匙

int appid = 1400xxxx84;
String appkey = "d4e5bxxxxxxxxxx02c907501b4ee8645";

類似微信小程序,appid是賬號,appkey是密匙,我們在騰訊雲控制台獲取。

點進去可以查看appkey。


2.需要發送的手機號 

String[] phoneNumbers = {"178xxxxxx85"};

3.短信模板ID

int templateId = 60xxx8;

在第一步的 國內短信 —— 簽名管理 中 查看ID。

4.簽名

String smsSign = "XXXX";

同短信模板,你申請的是什么簽名,這里就寫什么,比如“騰訊科技”

5.填入參數

String[] params = {"5678","5"};

在第一步中,介紹了短信模板的概念

短信模板就是:您的QQ登錄驗證碼是{1},{2}分鍾內有效 

其中這個{1},類似SQL中的預編譯,這里有幾個參數,這個params數組就幾個元素。

短信發出去就是——您的QQ登錄驗證碼是5678,5分鍾內有效 


以上數據全部替換后,執行Main主函數就可以,短信就發出來了

這就是微信小程序中,實現短信驗證碼登入的后端操作,時間有限,我只是簡單寫了一下,還有更多功能,我會在后續繼續深入研究。


免責聲明!

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



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