1. 구매하기 버튼 적용 방법
- PAYCO 서비스와 연동하기 위해서는 첫번째 상품 페이지 또는 장바구니 목록 페이지등 고객의 상품구매를 위한 결제 버튼을 구성해야 합니다. 구매하기 버튼을 구성하려면 다음과 같은 절차로 작업을 하시면 됩니다.
- 1-1. PAYCO 구매하기 버튼 종류
- PAYCO 구매하기 버튼은 주문유형(결제유형)에 따라 버튼 타입이 존재합니다. 바로구매(CHECKOUT) 타입은 버튼 타입이 크기, 색상 별로 여러 타입이 존재하고 간편결제(EASYPAY)는 색상만 두가지로 정해져 있습니다.
PAYCO 구매하기 버튼 종류
주문유형 | 버튼타입 | 크기 | 버튼이미지 |
---|---|---|---|
바로구매 (CHECKOUT) |
A1 | 277X70 | |
A2 | 277X70 | ||
A3 | 277X70 | ||
A4 | 277X70 | ||
A5 | 277X70 | ||
A6 | 277X70 | ||
바로구매 (CHECKOUT) |
B1 | 338X84 | |
B2 | 338X84 | ||
B3 | 338X84 | ||
B4 | 338X84 | ||
B5 | 338X84 | ||
B6 | 338X84 | ||
바로구매 (CHECKOUT) |
C1 | 296X84 | |
C2 | 296X84 | ||
C3 | 296X84 | ||
C4 | 296X84 | ||
C5 | 296X84 | ||
C6 | 296X84 | ||
간편결제 (EASYPAY) |
A1 |
※ 1-2. 버튼 이미지 삽입을 위한 자바스크립트
버튼 이미지 삽입을 위한 자바 스크립트는 아래와 같습니다.
- 제공하는 자바스크립트 URL 을 추가합니다.
PC 버전 : https://static-bill.nhnent.com/payco/checkout/js/payco.js
모바일 : https://static-bill.nhnent.com/payco/checkout/js/payco_mobile.js
- 노출하고자 하는 버튼 타입 및 옵션을 파라미터로 하여 자바스크립트 함수를 호출합니다
자바스크립트 파라미터 설명
컬럼명 | 설명 | 선택가능 값 |
---|---|---|
SELLER_KEY | 가맹점 코드 | 파트너센터에서 발급받은 가맹점코드 |
ORDER_METHOD | 주문 유형 | CHECKOUT : 바로구매형 EASYPAY : 간편결제형 |
BUTTON_TYPE | 버튼 타입 선택 | A1, A2, … |
BUTTON_HANDLER | 구매하기 버튼 클릭 시 호출할 이벤트 Handler 함수 (callback) | 자바스크립트 함수명 ex) order(p1,p2) => order |
BUTTON_HANDLER_ARG | 구매하기 버튼 클릭 시 호출할 이벤트 Handler 함수 인자 (필요 시) | 파트너센터에서 발급받은 가맹점코드 |
DISPLAY_PROMOTION | 프로모션 문구 출력 여부 | Y, N (기본값 Y) |
DISPLAY_ELEMENT_ID | 버튼 노출 위치의 Element ID | 자체적으로 정의한 값 |
※ 1-3. PAYCO 구매하기 버튼 클릭 시 처리 방법 설명
- 버튼이 삽입되고 화면에서 사용자가 구매하기 버튼을 클릭하면 가맹점은 구매상품의 색상, 타입 등 필수 옵션 사항을 선택 했는지 체크합니다.
- 사용자가 옵션을 선택 했거나, 선택해야 할 옵션이 없는 상품의 경우 주문 정보 등록을 위한 처리를 진행합니다. ( PAYCO 주문 예약 API 이용 )
- 그 다음 전달 받은 값을 이용해 URL로 주문서 페이지를 띄웁니다.
1-2. 버튼 이미지 삽입을 위한 자바스크립트
<script>
Payco.Button.register({
SELLER_KEY : ‘111’, // 가맹점 코드
ORDER_METHOD : "CHECKOUT", // 주문유형 : CHECKOUT / EASYPAY
BUTTON_TYPE : "A1", // 버튼타입 선택 (A1,A2)
BUTTON_HANDLER : order, // 구매하기 버튼이벤트 Handler 함수등록
BUTTON_HANDLER_ARG : ['param1', 'param2'],// handler 함수 argument
DISPLAY_PROMOTION : "Y", // 이벤트 문구 출력 여부
DISPLAY_ELEMENT_ID : "payco_type1", // 노출될 element id
"" : ""
});
</script>
2. 주문상품 상태변경(payco_upstatus)
- 가맹점이 변경 가능한 주문상품상태는 '배송 시작 / 취소(수기환불의 경우)' / 구매확정
- 에스크로가 적용되는 결제수단(무통장입금, 계좌(결제/송금))인 경우 배송 시작, 구매 확정 상태는 정산에 영향을 미칠 수 있으므로 반드시 둘 중 하나는 호출이 필요 합니다.
- URL : /outseller/order/updateOrderProductStatus
주문 상품 상태 변경 API > INPUT
변수명 | Type | Max Length | 필수 여부 | 설명 |
---|---|---|---|---|
1 sellerKey | String | 100 | Y | 가맹점 코드 - 파트너센터에서 알려주는 값으로, 초기 연동시 Payco에서 쇼핑몰에 값을 전달합니다 |
2 orderNo | String | 100 | N | 주문번호 |
3 sellerOrderProductReferenceKey | String | 100 | Y | 외부가맹점에서 관리하는 주문상품연동키 (팝슈즈의 경우 ord_opt_no) |
4 orderProductStatus | String | N/A | Y | 변경할 주문상품상태 |
주문 상품 상태 변경 API > INPUT
{
"orderNo": "201608312002168187",
"sellerKey": "S0FSJE",
"sellerOrderProductReferenceKey": "ITEM_100001",
"orderProductStatus": "DELIVERY_READY"
}
주문 상품 상태 변경 API > OUTPUT
변수명 | Type | 설명 |
---|---|---|
code | Number | 성공여부 |
message | String | 성공/실패 message |
주문 상품 상태 변경 API > OUTPUT
{
"code": 0,
"message": "success"
}
3. 주문결제 취소 가능여부 조회(payco_cancel_check)
- 취소 처리 API를 호출하기 이전에 취소 처리를 진행할 수 있는지 확인하기 위해 사용합니다.
- cancelPossibleYn이 N인 경우 PG취소가능금액(pgCancelPossibleAmt)만큼만 "주문 및 결제 취소 처리 API"로 취소가 가능합니다.
- cancelPossibleYn 이 N인 경우
- - 결제 건 중 PG결제 취소가 불가능한 내역이 있습니다.
- - 부분 취소가 필요한 경우 “취소할 총 금액 <= PG 취소가능금액" 으로 요청해야 합니다.
- PG결제 취소 불가능한 경우
- - 핸드폰 익월 취소요청
- - 무통장 입금 취소요청
- - 부분취소 불가능한 PG결제의 부분취소 요청
- 취소 할 배송비가 있는 경우 (부분 취소의 경우만 해당)
- - 취소 배송비를 취소할 상품 List에 추가해야 합니다.
- - 추가 배송비도 함께 취소해야 하는 경우 배송비 상품의 productAmt에 추가 배송비를 합산한 금액으로 넘겨야합니다.
- - 주문예약 시 전달했던 배송비 상품의 sellerOrderProductReferenceKey, cpId, productId 가 동일해야 합니다.
- 수기 환불 시 : 적립예정이거나 적립 완료 된 포인트에 대해 수기 환불 금액만큼 포인트 취소를 요청 해야 합니다.
- METHOD : POST
- URL : /outseller/order/cancel/checkAvailability
주문 결제 취소 가능여부 조회 API > INPUT
변수명 | Type | Max Length | 필수 여부 | 설명 |
---|---|---|---|---|
1 sellerKey | String | 100 | Y | 가맹점 코드 - 파트너센터에서 알려주는 값으로, 초기 연동 시 Payco에서 쇼핑몰에 값을 전달합니다. |
2 orderNo | String | 100 | Y | 주문 번호 |
3 cancelTotalAmt | Number | Y | 취소할 총 금액 | |
4 orderProducts | Array | N/A | N | 취소할 상품 List(부분취소인 경우 사용, 입력하지 않는 경우 전체 취소) |
▷ orderProducts
변수명 | Type | Max Length | 필수 여부 | 설명 |
---|---|---|---|---|
1 sellerOrderProductReferenceKey | String | 100 | Y | 외부가맹점에서 관리하는 주문상품번호 |
2 cpId | String | 30 | Y | 상점 ID |
3 productId | String | 50 | Y | 상품 ID |
4 productAmt | Number | Y | 취소 할 주문상품 금액 |
주문 결제 취소 가능여부 조회 API > INPUT
{
"sellerKey" : "S0FSJE",
"orderNo" : "201503302000162863",
"cancelTotalAmt" : 40000,
"cancelTotalFeeAmt" : 0,
"orderProducts" : [
{
"sellerOrderProductReferenceKey" : "1171997",
"cpId" : "PARTNERTEST",
"productId" : "PROD_EASY",
"productAmt" : 40000
}
]
}
주문 결제 취소 가능여부 조회 API > OUTPUT
변수명 | Type | Max Length | 설명 |
---|---|---|---|
1 cancelPossibleYn | String | 1 | 취소가능여부 |
2 cancelImpossibleReason | String | 500 | 취소불가이유 |
3 partCancelPossibleYn | String | 1 | 부분취소가능여부 |
4 pgCancelPossibleAmt | Number | PG취소가능금액 (PG결제취소 불가인 결제수단을 제외한 취소가능금액) | |
5 cancelImpossibleReasonCode | Number | 취소불가사유코드 |
※ Default format 부분 중 result 컬럼 부분만 표시
주문 결제 취소 가능여부 조회 API > OUTPUT
{
"result": {
"cancelPossibleYn": "N",
"partCancelPossibleYn": "N",
"pgCancelPossibleAmt": 500,
"cancelImpossibleReason": "PAYCO 포인트 잔액 부족으로 주문을 취소할 수 없습니다. PAYCO 고객센터 : 1544-6891",
"cancelImpossibleReasonCode": 1303
},
"message":"success",
"code": 0
}
4. 마일리지 적립취소(payco_mileage_cancel)
- 수기 환불의 경우 취소 할 결제금액을 전달하면 결제금액에 해당하는 마일리지를 계산하여 적립전체/부분취소 처리를 합니다.
- URL : /outseller/order/cancel/partMileage
마일리지 적립 취소 > INPUT
변수명 | Type | Max Length | 필수 여부 | 설명 |
---|---|---|---|---|
1 sellerKey | String | 100 | Y | 판매자Key |
2 orderNo | String | 100 | Y | 주문번호 |
3 cancelPaymentAmount | Number | Y | 마일리지 부분 취소할 결제금액(파라미터로 전달한 결제금액에 마일리지적립율을 곱한 액수를 취소하도록 처리되어 있습니다) |
마일리지 적립 취소 > INPUT
{
"sellerKey" : "S0FSJE",
"sellerOrderReferenceKey" : "TESTORDERKEY00000003",
"cancelPaymentAmount" : "1"
}
마일리지 적립 취소 > OUTPUT
변수명 | Type | Max Length | 설명 |
---|---|---|---|
1 canceledMileageAcmAmount | Number | 취소된 마일리지 금액 | |
2 remainingMileageAcmAmount | Number | 남아있는 마일리지 금액 |
마일리지 적립 취소 > OUTPUT
{
"result":{
"canceledMileageAcmAmount":1.0,
"remainingMileageAcmAmount":23988.0
},
"message":"success",
"code":0
}
5. 가맹점별 연동키 유효성 체크(payco_key_check)
- PAYCO API를 사용하기 위해 사전에 발급해 준 가맹점 별 인증 키에 대한 사용가능 여부를 체크 합니다.
- URL : /outseller/order/code/checkUsability
가맹점 별 코드 값 사용가능 여부 > INPUT
변수명 | Type | Max Length | 필수 여부 | 설명 |
---|---|---|---|---|
1 sellerKey | String | 100 | Y | 판매자Key |
2 codes | Array | 100 | Y | 코드 값 리스트 |
codes
변수명 | Type | Max Length | 필수 여부 | 설명 |
---|---|---|---|---|
1 codeKind | String | 100 | Y | 코드종류 <값> CP_ID(상점ID) PRODUCT_ID(상품ID) |
2 codeValue | String | 50 | Y | 코드 값 |
3 upperCodeValue | String | 50 | codeKind=PRODUCT_ID 인 경우 필수 - upperCodeValue에 cpId를 넘겨준다. |
가맹점 별 코드 값 사용가능 여부 > INPUT
{
"sellerKey" : "S0FSJE",
"codes" : [
{
"codeKind" : "CP_ID",
"codeValue" : "2"
},
{
"codeKind" : "CP_ID",
"codeValue" : "PARTNERTEST"
},
{
"codeKind" : "PRODUCT_ID",
"codeValue" : "PROD_EASY",
"upperCodeValue" : "PARTNERTEST"
},
{
"codeKind" : "MILEAGE_ACCUMULATION_POLICY_SEQ",
"codeValue" : 2000000003
}
]
}
가맹점 별 코드 값 사용가능 여부 > OUTPUT
변수명 | Type | Max Length | 설명 |
---|---|---|---|
1 codeKind | String | 50 | 코드 종류 CP_ID(상점ID) PRODUCT_ID(상품ID) |
2 codeValue | String | 50 | 코드 값 |
3 upperCodeValue | String | 50 | 상위 코드값 |
4 usabilityYn | String | 1 | 등록가능여부(Y/N) |
5 useImpossibleReason | String | 1000 | 등록불가이유 |
가맹점 별 코드 값 사용가능 여부 > OUTPUT
{
"result": [
{
"codeKind": "CP_ID",
"codeValue": "2",
"usabilityYn": "N",
"useImpossibleReason": "The cpId is invalid."
},
{
"codeKind": "CP_ID",
"codeValue": "PARTNERTEST",
"usabilityYn": "Y"
},
{
"codeKind":"PRODUCT_ID",
"codeValue": "PROD_EASY",
"usabilityYn": "Y"
},
{
"codeKind":"MILEAGE_ACCUMULATION_POLICY_SEQ",
"codeValue": 2000000003,
"usabilityYn": "Y"
}
],
"message":"success",
"code": 0
}
6. 무통장 입금 완료 통보(payco_without_bankbook)
- 주문예약 API 연동 시 파라미터로 nonBankbookDepositInformUrl 전달하게 됩니다.
- Payco는 무통장입금 결제완료 시점에 nonBankbookDepositInformUrl API를 호출합니다.
- server To server 로 호출이 됩니다.
- 결제 관련 정보는 'response' 라는 이름의 parameter로 제공되며, parameter value를 UTF-8 UrlDecode하면 Json 형태의 값을 받아 볼 수 있습니다.
- 주문완료통보 API와 동일한 포맷으로 전달됩니다.
- 자세한 항목은 아래 NonBankbookDepositInformUrl 로 전달되는 정보'를 참고합니다.
- nonBankbookDepositInformUrl 결과로 성공은 'OK' 실패는 'ERROR'를 리턴합니다.
-
totalOrderAmt(총 주문금액) + totalDeliveryFeeAmt(총 배송비) + totalRemoteAreaDeliveryFeeAmt(총 도서산간비용)
= 총 결제금액 (totalPaymentAmt)
NonBankbookDepositInformUrl 로 전달되는 정보
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 sellerOrderReferenceKey | String | 100 | 외부가맹점에서 발급하는 주문 연동 Key | 예)201408212212505952 |
2 reserveOrderNo | String | 20 | 주문예약번호 | 201408211000000720 |
3 orderNo | String | 20 | 주문번호 - 빌링결제 이후 Payco에서 발급되는 Key입니다.
- reserverOrderNo 주문예약번호는 orderNo 를 발급받기 전까지의 임의의 Key라고 생각하면 됩니다. - orderNo 가 발급된 이후에는 Payco와 orderNo로 통신을 하게 됩니다. (또는 sellerOrderReferenceKey) - 주문예약 시 자동결제 완료여부를 N으로 한 경우, 결제수단이 무통장입금이 아니면 주문번호가 전달되지 않는다. (결제 완료 API의 응답 값으로 전달 됩니다.) |
201408211000000720 |
4 memberName | String | 15 | 주문자명(일부 마스킹처리) | |
5 memberEmail | String | 200 | 주문자EMAIL(일부 마스킹처리) | |
6 orderChannel | String | N/A | 주문채널 (PC/MOBILE) | PC |
7 totalOrderAmt | Number | 총주문금액 | 116500 | |
8 totalDeliveryFeeAmt | Number | 총배송비 | 2500 | |
9 totalRemoteAreaDeliveryFeeAmt | Number | 총도서산간비 | 0 | |
10 totalPaymentAmt | Number | 총결제금액 | 119000 | |
11 paymentCompletionYn | String | 1 | 결제완료여부 (Y/N) | Y |
12 deliveryPlace | Object | N/A | 배송지정보 | |
13 orderProducts | Array | N/A | 주문상품 List | |
14 paymentDetails | Array | N/A | 결제내역 List | |
15 serviceUrlParam | String | 1000 | 주문예약 API호출시 전달한 serviceUrlParam 항목 | |
16 orderCertifyKey | String | 1000 | 주문완료통보시 내려받은 인증 값 |
▷ deliveryPlace (배송지)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 recipient | String | 15 | 수령인 | 홍길동 |
2 englishReceipent | String | 50 | 수령인영문명 | LEEJINHEE |
3 address1 | String | 300 | 기본주소 | 경기도 성남시 분당구 삼평동 |
4 address2 | String | 300 | 상세주소 | 629 플레이뮤지엄 |
5 zipcode | String | 50 | 우편번호 | 463-400 |
6 deliveryMemo | String | 30 | 배송메모 | 경비실에 맡겨주세요 |
7 telephone | String | 50 | 연락처 | 010-1111-2222 |
8 individualCustomUniqNo | String | 50 | 개인통관번호 |
▷ orderProducts (주문상품List)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 orderProductNo | String | 20 | 주문상품번호 | 20140821100000022 |
2 cpId | String | 30 | 상점ID | PS_CO |
3 productId | String | 30 | 상품ID | PS_TOASTCOMC1 |
4 sellerOrderProductReferenceKey | String | 100 | 외부가맹점에서 발급한 주문상품연동Key | 19801895 |
5 orderProductStatusCode | String | 50 | 주문상품상태코드 | PAYED |
6 orderProductStatusName | String | 10 | 주문상품상태명 | 결재완료 |
paymentDetails (결제내역 List)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 paymentTradeNo | String | 20 | 결제번호 | 201409191000001142 |
2 paymentMethodCode | String | 10 | 결제수단코드 | 01 |
3 paymentMethodName | String | 15 | 결제수단명 | 신용카드 |
4 paymentAmt | Number | 결제금액 | 119000 | |
5 tradeYmdt | String | 14 | 결제일시 (yyyyMMddHHmmss) | 20140822120201 |
6 pgAdmissionNo | String | 20 | PG승인번호 | 209380 |
7 pgAdmissionYmdt | String | 14 | PG승인일시 (yyyyMMddHHmmss) | 20140822120201 |
8 easyPaymentYn | String | 1 | 간편결제여부 (Y/N) | N |
9 nonBankbookSettleInfo | Object | N/A | 무통장입금 결제정보 |
▷ nonBankbookSettleInfo (무통장입금 결제정보)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 bankName | String | 15 | 은행명 | 신한 |
2 bankCode | String | 50 | 은행코드 | 88 |
3 accountNo | String | 200 | 계좌번호 | 1901801980225 |
4 paymentExpirationYmd | String | 8 | 입금만료일 | 20141208 |
▶ Result success
OK
▶Result fail
ERROR
NonBankbookDepositInformUrl 로 전달되는 정보
{
"reserveOrderNo":"201408211000000720",
"orderNo":"201408211000000721",
"sellerOrderReferenceKey":"201408212212505952",
"orderChannel":"PC",
"totalOrderAmt":116500.0,
"totalDeliveryFeeAmt":2500.0,
"totalRemoteAreaDeliveryFeeAmt":0.0,
"totalPaymentAmt" : 119000.0,
"paymentCompletionYn" : "N",
"memberName" : "홍*동",
"memberEmail" : "ho*@nhnent.com",
"deliveryPlace":{
"recipient":"이진희",
"address1":"경기도 성남시 분당구 삼평구",
"address2":"629",
"zipcode":"123123",
"telephone":"02-0111-2222",
"deliveryMemo" : "경비실에 맡겨주세요"
},
"paymentDetails": [{
"paymentTradeNo" : "20140821100000022",
"paymentMethodName":"무통장입금",
"paymentMethodCode":"02",
"paymentAmt":109000.0,
"tradeYmdt":"20140821221250",
"pgAdmissionNo":"12980185",
"pgAdmissionYmdt":"20140821221255",
"easyPaymentYn":"N",
"nonBankbookSettleInfo":{
"accountHolderName":"(주)지누스포츠 (팝슈즈)",
"bankName":"국민",
"accountNo":"465101-01-217098",
"expirationYmd":"20140901"
}
},{
"paymentTradeNo" : "20140821100000022",
"paymentMethodName":"PAYCO포인트",
"paymentMethodCode":"98",
"paymentAmt":10000.0,
"tradeYmdt":"20140821221250",
"pgAdmissionNo":"20140821100000023",
"pgAdmissionYmdt":"20140821221255",
"easyPaymentYn":"N"
}],
"orderProducts" : [{
"productId" : "PS_TOASTCOMC1",
"cpId" : "PS_TOASTCO",
"orderProductNo" : "20140821100000022",
"sellerOrderProductReferenceKey" : "1",
"orderProductStatusCode" : "PAYED",
"orderProductStatusName" : "결제완료"
},
{
"productId" : "PS_TOASTCOMC2",
"cpId" : "PS_TOASTCO",
"orderProductNo" : "20140821100000023",
"sellerOrderProductReferenceKey" : "2",
"orderProductStatusCode" : "PAYED",
"orderProductStatusName" : "결제완료"
}]
}
7. 결제수단 및 코드조회
- 가맹점에서 사용중인 결제수단 및 은행코드, 신용카드코드를 제공한다.( 사용중인 결제수단 : 가맹점 계약사항 )
- URL : /outseller/support/search/info
결제수단 및 코드조회 API > INPUT
변수명 | Type | Max Length | 필수 여부 | 설명 |
---|---|---|---|---|
1 sellerKey | String | 100 | Y | 가맹점 코드 |
2 cpId | String | 30 | Y | 상점ID |
3 productId | String | 50 | N | 상품ID |
결제수단 및 코드조회 API > INPUT
{
"sellerKey" : "S0FSJE",
"cpId" : "PARTNERTEST"
}
결제수단 및 코드조회 API > OUTPUT
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 usePaymentMethodList | Array | N/A | 사용 결제수단정보 | |
2 wholeCardList | Array | N/A | 전체 카드사정보 | |
3 wholeBankList | Array | N/A | 전체 은행사정보 | |
4 interestFreeUrl | String | 1000 | 무이자안내URL | |
5 introduceContents | String | 1000 | 공통소개문구 |
▷ usePaymentMethodList (사용 결제수단정보)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 paymentMethodCode | String | 10 | 결제수단코드 | 98 |
2 paymentMethodName | String | 15 | 결제수단명 | PAYCO포인트 |
3 usableCardList | Array | N/A | 사용 카드사정보 | |
4 usableBankList | Array | N/A | 사용 은행사정보 |
▶ usableCardList (사용 카드사정보)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 cardCompanyCode | String | 10 | 결제수단코드 | 98 |
2 cardCompanyName | String | 15 | 결제수단명 | PAYCO포인트 |
▶ usableBankList (사용 은행사정보)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 bankCode | String | 10 | 결제수단코드 | 98 |
2 bankName | String | 15 | 결제수단명 | PAYCO포인트 |
▷ wholeCardList (전체 카드사정보)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 cardCompanyCode | String | 10 | 결제수단코드 | 98 |
2 cardCompanyName | String | 15 | 결제수단명 | PAYCO포인트 |
▷ wholeBankList (전체 은행사정보)
변수명 | Type | Max Length | 설명 | 예 |
---|---|---|---|---|
1 bankCode | String | 10 | 결제수단코드 | 98 |
2 bankName | String | 15 | 결제수단명 | PAYCO포인트 |
결제수단 및 코드조회 API > OUTPUT
{
"result":{
"usePaymentMethodList":[
{"paymentMethodCode": "98", "paymentMethodName": "PAYCO포인트"},
{"paymentMethodCode": "75", "paymentMethodName": "페이코 (자유이용쿠폰)"},
{"paymentMethodCode": "33", "paymentMethodName": "신용카드(터치)"},
{"paymentMethodCode": "02", "paymentMethodName": "무통장입금 ",
sableBankList":[
{"bankCode": "03", "bankName": "기업은행"},
{"bankCode": "04", "bankName": "국민은행"},
{"bankCode": "05", "bankName": "외환은행"},
{"bankCode": "11", "bankName": "농협"},
{"bankCode": "20", "bankName": "우리은행"},
{"bankCode": "23", "bankName": "SC제일은행"},
{"bankCode": "27", "bankName": "시티은행"},
{"bankCode": "31", "bankName": "대구은행"},
{"bankCode": "32", "bankName": "부산은행"},
{"bankCode": "34", "bankName": "광주은행"},
{"bankCode": "39", "bankName": "경남은행"},
{"bankCode": "71", "bankName": "우체국"},
{"bankCode": "88", "bankName": "신한은행"}
]},
{"paymentMethodCode": "04", "paymentMethodName": "계좌이체"},
{"paymentMethodCode": "31", "paymentMethodName": "신용카드 ",
sableCardList":[
{"cardCompanyCode": "CCBC", "cardCompanyName": "BC카드"},
{"cardCompanyCode": "CCDI", "cardCompanyName": "현대카드"},
{"cardCompanyCode": "CCHN", "cardCompanyName": "하나카드"},
{"cardCompanyCode": "CCKE", "cardCompanyName": "하나(외환)카드"},
{"cardCompanyCode": "CCKM", "cardCompanyName": "KB국민카드"},
{"cardCompanyCode": "CCLG", "cardCompanyName": "신한카드"},
{"cardCompanyCode": "CCLO", "cardCompanyName": "롯데카드"},
{"cardCompanyCode": "CCNH", "cardCompanyName": "NH농협카드"},
{"cardCompanyCode": "CCSS", "cardCompanyName": "삼성카드"}
]},
{"paymentMethodCode": "60", "paymentMethodName": "휴대폰 "}
],
"wholeCardList":[
{"cardCompanyCode": "CCBC", "cardCompanyName": "BC카드"},
{"cardCompanyCode": "CCKM", "cardCompanyName": "KB국민카드"},
{"cardCompanyCode": "CCNH", "cardCompanyName": "NH농협카드"},
{"cardCompanyCode": "CCKJ", "cardCompanyName": "광주카드"},
{"cardCompanyCode": "CCAM", "cardCompanyName": "롯데아멕스카드"},
{"cardCompanyCode": "CCLO", "cardCompanyName": "롯데카드"},
{"cardCompanyCode": "CCKD", "cardCompanyName": "산업카드"},
{"cardCompanyCode": "CCSS", "cardCompanyName": "삼성카드"},
{"cardCompanyCode": "CCSU", "cardCompanyName": "수협카드"},
{"cardCompanyCode": "CCSG", "cardCompanyName": "신세계한미"},
{"cardCompanyCode": "CCLG", "cardCompanyName": "신한카드"},
{"cardCompanyCode": "CCSH", "cardCompanyName": "신한카드"},
{"cardCompanyCode": "CCCU", "cardCompanyName": "신협카드"},
{"cardCompanyCode": "CCCT", "cardCompanyName": "씨티카드"},
{"cardCompanyCode": "CCKE", "cardCompanyName": "외환카드"},
{"cardCompanyCode": "CCPH", "cardCompanyName": "우리카드"},
{"cardCompanyCode": "CCUF", "cardCompanyName": "은련카드"},
{"cardCompanyCode": "CCSB", "cardCompanyName": "저축카드"},
{"cardCompanyCode": "CCJB", "cardCompanyName": "전북카드"},
{"cardCompanyCode": "CCCJ", "cardCompanyName": "제주카드"},
{"cardCompanyCode": "CCHN", "cardCompanyName": "하나SK카드"},
{"cardCompanyCode": "CCHM", "cardCompanyName": "한미카드"},
{"cardCompanyCode": "CJCF", "cardCompanyName": "해외JCB"},
{"cardCompanyCode": "CMCF", "cardCompanyName": "해외마스터"},
{"cardCompanyCode": "CVSF", "cardCompanyName": "해외비자"},
{"cardCompanyCode": "CCDI", "cardCompanyName": "현대카드"}
],
"wholeBankList":[
{"bankCode": "02", "bankName": "산업은행"},
{"bankCode": "03", "bankName": "기업은행"},
{"bankCode": "04", "bankName": "국민은행"},
{"bankCode": "05", "bankName": "외환은행"},
{"bankCode": "07", "bankName": "수협"},
{"bankCode": "11", "bankName": "농협"},
{"bankCode": "20", "bankName": "우리은행"},
{"bankCode": "209", "bankName": "동양종합금융증권"},
{"bankCode": "218", "bankName": "현대증권"},
{"bankCode": "23", "bankName": "SC제일은행"},
{"bankCode": "230", "bankName": "미래에셋증권"},
{"bankCode": "238", "bankName": "대우증권"},
{"bankCode": "240", "bankName": "삼성증권"},
{"bankCode": "243", "bankName": "한국투자증권"},
{"bankCode": "247", "bankName": "우리투자증권"},
{"bankCode": "26", "bankName": "신한은행"},
{"bankCode": "261", "bankName": "교보증권"},
{"bankCode": "262", "bankName": "하이투자증권"},
{"bankCode": "263", "bankName": "HMC투자증권"},
{"bankCode": "264", "bankName": "키움증권"},
{"bankCode": "265", "bankName": "이트레이드증권"},
{"bankCode": "266", "bankName": "SK증권"},
{"bankCode": "267", "bankName": "대신증권"},
{"bankCode": "268", "bankName": "솔로몬투자증권"},
{"bankCode": "269", "bankName": "한화증권"},
{"bankCode": "27", "bankName": "씨티은행"},
{"bankCode": "270", "bankName": "하나대투증권"},
{"bankCode": "278", "bankName": "신한금융투자"},
{"bankCode": "279", "bankName": "동부증권"},
{"bankCode": "280", "bankName": "유진투자증권"},
{"bankCode": "287", "bankName": "메리츠종합금융증권"},
{"bankCode": "289", "bankName": "NH투자증권"},
{"bankCode": "290", "bankName": "부국증권"},
{"bankCode": "291", "bankName": "신영증권"},
{"bankCode": "292", "bankName": "LIG투자증권"},
{"bankCode": "31", "bankName": "대구은행"},
{"bankCode": "32", "bankName": "부산은행"},
{"bankCode": "34", "bankName": "광주은행"},
{"bankCode": "35", "bankName": "제주은행"},
{"bankCode": "37", "bankName": "전북은행"},
{"bankCode": "39", "bankName": "경남은행"},
{"bankCode": "45", "bankName": "새마을금고"},
{"bankCode": "48", "bankName": "신용협동조합"},
{"bankCode": "50", "bankName": "상호신용금고"},
{"bankCode": "54", "bankName": "HSBC은행"},
{"bankCode": "55", "bankName": "도이치은행"},
{"bankCode": "71", "bankName": "우체국"},
{"bankCode": "81", "bankName": "하나은행"},
{"bankCode": "88", "bankName": "신한은행"}
],
"interestFreeUrl": "http://www.payco.com",
"introduceContents": ""
},
"message": "success",
"code": 0
}
8. inApp 적용가이드
- IOS > 쿠키저장소에 Policy를 NSHTTPCookieAcceptPolicyAlways로 설정이 필요합니다.
- Android > 쿠키 및 자바스크립트 처리를 위한 웹뷰 설정이 필요합니다.
- Android > 가맹점 앱에서 Payco 앱이 실행될 수 있도록 intent처리가 필요합니다.
- Android > 추가적용사항
- - ‘tel:’ URL scheme이 호출되는 경우 전화걸기가 실행 될 수 있도록 처리가 필요합니다.
- - ‘about:blank’ 또는 ‘about:blank;’ 호출되는 경우 브라우저가 열리지 않고 무시하도록 처리가 필요합니다.
- - inApp 주문예약시 추가설정
▷ 주문예약 > inAppYn
변수명 | Type | Max Length | 필수여부 | 설명 |
---|---|---|---|---|
inAppYn | String | 1 | Y | inApp 결제일때 Y inAppYn 이 Y일 때 appUrl이 추가되어야함 |
▷ 주문예약 > extraData > appUrl
변수명 | Type | Max Length | 필수여부 | 설명 |
---|---|---|---|---|
AppUrl | String | 4000 | N | 인앱 결제시 PAYCO(앱결제시)/ISP모바일 등 앱에서 결제를 처리한 뒤 복귀할 앱 url scheme (ex. testapp://open) |
※ 일반 신용카드 결제수단을 사용하는 경우 별도 문의 필요
inApp 적용가이드 > IOS > Sample
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSHTTPCookieStorage *cookieStorage=
[NSHTTPCookieStorage sharedHTTPCookieStorage];
[cookieStorage setCookieAcceptPolicy:
NSHTTPCookieAcceptPolicyAlways];
.....
return YES;
}
Android > 쿠키 및 자바스크립트 처리를 위한 웹뷰 설정 > Sample
getSettings().setAppCacheEnabled(true);
getSettings().setDomStorageEnabled(true);
getSettings().setJavaScriptEnabled(true);
getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
// Android LOLIPOP 이상에서만 작동하도록함
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
// https -> http 호출 허용.
webView.getSettings().setMixedContentMode
(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
// 서드파티 쿠키 허용.
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setAcceptThirdPartyCookies(webView, true);
}
setWebChromeClient(new WebChromeClient());
Android > Android >가맹점 앱에서 Payco 앱이 실행될 수 있도록 intent처리 > Sample
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
ClientType type = ClientType.getClientType(url);
if (type.equals(ClientType.BLANK) || type.equals(ClientType.JAVASCRIPT)) {
return true;
}
if (type.equals(ClientType.WEB)) {
return false;
}
// ARS 인증을 위한 전화 연결
if (url.startsWith("tel:")) {
startCallPhoneIntent(url);
return true;
}
// 앱 실행
return handleAppUrl(url);
}
9. Iframe 적용가이드
필수사항
- Iframe 적용시 최상단 포커스이동을 위해 onload="scroll(0,0)" 옵션 추가 및 height 600px로 처리
- scroll 이슈관련 script 추가
- extraData의 viewOptions > iframeYn='Y'로 예약처리 필수
Iframe 적용가이드 > sample
<iframe src="…" ……… height="600px" onload="scroll(0,0);"/>
<script type="text/javascript">
function paycoScroll(evt) {
if (evt.data == "payco_message") {
scroll(0,0);
}
if (window.addEventListener) {
window.addEventListener("message", paycoScroll, false);
} else {
window.attachEvent("onmessage", paycoScroll);
}
}
10. 유의사항
- ERROR 코드 9000은 시스템 점검시 내려주는 코드이므로 해당 코드에 대한 메시지는 사용자에게 노출처리 부탁드립니다.
- 결제수단 코드가 추가 될 수 있으니 참고부탁드립니다.
- 모바일웹의 경우 페이코 연동은 페이지 이동방식으로 작업 부탁드립니다.
- 주문예약API > 부가정보(extraData) > cancelMobileUrl에 취소버튼 클릭시 이동할 URL을 추가로 보내주세요.