← 返回知识库
# 微信小店 详情页管线 + 主图 最优方案(2026-08-06 实测沉淀)
> 5号 + 7号 联合整理。全部接口实测跑通,方案可直接复用。
---
## 一、主图(head_imgs)最优方案
**规则:优先全部使用 `_L` 大片(2:3 竖版)。**
- COS 图比例实测:`_L.jpg` = **2:3**(1024x1536,女装大片);`_s/_c` 场景图 = 3:4;工厂图 = 3:4;`_1x1.webp` = 1:1
- 4号 `product_sync.py` 已优化:head_imgs 选择 = **所有 `_L` 大片排前**,不足 5 张用其他图补
- 主图上传接口:`/shop/ec/basics/img/upload?upload_type=1&resp_type=1`(img_url → mmecimage)
## 二、详情页管线(7号 pipeline.py)
```
COS 图 → pick_ai_images(排序 _s2>_c2>_c1>_L) → 提取DB数据(4号)
→ make_cover_1x1(1:1主图) → HTML渲染(html_builder) → 7号截图API
→ 切分≤2500px/段 → WEBP上传COS → mmec上传 → update(desc_info+attrs)
→ listing 提交审核
```
### 修好的 bug(2026-08-06)
1. **make_cover_1x1 URL 错**:`cdn_base + key.rsplit("/",1)[-1]` 丢 `generated/` 前缀 → 404 → PIL 报错。已改为 `cdn_base + cover_key`
2. **商品审核中 update 失败**:10020049 时先 `/channels/ec/product/audit/cancel` 撤回审核 → sleep 2s → 重试 update
3. **access_token 互踢**:用 `/cgi-bin/stable_token`(force_refresh=false 共享)不互踢(4号/7号 共用)
4. **无独立审核接口**:提交审核用 `/channels/ec/product/listing`(不是 audit)
### 截图 API(7号)
```
POST 186.244.245.24:9527/screenshot {url,width:750,full_page:true,device_scale_factor:2,anchors:[...]}
GET /screenshot/{id}/status /screenshot/{id} /screenshot/{id}/anchors
X-Token 鉴权
```
## 三、微信小店 API 接口数据(全)
### Token
```
POST /cgi-bin/stable_token {grant_type,appid,secret,force_refresh:false} → access_token(7200s)
```
### 商品
| 接口 | 方法 | 参数 | 说明 |
|:--|:--|:--|:--|
| 列表 | POST `/channels/ec/product/list/get` | page_size(≤30), status(0/5/6/11), next_key | ⚠️ 必须带 /get |
| 详情 | POST `/channels/ec/product/get` | product_id, data_type(1线上/2草稿/3全部) | |
| 添加 | POST `/channels/ec/product/add` | out_product_id,title,head_imgs,desc_info,cats_v2,attrs,skus | |
| 更新 | POST `/channels/ec/product/update` | product_id,title,head_imgs,desc_info,attrs,skus | 只改草稿 |
| 提交审核 | POST `/channels/ec/product/listing` | product_id | 无独立 audit 接口 |
| 撤回审核 | POST `/channels/ec/product/audit/cancel` | product_id | 审核中更新前必调 |
| 免审改价 | POST `/channels/ec/product/auditfree` | 不支持 market_price | 在售改价 |
### 图片/类目
| 接口 | 说明 |
|:--|:--|
| `/shop/ec/basics/img/upload?upload_type=1&resp_type=1` | 上传图 → mmecimage URL |
| `/shop/ec/category/all` | 类目树 |
| `/channels/ec/product/category/classify` | 商品分类 |
### 错误码
| 码 | 含义 | 处理 |
|:--|:--|:--|
| 40066 | invalid url(路径错) | 检查是否带 /get 等 |
| 48001 | api unauthorized | appid 无接口权限 |
| 10020049 | 商品审核中 | 先 audit/cancel 再 update |
| 10020050/10020051 | 无权限/参数错 | 检查权限/参数 |
| 10020177 | 店铺无权限 | 后台开通 |
| 42001/40001 | token 失效/互踢 | stable_token 重取 |
### 商品状态
- `status`: 5上架 / 11自主下架 / 12售罄下架
- `edit_status`: 0初始 / 1编辑中 / 2审核中 / 3审核失败 / 4审核成功
### 价格(三价体系坑)
- `sale_price` 最终价(分)/ `market_price` 划线价(分)
- **add/update/auditfree 都不支持 market_price** → 用限时抢购 `limiteddiscounttask/add` 展示划线价
### 类目映射(女装)
| 子类目 | cat_id |
|:--|:--|
| 半身裙 | 6063 |
| 连衣裙 | 6088 |
| 长裤/休闲裤 | 547701 |
| 小衫/打底衫 | 6070 |
| 套头衫/针织衫 | 6089 |
## 四、短标题(AI 生成)方案
- 当前:`build_title` = 产品名+颜色+AI描述前20字(≤60字符)
- 优化:用 `ai_description` 提炼短标题,规则:
1. 主标题:`产品名 + 颜色`(如「短袖连衣裙 浅粉」)
2. 副标题 sub_title:AI 生成 1 句卖点(≤30字,从 ai_design/ai_match 提炼)
3. 用 attrs 里的推荐理由/穿搭建议补全
- 短标题作为 `title`,长描述进 `desc_info`
---
*脚本位置:7号 /root/detail-pipeline/(pipeline.py + lib/);4号 /data/xinan-fashion/scripts/product_sync.py*
*密钥:4号/7号 .env → VIDEO_SHOP_APPID/APPSECRET(Hermes 钥匙库管理)*