利用Leancloud開發小程序-生成小程序二維碼

什麼是Leancloud

  • Leancloud是國內有名的BaaS提供商,什麼是BaaS提供商呢?通俗點講就是給你提供增刪改查等後臺服務的API,你經過這些API就能夠將數據存儲在雲端數據庫中,而不須要關係服務器環境和裏面的處理邏輯,它提供的SDK有js、java、object-c、python等等。html

  • 相似的BaaS提供商還有谷歌的firebase(www.firebase.com),但容易被牆不推薦。java

  • 因此咱們能夠不須要本身搭建後臺環境就能夠實現小程序的後端須要了,這樣能夠極高的提升開發效率,縮短開發週期。node

如何使用Leancloud進行小程序開發

關於增刪改查

Leancloud提供了完整的增刪改查API,只要根據文檔給到API進行調用就行,這個就不詳細描述了,請看文檔:https://leancloud.cn/docs/lea...python

關於小程序受權登錄

下面地址詳情描述瞭如何實現受權登錄:
https://leancloud.cn/docs/wea...用戶系統ios

關於小程序須要後端的API調用

這裏所說的須要後臺的API調用,指相似:微信支付、二維碼生成、微信提現、微信發紅包、發送模版信息等等。
要實現這些功能必須使用 Leancloud的雲引擎中的雲函數git

什麼是雲函數

就是咱們能夠簡單的編寫一個能夠執行的node函數部署到leancloude的雲引擎中,直接使用leancloud的API就能夠直接執行你編寫的函數,不須要像之前編寫後端須要關心後端服務器環境那麼複雜,只須要執行一段指令將雲函數部署到雲端就能夠執行了。
詳情請看:https://leancloud.cn/docs/lea...github

如何編寫雲函數

https://leancloud.cn/docs/lea...
這裏有詳細說明,我就不贅述了。數據庫

如何部署雲函數

咱們這裏介紹如何使用github部署:axios

  1. 註冊並建立leancloud應用:這個就不用說把,網站:https://leancloud.cn小程序

  2. 設置雲引擎
    進入第一步建立的應用-雲引擎-設置,將git的地址填進去,這個代碼庫能夠fork個人代碼倉庫(https://github.com/jasondu/le...),而後複製Deploy Key,而後到本身fork的github設置頁面中的【Deploy keys】選項,添加一個Deploy Keys,Title隨便寫,Key就是剛纔複製的,而後點擊保存便可。

  3. 部署雲引擎
    回到雲引擎-部署,「分支或版本號」填入master,點擊部署就能夠部署雲引擎了。

下面咱們經過「生成小程序二維碼」來說解如何使用雲函數開發小程序後臺

生成小程序二維碼

小程序二維碼分類:

從類型分類:
  • 小程序二維碼:那個圓形的二維碼

  • 普通二維碼

是否能夠無限生成分類:
  • 無限

  • 有限

這幾種分類對應着下面三個接口:
  • 小程序二維碼、有限的
    https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

  • 小程序二維碼、無限的
    https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

  • 普通二維碼、有限的
    https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

雲函數規劃

  1. 入參驗證

  2. 獲取accessToken

  3. 調用二維碼生成接口獲取二維碼二進制流

  4. 保存二維碼到leancloud

代碼

AV.Cloud.define('getwxacode', function (request, response) {
    const params = request.params;
    const requireParams = ['type'];
    let url;

    switch (params.type) {
        case 1:
            url = 'https://api.weixin.qq.com/wxa/getwxacode';
            requireParams.push('path');
            break;
        case 2:
            url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit';
            requireParams.push('page');
            requireParams.push('scene');
            break;
        case 3:
            url = 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode';
            requireParams.push('path');
            break;
    }
    // 1. 入參驗證
    requireValidate(params, requireParams).then(params => {
        // 2. 獲取accessToken
        wxapi.getLatestToken((err, accessToken) => {
            // 3. 調用二維碼生成接口獲取二維碼二進制流
            axios.post(url, params, {
                params: {
                    access_token: accessToken.accessToken,
                    dataType: 'JSON',
                },
                responseType: 'arraybuffer'
            }).then((res) => {
                // 4. 保存二維碼到leancloud
                if (typeof res.data === 'undefined') {
                    return response.error('生成二維碼失敗');
                } else {
                    const imageFile = new AV.File('file-qrcode.png', res.data);
                    imageFile.save().then((res) => {
                        return response.success(res);
                    }, (error) => {
                        return response.error(err);
                    });
                }
            });
        });
    }).catch(err => {
        return response.error(err);
    });
})

requireValidate: 驗證入參的方法
注意:這裏獲取二維碼必需要用axios的方式進行請求,不然返回的圖片信息會保存失敗

調用雲函數(小程序代碼)

const AV = require('../libs/leancloud/av-weapp-min.js');
const paramsJson = {
    type: 1,
    path: '/pages/index/index'
};
AV.Cloud.run('getwxacode', paramsJson).then(function (data) {
    // 調用成功,獲得生成二維碼的連接
    console.log(data.url);
}, function (err) {
    // 處理調用失敗
    console.log(err);
});

代碼地址

https://github.com/jasondu/le...

相關文章
相關標籤/搜索