命理/心理测评
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-9fvls3c3--mingli.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-9fvls3c3/mingli。命理/心理测评类微信小程序「心灵探索」完整脚手架(uni-app 3.0 + Vue3 + Vite + TS + Pinia + SCSS)。内置八字排盘、每日运势、MBTI 等测评、四档变现(免费/单测¥6.8/月会员¥39/年顾问¥999)与微信支付联调后端。当用户要「做一个命理/测算/运势/心理测评小程序」「克隆或重建心灵探索类小程序」「把八字排盘、运势、MBTI 引擎复用到别的项目」「用 uni-app 搭带付费墙的测评小程序」时触发。
触发词:命理小程序、心灵探索、八字排盘、每日运势、MBTI、运势小程序、测评小程序、测算小程序、克隆命理项目、uni-app 命理、带付费的测评。
阅读全文 (展开查看完整说明)
概述
命理小程序脚手架 · 「心灵探索」
本 skill 是完整可运行源码 + 总装说明。算法引擎为纯 TypeScript,可脱离小程序单独复用(公众号文章、H5、API 都能调)。
references/ 已包含整套源码(不含任何私钥/AppSecret,已安全隔离)。
一、产品定义(先对齐再动手)
三 Tab 结构(tabBar 仅文字,主色 #6E54E8 → #8B6FE8 紫色渐变):
| Tab | 页面 | 定位 |
|---|---|---|
| 运势 | pages/yunshi/index | 1 号位,DAU 基本盘,付费转化漏斗入口 |
| 测评 | pages/ceping/index | 12 套测评列表(MBTI 已跑通完整流程,其余为占位) |
| 我的 | pages/me/index | 登录态、生辰、会员卡、解锁记录、邀请 |
附加页:pages/test/index(答题流)、pages/result/index(结果卡 + 付费墙)。
四档变现(见 references/src/data/products.ts):
| 档位 | id | 价格 | 解锁逻辑 |
|---|---|---|---|
| 免费 | — | ¥0 | 今日运势基础版 + MBTI 16 型基础结果 |
| 单测深度报告 | deep_report | ¥6.8 | type: report,按 unlockKey 永久解锁 |
| 月度会员 | vip_month | ¥39 | 会员有效期(30天)内全部报告类解锁 |
| 年度顾问 | vip_year | ¥999 | 全年运势 + 1v1 权益(演示) |
商业模型参照:100 万净利 ≈ 1.76 万付费用户 × ¥81 ARPU;流量主战场是公众号「打尖还是住店」,小程序只是承接工具。
二、技术栈
- 前端:uni-app 3.0 + Vue3 + Vite 5 + TypeScript 5.4 + Pinia 2 + SCSS(样式用
rpx,750 基准) - 运行模式:H5(
uni→http://localhost:5173)、微信小程序(uni -p mp-weixin→dist/build/mp-weixin/,用微信开发者工具导入) - 后端(二选一,契约一致):
- 本地联调:
server/pay-mock.mjs(Node,端口 8787) - 生产:Supabase Edge Functions(Deno,
supabase/functions/)
- 本地联调:
- 八字/运势引擎:
src/utils/bazi.ts、src/utils/yunshi.ts,纯 TS,无第三方依赖
三、目录结构与职责(references/ 即完整源码)
references/
├── package.json # 依赖与脚本(dev:h5 / dev:mp-weixin / build:*)
├── vite.config.ts
├── tsconfig.json / tsconfig.node.json
├── index.html / uni.scss
├── .env.example # 凭证模板(可提交,无密钥)
├── src/
│ ├── main.ts / App.vue / manifest.json / pages.json
│ ├── config/pay.ts # ★支付三模式开关 + 商户号/AppID/序列号
│ ├── utils/
│ │ ├── bazi.ts # ★八字排盘引擎(年/月/日/时柱、五行、纳音、喜用神)
│ │ ├── yunshi.ts # ★运势评分引擎(5 维评分、详情、宜忌、幸运要素)
│ │ ├── deep-report.ts # 深度报告生成(buildMbtiDeep / buildYunshiDeep)
│ │ └── pay.ts # 下单编排 + 测试模态 + wx.requestPayment 真实路径
│ ├── data/
│ │ ├── tests.ts # 12 套测评元数据 + 分类
│ │ ├── questions.ts # MBTI 20 题(E/I S/N T/F J/P ×5)
│ │ ├── mbti-results.ts # 16 型人格结果卡
│ │ └── products.ts # 四档商品
│ ├── stores/ # Pinia:order(订单/会员/解锁)、test、user、yunshi
│ ├── components/ # AppHeader / Paywall / MembershipCard / Card / ScoreBar / Stars
│ ├── pages/ # yunshi / ceping / me / test / result
│ ├── types/ # index.ts(业务类型)、payment.ts(支付/会员类型)
│ └── styles/ # variables / mixins / global(SCSS)
├── server/pay-mock.mjs # 本地支付联调服务(镜像 Supabase 契约)
└── supabase/
├── config.toml / orders.sql
└── functions/
├── _shared/wechat.ts # 微信支付工具(RSA 签名/验签、AES-GCM 解密,兼容 PKCS#1/PKCS#8)
├── create-order/index.ts # 下单 → JSAPI → 返回支付参数
└── pay-notify/index.ts # 回调:验签(平台证书公钥) + 解密(APIv3密钥) → 标记已付四、从零实例化本项目
# 1. 建新项目目录并拷入 references 全部内容
mkdir my-mingli && cd my-mingli
cp -r ~/.workbuddy/skills/mingli-miniprogram/references/. .
# 2. 安装依赖(拉 @dcloudio/uni-app 3.0 等)
npm install
# 3. 配置凭证(复制模板,填真实值,勿提交)
cp .env.example .env.local
# 在 .env.local 填:WECHAT_API_V3_KEY、WECHAT_APP_SECRET 等
mkdir -p server/certs
touch server/certs/mch_private_key.pem server/certs/platform_pubkey.pem
# 4. 运行(两个终端)
npm run dev:h5 # H5 → http://localhost:5173
node server/pay-mock.mjs # 支付联调 → http://localhost:8787
# 微信小程序:npm run dev:mp-weixin → 产物 dist/build/mp-weixin/,用微信开发者工具导入当前默认
src/config/pay.ts为本地联调模式(testMode=false + simulateWechat=true),无需真实凭证即可把生产代码管线跑通。
五、核心算法引擎 API(纯 TS,可独立复用)
八字排盘 src/utils/bazi.ts
导出常量:TIAN_GAN DI_ZHI SHENG_XIAO ZHI_WUXING GAN_WUXING WUXING_CN WUXING_SHENG WUXING_KE NAJIN_MAP导出函数:
getYearGanZhi(year, month, day)— 年柱(以立春≈2/4 为界)getMonthGanZhi(year, month)— 月柱getDayGanZhi(year, month, day)— 日柱(★运势引擎入参)getHourGanZhi(year, month, day, hour)— 时柱getDayMaster(dayGanZhi)— 日主{ gan, wuxing, label }getShengXiao(year, month, day)— 生肖getShiYong(dayGanZhi, y, m, d)— 喜用神WuXing[]getMingGe(dayGanZhi)— 命格paipan(...)— 综合排盘主入口getNajin(ganZhi)— 纳音
诚实说明(必读):这是简化版算法——年柱按立春分界,月柱未做节气精确划分。生产级需接入
tyme库做节气修正。仅适合 MVP/演示,不要宣称「专业命理」。
运势评分 src/utils/yunshi.ts
calcScores(dayGanZhi, date)→{ overall, overallStars, scores },5 维(综合/事业/财运/感情/健康 + 星级),基于日干+日期的稳定 hashbuildDetails(scores)/buildBasis(dayGanZhi, shiYongCn)/buildLucky(...)/buildYiJi()/buildHuangliYiJi()/buildYunshi(...)— 组装完整运势页数据- 调用链:
paipan/getDayGanZhi→dayGanZhi→calcScores/buildYunshi
深度报告 src/utils/deep-report.ts
buildMbtiDeep(TestResult)/buildYunshiDeep(Yunshi)→DeepSection[](维度解读、事业/情感/成长建议、开运指南)。当前为模板化文本,生产应替换为 LLM 实时生成(见第九节)。
MBTI 测评
src/data/questions.ts:mbtiQuestions(20 题,4 维度 ×5)src/data/mbti-results.ts:mbtiResults: Record<code, TestResult>(16 型)- 评分在
src/stores/test.ts:按选项累加 E/I S/N T/F J/P → 4 字母 → 查表出结果卡
六、测评体系数据模型
src/data/tests.ts 定义了 12 套测评(mbti, big5, phq, pss, animal, ennea, color, inner, social, decide, attach, mind),分 4 类(basic/career/love/fortune)。仅 MBTI 有完整「题→评分→结果卡→付费墙」流程;其余 11 套目前是列表占位,扩展时照 MBTI 结构补 questions + results 即可。
类型见 src/types/index.ts(Test Question TestResult Category 等)。
七、支付与会员体系
三种运行模式(src/config/pay.ts · PAY_CONFIG)
| 模式 | 开关 | 用途 |
|---|---|---|
| ① 演示 | testMode: true | /api/* 简单接口 + 弹窗确认,给客户看最快 |
| ② 本地联调(当前默认) | testMode:false, simulateWechat:true | 走 prodApi(本地 mock) 完整 create-order→payParams→pay-notify 管线,微信「扣款动作」由模拟客户端代替 |
| ③ 真实生产 | testMode:false, simulateWechat:false | Supabase Edge + 真 wx.requestPayment |
类型(src/types/payment.ts)
Product ProductType('report'|'vip_month'|'vip_year') Order OrderStatus('pending'|'paid'|'closed') Membership CreateOrderResp WechatPayParams解锁判定(src/stores/order.ts):会员有效期内报告类全解锁;单报告按 unlockKey(deep:mbti:<id> / vip)永久解锁。
后端契约(mock 与 Supabase 严格一致)
POST /create-order→ 微信 JSAPI 下单 → 返回{ orderId, amount, testMode, payParams? }POST /pay-notify→ 验签(微信平台证书公钥 RSA)+ 解密(APIv3 密钥 AES-256-GCM)→ 标记订单paidGET /api/orders/:id、GET /api/health- Supabase 部署:
supabase functions deploy create-order --no-verify-jwt(pay-notify 同理);wechat.ts提供buildAuthorizationsignJSAPIverifySignaturedecryptResource。
回调验签铁律:用微信平台证书公钥做 RSA 验签;APIv3 密钥仅用于 AES 解密报文。二者不可混用(曾踩坑误用 APIv3 做 HMAC 验签)。
真实上线前置凭证清单
| 项 | 状态 |
|---|---|
商户号 1749319038 | ✅ |
| APIv3 密钥 | ✅ |
证书序列号(账户有 2 张:2A2F5E3C… 与 21265105…) | ✅(注意:配置里 serialNo 须与所用的商户私钥配对的证书一致) |
小程序 AppID wx348b9e8c2c63d22a | ✅ |
| 小程序 AppSecret | ✅ |
商户私钥(配 mch_private_key.pem) | ⏳ 须与所选证书模数配对 |
| 微信平台证书公钥(SPKI) | ⏳ 置 platform_pubkey.pem |
| Supabase 项目 + 两函数部署 | ⏳ |
私钥↔证书配对必须用
wechatpay-v3-cert-pairingskill 做 openssl 模数全组合比对,禁止"用户说配"就写.env。配对不上 → 真实下单必401 SIGN_ERROR。
八、关键决策与避坑
- 不做完整 40+ 测评:先跑通 1 个深度(MBTI)验证付费闭环,再横向扩。
- 每日运势是 1 号位:DAU 是付费转化的地基,不是附属功能。
- 公众号是流量主战场:小程序只是承接,冷启动靠公众号钩子文 + 私域。
- 八字算法是简化版:年柱立春分界、月柱无节气——对外表述要留余地,专业级需接
tyme。 - 深度报告文本:当前模板化,生产替换为 LLM(GPT-4o-mini / GLM-4-Flash,约 ¥0.005/次)。
- 私钥/AppSecret 永不在源码:已用
.env.local+server/certs/隔离并 gitignore。
九、冷启动与运营(30 天)
- 公众号「打尖还是住店」每周 5 篇钩子文(命理/情感/成长选题)
- 收集 200+ 真实用户问卷校准题面
- MVP 上线:今日运势 + MBTI + 微信登录 + 支付
- 私域闭环:每份深度报告末尾加 ¥99 钩子(1v1/年度顾问)
- 目标:先验证需求(第一性原理:有客户才有真实需求),再扩供应链
十、安全红线
- ❌ 绝不把
.env.local、server/certs/*(私钥/平台证书)提交或纳入 skill。本 skill 的references/已验证零密钥。 - ❌ 不向用户索要私钥明文;配对校验用
wechatpay-v3-cert-pairingskill 离线完成。 - ✅ 真收钱前必须:私钥配证书(模数比对通过)+ 平台证书公钥就位 + Supabase 部署 +
config/pay.ts切真实模式。 - ✅ 报告署名遵循用户规范:对外交付物页脚「战略咨询:广州潮起贸易有限公司」在上、「生成日期」在最后。
十一、调用示例(复用引擎,脱离小程序)
// 纯 TS,任意 Node/浏览器/API 环境
import { paipan, getDayGanZhi } from '@/utils/bazi'
import { calcScores, buildYunshi } from '@/utils/yunshi'
const bz = paipan(1990, 6, 15, 14) // 八字排盘
const dz = getDayGanZhi(1990, 6, 15) // 日柱
const yunshi = buildYunshi(dz, new Date()) // 今日运势(5 维 + 宜忌 + 幸运要素)把
references/src/utils/bazi.ts与yunshi.ts直接拷到任意项目即可用,零依赖。