MENU navbar-image
위루트

서비스 소개

본 문서는 위루트파이낸셜에서 제공하는 API에 대하여 기술합니다.

결제통지 API

결제 발생 시, 가맹점 관리자에 등록된 Noti URL (Webhook URL)로 아래 형식의 거래 데이터를 전송합니다.

거래정보를 정상적으로 수신하려면 사이트 관리자에서 결제통지 URL을 반드시 등록해 주세요.

방화벽 설정 안내

보안 설정이 필요한 경우 아래 IP를 허용하세요.

Webhook 서버 IP: 221.168.33.162

결제통지 전송 규격

필수 여부의 X 값들의 value는 빈 값으로 전달됩니다.

필드명 필드 ID 필수여부 최대길이(byte) 비고
가맹점 ID mid O 50 결제 MID
단말기 ID tid X 50 결제 TID
거래번호 trx_id O 100 취소시 사용됩니다.
거래금액 amount O 20
주문번호 ord_num O 30
승인번호 appr_num O 10
상품명 item_name X 100 온라인 결제건에 한해 전송됩니다.
구매자명 buyer_name X 100 온라인 결제건에 한해 전송됩니다.
구매자번호 buyer_phone X 100 온라인 결제건에 한해 전송됩니다.
발급사명 issuer O 20
매입사명 acquirer O 20
발급사 코드 issuer_code O 3 각 코드번호는 금융기관 정의 탭을 참고하세요.
매입사 코드 acquirer_code O 3 각 코드번호는 금융기관 정의 탭을 참고하세요.
카드번호 card_num O 20
할부기간 installment O 2
거래시간 trx_dttm O 20
취소시간 cxl_dttm X 20
취소여부 is_cancel O 1
모듈타입 module_type O 1 0=장비, 1=수기, 2=인증, 3=간편, 4=빌링
타임스탬프 timestamp O 10 1722258514
무결성 보장 값 signature O 64 key=value형태로 생성된 데이터를 SHA256으로 단방향 암호화한 값입니다.
sha256("sign_key=value&timestamp=value&mid=value")
승인 요청시 입력했던 임시 예약필드 temp O 500

결제통지 응답 규격

결제통지를 성공적으로 받았을 시, body에 작성하셔야할 내용입니다.

상황별 응답 http code body 비고
성공시 응답 200 {}
실패시 응답 200 외 http status code {"message":"실패한 사유"} 출력 body 내용은 전산내 결제통지 전송이력에 표시됩니다.

(message 파라미터는 필수입니다.)

거래조회 API

가맹점 주문번호와 취소회차로 거래건을 조회합니다.

타임아웃 발생시 해당 API를 통해 실제 거래가 성공했는지 예외처리 구문을 만들 수 있습니다.

거래조회 전송 규격

URL: https://api.weroutefincorp.com/api/v2/transactions/{ord_num}

예시 요청:
const params = {
    'cxl_seq' : cxl_seq,
};
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': `${pay_key}`,
};
const res = $.get('https://api.weroutefincorp.com/api/v2/transactions/{ord_num}', params, headers);
use Illuminate\Support\Facades\Http;

$params = [
    'cxl_seq' => cxl_seq,
];
$headers = [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'Authorization' => $pay_key,
];
$response = Http::withHeaders($headers)->get('https://api.weroutefincorp.com/api/v2/transactions/{ord_num}', $params);
    
import requests
import json
import base64

params = {
    'cxl_seq': cxl_seq,
}
headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': pay_key
}
response = requests.get('https://api.weroutefincorp.com/api/v2/transactions/{ord_num}', json=params, headers=headers)
    
import org.springframework.web.reactive.function.client.WebClient;

Map<String, Object> params = new HashMap<>();
params.put("cxl_seq", cxl_seq);

Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("test", "결제통지로 전달받은 값");

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(jsonMap);
String base64Encoded = Base64.getEncoder().encodeToString(jsonString.getBytes());

params.put("temp", base64Encoded);

