인증 결제창 연동

인증 결제창은 인증만 자동으로 처리되는 결제창입니다. 결제창으로 결제에 대한 인증이 완료된 이후 가맹점이 원하는 시점에 해당 결제의 승인을 진행할 수 있습니다.
인증 결제창은 transaction_typePAYER_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_typePAYER_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

필수
FGKey입니다. 결제 준비 API에서 받은 fgkey를 그대로 보내야 합니다. 자세한 내용은 결제 준비를 참고하세요.

payment object

transaction_type string

필수
연동하려는 결제창 타입 구분을 위해 필요합니다. 자세한 내용은 준비하기를 참고하세요.
  1. PAYER_AUTH

    : 결제창이 호출되면 인증만 처리되며, 승인과 매입이 자동으로 처리되는 API 또는, 승인만 이루어지는 API 호출이 독립적으로 필요한 모델입니다.

* 수동 매입 API를 사용하려면 별도의 계약이 필요합니다.

order_id string

필수

가맹점에서 주문 건을 구분하기 위해 발급한 유일한 값입니다. 실패한 주문에 같은 값을 사용할 수 없습니다.

currency string

필수

결제에 사용한 통화 단위입니다. 자세한 내용은 통화 코드를 참고하세요.

amount string

필수

총 결제 금액입니다. , 는 사용할 수 없으며, 0보다 큰 숫자만 보낼 수 있습니다.

lang string

필수

결제창에서 사용할 수 있는 언어 코드입니다. 결제창 지원 언어 코드를 참고하세요.

payment_method string

결제수단 코드입니다. 결제수단 코드를 참고하세요. 결제 수단이 지정된 경우, 해당 결제 수단 페이지로 바로 이동합니다.

multi_payment_method string

여러 결제 수단을 지정할 때 보내야 합니다. 구분자 - 를 사용해 지정할 수 있습니다. (e.g. P000-P185-P186)

* 해외 결제 연동시 사용할 수 있습니다.

merchant object

mid string

필수

엑심베이에서 가맹점을 구분하기 위해 발급한 고유 가맹점 ID입니다.

shop string

상점명입니다. 가맹점명과 다를 경우 사용해주세요.

partner_code string

파트너 코드입니다.

url object

return_url string

필수

구매자가 결제 결과를 확인화면에서 결제창을 종료할 경우 이동하는 가맹점 페이지의 url 정보입니다.
returnurl은 고객 브라우저 기반으로 동작하므로, 브라우저 강제 종료 시, 호출되지 않을 수 있습니다.

status_url string

필수
결제 처리가 끝나면 Backend로 호출되는 가맹점 페이지로 returnurl와 파라미터가 동일합니다.
브라우저에서 호출되지 않으므로, 스크립트, 쿠키, 세션은 사용할 수 없습니다.

* 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중 하나입니다. 보내지 않으면 P가 기본으로 보내집니다.
  1. P

    : 팝업 형태로 결제창 생성

  2. R

    : 가맹점 화면에서 결제창 화면으로 이동

autoclose string

결제가 완료됐을 때 브라우저에서 결제창이 닫히는 방식을 정할 수 있습니다.
  1. Y,N 중 하나입니다. 보내지 않으면 N이 기본으로 보내집니다.

  2. Y

    : 가맹점 화면으로 이동

  3. N

    : 결제창의 완료 화면으로 이동(기본)

call_from_app string

클라이언트 환경 구분을 위해 사용됩니다. Y , N 중 하나입니다. 보내지 않으면 N이 기본으로 보내집니다.
  1. Y

    :앱(iOS, AOS) 환경에서 호출

  2. N

    : 웹 브라우저 환경에서 호출

  3. * 앱 환경에서 결제창을 호출할 경우 웹뷰에서 외부 앱 열기의 연동 방법을 확인해주세요.

call_from_scheme string

외부 앱에서 가맹점 앱으로 돌아오기 위해 필요한 앱 스킴(App URL Scheme)입니다.
  1. * 앱 환경에서 결제창을 호출할 경우 웹뷰에서 외부 앱 열기의 연동 방법을 확인해주세요.

issuer_country string

해외 결제를 사용하는 가맹점에서 국내 결제를 사용하고 싶을 때 필요한 파라미터입니다. 파라미터에 KR을 추가하면 국내 결제창이 열립니다.

ostype string

결제창이 열리는 클라이언트 환경 정보입니다. P , M 중 하나이며 P가 기본 값입니다.
  1. P

    : PC 환경 (기본값)

  2. M

    : 모바일 환경

virtualaccount_expiry_datestring

국내 가상계좌 결제의 입금만료기한을 설정할 수 있습니다. YYYYMMDDHH24로 원하는 입금만료기한을 설정할 수 있습니다.

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&param3=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&param3=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&param3=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&param3=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&param3=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&param3=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&param3=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&param3=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",
}