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;
|
|
/**
|
* 进件的商户层级:只有「渠道商 → 普通商户」两级。
|
*
|
* <p>这里钉住的是一条**被实测否掉的旧做法**。平台曾经用
|
* {@code head_office_flag=0} + {@code head_huifu_id=<平台汇付号>} 把新商户建成平台自己的下级商户,
|
* 期望平台随后有权给它配微信支付与业务开通。真实通道上的对照实验推翻了它:
|
*
|
* <ul>
|
* <li>带 head 字段进件成功({@code huifu_id=6666000241506776},{@code resp_code=90000000 审核中}),
|
* 紧接着调 {@code v2.merchant.busi.config} 与 {@code v2.merchant.busi.open},
|
* 仍然 `20002 数据权限认证失败`;</li>
|
* <li>{@code head/config}(开通下级商户权限)申请单已 {@code apply_status=Y},不改变结果;</li>
|
* <li>渠道商直属的普通商户 {@code 6666000241335656}(该笔进件早于 head 改动,确定没有 head 字段)
|
* 同样返回 {@code 20002}。</li>
|
* </ul>
|
*
|
* <p>结论有两个:20002 与层级无关,取决于签名身份本身有没有那些商户的数据权限;而 head 层级
|
* 不但没有收益,还会按总部客群类型索要 F725/F726/F727 材料,白白增加进件失败面。所以进件请求里
|
* **不允许**再出现这两个字段。
|
*/
|
class HuifuOnboardingMerchantLevelTests {
|
|
private static final String CHANNEL_HUIFU_ID = "6666000220591054";
|
|
@Test
|
void anIndividualOnboardingBelongsToTheChannelOnly() {
|
Map<String, Object> 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<String, Object> 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}:子商户在渠道下取得自己的微信子商户号。
|
*
|
* <p>下发 {@code 3}(复用上级微信商户号)曾是默认值,但上级是渠道商、没有商户级微信配置,
|
* 通道会拒:「失败:复用交易信息,上级商户号为空」。2026-09-15 的真实补开在不带该字段时被受理,
|
* 线上公众号/小程序/反扫三场景各自入驻成功并返回自己的 {@code sub_mer_id}。
|
*/
|
@Test
|
void businessOpenLeavesTheUseChainsFlagOutByDefault() {
|
Map<String, Object> 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<String, Object> 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");
|
}
|
}
|