WebClient client = WebClient.builder()
    .baseUrl("https://api.weroutefincorp.com")
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .defaultHeader("Authorization", payKey)
    .build();

Mono<String> response = client.get()
    .uri("/api/v2/transactions/{ord_num}")
    .bodyValue(params)
    .retrieve()
    .onStatus(HttpStatus::isError, response -> Mono.error(new RuntimeException("API Error")))
    .bodyToMono(String.class);
    
필드명 필드 ID 필수여부 최대길이(byte) 비고
가맹점 주문번호 ord_num O 30
취소회차 cxl_seq O 1 승인거래건일 경우 0 입력
1회차 취소일경우 1 입력 (..2,3,4)

거래조회 응답 규격

결과 코드가 0000이 아닌경우 결과 코드와 결과 메세지 파라미터만 리턴됩니다.

필드명 필드 ID 필수여부 최대길이(byte) 비고
결과 코드 result_cd O 4 성공시: 0000, 이외 에러코드
결과 메세지 result_msg O 50
가맹점 ID mid O 50 MID
단말기 ID tid X 50 TID
거래금액 amount O 20
가맹점 주문번호 ord_num O 30
승인번호 appr_num O 20
상품명 item_name O 100
거래번호 trx_id O 100
발급사명 issuer O 20
매입사명 acquirer O 20
발급사 코드 issuer_code O 3 각 코드번호는 금융기관 정의 탭을 참고하세요.
매입사 코드 acquirer_code O 3 각 코드번호는 금융기관 정의 탭을 참고하세요.
카드번호 card_num O 20
할부기간 installment O 2
거래시간 trx_dttm O 20 응답 포멧: 2023-04-30 11:11:11
취소시간 cxl_dttm X 20 취소 거래건일시 리턴됩니다.
응답 포멧: 2023-04-30 11:11:11
취소회차 cxl_seq X 20 취소 거래건일시 리턴됩니다.
응답 포멧: 2023-04-30 11:11:11
원거래번호 ori_trx_id X 100 취소 거래건일시 리턴됩니다.

결제 API

결제 API Interface의 구성과 사용방법에 대한 메뉴얼을 기술합니다.

해당 API는 전산내 결제모듈 연동정보를 요구합니다.

수기결제 승인요청 규격

URL: https://api.weroutefincorp.com/api/v2/pay/hand

수기결제는 실물 카드 없이 카드 정보를 직접 입력해 결제하는 방식입니다.

카드번호와 유효기간 등의 정보를 수기로 입력하여 결제를 진행할 수 있습니다.

결제방식은 비인증구인증으로 구분되며, 방식에 따라 필요한 정보는 다음과 같습니다.

수기결제 흐름도

예시 요청:
const params = {
    'mid' : mid,
    'tid'  : '',
    'amount'  : amount,
    'ord_num' : '12345H13241234',
    'item_name' : '테스트',
    'buyer_name': '구매자명',
    'buyer_phone': '01000000000',
    'card_num' : '카드번호',
    'yymm'     : '2509',
    'installment' : '00',
    'auth_num'  : '',  //opt
    'card_pw'  : '',  //opt
    'is_send_email': 0,
    'temp' : btoa(JSON.stringify({'test':'결제통지로 전달받은 값'})),
};
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': `${pay_key}`,
};
const res = $.post('https://api.weroutefincorp.com/api/v2/pay/hand', params, headers);
use Illuminate\Support\Facades\Http;

$params = [
    'mid' => mid,
    'tid' => '',
    'amount' => amount,
    'ord_num' => '12345H13241234',
    'item_name' => '테스트',
    'buyer_name' => '구매자명',
    'buyer_phone' => '01000000000',
    'card_num' => '카드번호',
    'yymm' => '2509',
    'installment' => '00',
    'auth_num' => '',  //opt
    'card_pw' => '',  //opt
    'is_send_email' => 0,
    'temp' => base64_encode(json_encode(['test' => '결제통지로 전달받은 값'])),
];
$headers = [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'Authorization' => $pay_key,
];
$response = Http::withHeaders($headers)->post('https://api.weroutefincorp.com/api/v2/pay/hand', $params);
    
