Files
eapim-admin-djb/src/main/java/com/eactive/ext/kjb/obp/KjbObpModule.java
T
2025-11-26 14:28:12 +09:00

85 lines
2.7 KiB
Java

package com.eactive.ext.kjb.obp;
import com.eactive.ext.kjb.common.KjbObpException;
import com.eactive.ext.kjb.common.KjbProperty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@Slf4j
public class KjbObpModule {
private static final String FAKE_PARTNER_CODE = "999999-99";
private static KjbObpModule _instance;
private final KjbProperty property;
private final ObpClient client;
public static synchronized KjbObpModule getInstance(KjbProperty kjbProperty) {
if (_instance == null) {
_instance = new KjbObpModule(kjbProperty);
}
return _instance;
}
private KjbObpModule(KjbProperty kjbProperty) {
if (kjbProperty == null) {
throw new IllegalArgumentException("KjbProperty cannot be null");
}
this.property = kjbProperty;
this.client = ObpClient.getInstance(kjbProperty);
}
/**
* 사업자등록번호로 partnerCode 조회
* @param bizNo 사업자등록번호 (숫자 외 문자 자동 제거)
* @return partnerCode
* @throws KjbObpException 조회 실패 시
*/
public String queryPartnerCode(String bizNo) throws KjbObpException {
bizNo = ObpUtil.onlyDigit(bizNo);
if (StringUtils.isEmpty(bizNo)) {
throw new IllegalArgumentException("BizNo is empty.");
}
if (bizNo.length() != 10) {
throw new IllegalArgumentException("BizNo must be 10 digits. (input: " + bizNo + ")");
}
// 가상모드: URL 미설정 시 가상 파트너코드 반환
if (!client.isRealMode()) {
log.info("[OBP] 가상모드 - 가상 partnerCode 반환: {}", FAKE_PARTNER_CODE);
return FAKE_PARTNER_CODE;
}
String path = String.format(property.getObpUrlOrganizationFmt(), bizNo);
log.debug("[OBP] queryPartnerCode - bizNo: {}, path: {}", bizNo, path);
ObpResponse response = client.get(path);
if (response.getStatus() != 200) {
log.warn("[OBP] queryPartnerCode failed - status: {}, body: {}", response.getStatus(), response.getBody());
throw new KjbObpException(response.getStatus(), "OBP 조회 실패: " + response.getBody());
}
ObpOrganization org = ObpOrganization.fromResponse(response);
if (org == null) {
throw new KjbObpException("OBP 응답 파싱 실패");
}
if (!org.hasPartnerCode()) {
throw new KjbObpException("partnerCode가 없습니다. bizNo: " + bizNo);
}
return org.getPartnerCode();
}
/**
* ObpClient 반환 (직접 API 호출용)
*/
public ObpClient getClient() {
return client;
}
}