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