import requests
import json
import base64

params = {
    'mid': mid,
    'tid': '',
    'amount': amount,
    'ord_num': '12345H13241234',
    'item_name': '테스트',
    'buyer_name': '구매자명',
    'buyer_phone': '01000000000',
    'card_num': '카드번호',
    'yymm': '2509',
    'installment': '00',
    'auth_num': '',
    'card_pw': '',
    'is_send_email': 0,
    'temp': base64.b64encode(json.dumps({'test': '결제통지로 전달받은 값'}).encode()).decode()
}
headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': pay_key
}
response = requests.post('https://api.weroutefincorp.com/api/v2/pay/hand', json=params, headers=headers)
    
import org.springframework.web.reactive.function.client.WebClient;

Map<String, Object> params = new HashMap<>();
params.put("mid", mid);
params.put("tid", "");
params.put("amount", amount);
params.put("ord_num", "12345H13241234");
params.put("item_name", "테스트");
params.put("buyer_name", "구매자명");
params.put("buyer_phone", "01000000000");
params.put("card_num", "카드번호");
params.put("yymm", "2509");
params.put("installment", "00");
params.put("auth_num", "");
params.put("card_pw", "");
params.put("is_send_email", "0");

Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("test", "결제통지로 전달받은 값");

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(jsonMap);
String base64Encoded = Base64.getEncoder().encodeToString(jsonString.getBytes());

params.put("temp", base64Encoded);

WebClient client = WebClient.builder()
    .baseUrl("https://api.weroutefincorp.com")
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .defaultHeader("Authorization", payKey)
    .build();

Mono<String> response = client.post()
    .uri("/api/v2/pay/hand")
    .bodyValue(params)
    .retrieve()
    .onStatus(HttpStatus::isError, response -> Mono.error(new RuntimeException("API Error")))
    .bodyToMono(String.class);
    
요구 헤더명 요구 내용 비고
Accept application/json
Content-Type application/json
Authorization ${pay_key} 온라인 결제 KEY
필드명 필드 ID 필수여부 최대길이(byte) 비고
가맹점 ID mid O 50 MID
단말기 ID tid O 50 TID(미존재시 빈값입력)
승인금액 amount O 20
가맹점 주문번호 ord_num O 30
상품명 item_name O 100
구매자명 buyer_name O 50
구매자 전화번호 buyer_phone O 20 요청포멧:01000000000
구매자 이메일 buyer_email X 20
이메일 발송여부 is_send_email O 1 1=발송, 0=미발송
카드번호 card_num O 16 5921123456781234
유효기간 yymm O 4 2509
할부기간 installment O 2 응답포멧: 00,02,03~11 (00=일시불, 02=2개월 할부, 11=11개월 할부)
카드 소유자 번호 auth_num X 12 카드 소유자 생년월일 6자리(YYMMDD), 또는 사업자 번호
카드비밀번호 card_pw X 2 카드비밀번호 앞 2자리
임시 예약필드 temp X 1000

인증결제 승인요청 규격

URL: https://api.weroutefincorp.com/v2/pay/auth

인증 결제는 신용카드 결제 시, PG사로부터 인증 결과를 받은 후 해당 인증키를 이용해 결제를 요청하는 방식입니다.

결제 요청 시 PG사의 결제창이 활성화되며, 이후 카드사 전용 결제 모듈을 통해 인증이 진행됩니다.



Return URL은 결제 결과를 전달받는 페이지입니다.

단, 사용자가 결제 완료 후 결제완료 버튼을 클릭하지 않고 창을 닫으면 Return URL로 데이터가 전송되지 않습니다.

따라서 거래 데이터 처리(DB 저장 등)는 Return URL이 아닌 가맹점 관리자에 등록 가능한 Noti URL을 사용하시기 바랍니다.

