开发一个婚礼请柬小程序

15,859 阅读4分钟

前段时间给自己开发了一个婚礼请柬微信小程序,后端直接采用微信小程序的云开发能力。

项目代码:github.com/ahao430/wed…

小程序码:

因为服务已经过期了,图片都看不了了,所以就放心挂出来了😁

1. 初始化项目,测试云函数

在微信小程序开发工具中,创建项目,选择微信云开发,模板选择邀请函,填写注册的appId。

打开项目,弹出提示上传云函数。

可以看到项目代码包含cloundfunctions和miniprogram两部分。在cloudfunctions中,右键文件夹上传云函数。如果还是报错,可能是云函数的数据表在云服务上不存在,点击云开发按钮,进去查看数据库。

查看模板代码,可以看到云函数的js文件代码很简单,语法类似mongodb。然后小程序端在app.js中初始化数据库连接,传入云端的环境id,这个id可以在云开发概览查看。然后app.js中call方法封装了cloud.callFunction方法,可以请求云函数。

const cloud = require('wx-server-sdk') // 云开发服务端SDK引入
cloud.init({ // 初始化云开发环境
  env: cloud.DYNAMIC_CURRENT_ENV // 当前环境的常量
})
const db = cloud.database() // 取出数据库操作对象

exports.main = async (event, context) => {
  // 预置创建集合,如果存在则自动失败跳过,自己上架时可以去掉
  try{ 
    await db.createCollection('message') 
    await db.createCollection('config') 
  }catch(e){}
  
  const wxContext = cloud.getWXContext() // 获取微信上下文

  if (event.type === 'getlist') { // 如果行为是get
    const data = (await db.collection('message').get()).data // 取出data
    return {data}
  }
  if (event.type === 'xxx') {
    ...
  }
  ...

  return {data:false}
}
const envList = [
	{"envId":"cloud1-8g01fkyce74b39c8","alias":"cloud1"}
]
const isMac = true
module.exports = {
    envList,
    isMac
}
App({
  globalData: {
  },
  async onLaunch (e) {
    this.initcloud()
  },
  /**
   * 初始化云开发环境(支持环境共享和正常两种模式)
   */
  async initcloud () {
    const shareinfo = wx.getExtConfigSync() // 检查 ext 配置文件
    const normalinfo = require('./envList.js').envList || [] // 读取 envlist 文件
    if (shareinfo.envid != null) { // 如果 ext 配置文件存在,环境共享模式
      this.c1 = new wx.cloud.Cloud({ // 声明 cloud 实例
        resourceAppid: shareinfo.appid,
        resourceEnv: shareinfo.envid
      })
      // 装载云函数操作对象返回方法
      this.cloud = async function () {
        if (this.flag !== true) { // 如果第一次使用返回方法,还没初始化
          await this.c1.init() // 初始化一下
          this.flag = true // 设置为已经初始化
        }
        return this.c1 // 返回 cloud 对象
      }
      this.afterInit()
    } else { // 如果 ext 配置文件存在,正常云开发模式
      if (normalinfo.length !== 0 && normalinfo[0].envId != null) { // 如果文件中 envlist 存在
        wx.cloud.init({ // 初始化云开发环境
          traceUser: true,
          env: normalinfo[0].envId
        })
        // 装载云函数操作对象返回方法
        this.cloud = () => {
          return wx.cloud // 直接返回 wx.cloud
        }
        this.afterInit()
      } else { // 如果文件中 envlist 存在,提示要配置环境
        this.cloud = () => {
          throw new Error('当前小程序没有配置云开发环境,请在 envList.js 中配置你的云开发环境')
        }
        this.afterInit()
      }
    }
  },
    /**
   * 封装的云函数调用方法
   * @param {*} obj 传入对象
   */
  async call (obj) {
    console.log('【发起云函数调用】', obj)
    try {
      const cloud = await this.cloud()
      const res = await cloud.callFunction({ // 调用云函数
        name: 'quickstartFunctions', // 应用唯一的服务函数
        data: {
          type: obj.name, // 传入name为type
          data: obj.data // 传入data为data
        }
      })
			console.log('【云函数调用成功】', res)
      return res.result.data
    } catch (e) { // 网络问题出现
      console.error('【云函数调用失败】', e.toString())
      wx.hideLoading()
      wx.showModal({
        content: '请上传cloudfunctions文件夹中的云函数,然后再次体验', // 此提示可以在正式时改为 "网络服务异常,请确认网络重新尝试!"
        showCancel: false
      })
    }
  },
  afterInit () {
    this.getConfig()
  },
  async getConfig () {
    if (this.config) {
      return this.config
    } else {
      const res = await this.call({ // 发起云函数,提交信息
        name: 'getConfig',
      })
      this.config = res || {}
      return this.config
    }
  },

})

2. 设计页面

这个小程序的目的是婚礼邀请,所以首要的是类似婚礼纪那样的邀请函页面,婚礼的时间地点,放几张照片,最后地址导航。

这里我分了4个tab导航。默认是请柬,第二栏专门放上了全部精修照片,第三栏给大家留言,第四栏单独把地址导航放出来。

  • 请柬: 上下滚动翻页切换,请柬-照片展示-时间地点-致谢
  • 照片墙:婚纱照拍了四个系列,做成四个分组入口,点击进入当前分组的瀑布流展示,点击单张唤起预览。
  • 留言板:展示留言列表,下面发表留言。
  • 地址:上方腾讯地图组件,下方时间地点,点击地图或按钮唤起导航。

当然最主要的问题是素材,导航栏图标我去阿里巴巴的iconfont网站下了几个。整体的一些图片素材,直接去婚礼纪扒素材了,打开一个别人发的婚礼纪请柬,在电脑端打开直接F12😄。

3. 开发

开发这块就不多说了。主要有几点。

  • 图片利用小程序的云存储能力,上传到云端,前端访问时用cloudId访问,
  • 个人小程序提审,服务类型选择:生活服务 > 婚庆服务,工具 > 备忘录,工具 > 预约/报名
  • 做了一个音乐播放器,放了几首歌,结果提审的时候无法过审。解决方案是加了一个配置表,上传一个config文件,做个开关。提审过后再打开开关。
  • 因为精修过得照片都很大,压缩过后也大,用着用着突然有天就图片都不加载了,上云开发后台一看是流量用完了。首先去充点钱,开启按量付费。然后去存储配置把缓存配置改成30天了。
  • 另外新小程序免费额度一个月,把握好时间,我做的有点早,然后快到婚礼又续费了一个月。