liujie
2026-09-17 819124be8f16794d409a67f58d5257aef37d9b64
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
52
53
54
55
56
57
58
59
60
61
62
package com.tourguide.common.huifu.biz;
 
import com.huifu.bspay.sdk.opps.core.BasePay;
import com.huifu.bspay.sdk.opps.core.config.MerConfig;
import com.tourguide.common.huifu.properties.HuiFuProperties;
 
import java.security.SecureRandom;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
 
/**
 * 斗拱请求公共能力。
 *
 * 备注:集中处理 SDK 初始化、日期和流水号生成,避免各业务类重复拼商户配置和随机串。
 */
final class DouGongRequestSupport {
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
    private static final DateTimeFormatter SEQ_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
    private static final SecureRandom RANDOM = new SecureRandom();
    private static final char[] ALPHANUMERIC = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();
 
    private DouGongRequestSupport() {}
 
    static void initBasePay(HuiFuProperties properties) throws Exception {
        // 备注:斗拱 SDK 使用全局 BasePay 配置,所有接口调用前都要用当前环境配置初始化一次。
        MerConfig merConfig = new MerConfig();
        merConfig.setProcutId(properties.getProductId());
        merConfig.setSysId(properties.getSysId());
        merConfig.setRsaPrivateKey(properties.getRsaPrivateKey());
        merConfig.setRsaPublicKey(properties.getRsaPublicKey());
        BasePay.initWithMerConfig(merConfig);
    }
 
    static String todayForHuiFu() {
        return LocalDate.now().format(DATE_FORMATTER);
    }
 
    static String generateForHuiFu() {
        return LocalDateTime.now().format(SEQ_TIME_FORMATTER) + randomNumber(6);
    }
 
    static String generateForHuiFu(String prefix) {
        return prefix + generateForHuiFu();
    }
 
    static String randomNumber(int length) {
        StringBuilder builder = new StringBuilder(length);
        for (int index = 0; index < length; index++) {
            builder.append(RANDOM.nextInt(10));
        }
        return builder.toString();
    }
 
    static String randomString(int length) {
        StringBuilder builder = new StringBuilder(length);
        for (int index = 0; index < length; index++) {
            builder.append(ALPHANUMERIC[RANDOM.nextInt(ALPHANUMERIC.length)]);
        }
        return builder.toString();
    }
}