package com.talentcard.server.business.payment.huifu; import static org.assertj.core.api.Assertions.assertThat; import java.util.Map; import org.junit.jupiter.api.Test; /** * 进件的商户层级:只有「渠道商 → 普通商户」两级。 * *

这里钉住的是一条**被实测否掉的旧做法**。平台曾经用 * {@code head_office_flag=0} + {@code head_huifu_id=<平台汇付号>} 把新商户建成平台自己的下级商户, * 期望平台随后有权给它配微信支付与业务开通。真实通道上的对照实验推翻了它: * *

* *

结论有两个:20002 与层级无关,取决于签名身份本身有没有那些商户的数据权限;而 head 层级 * 不但没有收益,还会按总部客群类型索要 F725/F726/F727 材料,白白增加进件失败面。所以进件请求里 * **不允许**再出现这两个字段。 */ class HuifuOnboardingMerchantLevelTests { private static final String CHANNEL_HUIFU_ID = "6666000220591054"; @Test void anIndividualOnboardingBelongsToTheChannelOnly() { Map request = HuifuIndividualOnboardingGateway.buildRequestForTest(properties(), individualCommand()); assertThat(request).containsEntry("upper_huifu_id", CHANNEL_HUIFU_ID); assertThat(request).doesNotContainKeys("head_office_flag", "head_huifu_id"); } @Test void anEnterpriseOnboardingBelongsToTheChannelOnly() { Map request = HuifuEnterpriseOnboardingGateway.buildRequestForTest(properties(), enterpriseCommand()); assertThat(request).containsEntry("upper_huifu_id", CHANNEL_HUIFU_ID); assertThat(request).doesNotContainKeys("head_office_flag", "head_huifu_id"); } /** * 默认不下发 {@code use_chains_flag}:子商户在渠道下取得自己的微信子商户号。 * *

下发 {@code 3}(复用上级微信商户号)曾是默认值,但上级是渠道商、没有商户级微信配置, * 通道会拒:「失败:复用交易信息,上级商户号为空」。2026-09-15 的真实补开在不带该字段时被受理, * 线上公众号/小程序/反扫三场景各自入驻成功并返回自己的 {@code sub_mer_id}。 */ @Test void businessOpenLeavesTheUseChainsFlagOutByDefault() { Map request = HuifuMerchantBusinessOpenGateway.buildRequestForTest( properties(), "BO-TEST-1", "6666000241335656", "成都喜望科技", "5812", false); assertThat(request).doesNotContainKey("use_chains_flag"); } @Test void aConfiguredUseChainsFlagIsSentAsIs() { HuifuPaymentProperties properties = properties(); properties.setMerchantUseChainsFlag("3"); Map request = HuifuMerchantBusinessOpenGateway.buildRequestForTest( properties, "BO-TEST-1", "6666000241335656", "成都喜望科技", "5812", false); assertThat(request).containsEntry("use_chains_flag", "3"); } private static HuifuPaymentProperties properties() { HuifuPaymentProperties properties = new HuifuPaymentProperties(); properties.setEnabled(true); properties.setSystemId("6666000226048687"); properties.setProductId("KAZX"); properties.setPrivateKey("x"); properties.setPlatformPublicKey("y"); properties.setMerchantWechatFeeRate("0.60"); properties.setMerchantOnlineBusinessType("H5311L"); properties.setMerchantOnlineMediaName("东区人才卡"); properties.setMerchantAgreementUrl("https://example.com/agreement.htm"); properties.setOnboardingUpperHuifuId(CHANNEL_HUIFU_ID); return properties; } private static HuifuIndividualOnboardingCommand individualCommand() { return new HuifuIndividualOnboardingCommand( "MO-TEST-1", "阳野", "511602199803310019", "0", "20120110", "20320110", "15708261096", "四川省广安市广安区兴安中街227号3栋1单元6楼2号", "1347747024@qq.com", "5812", "510000", "510100", "510104", "F40-ID", "F41-ID", "6217003680002760924", "510000", "511600", "01050000", "F13-CARD", "F22-STORE", "四川省广安市广安区兴安中街227号3栋1单元6楼2号", "F24-STORE-INDOOR", "F105-STORE-CASHIER"); } private static HuifuEnterpriseOnboardingCommand enterpriseCommand() { return new HuifuEnterpriseOnboardingCommand( "MO-TEST-2", "成都喜望科技有限公司", "成都喜望科技", "91510100MA6C5XXXXX", "0", "20180110", "20480110", "510000", "510100", "510104", "四川省成都市高新区天府大道1号", "张维", "510101199001010011", "0", "20120110", "20320110", "四川省成都市高新区天府大道1号", "张维", "13800000000", "zhangwei@example.com", "3", "5812", "F07-LICENSE", "F02-LEGAL", "F03-LEGAL", "0", "成都喜望科技有限公司", "6217003680002760924", "510000", "510100", "01050000", "CCB510400", "中国建设银行攀枝花东区支行营业部", "", "", "", "", "", "F08-ACCT", "", "", "", "20180110", "100.00", "F22-STORE", "F24-STORE-INDOOR", "F105-STORE-CASHIER"); } }