Noti URL 사용 방법은 결제통지 API를 참고하세요.


인증 결제 흐름

예시 요청:
<body>
    <form method='post' accept-chartset='utf-8' action='https://api.weroutefincorp.com/v2/pay/auth'>
        <input type='hidden' name='return_url' value='https://www.example.com/result'/>
        <input type='hidden' name='user_agent' value='WP'/>
        <input type='hidden' name='mid' value='{MID}'/>
        <input type='hidden' name='tid' value='{TID}'/>
        <input type='hidden' name='ord_num' value='5486A1697465312'/>
        <input type='hidden' name='item_name' value='test'/>
        <input type='hidden' name='amount' value='100'/>
        <input type='hidden' name='buyer_name' value='test'/>
        <input type='hidden' name='buyer_phone' value='100'/>
        <input type='hidden' name='is_send_email' value='0'/>
        <input type='hidden' name='installment' value='0'/>
        <input type='hidden' name='pay_key' value='{PAY_KEY}'/>
        <input type='hidden' name='temp' value='{예약 값}'/>
    </form>
</body>
필드명 필드 ID 필수여부 최대길이(byte) 비고
돌아갈 URL return_url O 255 승인 결과를 전달 받을 URL
클라이언트 접속 환경 user_agent X 1 클라이언트 측 접속 타입(WP=PC Web, WM=Mobile Web, WA=Mobile App(Android), WI=Mobile App(IOS), default=WP)
성공시 돌아갈 URL success_url X 255 상위 PG사별 사용/미사용
실패시 돌아갈 URL fail_url X 255 상위 PG사별 사용/미사용
결제키 pay_key O 100 PG사로부터 발급받은 결제 KEY
가맹점 ID mid O 50 MID
단말기 ID tid O 50 TID(미존재시 빈값입력)
승인금액 amount O 20
주문번호 ord_num O 30
상품명 item_name O 100
구매자명 buyer_name O 50
구매자 전화번호 buyer_phone O 20 요청포멧:01000000000
구매자 이메일 buyer_email X 20
이메일 발송여부 is_send_email O 1 1=발송, 0=미발송
할부기간 installment O 2
임시 예약필드 temp X 180

간편결제 승인요청 규격

URL: https://api.weroutefincorp.com/v2/pay/simple

예시 요청:
<body>
    <form method='post' accept-chartset='utf-8' action='https://api.weroutefincorp.com/v2/pay/simple'>
        <input type='hidden' name='return_url' value='https://www.example.com/result'/>
        <input type='hidden' name='mid' value='{MID}'/>
        <input type='hidden' name='tid' value='{TID}'/>
        <input type='hidden' name='ord_num' value='5486A1697465312'/>
        <input type='hidden' name='item_name' value='test'/>
        <input type='hidden' name='amount' value='100'/>
        <input type='hidden' name='buyer_name' value='test'/>
        <input type='hidden' name='buyer_phone' value='100'/>
        <input type='hidden' name='is_send_email' value='0'/>
        <input type='hidden' name='installment' value='0'/>
        <input type='hidden' name='pay_key' value='{PAY_KEY}'/>
        <input type='hidden' name='temp' value='{예약 값}'/>
    </form>
</body>
필드명 필드 ID 필수여부 최대길이(byte) 비고
돌아갈 URL return_url O 255 승인 결과를 전달 받을 URL
성공시 돌아갈 URL success_url X 255 상위 PG사별 사용/미사용
실패시 돌아갈 URL fail_url X 255 상위 PG사별 사용/미사용
결제키 pay_key O 100 PG사로부터 발급받은 결제 KEY
사용할 간편결제 타입 route O 100 KAKAO, NAVER
가맹점 ID mid O 50 MID
단말기 ID tid O 50 TID(미존재시 빈값입력)
승인금액 amount O 20
주문번호 ord_num O 30
상품명 item_name O 100
구매자명 buyer_name O 50
구매자 전화번호 buyer_phone O 20 요청포멧:01000000000
구매자 이메일 buyer_email X 20
이메일 발송여부 is_send_email O 1 1=발송, 0=미발송
할부기간 installment O 2
임시 예약필드 temp X 180

