1. 程式人生 > >小程式掃描普通連結二維碼跳轉小程式指定介面

小程式掃描普通連結二維碼跳轉小程式指定介面

微信官方文件https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html
看了官方文件之後,還是存在很多困惑,微信小程式是託管到微信伺服器上的,要想掃描普通連結跳轉指定介面,首先要知道微信把小程式放的伺服器的訪問路徑,這些最初想法,可是看微信官方文件,感覺不是我想的這樣的

這裡寫圖片描述

文件上:“二維碼規則的域名須通過ICP備案的驗證。”如果是微信的伺服器,那他們就不必這麼寫了,
可是小程式是託管微信伺服器上的,為什麼掃碼自己伺服器上的url能跳轉呢?困惑反倒是多了,然後各種查資料,最後還是在微信官方文件上找到答案了

這裡寫圖片描述

原來是這樣!恍然大悟!微信會掃描所有自己配置的url,如果匹配上了,就跳轉至指定介面,還有個前提,小程式必須先發布程式碼,才可以。
這裡寫圖片描述


下面記錄一下詳情:

1.二維碼規則,這裡需要下載微信提供的驗證檔案,放到指定目錄,驗證不過會有提示,驗證過了如圖所示,配置幾層目錄根據自己的需求而定,上圖這個:https://www.aaa.com/a/b/c/ 驗證檔案放置到c目錄同層

2.測試連結,這裡的url就是掃碼之後,跳轉到你指定介面裡,可以獲取到你此處配置這個完整的url包括引數,當然,這個引數是一個動態引數,配置的時候是寫死了一個,你的應用中,自己動態生成這個引數,
https://www.aaa.com/a/b/c/d/service?flag=123 目錄a/b/c/d/是在你的伺服器上真實存在的目錄,在d目錄裡面有個指令碼service,當然目錄名稱指令碼名稱換成你自己的,flag這個key值不能改變,123換成你的實際生成的動態引數

3.在app.js中這樣獲取引數
util.js
/**
* 獲取url引數
*/

let getQueryString = function (url,name) {
  console.log("url = "+url)
  console.log("name = " + name)
  var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
  var r = url.substr(1).match(reg) 
  if (r != null) {
    console
.log("r = " + r) console.log("r[2] = " + r[2]) return r[2] } return null; } module.exports = { getQueryString: getQueryString, }

//app.js檔案如下:

var utils = require('./utils/util')

App({
  onLaunch: function (options) {
    console.log("全域性onLaunch options==" + JSON.stringify(options))
    let q = decodeURIComponent(options.query.q)
    if (q){
      console.log("全域性onLaunch onload url=" + q)
      console.log("全域性onLaunch onload 引數 flag=" + utils.getQueryString(q, 'flag'))
    }

  }

})

在其它的介面中的js指令碼中這樣獲取引數

Page({

  /**
   * 頁面的初始資料
   */
  data: {

  },

  /**
   * 生命週期函式--監聽頁面載入
   */
  onLoad: function (options) {
    console.log("index 生命週期 onload"+JSON.stringify(options))
    //在此函式中獲取掃描普通連結二維碼引數
    let q = decodeURIComponent(options.q)
    if(q){
      console.log("index 生命週期 onload url=" + q)
      console.log("index 生命週期 onload 引數 flag=" + utils.getQueryString(q, 'flag'))
    }
  }

})