写在前面
最近公司项目压力少了很多,也没怎么加班了,就开始了日常的做菜生活,对于喜欢做菜的人来说,每天回家买菜做菜,然后有一个你喜欢的人陪你并且夸奖你,那是很好的体验。
作为大厨师的我发现我会的实在太多了,让女朋友不知道怎么选择,于是我开发了一个情侣的小程序,微信小程序点餐器。
实现功能:
- 食谱列表,展示菜品的基础信息。
- 添加及下单,点击添加后显示菜品的具体信息和操作方法,并且添加到购物车中。
- 下单,点击下单后通过微信的消息订阅发送给厨师。
- 基于云开发的云函数,云储存,消息发送订阅等功能。
使用效果:
云开发
云开发的使用,这块其实就不用介绍了,根据微信官方文档你可以开启属于自己的云,并且选择相对的配置,但是作为个人主体来说,我使用的是最低档的。云文档连接:developers.weixin.qq.com/miniprogram…
云储存/ 云数据库
微信云储存和云数据库很简单,并且我这个也没有那么多的数据结构,没有太复杂的要求,你可以直接在微信小程序上面的云开发中创建数据库集合和储存,并且导入相对于的数据,但是我没有找到免费的第三方食谱数据,而四川版的菜和有些数据上面的菜做法不一样,也可能是我不一样,但是他好吃!。
云函数
- 获取云数据库中食谱的数据,展示列表。获取数据库的数据比较简单,使用云开发函数的API,就能很简单的获取集合的数据,主要是每次你创建云函数时需要确定你的微信的SDK存在不。在编写完云函数后,你可以右键你的云函数文件夹,有一个
上传并且部署:...的功能,这样你的云函数就同步到你的云开发者红了。
// 再小程序的cloudFunctions中创建一个新的云函数(右键提示的是 新建node.js 云函数)
// 命名为recipes,这个命名就是你云函数的名字。
// index.js
// 在其中创建终端,下载微信SDK npm install wx-server-sdk
const cloud = require('wx-server-sdk');
// 初始化cloud 和 db
cloud.init({
env:'你的cloud ID 也就是云开发的当前环境ID'
})
const db = cloud.database();
// 编写获取数据库列表的方法
exports.main = async(event,context)=>{
return await db.collection('recipe').get()
}
- 云函数发送消息给订阅者(也可以是固定一个人),我这里因为啥属于个人主体,不能做永久订阅那种,而且那种很坑,我尝试过使用短信的方式,也不支持个人主体,目前的方案只能需要接受订阅消息的人也就是固定openID的需要去主动下单订阅下消息。
参考文档:developers.weixin.qq.com/miniprogram… 小程序订阅消息开发指南
const cloud = require('wx-server-sdk')
const moment = require('moment')
require('moment-timezone');
moment.tz.setDefault("Asia/Shanghai");
cloud.init({
env:'你的cloud ID 也就是云开发的当前环境ID'
})
exports.main = async (event, context) => {
const log = cloud.logger()
let {
recipes
} = event;
try {
// 发送订阅消息给管理员
const result = await cloud.openapi.subscribeMessage.send({
touser: '', // 管理员的 OpenID 需要替换成接受订阅消息的
page: 'pages/index/index', // 点击消息跳转的页面
lang: 'zh_CN',
data: {
thing5: {
value: '今晚吃什么!'
}, // 消息标题
thing6: {
value: `今晚吃${recipes}`
}, // 商品详情
time7: {
value: moment().format('YYYY-MM-DD HH:mm:ss')
}, // 下单时间
},
templateId: '', // 替换为实际的模板ID
})
return result
} catch (error) {
console.log(error)
return error
}
}
- 获取OpenID的方法
const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
const res = cloud.getWXContext();
return res.OPENID
}
在小程序云函数编写后并且将所有云函数同步上传到云上后,你可以在云开发的可视化界面上面进行云函数的测试,可以选择本地测试,展示你调用时需要的打印信息。
小程序调用云函数
// 初始化云函数
wx.cloud.init({
env: "同上 云函数环境ID"
})
...
...
const handleGetRepices=()=>{
// 通过使用cloud.callFunction的接口去调用你的云函数,获取云函数返回的内容
return wx.cloud.callFunction({
name:"repices" //你的云函数名称
})
}
// 获取数据储存中的图片临时地址
const handleGetCoverTempFileUrl=()=>{
return await wx.cloud.getTempFileURL({
fileList: [fileID]
})
}
// 获取微信用户订阅消息权限。
// 可以判断当前openid是不是你接受订阅消息的人,但我没有这么做。
const handlePermissionCheck=()=>{
...
...
wx.requestSubscribeMessage({
tmplIds:['需要订阅的消息模板的id的集合'],//一次调用最多可订阅3条消息
success:res=>{
// 订阅成功的回调
},
fail: (err) => {
console.log(err)
}
})
}
// 调用发送订阅消息云函数
const handleOrderNotificationSend=()=>{
wx.cloud.callFunction({
name: "sendOrderNotification", // 云函数名称
data: {
recipes: 'xxxxx' 传入参数
}
})
}
总结
小程序的云开发在可视化工具和丰富的API下其实也很简单(简单小程序),但是针对个人主体来说有点难受,你无法使用到很多API来丰富你的小程序。
借用一句话,要爱具体的人,不要爱抽象的人; 要爱生活,不要爱生活的意义。
祝大家在平常的生活中都有各自的快乐。
最后附上以上自己做的菜(巨好吃,快快夸我)。