feat(api): 接入微信登录并原生实现咨询域(ECR-049/050)
小程序可在 Go 上完成微信手机号登录、测评、预约和下单,不再反代 Java。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# Backend Design: ECR-049 WeChat Auth + Consult Gateway
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| ID | BD-2026-049 |
|
||||
| Status | **Approved** |
|
||||
| Coding | **In progress** |
|
||||
| Migration | `000058_wechat_auth_gateway` |
|
||||
|
||||
## Boundary
|
||||
|
||||
```text
|
||||
POST /api/v1/auth/wechat
|
||||
{ code, encryptedData, iv } → existing SessionResult
|
||||
users.wx_openid UNIQUE · wx_unionid · java_platform_user_id
|
||||
user_sessions.java_access_token
|
||||
ANY /api/app-api/* → JAVA_BASE/app-api/* (Go Bearer → Java Bearer)
|
||||
ANY /api/admin-api/* → JAVA_BASE/admin-api/*
|
||||
Java POST /app-api/oauth/internal/issue-mini-app (X-Internal-Key)
|
||||
Identity: wx_openid = t_platform_user_account.account (mini_app)
|
||||
phone = t_platform_user.mobile
|
||||
```
|
||||
|
||||
## Out
|
||||
|
||||
Module migrate · Java decommission · Admin auth · auto ECR-050
|
||||
@@ -0,0 +1,21 @@
|
||||
# Backend Design: ECR-050 Consult Native
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| ID | BD-2026-050 |
|
||||
| Status | **Approved** |
|
||||
| Migration | `000059_consult_native` |
|
||||
|
||||
## Boundary
|
||||
|
||||
```text
|
||||
/api/v1/psychic/banner|news|procotol|study|user-choice|doctor-info|appointment|order|pay|platform-user
|
||||
/api/v1/upload
|
||||
PG tables consult_*
|
||||
WeChat JSAPI unifiedorder when PAY_* set
|
||||
Remove /api/app-api proxy
|
||||
```
|
||||
|
||||
## Out
|
||||
|
||||
Live Java shutdown · MySQL 全量灌数(另做运维脚本)· Admin
|
||||
@@ -1,5 +1,10 @@
|
||||
# CHANGELOG — ESS process artifacts
|
||||
|
||||
## 2026-09-14
|
||||
|
||||
- **ECR-050 Approved · Coding:** 咨询/测评/订单/支付迁入 Go(migration `000059`)· 去掉 Java 反代 · Human「阶段3,4一起实现再测试」· **禁自动 ECR-051**
|
||||
- **ECR-049 Approved · Coding:** 微信小程序登录 + 咨询过渡反代(ADR-0008 · migration `000058` · 不迁咨询业务)· Human「按这个执行」· **禁自动 ECR-050**
|
||||
|
||||
## 2026-08-13
|
||||
|
||||
- **ECR-048 Closed:** ReportTemplate 薄写(复用 `admin.growth.write` POST/PUT · migration `000057` · 无新 C 端)· **Loop STOP** · 禁自动 ECR-049 · 无 Funnel/Prompt
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
ecr: ECR-049
|
||||
capability: account-auth
|
||||
change:
|
||||
type: additive
|
||||
breaking_change: false
|
||||
migration_required: true
|
||||
apis:
|
||||
- method: POST
|
||||
path: /api/v1/auth/wechat
|
||||
change: added
|
||||
- method: ANY
|
||||
path: /api/app-api/*
|
||||
change: added
|
||||
- method: ANY
|
||||
path: /api/admin-api/*
|
||||
change: added
|
||||
migration: 000058_wechat_auth_gateway
|
||||
notes: H5 OpenLogin kept; miniprogram password login unused; Java remains until later ECR
|
||||
@@ -0,0 +1,18 @@
|
||||
ecr: ECR-050
|
||||
capability: consult-miniprogram
|
||||
change:
|
||||
type: additive
|
||||
breaking_change: true
|
||||
migration_required: true
|
||||
apis:
|
||||
- method: ANY
|
||||
path: /api/v1/psychic/*
|
||||
change: added
|
||||
- method: POST
|
||||
path: /api/v1/upload
|
||||
change: added
|
||||
- method: ANY
|
||||
path: /api/app-api/*
|
||||
change: removed
|
||||
migration: 000059_consult_native
|
||||
notes: miniprogram urls switched to /api/v1; Java proxy removed
|
||||
@@ -0,0 +1,25 @@
|
||||
# ECR-049
|
||||
|
||||
**Canonical-ID:** `ECR-049`
|
||||
**Title:** 微信小程序登录 + 咨询过渡网关
|
||||
**Status:** **Approved · Coding**
|
||||
**Auth:** `ECR-049_WRITE_AUTHORIZATION.md`
|
||||
|
||||
## Change
|
||||
|
||||
1. Spec `account-auth`:小程序登录改为微信;游客仍不可出报告
|
||||
2. ADR-0008:Go 为唯一用户后台;Java 过渡期为被调方
|
||||
3. `POST /api/v1/auth/wechat` + migration `000058`
|
||||
4. Go 反代 `/api/app-api/*`、`/api/admin-api/*` 到 Java(带内网签发的 Java Bearer)
|
||||
5. 小程序(另仓)收成单 token / 单 base / 唯一 `login-pop`
|
||||
|
||||
## Forbidden
|
||||
|
||||
咨询/测评/订单/支付迁库 · 下线 Java/MySQL · 改 Admin 登录 · Write-Wave 续刀 · 自动 ECR-050
|
||||
|
||||
## Acceptance
|
||||
|
||||
- 微信 `code` 只打 Go 一次;咨询接口经反代仍可用
|
||||
- 同一 openid/手机号在魔方与咨询认同一人
|
||||
- 未配置微信密钥时接口明确失败,不回落到账密
|
||||
- `repo-governance-check.py` PASS · Max Migration=`000058`
|
||||
@@ -0,0 +1,24 @@
|
||||
# ECR-050
|
||||
|
||||
**Canonical-ID:** `ECR-050`
|
||||
**Title:** 咨询域迁入 Go + 去掉 Java 反代
|
||||
**Status:** **Approved · Coding**
|
||||
**Auth:** `ECR-050_WRITE_AUTHORIZATION.md`
|
||||
|
||||
## Change
|
||||
|
||||
1. Spec `consult-miniprogram`:小程序咨询/测评/内容/订单/支付由 Go+PG 原生提供
|
||||
2. Migration `000059`:咨询域表 + 可测种子数据
|
||||
3. 路径 `/api/v1/psychic/*` 对齐原 Java VO
|
||||
4. 小程序 `apiUrl.js` 全部切到 `/api/v1`;删除 Go 对 Java `/api/app-api` 反代
|
||||
5. 微信支付:有商户密钥走统一下单;无密钥返回 mock 参数(dev)
|
||||
|
||||
## Forbidden
|
||||
|
||||
自动 ECR-051 · Admin 登录 · 在本机关现网 Java
|
||||
|
||||
## Acceptance
|
||||
|
||||
- 小程序 MUST 路径均有 Go 实现
|
||||
- `go test` / `go build` / governance PASS
|
||||
- 未配置微信商户时下单不 500
|
||||
@@ -0,0 +1,3 @@
|
||||
# HANDOFF — Architect → Engineer · ECR-049
|
||||
|
||||
Auth Approved · Spec/ADR/BD Ready · WeChat login + Java issue-by-openid + `/api/app-api` proxy · migration 000058 · 不迁咨询业务 · Closed → STOP.
|
||||
@@ -0,0 +1,5 @@
|
||||
# HANDOFF — Engineer → Reviewer · ECR-049
|
||||
|
||||
WeChat `POST /api/v1/auth/wechat` · migration 000058 · consult proxy `/api/app-api/*` · Java `issue-mini-app` · 小程序单 token。
|
||||
`go test ./internal/wechat` PASS · governance PASS · 真机未测。
|
||||
Forbidden 未破:未迁咨询业务 · 未自动 ECR-050。
|
||||
@@ -0,0 +1,3 @@
|
||||
# HANDOFF — Architect → Engineer · ECR-050
|
||||
|
||||
Auth Approved · Spec consult-miniprogram · migration 000059 · native /api/v1/psychic · 去掉 app-api 反代。
|
||||
@@ -0,0 +1,4 @@
|
||||
# HANDOFF — Engineer → Reviewer · ECR-050
|
||||
|
||||
Native `/api/v1/psychic/*` · migration 000059 + seed · 小程序 urls 切 `/api/v1` · Java `/api/app-api` 反代已删。
|
||||
integration TestConsultNativePublic PASS · 真机未测 · 现网 MySQL 未灌数。
|
||||
@@ -0,0 +1,5 @@
|
||||
# PRODUCT_SPEC — ECR-049
|
||||
|
||||
小程序 C 端登录改为微信手机号授权;Go 为身份源。
|
||||
咨询/测评/订单仍走 Java,经 Go 反代,本刀不迁业务表。
|
||||
H5 OpenLogin 过渡保留。Admin 不动。
|
||||
@@ -53,17 +53,19 @@
|
||||
- **本仓:** `ess_intake: strict` · Retro FAIL · 单 ECR Context
|
||||
- **Ops foundation:** `docs/WAVE0/` · `.ai/domain/boundary-rules.md` · `glossary.yaml` · Loop: `docs/WAVE0/LOOP_AUTHORIZATION.md`
|
||||
- ECR: main 线 ECR-006–016 Closed;Ops 扩展 ECR-013A/B · 017–040;分叉已固定为 `ECR-012-star` / `014-plan` / `015-code` / `016-insight`(见 TRACEABILITY)
|
||||
- **Next ECR / Max Migration:** **Next=`ECR-049`(禁自动开)** · **Max=`000057`**
|
||||
- **Next ECR / Max Migration:** **Next=`ECR-051`(禁自动开)** · **Max=`000059`**
|
||||
- **Write-Wave CMS:** 041–042 Closed · STOP
|
||||
- **ExploreConfig:** ECR-043…046 Closed · 同构写面 **耗尽 · STOP** · Prompt/Knowledge/Chunk STOP
|
||||
- **GrowthInsights:** ECR-047 Funnel · ECR-048 ReportTemplate **Closed** · **Loop STOP** · 禁自动 ECR-049
|
||||
- **GrowthInsights:** ECR-047 Funnel · ECR-048 ReportTemplate **Closed** · **Loop STOP**
|
||||
- **Identity:** ECR-049 微信登录 **Implemented**
|
||||
- **Consult:** ECR-050 咨询域原生 Go **Coding** · Closed 后 STOP · 禁自动 ECR-051
|
||||
- **Release:** ECR-008 Live Promote **BLOCKED**(独立门禁 · 勿与 Write-Wave 混谈)
|
||||
- EXP: (无)
|
||||
- STATE: `docs/STATE/`(含 ECR-041…048)
|
||||
- TRACEABILITY: `docs/TRACEABILITY.md` · 门禁 `scripts/repo-governance-check.py`
|
||||
- ADR: `.ai/adr/0007-ess-ai-dual-track.md`
|
||||
- Product status: `.ai/product/p1-status.md`(**P1 Complete**)· `.ai/product/p2-status.md`(**P2 Complete**)
|
||||
- Active Spec: `account-auth` · `explore-test` · `home` · `star-profile` · `life-rhythm` · `input-compliance` · `ops-system` · `profile` · `ops-banner-write` · `ops-star-config-write` · `ops-rhythm-config-write` · `ops-image-card-deck-write` · `ops-scale-definition-write` · `ops-funnel-definition-write` · `ops-report-template-write`
|
||||
- Active Spec: `account-auth` · `consult-miniprogram` · `explore-test` · `home` · `star-profile` · `life-rhythm` · `input-compliance` · `ops-system` · `profile` · `ops-banner-write` · `ops-star-config-write` · `ops-rhythm-config-write` · `ops-image-card-deck-write` · `ops-scale-definition-write` · `ops-funnel-definition-write` · `ops-report-template-write`
|
||||
|
||||
## WIP(尚未单独 ECR)
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# STATE — ECR-049
|
||||
|
||||
| Status | **Implemented · Ready Review** |
|
||||
| Spec | account-auth |
|
||||
| Migration | 000058_wechat_auth_gateway |
|
||||
| Owner | REVIEWER |
|
||||
| Next | STOP · ECR-050 禁自动开 |
|
||||
@@ -0,0 +1,7 @@
|
||||
# STATE — ECR-050
|
||||
|
||||
| Status | **Implemented · Ready Review** |
|
||||
| Spec | consult-miniprogram |
|
||||
| Migration | 000059_consult_native |
|
||||
| Owner | ENGINEER |
|
||||
| Next | STOP · ECR-051 禁自动开 |
|
||||
@@ -0,0 +1,13 @@
|
||||
# TEST_REPORT — ECR-049
|
||||
|
||||
Date: 2026-09-14
|
||||
|
||||
| Check | Result |
|
||||
|-------|--------|
|
||||
| `python scripts/repo-governance-check.py` | PASS · max 000058 · Next ECR-050 |
|
||||
| `go test ./internal/wechat` | PASS(AES 手机号解密往返) |
|
||||
| `go build ./...`(apps/api) | PASS |
|
||||
| 微信真机 `code` + 咨询反代 | **未测**(需 AppId/Secret + Java `auth.internal-issue-key` + 现网网关) |
|
||||
| 小程序微信开发者工具点选 | **未测**(本环境无该工具) |
|
||||
|
||||
未做:咨询业务迁库、支付、下线 Java。
|
||||
@@ -0,0 +1,14 @@
|
||||
# TEST_REPORT — ECR-050
|
||||
|
||||
Date: 2026-09-14
|
||||
|
||||
| Check | Result |
|
||||
|-------|--------|
|
||||
| `repo-governance-check.py` | PASS · max 000059 |
|
||||
| `go test ./internal/wechatpay` | PASS |
|
||||
| `go test ./internal/wechat` | PASS |
|
||||
| `go test ./internal/integration -run TestConsultNativePublic\|TestAuthLogout` | PASS |
|
||||
| `go build ./...` | PASS |
|
||||
| 微信开发者工具点选 | **未测** |
|
||||
|
||||
未做:现网 MySQL 灌数、现网关 Java 进程。
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
| Anchor | Value | Rule |
|
||||
|--------|-------|------|
|
||||
| **Next ECR** | `ECR-049` | **冻结:** 须重新 Candidate Review + Human 单独拍板;**禁止自动开刀** |
|
||||
| **Max Migration** | `000057` | 禁止凭记忆 |
|
||||
| **Next ECR** | `ECR-051` | **冻结:** 须重新 Candidate Review + Human 单独拍板;**禁止自动开刀** |
|
||||
| **Max Migration** | `000059` | 禁止凭记忆 |
|
||||
|
||||
- ECR identity **全局唯一**(含已 Closed);禁止同号双义。分叉只用 `ECR-NNN-suffix` / `ECR-NNNA`。
|
||||
- Migration **6 位版本号唯一**。撞号修复见 `docs/MIGRATION_RENUMBER.md`。
|
||||
@@ -74,5 +74,7 @@
|
||||
| ECR-046 | ExploreConfig · ScaleDefinition 元数据薄写 | **Closed** | Spec ops-scale-definition-write · BD-2026-046 · migration **000055** · status 仍 ECR-008 · Closed 后 STOP · 禁自动 ECR-047 |
|
||||
| ECR-047 | GrowthInsights · FunnelDefinition 薄写面 | **Closed · Authorized · Pushed · FROZEN WAIT** | Spec ops-funnel-definition-write · BD-2026-047 · migration **000056** · Human authorize · Freeze `ECR-047_FREEZE_REVIEW.md` · origin=`aa197b7` · **禁自动 ECR-048** |
|
||||
| ECR-048 | GrowthInsights · ReportTemplate 薄写面 | **Closed** | Spec ops-report-template-write · BD-2026-048 · migration **000057** · Closed 后 STOP · 禁自动 ECR-049 |
|
||||
| ECR-049 | 微信小程序登录 + 咨询过渡网关 | **Implemented** | Spec account-auth · ADR-0008 · BD-2026-049 · migration **000058** |
|
||||
| ECR-050 | 咨询域迁入 Go + 去掉 Java 反代 | **Approved · Coding** | Spec consult-miniprogram · BD-2026-050 · migration **000059** · Closed 后 STOP · 禁自动 ECR-051 |
|
||||
|
||||
> **Migration:** 合并后 `000015`–`000023` 曾撞号,已重编号至 `000050`。以 `apps/api/migrations/` 与 `docs/MIGRATION_RENUMBER.md` 为准(文档中旧号引用可能滞后)。
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# Candidate Review — ECR-049
|
||||
|
||||
> 首刀 = **微信登录 + 咨询反代(身份源切 Go)** · Human 2026-09-14 拍板
|
||||
|
||||
**Anchors:** Next=`ECR-049`(Human 单独开刀,非 Write-Wave 自动续)· Max Migration=`000057` → 编码占 `000058`
|
||||
|
||||
| # | 问题 | 结论 |
|
||||
|---|---|---|
|
||||
| 1 | 是否新 C 端行为? | 是 · 小程序微信登录打 Go;咨询请求经 Go 反代 |
|
||||
| 2 | 是否新 API / 新表? | 是 · `POST /api/v1/auth/wechat` · `users.wx_*` · 反代 `/api/app-api/*` |
|
||||
| 3 | 是否换栈? | 否 · 仍 Go + PG;Java 过渡期保留 |
|
||||
| 4 | 是否迁咨询业务? | **否** · 本刀只做身份 + 网关 |
|
||||
| 5 | H5 账密? | 过渡保留 OpenLogin,避免 H5 断服;小程序不再走账密 |
|
||||
| 6 | 是否需要 migration? | **是** · 占 **000058** |
|
||||
|
||||
Closed → STOP · 禁自动 ECR-050
|
||||
@@ -0,0 +1,21 @@
|
||||
# Write Authorization — ECR-049 only
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Date | 2026-09-14 |
|
||||
| Authorizer | Human(会话:「按这个执行」合并后台 + 仅微信登录 + 小程序统一接入) |
|
||||
| Status | **Approved · Coding** |
|
||||
| Scope | 微信小程序登录 + 咨询过渡反代 + 身份映射 |
|
||||
| Continuous Loop | **STOP** · 本刀不是 Write-Wave 续刀 |
|
||||
| After Closed | **STOP** · 禁止自动 ECR-050 |
|
||||
|
||||
## Human 拍板(2026-09-14)
|
||||
|
||||
1. 真正合库合服务:以 Go + PostgreSQL 吸收咨询身份,Java 过渡期为被调方。
|
||||
2. C 端登录只走微信手机号授权;关掉小程序魔方账密页。
|
||||
3. 小程序只接一个后台入口(单域名 / 单 token)。
|
||||
4. 本 ECR **不**迁咨询/测评/支付业务表,**不**下线 Java。
|
||||
|
||||
## Hard STOP
|
||||
|
||||
Write-Wave / Funnel / Prompt · 支付迁库 · 咨询档期迁库 · 自动 ECR-050 · ECR-008 Live Promote 解禁 · 改 Admin 登录
|
||||
@@ -0,0 +1,14 @@
|
||||
# Write Authorization — ECR-050 only
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Date | 2026-09-14 |
|
||||
| Authorizer | Human(会话:「阶段3,4都一起实现了再测试」) |
|
||||
| Status | **Approved · Coding** |
|
||||
| Scope | 咨询/测评/内容/订单/支付迁入 Go · 去掉 Java 反代 |
|
||||
| Continuous Loop | **STOP** |
|
||||
| After Closed | **STOP** · 禁止自动 ECR-051 |
|
||||
|
||||
## Hard STOP
|
||||
|
||||
Write-Wave · 改 Admin 登录 · 自动 ECR-051 · 真机关闭现网 Java 进程(须运维另做)
|
||||
Reference in New Issue
Block a user