最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用express獲取微信小程序二維碼小記

 更新時(shí)間:2019年05月21日 10:09:58   作者:專吃貓啲鼠  
這篇文章主要介紹了使用express獲取微信小程序二維碼小記,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

遇到了一個(gè)需求,想要掃碼后,進(jìn)入微信小程序的某一個(gè)頁面,這就要求二維碼攜帶參數(shù)。

微信小程序開發(fā)文檔很簡單,但不太具體。

經(jīng)百度和折騰,在express中成功獲得了帶參數(shù)的二維碼。

總結(jié)以下幾步,供參考。

1.express項(xiàng)目中引入http請求工具

為什么要在服務(wù)端引入這個(gè)工具?因?yàn)檫€需要用這個(gè)工具去找微信服務(wù)端拿access_token接口憑證,來保證安全。

筆者用的是axios。cmd進(jìn)入根目錄,npm安裝。

# npm i axios --save

肯定需要寫一個(gè)獲得二維碼的接口。在寫這個(gè)接口的文件中引入axios即可,接口路由的寫法不具體展開介紹。

import express from 'express';
import axios from 'axios'; //引入axios庫
let qrcode= express.Router();
qrcode.post('/getQrode',async (req,res)=>{
  try {
    ...
    //待寫接口內(nèi)容區(qū)域
  } catch (error) {
    throw error;
  }
})
export default qrcode;

引入了庫,定義了路由,也定義了一個(gè)post接口。第一步準(zhǔn)備完畢。

2.獲取access_token

找微信服務(wù)端拿access_token,需要用上剛剛引入的axios工具了。

通過官方文檔介紹,獲取access_token需要三個(gè)參數(shù),一個(gè)常量grant_type,兩個(gè)變量分別是appid和secret(注冊小程序的時(shí)候就會(huì)獲得)

修改接口即可獲得access_token

import express from 'express';
import axios from 'axios';
let qrcode= express.Router();
qrcode.post('/share',async (req,res)=>{
  try {
    let appid = 'wxc********b7a';
    let secret = '2bfa**************e8682';
    let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`
    axios.get(url).then(res2=>{
      //access_token就在res2中
      let access_token = res2.data.access_token;
      //待繼續(xù)補(bǔ)充區(qū)域
    });
  } catch (error) {
    console.log(error)
  }
})
export default qrcode;

拿到了access_token接口憑證了,繼續(xù)下一步。

3.獲取二維碼的二進(jìn)制數(shù)據(jù)

閱讀文檔,得知需要進(jìn)一步傳參,請求微信服務(wù)端獲取二維碼的buffer數(shù)據(jù)。

需要攜帶的參數(shù)可以寫在scene中。其他參數(shù)文檔中介紹的已經(jīng)很具體。

然而,這里有兩個(gè)坑要注意!

第一個(gè)坑:access_token參數(shù)要寫在url中,不然請求后會(huì)報(bào)未傳access_token的錯(cuò)。

第二個(gè)坑:要設(shè)置響應(yīng)格式,否則請求回來的buffer數(shù)據(jù)總是被編譯成String字符串,造成文件損壞,就無法轉(zhuǎn)化為正常圖片(這個(gè)折磨了我好久)

import express from 'express';
import axios from 'axios';
let qrcode = express.Router();
qrcode.post('/share',async (req,res)=>{
  try {
    let appid = 'wxc********b7a';
    let secret = '2bfa**************e8682';
    let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`
    axios.get(url).then(res2=>{
      let scene = req.body._id;//開發(fā)者自己自定義的參數(shù)
      axios(
        {
          headers:{"Content-type":"application/json"},
          method: 'post',
          responseType: 'arraybuffer',
          url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+access_token+'',
          data:{
            scene:scene,
            page:'pages/infor/main',
            width: 280
          }
        }
      ).then(res3=>{
        //請求到的二維碼buffer就在res3中
        //待完善區(qū)域
      })
    });
  } catch (error) {
    console.log(error)
  }
})
export default qrcode;

第二次axios請求,用option配置的方式,設(shè)置了responseType,避開了第二個(gè)坑。二維碼的buffer數(shù)據(jù)就在res3中。

4.用buffer生成圖片

只要buffer數(shù)據(jù)是完整的,就能正確生成二維碼。

因?yàn)樾枰蓤D片,所以需要引用fs模塊和path模塊。

