欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序之生成自定義參數(shù)小程序二維碼 - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開(kāi)發(fā)/軟件開(kāi)發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >

微信小程序之生成自定義參數(shù)小程序二維碼

發(fā)表時(shí)間:2021-1-11

發(fā)布人:葵宇科技

瀏覽次數(shù):96

掃碼已經(jīng)成為一種常見(jiàn)又方便的進(jìn)入移動(dòng)應(yīng)用的途徑,可以把線(xiàn)上線(xiàn)下的用戶(hù)流量帶入你的移動(dòng)應(yīng)用中來(lái)。微信小程序也提供了掃碼進(jìn)入的功能,可以通過(guò)掃描二維碼或者微信小程序?qū)S械男〕绦虼a,進(jìn)入到相應(yīng)的小程序頁(yè)面。

微信官方提供了3個(gè)不同的REST API用于生成帶參數(shù)的小程序碼或者二維碼,可在掃碼后進(jìn)入指定的小程序頁(yè)面,其中接口A和C能生成的圖片總數(shù)量有限制(10萬(wàn)張),對(duì)于那種需要生成大量二維碼的使用場(chǎng)景(比如為每個(gè)訂單生成一個(gè)二維碼、餐廳的每張餐桌生成一個(gè)二維碼等)是遠(yuǎn)遠(yuǎn)不能滿(mǎn)足需求的。而接口B可以解決這個(gè)問(wèn)題,我們這次主要來(lái)看一下如何使用這個(gè)接口。

總體的思路是:在我們的后端開(kāi)發(fā)一個(gè)API,在其中調(diào)用微信的二維碼接口,調(diào)用成功后會(huì)得到二維碼圖片的二進(jìn)制流,最后將這個(gè)二進(jìn)制流輸出到前臺(tái)。

以下步驟中的后端代碼是基于Node.js進(jìn)行編寫(xiě),并使用了Koa 2框架。代碼僅供參考。

步驟1:獲取重要參數(shù)access_token

調(diào)用獲取小程序二維碼的REST API需要一個(gè)很重要的參數(shù):access_token,這是用于獲取微信公眾平臺(tái)API訪(fǎng)問(wèn)權(quán)限的重要參數(shù),做過(guò)微信公眾號(hào)HTML5開(kāi)發(fā)的朋友對(duì)其肯定非常熟悉。沒(méi)接觸過(guò)的話(huà),可以看一下微信公眾平臺(tái)的文檔。

調(diào)用微信公眾平臺(tái)的API,已經(jīng)有很多成熟的開(kāi)源SDK可以使用,從Github上可以搜到很多不同語(yǔ)言實(shí)現(xiàn)的SDK。由于我用的是Node.js開(kāi)發(fā),所以使用了co-wechat-api。

以下是使用co-wechat-api來(lái)獲取access_token的基本用法:

const WechatAPI = require('co-wechat-api')

const wxAppAPI = new WechatAPI('小程序的app id', '小程序的app secret')
const token = await wxAppAPI.ensureAccessToken()

console.log(token.accessToken)

步驟2:拼接url,發(fā)送請(qǐng)求獲取二維碼圖片

const fs = require('fs')
const axios = require('axios')

// 拼接url
const url = `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${token.accessToken}`

// 發(fā)送POST請(qǐng)求
const response = await axios.post(url, {
  page: '小程序中Page的路徑',
  scene: '自定義參數(shù),格式你自己決定'
}, { responseType: 'stream' })

// 將請(qǐng)求結(jié)果中的二進(jìn)制流寫(xiě)入到本地文件qrcode.png
response.data.pipe(fs.createWriteStream('qrcode.png'))

在上面的代碼中,我們將access_token作為query string參數(shù)拼接到url上,然后向這個(gè)url發(fā)送POST請(qǐng)求,傳遞的參數(shù)主要是pagescene,其中page參數(shù)是掃碼后進(jìn)入的小程序頁(yè)面路徑(比如pages/index/index,并且不能攜帶參數(shù)),而scene則傳入的是我們的自定義參數(shù)。

其實(shí)經(jīng)過(guò)這一步,你就已經(jīng)可以在你的磁盤(pán)上找到這張小程序碼的圖片了,用微信掃一下這張圖片,就能進(jìn)入你的小程序頁(yè)面。

步驟3:將二維碼圖片輸出

雖然我們已經(jīng)獲取到了小程序碼圖片,但是現(xiàn)在它還只是躺在我們的服務(wù)器端。而通常實(shí)際情況是,我們需要在小程序頁(yè)面上去顯示這張圖片,讓用戶(hù)去保存和分享它。因此,我們需要把這張圖片通過(guò)我們的API進(jìn)行輸出。以下是基于koa 2的示例代碼:

const fs = require('fs')
const Router = require('koa-router')
const router = new Router()

router.get('/wx/common/qrcode', async (ctx) => {
  const stream = fs.createReadStream(‘qrcode.png’)
  ctx.body = stream
})

步驟4:在小程序中顯示

在小程序中顯示該圖片就非常簡(jiǎn)單了,直接使用<image>組件來(lái)進(jìn)行展示:

  <image src="https://your-domain.com/wx/common/qrcode" style="width:200px;height:200px"></image>

附錄:稍微完備一些的服務(wù)端代碼

上面4個(gè)步驟中給出的示例代碼只是為了配合說(shuō)明各個(gè)步驟,代碼比較簡(jiǎn)陋,下面是經(jīng)過(guò)稍微的組織過(guò)的代碼,供參考:

  • 路由部分的代碼:
const Router = require('koa-router')
const PassThrough = require('stream').PassThrough;
const wxapi = require('../services/wxapi')
const router = new Router()

router.get('/wx/common/qrcode', async (ctx) => {
  const stream = await wxapi.getWxaCodeUnlimit({
    page: 'pages/profile/profile',
    scene: 'abc123'
  })
  ctx.body = stream.pipe(PassThrough())
})
  • Service部分的代碼:
const fs = require('fs')
const path = require('path')
const crypto = require('crypto')
const bluebird = require('bluebird')
const axios = require('axios')
const WechatAPI = require('co-wechat-api')

const wxAppAPI = new WechatAPI('小程序的app id', '小程序的app secret')

function sha1(message) {
  return crypto.createHash('sha1').update(message, 'utf8').digest('hex')
}

module.exports = {

  async getWxaCodeUnlimit({ page, scene }) {
    // 圖片文件名使用page和scene等數(shù)據(jù)生成Hash
    // 以避免重復(fù)生成內(nèi)容相同的小程序碼
    const fileName = sha1(page + scene)
    const filePath = path.join(__dirname, `../../qrcode/${fileName}.png`)

    let readable

    try {
      // 檢測(cè)該名字的小程序碼圖片文件是否已存在
      await bluebird.promisify(fs.access)(filePath, fs.constants.R_OK);
      readable = fs.createReadStream(filePath)
    } catch (e) {
      // 小程序碼不存在,則創(chuàng)建一張新的
      const token = await wxAppAPI.ensureAccessToken()
      const response = await axios({
        method: 'post',
        url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit',
        responseType: 'stream',
        params: { access_token: token.accessToken },
        data: { page, scene }
      })
      readable = response.data
      readable.pipe(fs.createWriteStream(filePath))
    }

    // 返回該小程序碼圖片的文件流
    return readable
  }

}

祝大家開(kāi)發(fā)出更好的小程序!

相關(guān)案例查看更多