Commit Graph

14 Commits

Author SHA1 Message Date
Pine c8870d5b3b 算力余额体系闭环:企业分配/个人充值分离记账+退出返还
- users 新增 compute_personal_balance(分):个人充值/企业转入个人账本,
  与 company_members.compute_balance(企业分配)彻底分离
- relay 转发引擎后按实际用量记账(deduct_usage_post):
  先扣企业分配余额(折扣低→高)、不足扣个人余额,写 compute_usage_records;
  流式 SSE 透传时解析 usage chunk 记账,JWT 登录态调用生效、PAT 调用不重复记账
- 个人充值到账(pay/service)与 企业↔个人互转 同步更新个人账本
- 成员退出企业(leave)与管理员移出成员(remove_company_member):
  仅返还企业分配剩余(member.compute_balance)至企业余额,同步扣减引擎 quota,
  绝不触碰个人充值余额
- GET /compute/user/balance 个人余额改读独立账本(不再引擎倒推)
- 迁移 0067;存量个人充值/互转净额已回填
2026-09-07 12:19:50 +08:00
Pine 12f92e2453 feat: 桌面端安装包列(0066迁移)+算力定价增强+企业/支付相关更新 2026-09-07 10:14:23 +08:00
Pine 105510e170 关闭个人微信收款API,返回明确的暂不支持提示
修改内容:
1. POST /opc/pay/bindings/personal 接口返回403,明确提示个人微信收款暂时未开放
2. 引导用户先完成特约商户进件,进件通过并完成分账授权后即可收款
3. 保留接口路径,后续开放时只需恢复service.bind_personal调用

业务决策:
- 暂时关闭个人微信零钱收款(PERSONAL_OPENID分账)
- 当前阶段所有用户必须完成特约商户进件才能收款
- 后续版本有必要时再开放个人微信收款
2026-09-06 23:33:33 +08:00
Pine 534a8de023 修正:个人收款默认出资方应为服务商特约商户号,非直连商户号
业务逻辑澄清:
- 直连商户号(WECHATPAY_MCHID):用于平台业务(算力、应用包等支付)
- 服务商商户号(WECHATPAY_SP_MCHID):用于给用户商户开户、分账
- 特约商户号(sub_mchid):服务商下属的特约商户,是分账的出资方

修正内容:
1. WECHATPAY_DEFAULT_SUB_MCHID 默认为空,不再回退到直连商户号
2. 未配置默认特约商户号时,给出明确错误提示,引导完成特约商户进件
3. 需通过环境变量 PINEAGENTS_WX_DEFAULT_SUB_MCHID 配置服务商下属的特约商户号
2026-09-06 23:24:06 +08:00
Pine 7c110c4c09 修复:个人微信收款绑定报错sub_mchid is not assigned
问题:绑定个人微信收款时,服务商分账API需要出资特约商户号(sub_mchid),
但普通用户没有自有商户绑定时sub_mchid为空,导致微信SDK抛出
'sub_mchid is not assigned.'异常。

修复:
1. 配置中新增WECHATPAY_DEFAULT_SUB_MCHID,默认使用平台直连商户号
2. bind_personal函数中,用户无自有商户绑定时使用默认sub_mchid
3. 支持通过环境变量PINEAGENTS_WX_DEFAULT_SUB_MCHID覆盖默认值
2026-09-06 23:15:58 +08:00
Pine 3fe6bf6dbc feat: 登录注入 MQTT 凭证、官方智能体平台化、会话ID扩容、微信支付分账/认证迁移 2026-09-03 12:40:05 +08:00
Pine 5db03936f9 feat(pay): 支付支持代付——任意登录用户均可为订单支付,余额到账订单创建者
移除所有支付相关接口的订单归属校验和 opc_member 角色限制:

【算力充值 pay/service.py + pay/routers.py】
- build_pay_params: 移除 order.user_id != user.id 归属校验
- recharge_pay_params: require_roles(opc_member) → get_current_user(任意登录用户)
- recharge_status: 移除归属校验,角色放宽为任意登录用户

【市场购买 market/service.py + market/routers.py】
- build_pay_params: 移除归属校验
- query_status: 移除归属校验
- market_pay_params / market_order_status: 角色放宽为任意登录用户

【到账逻辑不变】
- process_paid_order 按订单 engine_user_id(订单创建者)加款
- 支付者 B 的 openid 仅用于 JSAPI 下单,不影响到账目标
- 审计日志 user_id 记录订单创建者

