[开盖即食]小程序那点事(1)---云开发的一些实战应用分享
一、常用云函数
分享一些入门的云函数功能
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