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(); } }