빌링결제 승인요청 규격

URL: https://api.weroutefincorp.com/api/v2/pay/bill-key/hand

빌링 결제는 고객이 결제할 카드에 대한 정보를 입력한 후 발급된 키 값으로 자동결제하는 방법입니다.

빌키 생성 탭에서 먼저 빌키 생성이 필요합니다.

빌키결제 흐름도

예시 요청:
const params = {
    'mid'   : mid,
    'tid'   : tid,
    'ord_num'  : ord_num,
    'buyer_name'  : buyer_name,
    'buyer_phone' : buyer_phone,
    'item_name'   : item_name,
    'is_send_email': 0,
    'bill_key' : bill_key,
    'amount' : amount,
};
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': `${pay_key}`,
};
const res = $.post('/api/v2/pay/bill-key/hand', params, headers);
use Illuminate\Support\Facades\Http;

$params = [
    'mid' => mid,
    'tid' => '',
    'ord_num' => ord_num,
    'buyer_name'=> buyer_name,
    'buyer_phone'=> buyer_phone,
    'item_name'=> item_name,
    'is_send_email'=> 0,
    'bill_key'=> bill_key,
    'amount'=> amount,
];
$headers = [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'Authorization' => $pay_key,
];
$response = Http::withHeaders($headers)->post('https://api.weroutefincorp.com/api/v2/pay/bill-key/hand', $params);
import base64

params = {
    'mid'   : mid,
    'tid'   : tid,
    'ord_num'  : ord_num,
    'buyer_name'  : buyer_name,
    'buyer_phone' : buyer_phone,
    'item_name'   : item_name,
    'is_send_email': 0,
    'bill_key' : bill_key,
    'amount' : amount,
}
headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': pay_key
}
response = requests.post('https://api.weroutefincorp.com/api/v2/pay/bill-key/hand', json=params, headers=headers)
import org.springframework.web.reactive.function.client.WebClient;

Map<String, Object> params = new HashMap<>();
params.put("mid", mid);
params.put("tid", "");
params.put("ord_num", ord_num);
params.put("buyer_name", buyer_name);
params.put("buyer_phone", buyer_phone);
params.put("item_name", item_name);
params.put("is_send_email", 0);
params.put("bill_key", bill_key);
params.put("amount", amount);

Map<String, Object> jsonMap = new HashMap<>();

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(jsonMap);
String base64Encoded = Base64.getEncoder().encodeToString(jsonString.getBytes());

WebClient client = WebClient.builder()
    .baseUrl("https://api.weroutefincorp.com")
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .defaultHeader("Authorization", payKey)
    .build();

Mono<String> response = client.post()
    .uri("/api/v2/pay/bill-key/hand")
    .bodyValue(params)
    .retrieve()
    .onStatus(HttpStatus::isError, response -> Mono.error(new RuntimeException("API Error")))
    .bodyToMono(String.class);
요구 헤더명 요구 내용 비고
Accept application/json
Content-Type application/json
Authorization ${pay_key} 온라인 결제 KEY

빌링 결제 요청 규격

필드명 필드 ID 필수여부 최대길이(byte) 비고
가맹점 ID mid O 50 MID
단말기 ID tid O 50 TID(미존재시 빈값입력)
주문번호 ord_num O 30
구매자명 buyer_name O 50
구매자 전화번호 buyer_phone O 20 요청포멧:01000000000
상품명 item_name O 100
빌키 bill_key O 100 빌키 생성 API를 통해 발급받은 빌키
구매자 이메일 buyer_email X 20
이메일 발송여부 is_send_email O 1 1=발송, 0=미발송
결제금액 amount O 20

공통 승인응답 규격

