refs
用户 yeg <1347747024@qq.com>
星期三, 九月 16, 2026 12:38 +0800
提交者 yeg <1347747024@qq.com>
星期三, 九月 16, 2026 12:38 +0800
提交9553a9022e9659e2293d0b8df0b78413775cf52b
目录 96fee879bb7e2d9c532c6ecc60133fa00aba3102 目录 | zip | gz
parent 3a024caa497b8923635c02e0c8c0df07f2918f81 查看 | 对比
feat(merchant): 个人主体进件打通到微信收款能力,并修掉开通链路六处缺陷

个人(小微)主体原先在「进件成功 → 微信收款」这条路上必然卡死:门店照片一个字段都没收
(微信业务开通与微信实名都要它),商户在进件表单里选的行业也被静默丢弃。本次补齐并打通,
真实个人商户(huifu_id 6666000241804122)已走完全程:六个阶段全确认、授权二维码可扫。

个人主体补齐:
- 门店照片(F22/F24)贯链。新增 store_header_url/store_indoor_url(V146 + 初始化器)、
商户端两个上传项、进件侧 store_header_pic、业务开通 extended_material_list 的 F22/F24、
小微实名的 store_header_copy/store_indoor_copy。个人主体提交时校验,缺图不发业务开通请求。
- 行业驱动 MCC。个人主体在进件表单选的行业类型原本落在 company_type 上却没人读,上报的
mcc 只认商家档案,档案没配好就一律落 7399(其它)。改为优先用进件时选的行业。
- 小微实名的 8 个门店/证件字段(字段名是 *_copy,与业务开通的 *_pic 不是一套),
缺项在任何通道调用之前一次说清——实名被驳回要换业务申请编号重来。
- 存量个人进件缺门店照片时,重新提交可以只把这两项补上:不新建进件,原商户号与银行卡关系不动。
- 个体工商户与小微企业:settle_config 补 fixed_ratio/constant_amt=0.00(D1 下条件必填);
证件长期有效时按有效期类型**显式**不发截止日期;费率规则号按主体类型选(企业 756 /
个体工商户 761 / 小微 775),application.yml 各配一个可覆盖的键。
- 两端页面:商户端新增「店铺照片」「店内环境照」上传项(按三种小微经营类型说明该传什么图);
后台个人详情补展示经营行业/经营地区/证件地址/结算凭证/身份证与门店照片。

开通链路六处缺陷(前五处只在个人主体上暴露,企业路径恰好全躲开了):
- 顺序反了。微信小程序配置排在业务开通之前,而微信子商户号是业务开通创建的,配置必然被
「根据渠道号或微信子商户号未查到入驻记录」驳回;而配置一失败就 return,业务开通永远轮不到,
微信支付、人才端绑定、实名全部连坐。改为两步顺序执行且互不阻断。配置的闸门取**通道证据**
(qry_wx_conf_list 里真出现线上场景)而不是本地受理状态——微信入驻是异步的,90000000
(审核中)不代表子商户号已经建好。
- 小微缺 mcc。mcc 原本写在 fee_rule_id 的 else 分支里,平台配了规则号 756 之后小微的 mcc
永远发不出去(通道回「wx_conf_list格式错误」)。官方写明「个体工商户、小微商户必填」,
且请求示例里 mcc 与 fee_rule_id 是同时出现的。
- wx_real_name_info 双重编码。字段目录里它的类型列是 Object(wx_conf_list[] 本身才是 String
的 jsonArray 字符串),代码却 JSON.toJSONString 又编了一层,通道按对象取字段取不到。
- 费率规则号按主体类型分。官方《微信费率规则ID》对照表是「支付场景 × 业务开通类型 × 主体类型」
三维定位,拿企业的 756 发给小微会被回「微信费率规则号填写不正确」。
- fee_min_amt 缺失被判成未生效。该字段可选、文档写明「大于 0」,不设最低收费时我们本就不下发、
通道也不返回,而判定要求它必须出现且为 0,于是微信业务明明开好了,阶段永远确认不了。
- 授权二维码写死了 PNG。通道回的是 JPEG(magic /9j/),被测成非法返回空串,两端都空白,
而本人扫码授权是完成实名的唯一途径。改为按 magic 判定真实格式。

另外把「processing 永远不会被推进到 approved」一并收口——缺这个收口时,收不到异步回调的部署里
整单永远完不成、能力快照也刷不到,商户明明开通了却推不到收款就绪;并给业务开通日志补记
wx_conf_list(不含图片标识,那是高敏感数据),这一轮定位靠手工反推报文,多烧了两次真实请求。

测试:新增 3 个测试类与 17 项用例,覆盖门店照/行业 MCC/小微实名字段/开通顺序与闸门/驳回换号
重试/失败原因保留/二维码格式/MCC 与费率号取值;一个被取代的用例(断言"一次刷新里开通与配置
都提交",在闸门改成通道证据后不可能成立)删除,并在新用例的 javadoc 里写明承接关系。
全量 243 项,仅 docs/agents/testing.md 所列 3 项基线失败,无新增。

文档:新增 .scratch/merchant-individual-onboarding/audit.md,记完整核查与逐轮排障(六处缺陷
各自的通道回执与证据链,以及待讨论项);CONTEXT.md 的「商户进件」定义补上个人主体与门店照片;
旧规格里「不扩展个人/小微进件」的口径作废并指向新文档。

未验证:两端页面级验收(本仓无 CLI 构建链,产物走 HBuilderX);门店照片与 store_address_code
在真实通道上的接受度仍待下一个商户复核。
4个文件已添加
22个文件已修改
1737 ■■■■■ 已修改文件
.scratch/merchant-individual-onboarding/audit.md 510 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
.scratch/merchant-wechat-onboarding/spec.md 4 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
CONTEXT.md 5 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
rencaika_merchant/pages/merchant-onboarding/merchant-onboarding.uvue 16 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-admin/src/views/MerchantOnboardingDetailView.vue 12 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingProgressService.java 54 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingRequest.java 6 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingSchemaInitializer.java 16 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantRealnameService.java 65 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantSettlementService.java 215 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuEnterpriseOnboardingGateway.java 8 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuIndividualOnboardingCommand.java 5 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuIndividualOnboardingGateway.java 10 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuMerchantBusinessOpenGateway.java 83 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuMerchantRealnameCommand.java 34 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuMerchantRealnameGateway.java 17 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuPaymentProperties.java 15 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/resources/application.yml 4 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/resources/db/migration/V146__merchant_onboarding_store_photos.sql 18 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantExistingOnboardingTests.java 238 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantOnboardingIndustryMccTests.java 45 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantRealnameServiceTests.java 121 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/huifu/HuifuBusinessOpenRequiredFieldsTests.java 88 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/huifu/HuifuIndividualOnboardingRequiredFieldsTests.java 102 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/huifu/HuifuMerchantRealnameTests.java 44 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/huifu/HuifuOnboardingMerchantLevelTests.java 2 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史