🎴 智能贺卡生成微信小程序

设计与实现框架

微信登录上传照片输入提示词AI 生成贺卡预览/保存/分享

导航目录

1产品概述

用户登录后上传照片,输入提示词(描述贺卡风格、祝福语、场景等),系统结合照片与提示词通过 AI 生成贺卡图片,用户可预览、保存或分享。

核心流程

微信登录 → 上传照片 → 输入提示词 → AI 生成贺卡 → 预览/保存/分享

2技术架构

整体架构图

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   微信小程序端    │ ──→ │   后端服务 API     │ ──→ │   AI 图片生成     │
│  (WXML/WXSS/JS) │     │  (Node/Java/Go)  │     │ (NanoBanana等)  │
└─────────────────┘     └──────────────────┘     └─────────────────┘
        │                       │                        │
        │                       ↓                        │
        │               ┌──────────────┐                 │
        └──────────────→│  对象存储 OSS  │←────────────────┘
                        │  (照片/贺卡)   │
                        └──────────────┘
                               │
                        ┌──────────────┐
                        │  数据库 MySQL  │
                        │ (用户/作品)    │
                        └──────────────┘

技术选型

层级技术说明
前端微信原生 / Taro / uni-app原生性能最佳,Taro 可跨端
后端Node.js (Express/Nest)与微信生态契合,开发快
数据库MySQL + Redis业务数据 + 缓存/会话
存储腾讯云 COS / 阿里云 OSS照片与生成贺卡存储
AI 生成NanoBanana / 文生图 API照片+提示词图生图
鉴权code2session + JWT登录态管理

3功能模块设计

1. 用户登录

wx.login() 取 code → 后端换 openid + session_key → 生成 JWT → 本地存储维持登录态,首次登录建档。

2. 照片上传

wx.chooseMedia() 选/拍照 → 前端压缩(1~2MB) → 上传 OSS → 校验格式/大小/imgSecCheck 内容安全。

3. 提示词输入

文本框 + 预设模板(生日/节日/婚礼) + 风格标签(水彩/国潮/卡通) → msgSecCheck 检测。

4. AI 贺卡生成

组装 prompt(用户输入+风格+构图) → 调图生图 API → 返回 task_id 异步轮询进度 → 回传贺卡 URL。

5. 预览与分享

预览结果支持重新生成 → saveImageToPhotosAlbum 存相册 → 转发分享 / 生成含小程序码海报。

4数据库设计

-- 用户表
CREATE TABLE users (
  id          BIGINT PRIMARY KEY AUTO_INCREMENT,
  openid      VARCHAR(64) UNIQUE NOT NULL,
  nickname    VARCHAR(64),
  avatar      VARCHAR(255),
  created_at  DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 贺卡作品表
CREATE TABLE cards (
  id          BIGINT PRIMARY KEY AUTO_INCREMENT,
  user_id     BIGINT NOT NULL,
  origin_img  VARCHAR(255),          -- 原始照片
  prompt      TEXT,                  -- 用户提示词
  style       VARCHAR(32),           -- 风格
  result_img  VARCHAR(255),          -- 生成贺卡
  status      TINYINT DEFAULT 0,     -- 0生成中 1成功 2失败
  created_at  DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_user (user_id)
);

5核心接口设计

接口方法说明
/api/loginPOST微信登录,返回 token
/api/uploadPOST上传照片,返回 OSS URL
/api/card/generatePOST提交生成任务,返回 task_id
/api/card/status/:taskIdGET查询生成进度/结果
/api/card/listGET获取用户作品列表

生成接口示例

POST /api/card/generate
{
  "origin_img": "https://oss.../photo.jpg",
  "prompt": "生日快乐,温馨水彩风格",
  "style": "watercolor"
}
→ { "task_id": "xxx", "status": "pending" }

6关键代码片段

前端:登录

wx.login({
  success: (res) => {
    wx.request({
      url: 'https://api.xxx.com/api/login',
      method: 'POST',
      data: { code: res.code },
      success: (r) => wx.setStorageSync('token', r.data.token)
    })
  }
})

前端:选择并上传照片

wx.chooseMedia({
  count: 1, mediaType: ['image'], sizeType: ['compressed'],
  success: (res) => {
    wx.uploadFile({
      url: 'https://api.xxx.com/api/upload',
      filePath: res.tempFiles[0].tempFilePath,
      name: 'file',
      header: { Authorization: wx.getStorageSync('token') },
      success: (r) => { this.setData({ originImg: JSON.parse(r.data).url }) }
    })
  }
})

后端:登录换取 openid (Node.js)

const axios = require('axios')
app.post('/api/login', async (req, res) => {
  const { code } = req.body
  const { data } = await axios.get('https://api.weixin.qq.com/sns/jscode2session', {
    params: { appid: APPID, secret: SECRET, js_code: code, grant_type: 'authorization_code' }
  })
  // data.openid 入库 → 生成 JWT
  const token = jwt.sign({ openid: data.openid }, JWT_SECRET, { expiresIn: '7d' })
  res.json({ token })
})

后端:调用 AI 生成(异步轮询)

app.post('/api/card/generate', auth, async (req, res) => {
  const { origin_img, prompt, style } = req.body
  const finalPrompt = buildPrompt(prompt, style)  // 组合风格模板
  const task = await aiClient.editImage({ image_urls: [origin_img], prompt: finalPrompt })
  await db.cards.insert({ user_id: req.user.id, origin_img, prompt, style, status: 0 })
  res.json({ task_id: task.id, status: 'pending' })
})

7安全与合规

⚠️ 微信小程序上线必须完成内容安全检测接入与服务器域名备案,否则审核不通过。

8开发计划建议

阶段内容周期
项目搭建、登录、上传1 周
AI 生成对接、轮询、预览1-2 周
作品列表、保存分享、海报1 周
内容安全、限流、测试上线1 周

9扩展方向