[开盖即食]小程序那点事(1)---云开发的一些实战应用分享
发布于 2 年前 作者 ylin 691 次浏览 来自 分享

一、常用云函数

分享一些入门的云函数功能

const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async(event, context) => {
    console.log(event.txt);
    const { value,type } = event;
    //返回服务器时间
    if(type == "serverTime"){
        return Date.now();
    }
    //返回用户各类id
    if(type == "info"){
        const wxContext = cloud.getWXContext()
         return {
            event,
            openid: wxContext.OPENID,
            appid: wxContext.APPID,
            unionid: wxContext.UNIONID,
        }
    }
    //检查内容
    if(type == 'checkContent'){
        try {
            let result = await cloud.openapi.security.msgSecCheck({
              content: value
            });
            return result;
        }
        catch (err){
            return err;
         }
    }
    //检查图片
    if(type == 'checkImg'){
        try {
            // const result = await cloud.openapi.security.msgSecCheck({
            //     content: event.txt
            //     })
            const result = await cloud.openapi.security.imgSecCheck({
                media: {
                    header: { 'Content-Type': 'application/octet-stream' },
                    contentType: 'image/png',  //这里也可动态配置
                    value: Buffer.from(value)
                }
            })
                // result 结构
                // { errCode: 0, errMsg: 'openapi.templateMessage.send:ok' }
            console.log(result);
            return result;
        } catch (err) {
            return err
        }
    }
}

二、给接口添加签名sign/加密

利用云函数来签名接口,防止用户伪造或者绕过小程序直接用postman/脚本/爬虫 调用抓取后端数据。同理,也可以对数据全加密

// 云函数部分
const cloud = require('wx-server-sdk');
const crypto = require("crypto");
const salt = '996-007-icu-no-overtime';  //加密用的盐,需要跟后端约定好
cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
    //const wxContext = cloud.getWXContext()
    let json = event.json;
    json.salt = salt;
    //排序
    let arr = []
    for (let i in json) {
        arr.push({
            key: i,
            value: json[i]
        });
    };
    //首字母排序,你也可以不排,但是考虑到到时候要合后端验证一致,排序方便点
    arr.sort((a, b) => {
        return a.key.charCodeAt(0) - b.key.charCodeAt(0);
    });
    let secret = '';
    for (let y = 0; y < arr.length; y++) {
        secret += arr[y].key + arr[y].value;
    };
    let md5 = crypto.createHash("md5"); // 创建 md5
    let md5Sum = md5.update(secret).digest("Hex"); // update 加密
    //console.log(md5Sum)
    return {
        md5Sum,
        //secret,
    }
}

//页面调用部分
let t = new Date().getTime();
let sign = 'isEmpty';
try {
    //通过云函数获取加密签名
    let result = (await wx.cloud.callFunction({
        name: "overTime007",
        data: {
            json: {
                t,
                characterName,
                realm,
            }
        }
    })).result;
    sign = result.md5Sum;
} catch (err) {
    console.log(err);
    sign = "signFail";
};

三、数据库简单增删改查

小程序端和云开发端都可以对数据库进行操作,但云端更安全且权限更大。如果遇到小程序端无法操作的情况,可以先检查下数据权限问题

const db = wx.cloud.database();
// 向集合overTime中添加数据
db.collection('overTime').add({
    data: {
        description: 'test',
        t: new Date(),
        tags: [
            '云开发',
            '数据库'
        ],
        done: false
    }
}).then(res => {
    console.log(res)
})
//删除
db.collection('overTime').doc('t996_007').remove().then(res => {
    console.log(res)
})
//修改
db.collection('overTime').doc('t996_007').update({
    data: {
        description: 'test2',
        done: true
    }
}).then(res => {
    console.log(res)
})
//查询
db.collection('overTime').get().then(res => {
    console.log(res.data)
})

云开发强大在于用简单的函数就能完成很多需要服务器配置的功能,官方也推出低代码,一键生成环境等功能,大大提高了效率,降低开发门槛。

官方相关文档:

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/product/wxcloudrun.html
https://developers.weixin.qq.com/community/business/course/00068c2c0106c0667f5b01d015b80d

如有疑问请留言~

觉得有用,请点个赞哦,我会继续努力分享有用的实战内容~

1 回复

怀疑你在搞事情 ‘996-007-icu-no-overtime

回到顶部