13

什么是Leancloud

  • Leancloud是国内有名的BaaS提供商,什么是BaaS提供商呢?通俗点讲就是给你提供增删改查等后台服务的API,你通过这些API就可以将数据存储在云端数据库中,而不需要关系服务器环境和里面的处理逻辑,它提供的SDK有js、java、object-c、python等等。

  • 类似的BaaS提供商还有谷歌的firebase(www.firebase.com),但容易被墙不推荐。

  • 所以我们可以不需要自己搭建后台环境就可以实现小程序的后端需要了,这样可以极高的提高开发效率,缩短开发周期。

如何使用Leancloud进行小程序开发

关于增删改查

Leancloud提供了完整的增删改查API,只要根据文档给到API进行调用就行,这个就不详细描述了,请看文档:https://leancloud.cn/docs/lea...

关于小程序授权登陆

下面地址详情描述了如何实现授权登陆:
https://leancloud.cn/docs/wea...用户系统

关于小程序需要后端的API调用

这里所说的需要后台的API调用,指类似:微信支付、二维码生成、微信提现、微信发红包、发送模版信息等等。
要实现这些功能必须使用 Leancloud的云引擎中的云函数

什么是云函数

就是我们可以简单的编写一个可以执行的node函数部署到leancloude的云引擎中,直接使用leancloud的API就可以直接执行你编写的函数,不需要像以前编写后端需要关心后端服务器环境那么复杂,只需要执行一段指令将云函数部署到云端就可以执行了。
详情请看:https://leancloud.cn/docs/lea...

如何编写云函数

https://leancloud.cn/docs/lea...
这里有详细说明,我就不赘述了。

如何部署云函数

我们这里介绍如何使用github部署:

  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...


jasondu
693 声望13 粉丝