场景:A 用户 web 端创建充值订单 → B 用户小程序扫码 → B 登录并支付 → 余额到账 A 用户
2026-09-02 12:13:21 +08:00
Pine 86c6d24b17 fix(pay): 所有支付小程序码 page 路径修正为 pages-extra 子包路径
统一修正3处支付相关小程序码的 page 参数(之前误写为主包 pages/ 路径,
扫码后微信找不到页面→白屏):

- app/pay/service.py: 算力充值支付 → pages-extra/pay/index
- app/market/service.py: 市场购买支付 → pages-extra/pay/index
- app/training/main.py: 活动报名支付 → pages-extra/pay-qr/index

加上之前修复的 scan-login(auth.py + wechat.py 默认参数),
后端所有 get_wxacode 调用的 page 路径现已全部正确。
2026-09-02 11:47:34 +08:00
Pine 7a9741a333 feat(pay): 特约商户进件接口——平台以服务商身份代提交进件+素材上传+状态查询自动激活
- profitsharing.py:submit_applyment / query_applyment / upload_image(复用服务商 API 证书加密敏感字段)
- service.py:create_merchant_applyment(幂等:已有 applying/active 商户绑定返回已有);query_merchant_applyment(FINISHED 自动回填 sub_mchid + 添加 MERCHANT_ID 接收方激活;REJECTED 标记+原因)
- routers.py:POST upload-media / POST applyment / GET {binding_id}/applyment
- payment_bindings 增加 detail 列(0040_payment_binding_detail,接在 0040_incubator 之后)
- 冒烟测试覆盖进件闭环(提交幂等/通过自动激活/驳回)
2026-09-01 19:49:50 +08:00
Pine 0fd210ac1f feat(pay): 微信服务商分账+资金托管改造——OPC个人/商户双绑定收款、验收95/5分账、回调确认、escrow资金托管字段扩展
- profitsharing.py:服务商分账客户端(添加接收方/发起分账/查分账/退款/回调验签)
- payment_bindings + settlement_logs:OPC 收款绑定(personal openid / merchant 子商户号)与分账流水镜像
- settlement_service.release_escrow:验收后优先发起微信分账(95%接单者/5%平台),未配置时降级台账结算(channel=manual)
- handle_split_notify:分账回调确认 escrow released(幂等)
- 路由:分账回调 + 绑定创建/列表/停用
- 迁移:alembic 0039(新表 + escrows 幂等加列)+ 兜底迁移脚本 + 冒烟测试
2026-09-01 18:39:41 +08:00
Pine 04808aaf76 feat(market): 技能/插件/应用统一市场子应用(目录/管理/定价/购买/支付分发)+ 0037 迁移与权限种子 2026-08-31 23:41:59 +08:00
Pine 374767bbca chore: 清理废弃 SQLite 代码与过时注释
- 删除死代码 app/db.py / app/repositories.py / app/dependencies.py(legacy 模块,
  import 即损坏且全仓无引用,活跃实现在 app/infrastructure/)
- 删除废弃库文件 serverdata/data/opc.db(2026-08-24 并入总库前的旧分库)
- 注释措辞同步 SQLite→统一总库(DATABASE_URL 决定方言)
2026-08-31 21:46:22 +08:00
Pine bb3559bd51 feat(pay): 微信支付子应用与活动定价报名(event_orders/EV_ 前缀/支付后自动确认)
- app/pay 域新增活动订单模型与事件服务,复用充值支付链路(JSAPI+回调验签+幂等+15 分钟过期+对账补单)
- 0027: bookings 加 pay_status/order_no,events 加 price_fen(0=免费)
- 运营端桥透传活动定价字段

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-31 20:36:16 +08:00
Pine f1147dced3 feat(pay): 微信支付V3子应用与算力充值
- app/pay 独立支付子应用(config/wxpay/models/repository/service/routers),便于后期拆分微服务
- 充值订单表 0026_compute_recharge;套餐支持折扣(discount)与上架开关(enabled),DB system_configs 优先、env 兜底
- 统一小程序支付:桌面端出小程序码→扫码进小程序确认页按 openid 发起 JSAPI→回调幂等到账(引擎 adjust_user_quota+镜像回写)
- 内嵌 wechatpayv3(含 async_),响应验签失败降级告警;新增 aiofiles 依赖

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-30 22:29:44 +08:00