import express from 'express';
import axios from 'axios';
import path from 'path';
import fs from 'fs';
let qrcode= express.Router();
qrcode.post('/share',async (req,res)=>{
  try {
    let appid = 'wxc********b7a';
    let secret = '2bfa**************e8682';
    let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`;
    axios.get(url).then(res2=>{
      let access_token = res2.data.access_token;
      let scene = req.body._id;
      axios(
        {
          headers:{"Content-type":"application/json"},
          method: 'post',
          responseType: 'arraybuffer',
          url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+access_token+'',
          data:{
            scene:scene,
            page:'pages/infor/main',
            width: 280
          }
        }
      ).then(res3=>{
        let src = path.dirname(__dirname).replace(/\\/g,'/')+`/public/photo/${req.body._id}.png`;
        fs.writeFile(src, res3.data, function(err) {
          if(err) {console.log(err);}
          res.json({msg:ok});
        });
      })
    });
  } catch (error) {
    console.log(error);
    res.json({error})
  }
})

export default qrcode;

就會(huì)在根目錄下的public/photo文件夾中生成制定名稱的二維碼圖片。供小程序訪問調(diào)用。

后記

獲取二維碼后,可以在前端利用canvas進(jìn)行圖片繪制,也可以在后端生成圖片??筛鶕?jù)業(yè)務(wù)需求自行選擇。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • NodeJS中的MongoDB快速入門詳細(xì)教程

    NodeJS中的MongoDB快速入門詳細(xì)教程

    MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,由 C++ 語言編寫。這篇文章主要介紹了NodeJS中的MongoDB快速入門詳細(xì)教程的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Nodejs極簡入門教程(二):定時(shí)器

    Nodejs極簡入門教程(二):定時(shí)器

    這篇文章主要介紹了Nodejs極簡入門教程(二):定時(shí)器,本文講解了setTimeout、setInterval、setImmediate及process.nextTick等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • 詳解nodejs 文本操作模塊-fs模塊(二)

    詳解nodejs 文本操作模塊-fs模塊(二)

    這篇文章主要介紹了詳解nodejs 文本操作模塊-fs模塊(二),主要包括文件的讀寫操作,有興趣的可以了解一下。
    2016-12-12
  • 基于Node.js的WebSocket通信實(shí)現(xiàn)

    基于Node.js的WebSocket通信實(shí)現(xiàn)

    這篇文章主要介紹了基于Node.js的WebSocket通信實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • node創(chuàng)建Vue項(xiàng)目步驟詳解

    node創(chuàng)建Vue項(xiàng)目步驟詳解

    在本篇文章里小編給大家整理的是關(guān)于node創(chuàng)建Vue項(xiàng)目步驟詳解內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • 詳解Nodejs內(nèi)存治理

    詳解Nodejs內(nèi)存治理

    本篇文章給大家分享了Nodejs內(nèi)存處理相關(guān)的知識(shí)點(diǎn)以及實(shí)例代碼分享,有興趣的朋友跟著學(xué)習(xí)下。
    2018-05-05
  • node.js接口復(fù)習(xí)及使用案例解析

    node.js接口復(fù)習(xí)及使用案例解析

    這篇文章主要為大家介紹了node.js接口的復(fù)習(xí)及使用案例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Node.js中console.log()輸出彩色字體的方法示例

    Node.js中console.log()輸出彩色字體的方法示例

    這篇文章主要給大家介紹了關(guān)于Node.js中console.log()輸出彩色字體的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • node.js從前端到全棧的必經(jīng)之路

    node.js從前端到全棧的必經(jīng)之路

    這篇文章主要介紹了一下什么是node,以及node環(huán)境配置,之后我們就將開始深入去學(xué)習(xí)node了,感興趣的小伙伴可以深入了解閱讀一下
    2023-03-03
  • nodejs之get/post請求的幾種方式小結(jié)

    nodejs之get/post請求的幾種方式小結(jié)

    下面小編就為大家?guī)硪黄猲odejs之get/post請求的幾種方式小結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

绿春县| 收藏| 五指山市| 丘北县| 浦城县| 雷波县| 丰台区| 茶陵县| 天镇县| 延寿县| 保定市| 宝山区| 新乡市| 白河县| 左权县| 中山市| 曲靖市| 镶黄旗| 合肥市| 平顺县| 法库县| 鄂托克旗| 达州市| 隆林| 磐石市| 沂源县| 巨鹿县| 高州市| 宝清县| 洛隆县| 新乐市| 克山县| 绥芬河市| 潞城市| 北辰区| 沙坪坝区| 江油市| 含山县| 水富县| 阿勒泰市| 乌兰县|