微信小程序 接入 騰訊雲驗證碼

前言:最近作了一個小程序抽獎的活動,出現了部分用戶惡意薅羊毛的現象,所以考慮接入騰訊雲的驗證碼。

其實騰訊的官方文檔寫的至關清晰:https://cloud.tencent.com/doc...
不想啃文檔的筒子們的就往下繼續看吧~(雖然大同小異)json

總體效果

一、小程序觸發驗證,跳轉到驗證碼小程序
二、在驗證碼小程序內經過驗證,並攜帶參數跳回原來的小程序
三、在原來的小程序內,監測攜帶回的參數,並做後續操做小程序

前提條件

驗證碼接入前,須要先在驗證碼控制檯中註冊 AppID 和 AppSecret,註冊完成後,您能夠在控制檯的基礎配置中查看 AppID (下文extraData中使用) 以及 AppSecret。 服務器

注意,這裏的 appId 和 appSecret 和小程序後臺的是不一致的!app

接入步驟

一、在你須要的地方,喚起驗證碼小程序

首先在 app.json 配置 navigateToMiniProgramAppIdList,以下:this

{
  "navigateToMiniProgramAppIdList": ["wx5a3a7366fd07e119"]
}

這個appId是官方文檔中直接提供的,搬上去就好。spa

假設你的喚起方式是經過一個這樣的按鈕事件:code

<button bindtap="toTCaptcha">驗證</button>
toTCaptcha: function () {
    wx.navigateToMiniProgram({
      appId: 'wx5a3a7366fd07e119',
      path: '/pages/captcha/index',
      extraData: {
        appId: 'appId' //您申請的驗證碼的 appId
      }
    })
  }

二、在 app.js 獲取驗證結果

因爲小程序間相互跳轉過程當中產生的數據僅能在 app.js 中獲取到,故須要在 app.js 的 onShow 中添加如下代碼,來捕獲驗證結果 captchaResultblog

App({
  // ...
  onShow: function(options) {
    // 解決各種回調的兼容問題
    if (!this.captchaTicketExpire) this.captchaTicketExpire = {};

    if (options.scene === 1038 && options.referrerInfo.appId === 'wx5a3a7366fd07e119') {
      const result = options.referrerInfo.extraData;
      if (result.ret === 0) {
        const ticket = result.ticket;
        if (!this.captchaTicketExpire[ticket]) {
          this.captchaResult = result;
          this.captchaTicketExpire[ticket] = true;
        }
      } else {
        // 用戶關閉了驗證碼
        // 這裏能夠加上一些驗證失敗提示
      }
    }
  },
  // ...
});

驗證結果(captchaResult) 參數說明:
image.png事件

三、將驗證結果返回至服務端校驗

在小程序頁面的 onShow 階段,將驗證結果及待提交的表單數據一塊兒提交到服務器,進行校驗。開發

// page.js
const app = getApp()

Page({
  data: {
    // ...
  },
  onShow() {
    const captchaResult = app.captchaResult;
    app.captchaResult = null; // 驗證碼的票據爲一次性票據,取完須要置空
    if (captchaResult && captchaResult.ret === 0) {
      // 將驗證碼的結果返回至服務端校驗,以及後續的操做
      // const ticket = captchaResult.ticket;
      // const randstr = captchaResult.randstr;
    }
  },
  // ...
});

用一個詞描述這個開發過程:搬上去!

相關文章
相關標籤/搜索