feat(shopro_wechat_trade): 添加订单确认收货命令 新增 confirm-orders 命令用于商城确认收货并同步微信 notify_confirm_receive,支持批量处理指定订单。 添加了以下功能选项: - 支持通过 --sn 参数指定订单号进行处理 - 支持通过 --skip-mall 参数跳过商城确认,仅处理微信同步 - 支持 dry-run 模式预览操作 - 在 README.md 中补充了相关使用说明 ```
82 行
3.5 KiB
Markdown
82 行
3.5 KiB
Markdown
# Shopro 微信交易合规插件
|
||
|
||
微信小程序购物订单 + 发货信息同步(`upload_shipping_info` / `notify_confirm_receive`)。
|
||
|
||
## 运营前置(必做)
|
||
|
||
在小程序后台(AppID 与商城配置一致)完成:
|
||
|
||
1. 签署 **订单中心授权协议**(否则 `update_order_detail_path` 报错 `10060034`)
|
||
2. 开通 **发货信息管理服务**(支付与交易 → 订单管理 / 购物订单)
|
||
3. 满足实物交易类小程序运营规范
|
||
|
||
## 安装
|
||
|
||
```bash
|
||
# 上传 addons/shopro_wechat_trade 后(推荐 SSH,不要只靠后台点启用)
|
||
php think shopro_wechat_trade:install
|
||
php think shopro_wechat_trade:verify
|
||
```
|
||
|
||
后台:**系统管理 → 商城配置 → 微信交易合规**
|
||
|
||
### 启用报 Permission denied / 过一阵又变关闭
|
||
|
||
常见两类原因:
|
||
|
||
1. **目录不可写**(截图里 `runtime/cache/... Permission denied`)
|
||
后台「启用插件」会写 `info.ini`、`application/extra/addons.php`、`public/assets/js/addons.js` 并清缓存。PHP 运行用户(宝塔多为 `www`)必须可写:
|
||
- `runtime/`(含 `cache/`、`log/`)
|
||
- `addons/shopro_wechat_trade/info.ini`
|
||
- `application/extra/addons.php`
|
||
- `public/assets/js/addons.js`
|
||
|
||
```bash
|
||
cd /www/wwwroot/xgsc.gynhc.com
|
||
chown -R www:www runtime addons application/extra public/assets/js/addons.js
|
||
chmod -R u+rwX runtime
|
||
php think shopro_wechat_trade:install
|
||
```
|
||
|
||
2. **代码部署覆盖 `info.ini`**
|
||
仓库里若 `state = 0`,每次 git/rsync 全量同步会把线上已启用状态盖回关闭。本仓库默认 `state = 1`;若你方部署脚本会覆盖 `addons/*/info.ini`,请在服务器保留 `state = 1` 或部署后执行 `php think shopro_wechat_trade:install`。
|
||
|
||
### 后台提示「文件冲突」
|
||
|
||
启用时若提示与 `application/admin/.../shopro_wechat_trade/*` 冲突,属正常:插件要把后台菜单/页面复制到主工程。仓库已含这些文件时选 **继续操作** 即可;更稳的是只用 CLI `shopro_wechat_trade:install` 修复,不必反复在插件中心开关。
|
||
|
||
## 汇付配合
|
||
|
||
若使用汇付小程序支付,需同步部署最新 `shopro_huifu`(支付通知会落库微信 `transaction_id`)。
|
||
|
||
## CLI
|
||
|
||
```bash
|
||
php think shopro_wechat_trade:init-path
|
||
php think shopro_wechat_trade:backfill
|
||
php think shopro_wechat_trade:retry-failed
|
||
|
||
# 指定订单:商城确认收货 + 微信 confirm(截图里分账 FREEZE 的单可批量处理)
|
||
php think shopro_wechat_trade:confirm-orders --sn=202608500438103091004500,202606584688620091002100
|
||
# 商城已是「已收货」、只补微信:
|
||
php think shopro_wechat_trade:confirm-orders --sn=订单号 --skip-mall
|
||
```
|
||
|
||
## 触发点
|
||
|
||
- `order_send_after` → 异步 `upload_shipping_info`
|
||
- `order_confirm_after`(全部 item 已收货)→ `notify_confirm_receive`(须已有 shipping 同步成功;`received_time` 为秒级时间戳)
|
||
|
||
微信错误 **47001 data format error** 多为确认收货 JSON 格式不符(勿用 RFC3339 字符串作为 `received_time`)。
|
||
|
||
## 小程序跳转
|
||
|
||
默认订单详情路径:`pages/order/detail?id=${商品订单号}`(微信官方示例用 `id` 传商户订单号)
|
||
|
||
### 安装报 10060035「无效的路径」
|
||
|
||
1. **先发布小程序**:微信会校验 path 是否存在于**当前线上版或提审版**代码中;未发布 `pages/order/detail` 时会报此错
|
||
2. **path 格式**:`pages/order/detail?id=${商品订单号}`(不要前导 `/`)
|
||
3. 发布后再执行:`php think shopro_wechat_trade:init-path`
|
||
4. 或在小程序后台 **支付与交易 → 订单管理** 手动填写相同 path
|