Files
server-core/.env.example
T
Pine 4dedb43d7f 算力多级折扣与企业余额体系 - 服务端核心改造
数据模型:
- 新增 tenant_discounts(运营端载体折扣)
- 新增 tenant_user_discounts(载体端账号折扣)
- 新增 compute_recharges(算力充值记录)
- 新增 compute_balance_allocations(余额分配记录)
- 新增 compute_usage_records(算力使用记录)
- 扩展 park_tenants(default_company_discount, default_user_discount)
- 扩展 park_companies(compute_balance, compute_balance_used)
- 扩展 company_members(role, compute_balance, compute_balance_used, left_at, left_reason)

核心服务:
- compute_pricing_service.py:四级折扣价格计算、余额扣费、企业余额管理

API接口(/api/compute):
- 运营端:载体折扣管理、标准价管理
- 载体端:企业折扣设置、账号折扣设置、默认折扣设置
- 企业端:余额充值、成员余额分配/回收、充值/分配记录
- 个人端:我的余额、使用记录、退出企业
- 内部:价格查询、算力扣费

数据库迁移:0064_compute_discount_balance.py
2026-09-06 17:59:56 +08:00

84 lines
6.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 微信小程序配置(真实微信登录)
# 复制本文件为 server/.env 并填入真实值;或直接在部署环境设置环境变量。
# 获取方式:微信公众平台 mp.weixin.qq.com → 开发 → 开发管理 → 开发设置 → AppID / AppSecret
WX_APPID=你的小程序AppID
WX_SECRET=你的小程序AppSecret
# ── 微信支付 V3(算力充值,app/pay 子应用)────────────────────────────
# 商户平台 pay.weixin.qq.com 获取;凭据只放部署环境 .env,勿提交
PINEAGENTS_WECHATPAY_MCHID=
PINEAGENTS_WECHATPAY_CERT_SERIAL_NO=
PINEAGENTS_WECHATPAY_APIV3_KEY=
# 商户 API 证书私钥路径(默认 serverdata/keys/wechatpay/apiclient_key.pem
PINEAGENTS_WECHATPAY_PRIVATE_KEY_PATH=
# 平台公钥(可选,公钥模式时配置);否则平台证书自动更新落盘
PINEAGENTS_WECHATPAY_PUBLIC_KEY_PATH=
# 支付回调地址:须为微信可达的公网 HTTPS
PINEAGENTS_WECHATPAY_NOTIFY_URL=https://opc.pinesound.cn/opc/pay/notify
# Native 扫码用 appid(公众号/开放平台,须绑定到该商户号);空回退开放平台/小程序 appid
PINEAGENTS_WECHATPAY_NATIVE_APPID=
# 小程序 JSAPI 用 appid;空回退 PINEAGENTS_WECHAT_APPID
PINEAGENTS_WECHATPAY_JSAPI_APPID=
# 充值套餐兜底 JSON[{id,amount(元),bonus(赠送元),label}]);DB system_configs 的 recharge_packages 优先
PINEAGENTS_WECHATPAY_PACKAGES=[{"id":"p10","amount":10,"bonus":0,"label":"10 元"},{"id":"p50","amount":50,"bonus":5,"label":"50 元"},{"id":"p100","amount":100,"bonus":15,"label":"100 元"}]
# 自由金额范围(元)与订单有效期(分钟)
PINEAGENTS_RECHARGE_MIN_YUAN=1
PINEAGENTS_RECHARGE_MAX_YUAN=5000
PINEAGENTS_RECHARGE_EXPIRE_MINUTES=15
# ── 微信支付【服务商】分账 / 资金托管配置(OPC 收款认证)─────────────────
# ⚠️ 与上方直连商户配置并存:收单走直连商户号,分账/进件用服务商商户号;
# 分账功能以本段为开关(SP_MCHID + 服务商证书/APIv3 + 回调地址齐备才启用 profitsharing_enabled())。
# ⚠️ 开通前提:平台主体需有营业执照,在微信支付商户平台完成「服务商入驻」+
# 「服务商分账」产品开通 + 绑定服务商 AppID + 配置分账回调(无需 ICP/EDI)。
# ⚠️ 关键:服务商商户号通常 ≠ 直连商户号,是两个独立商户号,**必须为服务商单独配置
# API 证书/序列号/APIv3 密钥**(下方 SP_* 证书项),否则分账/进件签名失败(SIGN_ERROR)。
#
# PINEAGENTS_WX_SP_MCHID —— 服务商商户号(10 位数字,sp_mchid,发起分账/进件的请求主体)
# 在哪里获取:微信支付商户平台 pay.weixin.qq.com → 登录服务商账户 → 「商户信息」→ 服务商商户号
PINEAGENTS_WX_SP_MCHID=
# PINEAGENTS_WX_SP_APPID —— 服务商 AppIDPERSONAL_OPENID 个人分账接收方的 openid 归属该 AppID
# 分账接口的 appid 参数也用它)
# 在哪里获取:微信公众平台 mp.weixin.qq.com → 小程序/公众号 → 「开发」→「开发管理」→ AppID;
# 注意:该 AppID 需在服务商后台「AppID 授权」中完成与服务商商户号的绑定
PINEAGENTS_WX_SP_APPID=
# PINEAGENTS_WX_SP_CERT_SERIAL_NO —— 服务商 API 证书序列号(APIv3 请求签名头 Wechatpay-Serial
# 在哪里获取:微信支付服务商商户平台 pay.weixin.qq.com/partner → 「账户中心>API安全>API证书」
# → 查看证书序列号(形如 15DF0640...
PINEAGENTS_WX_SP_CERT_SERIAL_NO=
# PINEAGENTS_WX_SP_PRIVATE_KEY_PATH —— 服务商 API 私钥 apiclient_key.pem 落盘路径
# 在哪里获取:服务商商户平台「API安全>API证书」→ 下载证书,解压得 apiclient_key.pem
# 上传到服务器(如 serverdata/keys/wechat_certs/sp_certs/apiclient_key.pem
PINEAGENTS_WX_SP_PRIVATE_KEY_PATH=serverdata/keys/wechat_certs/sp_certs/apiclient_key.pem
# PINEAGENTS_WX_SP_APIV3_KEY —— 服务商 APIv3 密钥(32 位;回调报文解密用,勿与直连商户相同)
# 在哪里获取:服务商商户平台「账户中心>API安全>APIv3密钥」→ 设置/重置后保存
PINEAGENTS_WX_SP_APIV3_KEY=
# PINEAGENTS_WX_SP_CERT_DIR —— 服务商平台证书/公钥自动更新落盘目录(运行时数据)
# 在哪里获取:自行指定目录(如 serverdata/keys/wechat_certs/sp_certs),首次请求自动下载
PINEAGENTS_WX_SP_CERT_DIR=serverdata/keys/wechat_certs/sp_certs
# PINEAGENTS_WX_SP_PUBLIC_KEY_PATH / _ID —— 服务商公钥模式(可选,二选一)
# 新服务商商户启用「微信支付公钥」模式时配置 pub_key.pem 与 PUB_KEY_ID(在 API安全>公钥 获取);
# 未配置则走平台证书自动更新(推荐,无需人工维护)
PINEAGENTS_WX_SP_PUBLIC_KEY_PATH=
PINEAGENTS_WX_SP_PUBLIC_KEY_ID=
# PINEAGENTS_WX_SPLIT_NOTIFY_URL —— 分账结果回调通知地址(必须是微信可达的公网 HTTPS)
# 在哪里获取:平台自己的回调 URL(本项目为 https://opc.pinesound.cn/opc/pay/profitsharing/notify),
# 并到微信商户平台 → 服务商分账 → 「回调设置」配置相同的地址,接收分账结果通知
PINEAGENTS_WX_SPLIT_NOTIFY_URL=https://opc.pinesound.cn/opc/pay/profitsharing/notify
# PINEAGENTS_WX_SPLIT_COMMISSION_RATE —— 平台佣金比例(分账给服务商商户号的部分,默认 0.05=5%)
# 在哪里获取:平台自身运营策略,需与 settlement_service 的 COMMISSION_RATE 保持一致
PINEAGENTS_WX_SPLIT_COMMISSION_RATE=0.05
# ---- 数据库(SQLite→MySQL 切换;未配置默认 serverdata/data/app.db----
# 示例:mysql+asyncmy://user:pass@192.168.1.3:8091/opc?charset=utf8mb4
# 首次迁移:uv run python scripts/migrate_sqlite_to_mysql.py(建表+搬数据+行数校验)
PINEAGENTS_DEMO_DATABASE_URL=
# ---- 桌面端版本管理(/desktop-updates/*----
# 桌面端更新源对外地址前缀(如 https://opc.pinesound.cn),用于生成 manifest 里的绝对下载 URL
# 留空则回退请求 Host。
PUBLIC_BASE_URL=
# minisign 签名公钥(与桌面端 tauri.conf.json plugins.updater.pubkey 一致)。
# 配置后,admin 上传 .sig 时校验签名 key id 是否匹配,防止混入非本机私钥签名的产物。
DESKTOP_UPDATER_PUBKEY=