이전파트에서 테스트 준비를 끝냈으니, 이번에는 입금이체 API테스트를 진행해보고자 합니다.
1. 수취조회 API
입금이체 요청 전 수취계좌의 입금가능 여부 및 수취인 성명을 사전에 조회합니다.
- Header의 Bearer는 테스트 준비단계에서 획득한 scope oob의 token을 기입해줍니다.
- 은행거래고유번호 :
My Page> 테스트 정보 관리 > '약정계정관리'탭의 수수료계좌 항목 中 '이용기관코드(10자리)' + "U" + **이용기관 부여번호 (9자리)
여기서 **이용기관 부여번호는 하루동안의 유일성을 보장하는 무작위 코드를 의미합니다. 오픈뱅킹과 참가은행의 데이터 송수신시 요청을 구분할수있는 코드로 이용됩니다.
-약정계좌 :
My Page> 테스트 정보 관리 >약정계정관리탭의 입금계좌정보 항목에 저장된 계좌정보를 가져와 기입합니다.
-입금은행, 표준코드
이외의 상호금융기관, 금융투자회사 코드는 해당 링크의 3.3에서 확인 가능합니다.
-요청고객 관련 정보
제가 사용하고자 하는 환경은 구매자가 구매확정을 지었을때 이용기관 계좌에서 판매자의 계좌로 이체하고자 합니다. 때문에 여기에 해당하는 경우는 없으며, 이런 경우에는 요청고객정보를 이용기관의 정보를 기입해주시면 됩니다.
상황에 따라 요청고객을 적절하게 설정해주신 후 '요청고객' 관련 정보에 기입해줍시다.
-이체용도
1.1 수취조회API 요청하기
데이터를 모두 기입했다면 이제 수취조회 API 요청을 보내봅시다.
금융 결제원 swagger의 /inquiry/receive API를 이용해 간편하게 테스트할 수 있습니다.
수취조회 API는 Header에 scope가 oob인 토큰을 필요로 합니다.
swagger의 자물쇠 버튼을 눌러 이전 파트에서 발급받았던 이용기관 토큰(oob)을 넣은 후 Authorize 버튼을 눌러주면 Header Authorization Bearer 토큰 설정이 완료 됩니다.
요청 Body에 정보를 채운 후 Execute합니다.
그러나 기대와는 다르게 다음과 같은 결과가 도출됩니다..
{
"api_tran_id": "c225183e-1296-4a58-a78c-8a70114d1d05",
"api_tran_dtm": "20220215110258699",
"rsp_code": "A0002",
"rsp_message": "참가기관 에러 [API업무처리시스템 - 시뮬레이터 응답전문 존재하지 않음]",
"bank_code_std": "003",
"bank_code_sub": "0000000",
"bank_name": "IBK기업은행",
"account_num": "12345678910875",
"account_num_masked": "",
"print_content": "구매확정",
"account_holder_name": "",
"bank_tran_id": "T123456789U110258646",
"bank_tran_date": "20220215",
"bank_code_tran": "098",
"bank_rsp_code": "818",
"bank_rsp_message": "시뮬레이터 응답전문 조회에 실패하였습니다",
"wd_bank_code_std": "097",
"wd_bank_name": "오픈은행",
"wd_account_num": "200000000001",
"tran_amt": "10000",
"cms_num": "",
"savings_bank_name": "",
"account_seq": ""
}
테스트 API의 응답정보 관리에서 테스트용으로 사용할 데이터를 추가해주지 않았기 때문입니다.
- MY PAGE > 테스트 정보 관리> 응답정보 관리 탭 선택후 API명에서 사용하고자 하는 API를 선택해 줍니다.
- '데이터추가' 버튼 클릭 후 테스트 하고자 하는 데이터를 기입 후 저장합니다.
여기서 입금기관 대표코드, 입금계좌번호, 입금계좌인자내역은 각각 수취 요청 body의 bank_code_std, account_num, print_content에 입력해줄 값 입니다.
응답정보 저장이 끝났다면, 다시 수취 요청을 보내봅시다.
{
"api_tran_id": "199f3b55-5fc3-412c-b062-9f5d474ee86b",
"api_tran_dtm": "20220215125626097",
"rsp_code": "A0000",
"rsp_message": "",
"bank_code_std": "097",
"bank_code_sub": "0000000",
"bank_name": "오픈은행",
"account_num": "0123456798123456",
"account_num_masked": "0123456798123***",
"print_content": "구매확정",
"account_holder_name": "김판매자",
"bank_tran_id": "M123456789U4BC342404",
"bank_tran_date": "20190101",
"bank_code_tran": "097",
"bank_rsp_code": "000",
"bank_rsp_message": "",
"wd_bank_code_std": "097",
"wd_bank_name": "오픈은행",
"wd_account_num": "1234567890123456",
"tran_amt": "10000",
"cms_num": "",
"savings_bank_name": "",
"account_seq": ""
}
성공적으로 응답이 돌아옵니다. 수취 조회 뿐만아니라, 다른 API(사용자 인증, 토큰 발급 제외) 테스트 또한 응답정보 저장이 되어있어야 응답 결과가 정상적으로 반환됩니다.
수취 조회 API는 입금이체 요청 전 수취계좌의 입금가능 여부 및 수취인 성명을 사전에 조회하는 API로, 응답의 acount_holder_name 으로 수취인 성명을 확인할 수 있으며, rsp_code는 A0000이외의 값, bank_rsp_code는 000 이외의 값이 들어가면 수취계좌의 입금이 불가능하며 그에 따른 메세지는 각각 rsp_message, bank_rsp_message로 전달됩니다.
2. 입금이체 API
이용기관이 사용자의 계좌로 대금을 송금합니다.
- 실 계좌번호로 요청 : /acnt_num
- 핀테크 이용번호로 요청 : /fin_num
2.1. 입금이체 : 계좌번호로 요청
- 입금 이체용 암호문구 :
테스트 환경이므로 "NONE"으로 설정하겠습니다.
- 요청 고객 핀테크 이용번호 : 요청고객의 계좌번호 및 계좌 개설 기관 코드를 알지 못하는 이용기관의 경우 요청고객의 핀테크 이용번호를 세팅해야 하며, 핀테크 번호와 계좌관련 정보를 둘다 세팅할 경우 오류가 발생합니다.
이번에도 역시 금융 결제원 swagger의 /transfer/deposit/acnt_num API를 이용하겠습니다. 입금이체 API사용전 응답정보 데이터를 추가해주시는것 잊지마세요! 자물쇠 버튼을 눌러 Bearer가 등록되어있는것을 확인한후, 요청 Body를 작성합니다.
{
"cntr_account_type": "N",
"cntr_account_num": "200000000001",
"wd_pass_phrase": "NONE",
"wd_print_content": "구매확정",
"name_check_option": "on",
"tran_dtime": "20220215133400",
"req_cnt": "1",
"req_list": [
{
"tran_no": "1",
"bank_tran_id": "M2123456789U4BC342502",
"bank_code_std": "097",
"account_num": "0123456798123456",
"account_holder_name": "김판매자",
"print_content": "구매확정",
"tran_amt": "1000",
"req_client_name": "테스트",
"req_client_bank_code": "097",
"req_client_account_num": "000000000001",
"req_client_num": "M2123456789",
"transfer_purpose": "TR"
}
]
}
요청 body
2.2. 입금이체 : 핀테크 이용번호 요청
핀테크 이용번호(fintech_use_num)는 사용자가 사용자 인증, 토큰발급을 마친경우 사용자 정보조회 API를 이용해서 확인 가능하며, 이용기관에서는 이때 확인한 핀테크 이용번호를 DB에 따로 저장하거나, 필요시에 사용자 정보조회 API를 호출하여 핀테크 이용번호를 가져와서 사용해야합니다.
{
"cntr_account_type": "N",
"cntr_account_num": "200000000001",
"wd_pass_phrase": "NONE",
"wd_print_content": "환불금액",
"name_check_option": "off",
"tran_dtime": "20220211164900",
"req_cnt": "1",
"req_list": [
{
"tran_no": "1",
"bank_tran_id": "M123456789U002111651",
"print_content": "오픈서비스캐시백",
"fintech_use_num" : "123412344588941097876418",
"tran_amt": "500",
"req_client_name": "우리회사",
"req_client_bank_code": "097",
"req_client_account_num": "012345678912345",
"req_client_num": "M123456789",
"transfer_purpose": "TR"
}
]
}
2.2. 입금이체 : 응답 결과
{
"api_tran_id": "9fe18ee5-181d-4ddc-9dda-c8359a87c4f6",
"rsp_code": "A0000",
"rsp_message": "",
"api_tran_dtm": "20220215134043034",
"wd_bank_code_std": "097",
"wd_bank_code_sub": "0970001",
"wd_bank_name": "오픈은행",
"wd_account_num_masked": "1234567890123***",
"wd_print_content": "홍길동캐시백",
"wd_account_holder_name": "김오픈",
"res_cnt": "1",
"res_list": [
{
"tran_no": "1",
"bank_tran_id": "M123456789U4BC342502",
"bank_tran_date": "20190101",
"bank_code_tran": "097",
"bank_rsp_code": "000",
"bank_rsp_message": "",
"bank_code_std": "097",
"bank_code_sub": "0000000",
"bank_name": "오픈은행",
"account_num": "0123456798123456",
"account_num_masked": "0123456798123***",
"print_content": "구매확정",
"tran_amt": "1000",
"account_holder_name": "김판매자",
"cms_num": "",
"savings_bank_name": "",
"account_seq": ""
}
]
}
응답 전문
wd_print_content, wd_account_holder_name, bank_tran_date는 의도한대로 전달되지는 않았지만, 테스트 환경이라서 이처럼 전달되는것으로 보입니다. 응답코드(rsp_code : A0000), 참가은행 응답코드(bank_rsp_code : 000) 처리성공으로 떨어졌기 때문에 테스트 성공으로 판단합니다.
3. 이체결과조회 API
입금이체 후 이체 결과를 다시 확인합니다. 이체시 비 정상적인 응답코드를 받았을 경우, 응답을 받지 못했을경우 1개월 이내 이체건에 대해 이체결과를 다시 확인할 수 있습니다.
이체결과조회 응답정보 데이터를 추가, 자물쇠 버튼을 눌러 Bearer가 등록되어있는것을 확인한후, 요청 Body를 작성합니다.
-req_cont : 한번에 최대 25건을 확인 가능하며, req_cnt와 req_list목록의 검색 항목 수가 같지 않으면 오류를 반환합니다
{
"check_type" : "2",
"tran_dtime" : "20220214103400",
"req_cnt" : "002",
"req_list" :[
{
"tran_no" : "1",
"org_bank_tran_id" : "M123456789U002111756",
"org_bank_tran_date" : "20220214",
"org_tran_amt" : "1500"
},
{
"tran_no" : "2",
"org_bank_tran_id" : "M123456789U002111755",
"org_bank_tran_date" : "20220214",
"org_tran_amt" : "500"
}
]
}
요청 body
{
"api_tran_id": "de3d654e-ffb6-4db7-ac7f-bd6e1d5fb827",
"rsp_code": "A0000",
"rsp_message": "",
"api_tran_dtm": "20220215135638640",
"res_cnt": "2",
"res_list": [
{
"tran_no": "1",
"bank_tran_id": "M123456789U002111756",
"bank_tran_date": "20220214",
"bank_code_tran": "097",
"bank_rsp_code": "000",
"bank_rsp_message": "",
"wd_bank_code_std": "097",
"wd_bank_code_sub": "0970001",
"wd_bank_name": "오픈은행",
"wd_fintech_use_num": "",
"wd_account_num_masked": "",
"wd_print_content": "출금계좌인자샘플",
"wd_account_holder_name": "",
"dps_bank_code_std": "097",
"dps_bank_code_sub": "0000000",
"dps_bank_name": "오픈은행",
"dps_fintech_use_num": "",
"dps_account_num_masked": "",
"dps_print_content": "입금계좌인자샘플",
"dps_account_holder_name": "",
"tran_amt": "1500",
"wd_savings_bank_name": "",
"dps_savings_bank_name": ""
},
{
"tran_no": "1",
"bank_tran_id": "M123456789U002111755",
"bank_tran_date": "20220214",
"bank_code_tran": "097",
"bank_rsp_code": "000",
"bank_rsp_message": "",
"wd_bank_code_std": "097",
"wd_bank_code_sub": "0970001",
"wd_bank_name": "오픈은행",
"wd_fintech_use_num": "",
"wd_account_num_masked": "",
"wd_print_content": "출금계좌인자샘플",
"wd_account_holder_name": "",
"dps_bank_code_std": "097",
"dps_bank_code_sub": "0000000",
"dps_bank_name": "오픈은행",
"dps_fintech_use_num": "",
"dps_account_num_masked": "",
"dps_print_content": "입금계좌인자샘플",
"dps_account_holder_name": "",
"tran_amt": "500",
"wd_savings_bank_name": "",
"dps_savings_bank_name": ""
}
]
}
응답전문
'API' 카테고리의 다른 글
[API] 금융결제원 Open Banking API 3. API 활용하기 (자금반환청구 API) (0) | 2022.02.15 |
---|---|
[API] 금융 결제원 Open Banking API 1.사전준비 (1) | 2022.02.14 |