필수 항목이 아닌 값은 빈 값으로 전달됩니다.

승인 실패 시에는 result_cdresult_msg만 응답됩니다.

인증결제 및 간편결제에서 return_url을 설정하지 않으면 기본 제공되는 응답 페이지에 결제 결과가 표시됩니다.

필드명 필드 ID 필수여부 최대길이(byte) 비고
결과 코드 result_cd O 4 성공시: 0000, 이외 에러코드
결과 메세지 result_msg O 50
가맹점 ID mid O 50 MID
단말기 ID tid X 50 TID
거래금액 amount O 20
가맹점 주문번호 ord_num O 30
승인번호 appr_num O 20
상품명 item_name O 100
거래번호 trx_id O 100 취소시 사용됩니다.
발급사명 issuer O 20
매입사명 acquirer O 20
발급사 코드 issuer_code O 3 각 코드번호는 금융기관 정의 탭을 참고하세요.
매입사 코드 acquirer_code O 3 각 코드번호는 금융기관 정의 탭을 참고하세요.
카드번호 card_num O 20
할부기간 installment O 2
결제방식 method O 10 응답포멧:수기
거래시간 trx_dttm O 20 응답 포멧: 2023-04-30 11:11:11

빌링 API

빌링 결제 API Interface의 구성과 사용방법에 대한 메뉴얼을 기술합니다.

해당 API는 전산 내 빌링 결제 정보에 관련된 연동정보를 요구합니다.

빌키 생성

URL: https://api.weroutefincorp.com/api/v2/pay/bill-key

빌키 생성 흐름도

예시 요청:
const params = {
    'mid'   : mid,
    'tid'   : tid,
    'ord_num'  : ord_num,
    'buyer_name'  : buyer_name,
    'buyer_phone' : buyer_phone,
    'card_num' : card_num,
    'yymm' : yymm,
    'auth_num' : auth_num,
    'card_pw'  : card_pw,
};
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': `${pay_key}`,
};
const res = $.post('/api/v2/pay/bill-key', params, headers);
use Illuminate\Support\Facades\Http;

$params = [
    'mid' => mid,
    'tid' => '',
    'ord_num' => ord_num,
    'buyer_name'=> buyer_name,
    'buyer_phone'=> buyer_phone,
    'card_num'=> card_num,
    'yymm'=> yymm,
    'auth_num'=> auth_num,
    'card_pw'=> card_pw,
];
$headers = [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'Authorization' => $pay_key,
];
$response = Http::withHeaders($headers)->post('https://api.weroutefincorp.com/api/v2/pay/bill-key', $params);
import base64

params = {
    'mid'   : mid,
    'tid'   : tid,
    'ord_num'  : ord_num,
    'buyer_name'  : buyer_name,
    'buyer_phone' : buyer_phone,
    'card_num' : card_num,
    'yymm' : yymm,
    'auth_num' : auth_num,
    'card_pw'  : card_pw,
}
headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': pay_key
}
response = requests.post('https://api.weroutefincorp.com/api/v2/pay/bill-key', json=params, headers=headers)
import org.springframework.web.reactive.function.client.WebClient;

Map<String, Object> params = new HashMap<>();
params.put("mid", mid);
params.put("tid", "");
params.put("ord_num", ord_num);
params.put("buyer_name", buyer_name);
params.put("buyer_phone", buyer_phone);
params.put("card_num", card_num);
params.put("yymm", yymm);
params.put("auth_num", auth_num);
params.put("card_pw", card_pw);

Map<String, Object> jsonMap = new HashMap<>();

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(jsonMap);
String base64Encoded = Base64.getEncoder().encodeToString(jsonString.getBytes());

WebClient client = WebClient.builder()
    .baseUrl("https://api.weroutefincorp.com")
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .defaultHeader("Authorization", payKey)
    .build();

Mono<String> response = client.post()
    .uri("/api/v2/pay/bill-key")
    .bodyValue(params)
    .retrieve()
    .onStatus(HttpStatus::isError, response -> Mono.error(new RuntimeException("API Error")))
    .bodyToMono(String.class);

