生命中的小乐趣,也有程序能创造的。

1,020 阅读4分钟

写在前面

最近公司项目压力少了很多,也没怎么加班了,就开始了日常的做菜生活,对于喜欢做菜的人来说,每天回家买菜做菜,然后有一个你喜欢的人陪你并且夸奖你,那是很好的体验。 作为大厨师的我发现我会的实在太多了,让女朋友不知道怎么选择,于是我开发了一个情侣的小程序,微信小程序点餐器

实现功能:

  1. 食谱列表,展示菜品的基础信息。
  2. 添加及下单,点击添加后显示菜品的具体信息和操作方法,并且添加到购物车中。
  3. 下单,点击下单后通过微信的消息订阅发送给厨师。
  4. 基于云开发的云函数,云储存,消息发送订阅等功能。

使用效果:

1.gif

微信截图_20240529114008.png

云开发

云开发的使用,这块其实就不用介绍了,根据微信官方文档你可以开启属于自己的云,并且选择相对的配置,但是作为个人主体来说,我使用的是最低档的。云文档连接:developers.weixin.qq.com/miniprogram…

云储存/ 云数据库

微信云储存和云数据库很简单,并且我这个也没有那么多的数据结构,没有太复杂的要求,你可以直接在微信小程序上面的云开发中创建数据库集合和储存,并且导入相对于的数据,但是我没有找到免费的第三方食谱数据,而四川版的菜和有些数据上面的菜做法不一样,也可能是我不一样,但是他好吃!。

微信截图_20240529114754.png

微信截图_20240529114740.png

云函数

  1. 获取云数据库中食谱的数据,展示列表。获取数据库的数据比较简单,使用云开发函数的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()
    }
    
  1. 云函数发送消息给订阅者(也可以是固定一个人),我这里因为啥属于个人主体,不能做永久订阅那种,而且那种很坑,我尝试过使用短信的方式,也不支持个人主体,目前的方案只能需要接受订阅消息的人也就是固定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
  }
}
  1. 获取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来丰富你的小程序。

借用一句话,要爱具体的人,不要爱抽象的人; 要爱生活,不要爱生活的意义。

祝大家在平常的生活中都有各自的快乐。

最后附上以上自己做的菜(巨好吃,快快夸我)。

微信图片_20240529140807.jpg

微信图片_20240529140800.jpg