인증 결제창 연동
인증 결제창은 인증만 자동으로 처리되는 결제창입니다. 결제창으로 결제에 대한 인증이 완료된 이후 가맹점이 원하는 시점에 해당 결제의 승인을 진행할 수
있습니다.
인증 결제창은 transaction_type 에 PAYER_AUTH를 넣어서
결제창을 호출하면
됩니다.
다른 종류의 결제창에 대해 알고 싶다면 JavaScript SDK를
참조하세요.
인증 결제창을 열어 인증이 완료되면 결제 승인 API를 호출해 두가지 방법으로 결제 승인을 진행할 수 있습니다.
-
PAYMENT_PA
: 결제 승인 후 자동으로 매입 처리가 진행됩니다.
-
AUTHORIZE_PA
: 결제 승인만 진행되며, 가맹점에서 직접 매입을 하거나 수동 매입 API를 사용해 매입을 진행해야 합니다.
** 수동 매입 API는 별도의 계약 진행 후 사용할 수 있습니다.

1. SDK를 준비하세요.
결제창을 연동할 HTML 페이지에 엑심베이 JavaScript SDK 라이브러리를 추가해야 합니다.
<!-- jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<!-- SDK -->
<script type="text/javascript" src="https://api-test.eximbay.com/v1/javascriptSDK.js"></script>
라이브러리 설치가 완료되면 EXIMBAY.request_pay() 메서드를 호출해 결제창을 띄울 수 있습니다.
SDK에 대한 자세한 내용은 JavaScript SDK에서 확인할 수 있습니다.
2. 결제를 준비하세요
엑심베이는 요청된 결제의 위변조 방지를 위해 파라미터 유효성을 검증하고 있습니다. 결제창을 열 때 필요한 FGKey를 결제 준비 API로 간편하게 생성하세요.
FGKey 생성에 대한 자세한 내용은 결제 준비에서 확인할 수 있습니다.
curl --request POST 'https://api-test.eximbay.com/v1/payments/ready' \
--header 'Authorization: Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=' \
--header 'Content-Type: application/json' \
--data '{
"payment" : {
"transaction_type" : "PAYER_AUTH",
"order_id" : "20220819105102",
"currency" : "USD",
"amount" : "1",
"lang" : "EN"
},
"merchant" : {
"mid" : "1849705C64"
},
"buyer" : {
"name" : "eximbay",
"email" : "test@eximbay.com"
},
"url" : {
"return_url" : "eximbay.com",
"status_url" : "eximbay.com"
}
}'
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Authorization", "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=");
URI url = URI.create("https://api-test.eximbay.com/v1/payments/ready");
String body = "{\n" +
"\"payment\" : {\n" +
"\"transaction_type\" : \"PAYER_AUTH\",\n" +
"\"order_id\" : \"20220819105102\",\n" +
"\"currency\" : \"USD\",\n" +
"\"amount\" : \"1\",\n" +
"\"lang\" : \"EN\"\n" +
"},\n" +
"\"merchant\" : {\n" +
"\"mid\" : \"1849705C64\"\n" +
"},\n" +
"\"buyer\" : {\n" +
"\"name\" : \"eximbay\",\n" +
"\"email\" : \"test@eximbay.com\"\n" +
"},\n" +
"\"url\" : {\n" +
"\"return_url\" : \"eximbay.com\",\n" +
"\"status_url\" : \"eximbay.com\"\n" +
" }\n" +
"}";
HttpEntity<String> entity = new HttpEntity<>(body, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
System.out.println(response.getBody());
<?php
$url = 'https://api-test.eximbay.com/v1/payments/ready';
$data = '{
"payment": {
"transaction_type": "PAYER_AUTH",
"order_id": "20220819105102",
"currency": "USD",
"amount": "1",
"lang": "EN"
},
"merchant": {
"mid": "1849705C64"
},
"buyer": {
"name": "eximbay",
"email": "test@eximbay.com"
},
"url": {
"return_url": "eximbay.com",
"status_url": "eximbay.com"
}
}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo='));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
echo $response;
curl_close($ch);
?>
import requests
import json
url = "https://api-test.eximbay.com/v1/payments/ready"
headers = {
"Authorization": "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=",
"Content-Type": "application/json"
}
request = {
"payment": {
"transaction_type": "PAYER_AUTH",
"order_id": "20220819105102",
"currnecy": "USD",
"amount": "1",
"lang": "EN"
},
"merchant": {
"mid": "1849705C64",
},
"buyer": {
"name": "eximbay",
"email": "test@eximbay.com"
},
"url": {
"return_url": "eximbay.com",
"status_url": "eximbay.com"
}
}
response = requests.post(url, headers=headers, data=json.dumps(request))
print(response.text)
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://api-test.eximbay.com/v1/payments/ready',
'headers': {
'Authorization': 'Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"payment": {
"transaction_type": "PAYER_AUTH",
"order_id": "20220819105102",
"currency": "USD",
"amount": "1",
"lang": "EN"
},
"merchant": {
"mid": "1849705C64"
},
"buyer": {
"name": "eximbay",
"email": "test@eximbay.com"
},
"url": {
"return_url": "eximbay.com",
"status_url": "eximbay.com"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
string uri = "https://api-test.eximbay.com/v1/payments/ready";
string body = "{\n" +
"\"payment\" : {\n" +
"\"transaction_type\" : \"PAYER_AUTH\",\n" +
"\"order_id\" : \"20220819105102\",\n" +
"\"currency\" : \"USD\",\n" +
"\"amount\" : \"1\",\n" +
"\"lang\" : \"EN\"\n" +
"},\n" +
"\"merchant\" : {\n" +
"\"mid\" : \"1849705C64\"\n" +
"},\n" +
"\"url\" : {\n" +
"\"return_url\" : \"eximbay.com\",\n" +
"\"status_url\" : \"eximbay.com\"\n" +
" }\n" +
"}";
WebClient webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
webClient.Headers[HttpRequestHeader.Authorization] = "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=";
webClient.Encoding = UTF8Encoding.UTF8;
string responseJSON = webClient.UploadString(uri, body);
Console.Write(responseJSON);
val restTemplate = RestTemplate()
val headers = HttpHeaders()
headers.add("Content-Type", "application/json")
headers.add("Authorization", "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=")
var url = URI.create("https://api-test.eximbay.com/v1/payments/ready")
val body = "{\n" +
"\"payment\" : {\n" +
"\"transaction_type\" : \"PAYER_AUTH\",\n" +
"\"order_id\" : \"20220819105102\",\n" +
"\"currency\" : \"USD\",\n" +
"\"amount\" : \"1\",\n" +
"\"lang\" : \"EN\"\n" +
"},\n" +
"\"merchant\" : {\n" +
"\"mid\" : \"1849705C64\"\n" +
"},\n" +
"\"buyer\" : {\n" +
"\"name\" : \"eximbay\",\n" +
"\"email\" : \"test@eximbay.com\"\n" +
"},\n" +
"\"url\" : {\n" +
"\"return_url\" : \"eximbay.com\",\n" +
"\"status_url\" : \"eximbay.com\"\n" +
" }\n" +
"}"
var entity = HttpEntity<String>(body, headers)
var response = restTemplate.exchange(url, HttpMethod.POST, entity, String::class.java)
println(response.body)
응답 값으로 fgkey를 받을 수 있습니다.
{
"rescode": "0000",
"resmsg": "Success",
"fgkey": "0E9BE04BA239A519E68171F26B68604ADA0A85C8350DBF5C8C0FCCF98461DB09"
}
3. 결제창을 호출하세요
결제 준비 API로 fgkey를 생성했다면, 응답 값으로 받은 fgkey 그대로 사용해 SDK를 호출하세요.
인증 결제창을 호출하려면 transation_type에 PAYER_AUTH를 넣어야
합니다.
SDK를 사용해 결제창을 띄울 때는 반드시 앞서 호출한 결제 준비 API로 보낸 요청 파라미터와 일치하는
값을
보내야 합니다.
파라미터 값이 달라지면 fgkey가 달라지기 때문에 결제가 실패합니다.
<script type="text/javascript" src="https://api-test.eximbay.com/v1/javascriptSDK.js"></script>
엑심베이 SDK 라이브러리 설치가 완료되면 EXIMBAY 객체로 request_pay 메서드를 호출할 수 있습니다. 브라우저에 결제창이 띄워지면 결제창 연동 성공입니다.
<button type="button" onclick="payment();">결제 창 연동</button>
.
.
.
<script type="text/javascript">
function payment() {
EXIMBAY.request_pay({
"fgkey" : "0E9BE04BA239A519E68171F26B68604ADA0A85C8350DBF5C8C0FCCF98461DB09"
"payment" : {
"transaction_type" : "PAYER_AUTH",
"order_id" : "20220819105102",
"currency" : "USD",
"amount" : "1",
"lang" : "EN"
},
"merchant" : {
"mid" : "1849705C64"
},
"buyer" : {
"name" : "eximbay",
"email" : "test@eximbay.com"
},
"url" : {
"return_url" : "eximbay.com",
"status_url" : "eximbay.com"
}
});
}
</script>
결제 정보 파라미터
결제창을 띄우기 위해 필요한 상세 파라미터 정보를 확인할 수 있습니다.
fgkey string
필수payment object
transaction_type string
필수-
PAYER_AUTH
: 결제창이 호출되면 인증만 처리되며, 승인과 매입이 자동으로 처리되는 API 또는, 승인만 이루어지는 API 호출이 독립적으로 필요한 모델입니다.
* 수동 매입 API를 사용하려면 별도의 계약이 필요합니다.
order_id string
필수가맹점에서 주문 건을 구분하기 위해 발급한 유일한 값입니다. 실패한 주문에 같은 값을 사용할 수 없습니다.
currency string
필수결제에 사용한 통화 단위입니다. 자세한 내용은 통화 코드를 참고하세요.
amount string
필수총 결제 금액입니다. , 는 사용할 수 없으며, 0보다 큰 숫자만 보낼 수 있습니다.
lang string
필수결제창에서 사용할 수 있는 언어 코드입니다. 결제창 지원 언어 코드를 참고하세요.
payment_method string
결제수단 코드입니다. 결제수단 코드를 참고하세요. 결제 수단이 지정된 경우, 해당 결제 수단 페이지로 바로 이동합니다.
multi_payment_method string
* 해외 결제 연동시 사용할 수 있습니다.
merchant object
mid string
필수엑심베이에서 가맹점을 구분하기 위해 발급한 고유 가맹점 ID입니다.
shop string
상점명입니다. 가맹점명과 다를 경우 사용해주세요.
partner_code string
파트너 코드입니다.
url object
return_url string
필수
구매자가 결제 결과를 확인화면에서 결제창을 종료할 경우 이동하는 가맹점 페이지의 url 정보입니다.
returnurl은 고객 브라우저 기반으로 동작하므로, 브라우저 강제 종료 시, 호출되지 않을 수 있습니다.
status_url string
필수브라우저에서 호출되지 않으므로, 스크립트, 쿠키, 세션은 사용할 수 없습니다.
* DB작업 및 결제 프로세스 처리는 statusurl에서 해야 합니다. 고객이 결제창을 강제 종료하면 returnurl이 호출되지 않을 수 있습니다.
* 중복 호출이 가능하므로, 결제가 중복 처리되지 않게 주의가 필요합니다.
buyer object
name string
필수구매자명입니다.
phone_number string
구매자 전화번호입니다.
email string
필수구매자 이메일 주소입니다. (결제완료 메일 발송을 위해 필요합니다.)
tax object*국내결제 시 필요한 파라미터 정보입니다.
receipt_status string
현금영수증 발급 여부를 Y, N 중 선택할 수 있습니다. 실시간 계좌이체를 사용하는 경우 현금영수증 발급을 위해서 반드시 Y로 요청해야 현금영수증 발급이 가능합니다.
amount_tax_free string
전체 결제 금액 중 면세 금액입니다.
amount_taxable string
전체 결제 금액 중 과세 금액입니다.
amount_vat string
전체 결제 금액 중 부가세 금액입니다.
amount_service_fee string
전체 결제 금액 중 봉사료입니다.
Note. 1 - 네이버페이 포인트로 결제를 진행하는 경우 tax 객체 내 파라미터 모두를 필수로 보내야 합니다.
other_param object
param1 string
가맹점이 필요한 경우 사용할 수 있는 예비 파라미터입니다. 최대 길이는 255자입니다.
param2 string
가맹점이 필요한 경우 사용할 수 있는 예비 파라미터입니다. 최대 길이는 255자입니다.
product array * 배열의 길이는 최대 3자입니다.
name string
필수주문한 상품의 상품명입니다.
quantity string
필수주문한 상품의 수량입니다.
unit_price string
필수주문한 상품의 상품별 단가입니다.
link string
필수주문한 상품의 판매 링크입니다. 오픈마켓에서 발생한 주문의 경우 필수로 보내야 합니다.
surcharge array * 배열의 길이는 최대 3자입니다.
name string
추가 금액의 항목명입니다. (e.g. 쿠폰할인, 배송비)
quantity string
추가된 항목의 수량입니다. 0보다 큰 숫자를 보내야 합니다.
unit_price string
추가된 항목의 단가입니다. , 는 포함할 수 없으며, 음수로 보낼 수 있습니다. (e.g. -100.50, 9.15)
ship_to object
city string
배송지 도시 정보입니다.
country string
배송지 국가 정보입니다. ISO 3166 두 자리 국가 코드 형식입니다.
first_name string
배송받는 사람의 이름입니다.
last_name string
배송받는 사람의 성입니다.
phone_number string
배송받는 사람의 연락처입니다. 국가번호가 포함될 수 있습니다.
postal_code string
배송지 우편번호입니다.
state string
배송지 주 정보입니다. 배송지가 미국(US) 또는 캐나다(CA)인 경우 사용할 수 있습니다. 지역 코드를 참고하세요.
street1 string
배송지 상세주소입니다.
bill_to object
city string
청구지 도시 정보입니다.
country string
청구지 국가 정보입니다. ISO 3166 두 자리 국가 코드 형식입니다.
first_name string
청구 카드 명의자 이름입니다.
last_name string
청구 카드 명의자 성입니다.
phone_number string
청구 카드 명의자 연락처입니다. 국가번호가 포함될 수 있습니다.
postal_code string
청구지 우편번호입니다.
state string
청구지 주 정보입니다. 청구지가 미국(US) 또는 캐나다(CA)인 경우 사용할 수 있습니다. 지역 코드를 참고하세요.
street1 string
청구지 상세주소입니다.
settings object
display_type string
-
P
: 팝업 형태로 결제창 생성
-
R
: 가맹점 화면에서 결제창 화면으로 이동
autoclose string
-
Y,N 중 하나입니다. 보내지 않으면 N이 기본으로 보내집니다.
-
Y
: 가맹점 화면으로 이동
-
N
: 결제창의 완료 화면으로 이동(기본)
call_from_app string
-
Y
:앱(iOS, AOS) 환경에서 호출
-
N
: 웹 브라우저 환경에서 호출
-
* 앱 환경에서 결제창을 호출할 경우 웹뷰에서 외부 앱 열기의 연동 방법을 확인해주세요.
call_from_scheme string
-
* 앱 환경에서 결제창을 호출할 경우 웹뷰에서 외부 앱 열기의 연동 방법을 확인해주세요.
issuer_country string
ostype string
-
P
: PC 환경 (기본값)
-
M
: 모바일 환경
virtualaccount_expiry_datestring
4. 결제를 검증하세요
결제 검증 API를 호출해 위변조를 방지하세요. 위변조 방지를 위해 가맹점은 응답 파라미터를 그대로 결제 검증 API로 보내
엑심베이 서버에서 응답으로 보낸 fgkey와 일치하는지 확인할 수 있습니다.
자세한 내용은 SDK 응답받은 후 준비에서 확인할 수 있습니다.
엑심베이 서버에서 status_url로 응답한 파라미터는 아래와 같이 로 응답한 파라미터는 아래와 같이 쿼리스트링 형식으로 보내집니다.
currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM
statusurl을 정상적으로 수신되면 주문완료 처리 후 반드시 해당 페이지의 마지막에 rescode와 resmsg를 출력해야 합니다.
• 처리성공: rescode=0000&resmsg=Success
• 처리실패: recode=실패코드&resmsg=실패메시지
status_url은 중복 호출될 수 있습니다. 주문이 중복 처리되지 않도록 주의가 필요하며, transaction_id로 중복승인과 호출에 대해서 확인할 수 있습니다.
쿼리스트링으로 응답받은 파라미터를 빠짐없이 결제 검증 API에 그대로 넣어 요청해주세요. 결제 검증 API로 유효성 검증에 성공하면 결제가 마무리됩니다.
curl --request POST 'https://api-test.eximbay.com/v1/payments/verify \
--header 'Authorization: Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=' \
--header 'Content-Type: application/json' \
--data '{
"data" : "currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM"
}'
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Authorization", "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=");
URI url = URI.create("https://api-test.eximbay.com/v1/payments/verify");
String body = "{\n" +
"data" : "currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM"
"}";
HttpEntity<String> entity = new HttpEntity<>(body, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
System.out.println(response.getBody());
<?php
$url = 'https://api-test.eximbay.com/v1/payments/verify';
$data = '{
"data" : "currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM"
}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo='));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
echo $response;
curl_close($ch);
?>
import requests
import json
url = "https://api-test.eximbay.com/v1/payments/verify"
headers = {
"Authorization": "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=",
"Content-Type": "application/json"
}
request = {
"data" : "currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM"
}
response = requests.post(url, headers=headers, data=json.dumps(request))
print(response.text)
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://api-test.eximbay.com/v1/payments/verify',
'headers': {
'Authorization': 'Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"data" : "currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM"
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
string uri = "https://api-test.eximbay.com/v1/payments/verify";
string body = "{\n" +
"data" : "currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM"
"}";
WebClient webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
webClient.Headers[HttpRequestHeader.Authorization] = "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=";
webClient.Encoding = UTF8Encoding.UTF8;
string responseJSON = webClient.UploadString(uri, body);
Console.Write(responseJSON);
val restTemplate = RestTemplate()
val headers = HttpHeaders()
headers.add("Content-Type", "application/json")
headers.add("Authorization", "Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=")
var url = URI.create("https://api-test.eximbay.com/v1/payments/verify")
val body = "{\n" +
"data" : "currency=USD&card_number1=4111&transaction_date=20220927152250&card_number4=1111&mid=1849705C64&amount=100&access_country=KR&order_id=20220927152140&payment_method=P101&email=test@eximbay.com&ver=230&transaction_id=1849705C6420220927000016¶m3=TEST&resmsg=Success.&card_holder=TESTP&rescode=0000&auth_code=309812&fgkey=2AE38D785E05E6AF57977328908C7CD84A273B3FE6C042D537A800B0CBC783EA&transaction_type=PAYER_AUTH&pay_to=EXIMBAY.COM"
"}"
var entity = HttpEntity<String>(body, headers)
var response = restTemplate.exchange(url, HttpMethod.POST, entity, String::class.java)
println(response.body)
응답
응답코드로 0000을 받으면 결제 성공입니다.
{
"rescode": "0000",
"resmsg": "Success",
}
5. 결제 승인을 요청하세요
결제창으로 결제 인증이 완료됐다면 결제 승인 API를 호출해 결제 승인을 진행하세요.
curl --request POST 'https://api-test.eximbay.com/v1/payments/confirm' \
--header 'Authorization: Basic dGVzdF8xODQ5NzA1QzY0MkMyMTdFMEIyRDo=' \
--header 'Content-Type: application/json' \
--data '{
"transaction_type" : "PAYMENT_PA",
"mid" : "1849705C64",
"payment" : {
"order_id" : "20220902101716",
"currency" : "USD",
"amount" : "1",
"payer_auth_id" : "20220902101716",
"lang" : "EN"
}
}'
미확정
미확정
미확정
미확정
미확정
미확정
응답
응답코드로 0000을 받으면 결제 성공입니다.
{
"rescode": "0000",
"resmsg": "Success",
}