빌키 생성 요청 규격

요구 헤더명 요구 내용 비고
Accept application/json
Content-Type application/json
Authorization ${pay_key} 온라인 결제 KEY
필드명 필드 ID 필수여부 최대길이(byte) 비고
가맹점 ID mid O 50 MID
단말기 ID tid O 50 TID(미존재시 빈값입력)
주문번호 ord_num O 30
구매자명 buyer_name O 50
구매자 전화번호 buyer_phone O 20 요청포멧:01000000000
카드번호 card_num O 20
유효기간 yymm O 4 2509
카드 소유자 번호 auth_num O 12 카드 소유자 생년월일 6자리(YYMMDD), 또는 사업자 번호
카드비밀번호 card_pw O 2 카드비밀번호 앞 2자리

빌키 생성 응답 규격

필드명 필드 ID 필수여부 최대길이(byte) 비고
결과 코드 result_cd O 4 성공시: 0000, 이외 에러코드
결과 메세지 result_msg O 50
빌키코드 bill_code O 50
빌키 bill_key O 50 빌링 KEY
발급사명 issuer O 50 발급사명
발급사 코드 issuer_code O 3 각 코드번호는 금융기관 정의 탭을 참고하세요.
거래번호 trx_id O 100
거래시간 trx_dttm O 20 응답 포멧: 2023-04-30 11:11:11
주문번호 ord_num O 30

빌키 삭제

URL: https://api.weroutefincorp.com/api/v2/pay/bill-key

빌키 삭제 흐름도

예시 요청:
const params = {
    'mid'   : mid,
    'ord_num' : ord_num,
    'bill_key' : bill_key,
};
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': `${pay_key}`,
};
const res = $.delete('/api/v2/pay/bill-key', params, headers);
use Illuminate\Support\Facades\Http;

$params = [
    'mid' => mid,
    'ord_num' => ord_num,
    'bill_key' => 'bill_key',
];
$headers = [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'Authorization' => $pay_key,
];
$response = Http::withHeaders($headers)->delete('https://api.weroutefincorp.com/api/v2/pay/bill-key', $params);
import base64

params = {
    'mid'   : mid,
    'ord_num'  : ord_num,
    'bill_key' : bill_key,
}
headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': pay_key
}
response = requests.delete('https://api.weroutefincorp.com/api/v2/pay/bill-key', json=params, headers=headers)
import org.springframework.web.reactive.function.client.WebClient;

Map<String, Object> params = new HashMap<>();
params.put("mid", mid);
params.put("ord_num", ord_num);

Map<String, Object> jsonMap = new HashMap<>();

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(jsonMap);
String base64Encoded = Base64.getEncoder().encodeToString(jsonString.getBytes());

WebClient client = WebClient.builder()
    .baseUrl("https://api.weroutefincorp.com")
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .defaultHeader("Authorization", payKey)
    .build();

Mono<String> response = client.delete()
    .uri("/api/v2/pay/bill-key")
    .bodyValue(params)
    .retrieve()
    .onStatus(HttpStatus::isError, response -> Mono.error(new RuntimeException("API Error")))
    .bodyToMono(String.class);

빌키 삭제 요청 규격

요구 헤더명 요구 내용 비고
Accept application/json
Content-Type application/json
Authorization ${pay_key} 온라인 결제 KEY
필드명 필드 ID 필수여부 최대길이(byte) 비고
가맹점 ID mid O 50 MID
주문번호 ord_num O 30
빌키 bill_key O 100

빌키 삭제 응답 규격

필드명 필드 ID 필수여부 최대길이(byte) 비고
결과 코드 result_cd O 4 성공시: 0000, 이외 에러코드
결과 메세지 result_msg O 50
거래시간 trx_dttm O 20 응답 포멧: 2023-04-30 11:11:11
주문번호 ord_num O 30

