1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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}),商户就归属到渠道商名下,
 * 平台随后对它的**一切**操作都会返回 {@code 20002 数据权限认证失败**——实测
 * {@code v2.merchant.busi.open}(业务开通)和 {@code v2.merchant.busi.config}(微信小程序
 * 支付配置)两个接口、带不带 {@code product_id} 都一样。结果就是进件通过了,但微信支付
 * 永远配不上,商户只能自己去汇付控台点——这正是进件功能要消灭的事情。
 *
 * <p>所以这两个字段的有无必须被钉住。
 */
class HuifuOnboardingParentMerchantTests {
 
    @Test
    void anOnboardingWithoutAParentStaysAnOrdinaryMerchant() {
        Map<String, Object> request = new java.util.LinkedHashMap<>();
 
        HuifuParentMerchant.apply(request, "");
 
        assertThat(request).doesNotContainKeys("head_office_flag", "head_huifu_id");
    }
 
    @Test
    void aBlankParentIsTreatedAsNoParent() {
        Map<String, Object> request = new java.util.LinkedHashMap<>();
 
        HuifuParentMerchant.apply(request, "   ");
 
        assertThat(request).doesNotContainKeys("head_office_flag", "head_huifu_id");
    }
 
    @Test
    void aParentTurnsTheMerchantIntoItsDirectSubMerchant() {
        Map<String, Object> request = new java.util.LinkedHashMap<>();
 
        HuifuParentMerchant.apply(request, "6666000226048687");
 
        // 0 = 下级商户;上级商户号必填,平台之后才有权为它配置微信支付与业务开通。
        assertThat(request).containsEntry("head_office_flag", "0");
        assertThat(request).containsEntry("head_huifu_id", "6666000226048687");
    }
}