表单提交后数据去哪了?一开始用 mock,但 mock 是假的。想存到数据库,又不想自己搭后端。云开发的价值,是让非科班开发者先把数据、云函数和通知这条链路跑起来。
「一、先开通云开发」
【云开发要不要钱】
云开发免费版足够起步,通常包含数据库、云函数和存储。我的服务器只用来存图片和网站,业务逻辑走云开发,两边并不冲突。关键动作是在开发者工具里点击“云开发”,创建环境并选择适合起步的版本。
免费版适合验证产品,不代表永远够用。数据量、调用量和存储量上来之后,要及时查看计费规则和资源用量。
【云函数是什么】
云函数可以理解成运行在微信服务器上的后端函数,前端通过 wx.cloud.callFunction 调用。它不需要你自己买服务器、配 HTTPS 或处理基础鉴权。
第一次写云函数时,我忘了 cloud.init(),一直报错。关键逻辑是:初始化环境、接收表单、写入数据库、返回结果。函数名称可以叫 submitBooking,负责处理预约提交。
「二、数据库和用户身份」
【集合就是表】
云数据库里的集合,可以理解成传统数据库里的表。预约信息放进 bookings 集合,订阅授权记录放进 subscriptions 集合。权限可以先设为“仅创建者可读写”,让用户只能看到自己的数据。
openid 不需要从前端传。云函数里可以通过 cloud.getWXContext() 自动获得当前用户身份,减少前端伪造身份的风险。这里的前提是权限规则和云函数逻辑要一起检查,不能只依赖前端隐藏按钮。
【预约数据的最小结构】
- bookings:姓名、手机号、咨询内容、创建时间、openid。
- subscriptions:用户 openid、模板 ID、授权状态、更新时间。
- 权限:先保证用户只能读写自己的记录,后台管理另设受控入口。
「三、订阅消息全流程」
订阅消息是主动发给用户,消息推送则是接收用户消息。模板需要在后台选择并记录模板 ID。授权必须在用户点击按钮时触发,不能在打开页面时自动弹窗。
我第一次把授权放在 onLoad 里,审核被拒。后来调整为用户主动点击提交预约时再请求授权,并且拒绝授权不阻塞主流程,用站内消息做兜底。
【支付先不做】
预约咨询模式客单价高、决策周期长,第一阶段先走线下收款更实际。等业务稳定后,再考虑通过云开发集成中心接入微信支付,密钥放在环境变量。
当然,具体能力会受到主体资质、微信后台规则、套餐额度和版本变化影响,本文记录的是本次项目实践,不替代官方最新说明。
数据存下来、通知发出去,小程序才算真正“活”了。
写在最后
如果你也正在面对“表单提交后没有结果”的问题,下一步建议是先只做一个 submitBooking 云函数,把一条预约数据写入 bookings 集合,再考虑订阅消息。功能越小,越容易定位问题。你会先做数据库,还是先做通知?