취소 API

취소 API Interface의 구성과 사용방법에 대한 메뉴얼을 기술합니다.

해당 API는 전산내 결제모듈 연동정보를 요구합니다.


결제 API를 통해 발생한 결제 건을 취소할 수 있습니다.

결제 취소 흐름도

취소 요청 규격

URL: https://api.weroutefincorp.com/api/v2/pay/cancel

예시 요청:
const params = {
    'mid'   : mid,
    'tid'   : tid,
    'amount'  : amount,
    'trx_id'  : trx_id,
};
const headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': `${pay_key}`,
};
const res = $.post('/api/v2/pay/cancel', params, headers);
use Illuminate\Support\Facades\Http;

$params = [
    'mid' => mid,
    'tid' => '',
    'amount' => amount,
    'trx_id' => trx_id,
];
$headers = [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'Authorization' => $pay_key,
];
$response = Http::withHeaders($headers)->post('https://api.weroutefincorp.com/api/v2/pay/cancel', $params);
import base64

params = {
    'mid': mid,
    'tid': '',
    'amount': amount,
    'trx_id': trx_id,
}
headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': pay_key
}
response = requests.post('https://api.weroutefincorp.com/api/v2/pay/cancel', json=params, headers=headers)
import org.springframework.web.reactive.function.client.WebClient;

Map<String, Object> params = new HashMap<>();
params.put("mid", mid);
params.put("tid", "");
params.put("amount", amount);
params.put("trx_id", trx_id);

Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("test", "결제통지로 전달받은 값");

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(jsonMap);
String base64Encoded = Base64.getEncoder().encodeToString(jsonString.getBytes());

params.put("temp", base64Encoded);

WebClient client = WebClient.builder()
    .baseUrl("https://api.weroutefincorp.com")
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .defaultHeader("Authorization", payKey)
    .build();

Mono<String> response = client.post()
    .uri("/api/v2/pay/cancel")
    .bodyValue(params)
    .retrieve()
    .onStatus(HttpStatus::isError, response -> Mono.error(new RuntimeException("API Error")))
    .bodyToMono(String.class);
요구 헤더명 요구 내용 비고
Accept application/json
Content-Type application/json
Authorization ${pay_key} 온라인 결제 KEY
필드명 필드 ID 필수여부 최대길이(byte) 비고
가맹점 ID mid O 50 MID
단말기 ID tid O 50 TID(미존재시 빈값입력)
취소금액 amount O 20
거래번호 trx_id O 100 결제 API에서 응답으로온 trx_id를 입력합니다.

취소 응답 규격

필드명 필드 ID 필수여부 최대길이(byte) 비고
결과 코드 result_cd O 4 성공시: 0000, 이외 에러코드
결과 메세지 result_msg O 50
가맹점 ID mid O 50 MID
단말기 ID tid X 50 TID
취소금액 amount O 20
거래번호 trx_id O 100
원거래번호 ori_trx_id O 100
거래시간 trx_dttm O 20 응답 포멧: 2023-04-30 11:11:11
취소시간 cxl_dttm O 20 응답 포멧: 2023-04-30 11:11:11
임시 예약필드 temp X 180

금융기관 정의

각 단락의 issuer_code, acquirer_code필드에 대한 정보입니다.

카드사 코드 카드사 명
01 비씨
02 국민
03 외환
04 삼성
06 신한
07 현대
08 롯데
09 한미
10 신세계
11 씨티
12 농협
13 수협
14 평화
15 우리
16 하나
17 동남
18 주택
19 조흥
20 축협
21 광주
22 전북
23 제주
24 산은
25 해외비자
26 해외마스터
27 해외다이너스
28 해외AMX
29 해외JCB
30 해외
31 SK-OKCashBag
32 우체국
33 MG새마을체크
34 중국은행체크
38 은련
39 해외DISCOVER
46 카카오
47 강원
48 토스
49 신협
50 IBK기업
51 케이뱅크
99 기타