LG U+ 전자결제서비스 XPay 결제연동매뉴얼 Ver. 1.1 Since 2012. by LG U+ 솔루션기술팀 1/31
목 차 1. LG 유플러스 XPay 결제소개... 4 1.1. 결제흐름도... 4 2. 결제연동절차... 5 3. 개발환경확인사항... 5 3.1. 소프트웨어및하드웨어요구사항... 5 3.2. 웹서버준비... 5 4. 결제연동샘플파일안내... 6 4.1. PAYREQ : 인증요청페이지... 6 4.2. PAYRES : 최종결제요청및결제결과화면처리페이지... 6 4.3. 연동샘플페이지구조... 6 4.4. 제공환경설정파일설명... 10 5. 인증요청페이지개발 (PAYREQ)... 11 5.1. 인증결제창호출및인증결과처리수정하기... 11 5.2. ActiveX 팝업창인증요청파라미터 (* 필수 )... 13 5.3. ActiveX 팝업창인증요청결과리턴파라미터... 15 6. 최종결제요청 (API) 및결제결과처리페이지개발 (PAYRES)... 16 6.1. 결제결과처리샘플소스수정하기 (PHP)... 16 6.2. 결제결과처리샘플소스수정하기 (JSP)... 17 6.3. 결제결과처리샘플소스수정하기 (ASP)... 18 6.4. 결제결과처리샘플소스수정하기 (ASP.NET)... 19 6.5. API 최종결제요청파라미터 (* 필수 )... 21 6.6. API 최종결제요청결과리턴파라미터... 21 7. API 결제취소요청... 23 7.1. API 결제취소요청파라미터 (* 필수 )... 23 7.2. API 결제취소요청결과리턴파라미터... 23 7.3. API 취소요청시취소성공처리해야할결과코드... 23 8. 결제연동작업전알아두실사항... 24 8.1. 각결제수단별공통안내사항... 24 2/31
8.2. 무통장서비스안내사항... 24 9. 부록 I. 결제연동추가기능... 26 9.1. 신용카드무이자할부적용하기... 26 9.2. 결제거래영수증출력링크걸기... 26 9.3. 현금영수증 / 신용카드매출전표에면세금액적용하기... 28 10. 부록 II. 결제연동참조코드표... 29 10.1. 결제수단정의코드표... 29 10.2. 신용카드카드사코드표... 29 10.3. 계좌이체은행사코드표... 30 10.4. 가상계좌은행사코드표... 30 10.5. 휴대폰이동통신사코드표... 31 3/31
1. LG 유플러스 XPay 결제소개 1.1. 결제흐름도 LG 유플러스 XPay 는타사보다더욱간단하고안전하게결제연동을하실수있도록최적화되었습니다. 하나의통합결제창을통하여신용카드, 계좌이체, 휴대폰, 무통장, 유선전화, OK 캐쉬백, 문화 / 게임 / 도서상품권, 모바일 T 머니등다양한결제를동시에서비스하실수있습니다. 4/31
2. 결제연동절차 3. 개발환경확인사항 3.1. 소프트웨어및하드웨어요구사항 언어 JSP ASP PHP ASP.NET 설치환경및 요구사항 JDK 1.4.2 이상 IIS 5.0 이상 PHP 4.3 이상 (CURL 컴포넌트필요 ).NET Framework 2.0 이상 3.2. 웹서버준비 다운받으신연동샘플파일을브라우저를통해접근할수있도록 WebContext 설정합니다. 설정방법은각웹서버의문서를참조하여주십시오. 5/31
4. 결제연동샘플파일안내 LG유플러스에서제공하는샘플파일은기본정보만을사용하여제작되었습니다. 반드시그대로사용하여야하는것은아니며해당샘플과매뉴얼을참조하여작업하시기바랍니다. 연동샘플파일은다운받으신후웹서버 WebContext에압축을해제하여사용하시면됩니다. 파일구조는가장중요한인증요청페이지와최종결제요청페이지로구성되어있습니다. 4.1. PAYREQ : 인증요청페이지 LG 유플러스에서제공하는 ActiveX 통합결제창을호출하여인증요청을하는페이지입니다. 인증이완료된후 LG 유플러스로부터내려받은 LGD_PAYKEY( 인증 Key) 로최종결제요청을합니다. 4.2. PAYRES : 최종결제요청및결제결과화면처리페이지 LG 유플러스 API 를통해서최종결제요청을한후, 결제결과를리턴받아서화면처리를하는페이지입니다. 최종결제요청은 LGD_PAYKEY( 인증 Key) 를사용하여 API 를통해요청합니다. 4.3. 연동샘플페이지구조 4.3.1. PHP 버전 1 파일구조보기 2 제공파일내용제공파일 제공파일설명 작업여부 payreq.php 인증요청페이지 (PAYREQ) 개발필요 payres.php 최종결제요청페이지 (PAYRES) 개발필요 cancel.php 취소요청페이지 개발필요 cas_noteurl.php 무통장할당, 입금통보결과처리페이지 개발필요 6/31
lgdacom/xpayclient.php API 클래스페이지 수정불가 lgdacom/ping.php API 연결테스트페이지 수정불가 lgdacom/patch.php LG 유플러스환경파일업데이트페이지 수정불가 lgdacom/conf/lgdacom.conf LG 유플러스환경파일 수정불가 lgdacom/conf/mall.conf 상점연결정보환경파일 상점아이디, 상점키를반드시등록 변경필요 lgdacom/conf/ca-bundle.crt SSL 인증서 수정불가 4.3.2. JSP 버전 1 파일구조보기 2 제공파일내용 ( 공통라이브러리는반드시클래스패스로설정하여주시기바랍니다. ) 제공파일 제공파일설명 작업여부 payreq.jsp 인증요청페이지 (PAYREQ) 개발필요 payres.jsp 최종결제요청페이지 (PAYRES) 개발필요 cancel.jsp 취소요청페이지 개발필요 cas_noteurl.jsp 무통장할당, 입금통보결과처리페이지 개발필요 lgdacom/ping.java API 연결테스트페이지 수정불가 lgdacom/patch.java LG 유플러스환경파일업데이트페이지 수정불가 7/31
lgdacom/conf/lgdacom.conf LG 유플러스환경파일수정불가 lgdacom/conf/mall.conf 상점연결정보환경파일 상점아이디, 상점키를반드시등록 변경필요 WEB-INF/lib/commons-codec-1.3.jar 공통라이브러리 * 수정불가 WEB-INF/lib/commons-httpclient-3.1.jar 공통라이브러리 * 수정불가 WEB-INF/lib/commons-logging.jar 공통라이브러리 * 수정불가 WEB-INF/lib/json_simple.jar 공통라이브러리 * 수정불가 WEB-INF/lib/log4j-1.2.15.jar 공통라이브러리 * 수정불가 WEB-INF/lib/XPayClient.jar 공통라이브러리 * 수정불가 4.3.3. ASP 버전 1 파일구조보기 2 제공파일내용 제공파일 제공파일설명 작업여부 payreq.asp 인증요청페이지 (PAYREQ) 개발필요 payres.asp 최종결제요청페이지 (PAYRES) 개발필요 cancel.asp 취소요청페이지 개발필요 cas_noteurl.asp 무통장할당, 입금통보결과처리페이지 개발필요 lgdacom/ping.asp API 연결테스트페이지 수정불가 lgdacom/patch.asp LG 유플러스환경파일업데이트페이지 수정불가 lgdacom/md5.asp MD5 암호화모듈 수정불가 lgdacom/conf/lgdacom.conf LG 유플러스환경파일 수정불가 8/31
lgdacom/conf/mall.conf 상점연결정보환경파일 상점아이디, 상점키를반드시등록 변경필요 install/setup.exe API COM 설치실행파일 수정불가 install/xpayclient.msi API COM 설치실행파일 수정불가 4.3.4. ASP.NET 버전 1 파일구조보기 2 제공파일내용 제공파일 제공파일설명 작업여부 payreq.aspx 인증요청페이지 (PAYREQ) 개발필요 payres.aspx 최종결제요청페이지 (PAYRES) 개발필요 cancel.aspx 취소요청페이지 개발필요 cas_noteurl.aspx 무통장할당, 입금통보결과처리페이지 개발필요 lgdacom/ping.aspx API 연결테스트페이지 수정불가 lgdacom/patch.aspx LG 유플러스환경파일업데이트페이지 수정불가 lgdacom/conf/lgdacom.conf LG 유플러스환경파일 수정불가 lgdacom/conf/mall.conf 상점연결정보환경파일 상점아이디, 상점키를반드시등록 변경필요 lib/xpayclientnet.dll 참조라이브러리 수정불가 9/31
4.4. 제공환경설정파일설명 1 LG 유플러스환경파일 (lgdacom/conf/lgdacom.conf) LG 유플러스에서제공하는연결정보입니다. 임의로수정하지마세요. 파라미터 url test_url aux_url 설명 API 결제요청 WEB URL( 서비스 ) 수정불가 API 결제요청 WEB URL( 테스트 ) 수정불가 API 레포팅 WEB URL 수정불가 2 상점연결정보환경파일 (lgdacom/conf/mall.conf) LG 유플러스 WEB-API 서버와통신하기위한상점환경설정파일입니다. 파라미터 설명 server_id 상점서버를구분하기위한값 timeout API 요청 timeout 시간 ( 단위 : 초 ) log_dir log_level verify_cert verify_host report_error auto_rollback output_utf8 로그디렉토리 (Full Path) 0:FATAL, 1:ERROR, 2:WARNING, 3:INFO, 4:DEBUG 0: 인증서검증하지않음, 1: 인증서검증 0: 확인하지않음 (test 시만사용 ), 1: 인증서내의 domain name 확인 0: 전송하지않음 (error 관련내용만전송함 ), 1:error 시 report 전송 0: 자동취소사용안함, 1: 자동취소사용 0:EUC-KR 로리턴, 1: 서버응답을 UTF-8 로리턴 테스트상점아이디테스트아이디와 Mert Key 를등록 ( 반드시확인바랍니다.) 서비스상점아이디서비스아이디와 Mert Key 를등록 ( 반드시확인바랍니다.) * 복수의상점아이디연동시에는아이디와 Mert key 를 mall.conf 에추가로등록하시면됩니다. 10/31
5. 인증요청페이지개발 (PAYREQ) 5.1. 인증결제창호출및인증결과처리수정하기 5.1.1. 서비스플랫폼및상점아이디적용하기 인증요청시테스트거래인지서비스거래인지를판단하기위한파라미터와 LG 유플러스로부터 발급받으신상점아이디를적용해주세요. 1 샘플소스 (PHP) $CST_PLATFORM = $HTTP_POST_VARS["CST_PLATFORM"]; //LG유플러스결제서비스선택 (test: 테스트, service: 서비스 ) $CST_MID = $HTTP_POST_VARS["CST_MID"]; // 상점아이디 (LG유플러스로부터발급받으신상점아이디를입력하세요 ) // 테스트아이디는 't' 를반드시제외하고입력하세요. $LGD_MID = (("test" == $CST_PLATFORM)?"t":"").$CST_MID; // 상점아이디 ( 자동생성 ) 2 샘플소스 (JSP) String CST_PLATFORM = request.getparameter("cst_platform"); //LG유플러스결제서비스선택 (test: 테스트, service: 서비스 ) String CST_MID = request.getparameter("cst_mid"); //LG유플러스로부터발급받으신상점아이디를입력하세요. // 테스트아이디는 't' 를제외하고입력하세요. String LGD_MID = ("test".equals(cst_platform.trim())?"t":"")+cst_mid; // 상점아이디 ( 자동생성 ) 3 샘플소스 (ASP) CST_PLATFORM = trim(request("cst_platform")) 'LG유플러스결제서비스선택 (test: 테스트, service: 서비스 ) CST_MID = trim(request("cst_mid")) '(LG유플러스로부터발급받으신상점아이디를입력하세요 ' 테스트아이디는 't' 를반드시제외하고입력하세요. if CST_PLATFORM = "test" then ' 상점아이디 ( 자동생성 ) LGD_MID = "t" & CST_MID else LGD_MID = CST_MID end if 4 샘플소스 (ASP.NET) CST_PLATFORM = Request.Params.Get("CST_PLATFORM"); //LG유플러스결제서비스선택 (test: 테스트, service: 서비스 ) CST_MID = Request.Params.Get("CST_MID"); //LG유플러스로부터발급받으신상점아이디를입력하세요 // 테스트아이디는 't' 를반드시제외하고입력하세요. LGD_MID = (("test".equals(cst_platform.trim()))? "t" : "") + CST_MID; // 상점아이디 ( 자동생성 ) 11/31
5.1.2. 인증결제창호출및인증결과화면처리하기 function dopay_activex(){ if (ret=="00"){ //ActiveX 로딩성공 var LGD_RESPCODE = dpop.getdata('lgd_respcode'); // 결과코드 var LGD_RESPMSG = dpop.getdata('lgd_respmsg'); // 결과메세지 } if( "0000" == LGD_RESPCODE ) { // 인증성공 var LGD_PAYKEY = dpop.getdata('lgd_paykey'); //LG유플러스인증KEY var msg = " 인증결과 : " + LGD_RESPMSG + "\n"; msg += "LGD_PAYKEY : " + LGD_PAYKEY +"\n\n"; document.getelementbyid('lgd_paykey').value = LGD_PAYKEY; alert(msg); document.getelementbyid('lgd_payinfo').submit(); } else { // 인증실패 alert(" 인증이실패하였습니다. " + LGD_RESPMSG); /* * 인증실패화면처리 */ } } else { alert("lg유플러스전자결제를위한 ActiveX 설치실패 "); /* * 인증실패화면처리 */ } UTF-8 인코딩사용시, http(s)://xpay.lgdacom.net/xpay/js/xpay.js 대신 http(s)://xpay.lgdacom.net/xpay/js/xpay_utf-8.js 을호출하시기바랍니다. 12/31
5.2. ActiveX 팝업창인증요청파라미터 (* 필수 ) 주의 ) 변수값으로 <, >, +-, --, ; ( 세미콜론 ), ( 따옴표 ), ( 이중따옴표 ), \ ( 원화표시 ) 의사용을금지합니다. 결제타입변수명설명 최대길이 (byte) LGD_MID* LG 유플러스에서부여한상점 ID 15 주문번호 LGD_OID* LGD_AMOUNT* 상점 ID 별로유일한값을 ( 유니크하게 ) 상점에서생성 영문, 숫자, -, _ 만사용가능 ( 한글금지 ), 최대 63 자결제금액 "," 가없는형태 ( 예 : 23400) 64 10 LGD_BUYER* 구매자명 10 LGD_PRODUCTINFO* 구매내역 128 타임스탬프 ( 현재시간을넘겨주세요 ) LGD_TIMESTAMP* LGD_HASHDATA* 거래위변조를막기위해사용숫자형식으로만전달해주세요예 )20090226110637 해쉬데이타거래위변조를막기위한파라미터입니다. 샘플페이지참조 ( 자동생성 ) 14 공통 LGD_BUYERID* 구매자아이디 ( 상품권결제시필수 ) 15 LGD_BUYERIP* 구매자 IP( 상품권결제시필수 ) 15 LGD_BUYERADDRESS 구매자주소 128 LGD_BUYERPHONE 구매자휴대폰번호 15 LGD_BUYEREMAIL 구매자이메일 ( 결제성공시해당이메일로결제내역전송 ) 40 LGD_BUYERSSN 구매자주민번호 13 LGD_CHECKSSNYN 구매자주민번호체크여부 ( 기본값 : N) 1 LGD_PRODUCTCODE 상품코드 40 LGD_RECEIVER 수취인 10 LGD_RECEIVERPHONE 수취인전화번호 15 LGD_DELIVERYINFO 배송정보 128 LGD_CUSTOM_FIRSTPAY 상점정의초기결제수단 ( 기본값 : SC0010) 6 13/31
LGD_CUSTOM_PROCESSTYPE LGD_CUSTOM_SESSIONTIMEOUT 상점정의프로세스타입 ( 기본값 : TWOTR) 상점정의승인가능타임 ( 기본값 : 10분 ) 상점정의결제가능수단 LGD_CUSTOM_USABLEPAY 특정결제수단만보이게할경우사용 예 ) 신용카드, 계좌이체만사용할경우 SC0010-SC0030 LGD_CUSTOM_SKIN LGD_CUSTOM_CEONAME LGD_CUSTOM_MERTNAME LGD_CUSTOM_MERTPHONE LGD_CUSTOM_BUSINESSNUM 상점정의스킨 (red, blue, green, cyan, yellow) ( 기본값 : red) 상점정의대표자명상점정의상점명상점정의상점전화번호상점정의사업자번호 상점정의로고 LGD_CUSTOM_LOGO 높이 21pix * ( 폭은결제창사이즈에맞게정의 ) LGD_CUSTOM_CARDPOINTUSEYN LGD_TAXFREEAMOUNT LGD_CLOSEDATE LGD_ESCROW_USEYN LGD_INSTALLRANGE 상점정의로고이미지 URL 을넘겨주세요. 상점정의신용카드포인트사용여부포인트가맹점이무조건포인트를사용하게할때 'Y' ( 기본값 : N) 결제금액 (amount) 중면세금액 * 기본적으로 amount 의 1/11 을 vat( 부가가치세 ) 로국세청에신고합니다. 상점정의결제마감시간형식 : yyyymmddhhmmss 에스크로적용여부 Y : 에스크로적용, N : 에스크로미적용표시할부개월수구분자는반드시 : 으로해야함 ( 기본값 : 0:2:3:4:5:6:7:8:9:10:11:12) 특정카드 / 특정개월무이자셋팅 1 9 14 1 신용카드 LGD_NOINTINF 카드 - 개월수 : 개월수, 카드 - 개월수형식으로전달 예 ) 국민 3,6 개월, 삼성 3-6 개월무이자적용시, 11-3:6,51-3:4:5:6 LGD_USABLECARD 사용가능카드사 2 계좌이체 무통장 LGD_CASHRECEIPTYN 현금영수증사용여부 Y : 현금영수증사용함 1 14/31
N : 현금영수증사용안함 ( 기본값 : Y) LGD_USABLEBANK 사용가능은행 ( 실시간계좌이체 ) 2 현금영수증사용여부 ( 기본값 : Y) LGD_CASHRECEIPTYN Y : 현금영수증사용함 1 N : 현금영수증사용안함 무통장 LGD_CASNOTEURL* 무통장수신결과페이지 입금하실계좌번호발급및입금시 DB연동을할 255 페이지 LGD_USABLECASBANK 사용가능은행 ( 가상계좌 ) 2 LGD_CLOSEDATE 무통장입금마감시간 ( 예 : yyyymmddhhmmss) 14 OK 캐쉬백 LGD_OCBITEMCODE* 다날에서제공한대표아이템코드 (LG 유플러스로문의바랍니다 ) * 추가파라미터관련내용은연동스펙 spreadsheet ( 연동스펙 _ 결제창 2.0.xls) 를참조하시기바랍니다. 5.3. ActiveX 팝업창인증요청결과리턴파라미터 결제타입변수명설명 최대길이 (byte) LGD_RESPCODE 응답코드, '0000' 이면성공이외는실패 4 LGD_RESPMSG 응답메세지 160 공통 LGD_MID LG 유플러스에서부여한상점 ID 15 LGD_OID 상점거래번호 ( 주문번호 ) 64 LGD_AMOUNT 결제금액 12 LGD_PAYKEY LG 유플러스인증 KEY 15/31
6. 최종결제요청 (API) 및결제결과처리페이지개발 (PAYRES) LG 유플러스로부터내려받은 PAYKEY 를가지고최종결제요청을한후결제결과값을리턴받아결과 처리를하시면됩니다. 6.1. 결제결과처리샘플소스수정하기 (PHP) if ($xpay->tx()) { //1) 결제결과화면처리 ( 성공, 실패결과처리를하시기바랍니다.) echo " 결제요청이완료되었습니다. <br>"; echo "TX Response_code = ". $xpay->response_code(). "<br>"; echo "TX Response_msg = ". $xpay->response_msg(). "<p>"; echo " 거래번호 : ". $xpay->response("lgd_tid",0). "<br>"; echo " 상점아이디 : ". $xpay->response("lgd_mid",0). "<br>"; echo " 상점주문번호 : ". $xpay->response("lgd_oid",0). "<br>"; echo " 결제금액 : ". $xpay->response("lgd_amount",0). "<br>"; echo " 결과코드 : ". $xpay->response("lgd_respcode",0). "<br>"; echo " 결과메세지 : ". $xpay->response("lgd_respmsg",0). "<p>"; $keys = $xpay->response_names(); foreach($keys as $name) { echo $name. " = ". $xpay->response($name, 0). "<br>"; } echo "<p>"; if( "0000" == $xpay->response_code() ) { // 최종결제요청결과성공 DB처리 echo " 최종결제요청결과성공 DB처리하시기바랍니다.<br>"; }else{ // 최종결제요청결과실패 DB처리 echo " 최종결제요청결과실패 DB처리하시기바랍니다.<br>"; } }else { //2)API 요청실패화면처리 echo " 결제요청이실패하였습니다. <br>"; 16/31
echo "TX Response_code = ". $xpay->response_code(). "<br>"; echo "TX Response_msg = ". $xpay->response_msg(). "<p>"; } // 최종결제요청결과실패 DB 처리 echo " 최종결제요청결과실패 DB 처리하시기바랍니다.<br>"; 6.2. 결제결과처리샘플소스수정하기 (JSP) if ( xpay.tx() ) { //1) 결제결과화면처리 ( 성공, 실패결과처리를하시기바랍니다.) out.println( " 결제요청이완료되었습니다. <br>"); out.println( "TX Response_code = " + xpay.m_szrescode + "<br>"); out.println( "TX Response_msg = " + xpay.m_szresmsg + "<p>"); out.println(" 거래번호 : " + xpay.response("lgd_tid",0) + "<br>"); out.println(" 상점아이디 : " + xpay.response("lgd_mid",0) + "<br>"); out.println(" 상점주문번호 : " + xpay.response("lgd_oid",0) + "<br>"); out.println(" 결제금액 : " + xpay.response("lgd_amount",0) + "<br>"); out.println(" 결과코드 : " + xpay.response("lgd_respcode",0) + "<br>"); out.println(" 결과메세지 : " + xpay.response("lgd_respmsg",0) + "<p>"); for (int i = 0; i < xpay.responsenamecount(); i++) { out.println(xpay.responsename(i) + " = "); for (int j = 0; j < xpay.responsecount(); j++) { out.println("\t" + xpay.response(xpay.responsename(i), j) + "<br>"); } } out.println("<p>"); if( "0000".equals( xpay.m_szrescode ) ) { // 최종결제요청결과성공 DB처리 out.println(" 최종결제요청결과성공 DB처리하시기바랍니다.<br>"); }else{ // 최종결제요청결과실패 DB처리 17/31
out.println(" 최종결제요청결과실패 DB처리하시기바랍니다.<br>"); } }else { //2)API 요청실패화면처리 out.println( " 결제요청이실패하였습니다. <br>"); out.println( "TX Response_code = " + xpay.m_szrescode + "<br>"); out.println( "TX Response_msg = " + xpay.m_szresmsg + "<p>"); } // 최종결제요청결과실패 DB 처리 out.println(" 최종결제요청결과실패 DB 처리하시기바랍니다.<br>"); 6.3. 결제결과처리샘플소스수정하기 (ASP) if xpay.tx() then '1) 결제결과화면처리 ( 성공, 실패결과처리를하시기바랍니다.) Response.Write(" 결제요청이완료되었습니다. <br>") Response.Write("TX Response_code = " & xpay.rescode & "<br>") Response.Write("TX Response_msg = " & xpay.resmsg & "<p>") Response.Write(" 거래번호 : " & xpay.response("lgd_tid", 0) & "<br>") Response.Write(" 상점아이디 : " & xpay.response("lgd_mid", 0) & "<br>") Response.Write(" 상점주문번호 : " & xpay.response("lgd_oid", 0) & "<br>") Response.Write(" 결제금액 : " & xpay.response("lgd_amount", 0) & "<br>") Response.Write(" 결과코드 : " & xpay.response("lgd_respcode", 0) & "<br>") Response.Write(" 결과메세지 : " & xpay.response("lgd_respmsg", 0) & "<p>") Response.Write("[ 결제요청결과파라미터 ]<br>") ' 아래는결제요청결과파라미터를모두찍어줍니다. Dim itemcount Dim rescount itemcount = xpay.resnamecount rescount = xpay.rescount For i = 0 To itemcount - 1 itemname = xpay.responsename(i) Response.Write(itemName & " : ") 18/31
For j = 0 To rescount - 1 Response.Write(xpay.Response(itemName, j) & "<br>") Next Next Response.Write("<p>") if xpay.rescode = "0000" then ' 최종결제요청결과성공 DB처리 Response.Write(" 최종결제요청결과성공 DB처리하시기바랍니다." & "<br>") else ' 결제결제요청결과실패 DB처리 Response.Write(" 결제결제요청결과실패 DB처리하시기바랍니다." & "<br>") end if else '2)API 요청실패화면처리 Response.Write(" 결제요청이실패하였습니다. <br>") Response.Write("TX Response_code = " & xpay.rescode & "<br>") Response.Write("TX Response_msg = " & xpay.resmsg & "<p>") end if ' 결제요청결과실패상점 DB 처리 Response.Write(" 결제결제요청결과실패 DB 처리하시기바랍니다." & "<br>") 6.4. 결제결과처리샘플소스수정하기 (ASP.NET) if (xpay.tx()) { //1) 결제결과화면처리 ( 성공, 실패결과처리를하시기바랍니다. Response.Write(" 결제요청이완료되었습니다.<br>"); Response.Write("TX Response_code : " + xpay.m_szrescode + "<br/>"); Response.Write("TX Response_msg : " + xpay.m_szresmsg + "<p/>"); Response.Write(" 거래번호 : " & xpay.response("lgd_tid", 0) + "<br>"); Response.Write(" 상점아이디 : " & xpay.response("lgd_mid", 0) + "<br>"); Response.Write(" 상점주문번호 : " & xpay.response("lgd_oid", 0) + "<br>"); Response.Write(" 결제금액 : " & xpay.response("lgd_amount", 0) + "<br>"); Response.Write(" 결과코드 : " & xpay.response("lgd_respcode", 0) + "<br>"); Response.Write(" 결과메세지 : " & xpay.response("lgd_respmsg", 0) + "<p>"); 19/31
String response = ""; for (int i = 0; i < xpay.responsecount(); i++) { for (int j = 0; j < xpay.responsenamecount(); j++) { response += xpay.responsename(j) + " : "; response += xpay.response(xpay.responsename(j), i) + "<br/>"; } } Response.Write(response); if( "0000".equals(xpay.m_szResCode) ) { // 최종결제요청결과성공 DB처리 Response.Write(" 최종결제요청결과성공 DB처리하시기바랍니다.<br>"); }else{ // 최종결제요청결과실패 DB처리 Response.Write(" 최종결제요청결과실패 DB처리하시기바랍니다.<br>"); } } else { //2)API 요청실패화면처리 Response.Write(" 결제요청이실패하였습니다.<br>"); Response.Write("TX Response_code : " + xpay.m_szrescode + "<br/>"); Response.Write("TX Response_msg : " + xpay.m_szresmsg + "<br/>"); } // 결제요청결과실패상점 DB 처리 Response.Write(" 결제결제요청결과실패 DB 처리하시기바랍니다." & "<br>") 20/31
6.5. API 최종결제요청파라미터 (* 필수 ) 결제타입변수명설명 최대길이 (byte) 공통 LGD_TXNAME* LGD_PAYKEY* 메소드 : PaymentByKey LG 유플러스인증 KEY 6.6. API 최종결제요청결과리턴파라미터 결제타입변수명설명 최대길이 (byte) LGD_RESPCODE 응답코드, '0000' 이면성공이외는실패 4 LGD_RESPMSG 응답메세지 160 LGD_MID LG 유플러스에서부여한상점 ID 15 LGD_OID 상점거래번호 ( 주문번호 ) 64 LGD_AMOUNT 결제금액 10 LGD_TID LG 유플러스거래번호 24 LGD_PAYTYPE 결제수단코드 6 LGD_PAYDATE 결제일시 14 LGD_HASHDATA 해쉬데이타 LGD_FINANCECODE 결제기관코드 10 공통 LGD_FINANCENAME 결제기관명 20 LGD_ESCROWYN LGD_TRANSAMOUNT 최종에스크로적용여부 Y : 에스크로적용, N : 에스크로미적용환율적용금액 (USD 결제시환율적용원화금액 ) 1 12 LGD_EXCHANGERATE 적용환율 12 LGD_BUYER 구매자명 10 LGD_BUYERID 구매자아이디 15 LGD_BUYERPHONE 고객휴대폰번호 11 LGD_BUYEREMAIL 구매자이메일 40 LGD_PRODUCTINFO 구매내역 128 신용카드 LGD_CARDNUM 신용카드번호 ( 일반가맹점은 * 처리됨 ) 20 LGD_CARDINSTALLMONTH 신용카드할부개월 2 21/31
LGD_CARDNOINTYN 신용카드무이자여부 1: 무이자 0 : 일반 1 LGD_FINANCEAUTHNUM 결제기관승인번호 20 LGD_CASHRECEIPTNUM 현금영수증승인번호현금영수증건이아니거나실패인경우 "0" 9 계좌이체 LGD_CASHRECEIPTSELFYN 현금영수증자진발급제유무 Y: 자진발급제적용, 그외 : 미적용 1 LGD_CASHRECEIPTKIND 현금영수증종류 0: 소득공제용, 1: 지출증빙용 4 LGD_CASHRECEIPTNUM 현금영수증승인번호현금영수증건이아니거나실패인경우 "0" 9 LGD_CASHRECEIPTSELFYN 자진발급제적용여부 Y: 자진발급제적용, 그외 : 미적용 1 무통장 현금영수증종류 LGD_CASHRECEIPTKIND 0: 소득공제용, 1: 지출증빙용 4 LGD_ACCOUNTNUM 입금할계좌번호 15 LGD_CASTAMOUNT 입금누적금액 12 LGD_CASCAMOUNT 현입금금액 12 LGD_CASFLAG 거래종류 (R: 할당,I: 입금,C: 취소 ) 10 LGD_CASSEQNO 가상계좌일련번호 3 OK 캐쉬백 LGD_OCBSAVEPOINT LGD_OCBAMOUNT LGD_OCBTOTALPOINT LGD_OCBUSABLEPOINT OK 캐쉬백적립포인트 OK 캐쉬백사용금액 OK 캐쉬백누적포인트 OK 캐쉬백사용가능포인트 문화 / 게임 / 도서상품권모바일 T 머니 LGD_FINANCEAUTHNUM 결제기관승인번호 20 LGD_TELNO 결제휴대폰번호 11 * 추가리턴파라미터관련내용은연동스펙 spreadsheet ( 연동스펙 _ 결제창 2.0.xls) 를참조하시기바랍니다. 22/31
7. API 결제취소요청 LG 유플러스로부터최종결제완료후내려받은거래번호 (LGD_TID) 를가지고취소요청을합니다. ( 인증시 LG 유플러스로부터내려받은 LGD_PAYKEY( 인증 Key) 와혼동하지마세요.) * 결제취소불가한경우 해외카드의경우, 승인취소 ( 매입전취소 ) 가불가능합니다. ( 단, 해외 VISA 카드에한하여당일취소가가능함 ) 계좌이체의경우, 계약된환불가능기간이지난경우환불이불가합니다. 7.1. API 결제취소요청파라미터 (* 필수 ) 결제타입변수명설명 최대길이 (byte) LGD_TXNAME* 메소드 : Cancel 공통 LGD_MID* LG 유플러스에서부여한상점 ID 15 LGD_TID* LG 유플러스거래번호 24 7.2. API 결제취소요청결과리턴파라미터 결제타입변수명설명 최대길이 (byte) 공통 LGD_RESPCODE 응답코드 4 LGD_RESPMSG 응답메세지 160 7.3. API 취소요청시취소성공처리해야할결과코드 결제수단 취소 / 환불 0000, AV11 신용카드 * 신용카드승인취소 ( 매입전취소 ) 실패의경우, LG유플러스에서자동으로취소처리합니다. 두개의결과코드들에대해반드시취소성공처리를해야합니다. ( 단, 매입전승인취소실패건에대해자동으로취소처리를원치않을경우, LG유플러스에별도설정변경요청을하여야함 ) 0000, RF00, RF10, RF09, RF15, RF19, RF23, RF25 계좌이체 * 계좌이체환불진행중응답건의경우, LG 유플러스에서자동환불처리합니다. 환불진행중응답코드에대해서는환불결과코드.xls 파일을참고하시기바랍니다. 환불진행중응답건의경우도반드시환불성공처리를해야합니다. 그외결제수단 0000 23/31
8. 결제연동작업전알아두실사항 8.1. 각결제수단별공통안내사항 1. 상점주문번호 (LGD_OID) 생성규칙 1) 주문번호는가맹점아이디 ( 상점아이디 ) 별로유일해야합니다. 주문번호는상점아이디별주문을구분하기위한구분자입니다. 2) 주문번호에공백이나특수문자는사용불가합니다. ( 예 : /, :, *,?, ", <, >, ) 주문번호는영문, 숫자, '_', '-' 등으로만구성하시기를권장합니다. 2. 거래번호 (LGD_TID) 는 LG 유플러스에서각승인건당부여하는거래번호로서거래오류추적, 취소시에사용하므로 상점 DB 내에보관하시기바랍니다. 3. 현금영수증사용여부확인방법 상점관리자 (http:// pgweb.uplus.co.kr) > 계약정보 > 상점정보관리에계약정보의계좌이체항목의비고란에 " 현금영수증사용 " 이라고표시됩니다. 4. MertKey 조회방법 상점관리자 > 계약정보 > 상점정보관리의 시스템연동정보 에서 mertkey 를확인합니다. 5. XPay 결제연동방식확인 상점관리자 > 계약정보 > 상점정보관리의 시스템연동정보 에서 승인결과전송여부 가 결제창 2.0 인지를 확인합니다. 6. 연동관련 URL 전자결제홈페이지 : http://ecredit.uplus.co.kr 상점관리자 ( 테스트 ) : http://pgweb.uplus.co.kr/tmert 상점관리자 ( 서비스 ) : http://pgweb.uplus.co.kr 결제데모페이지 : http://pg.dacom.net/cust/demo/xpaydemo.html 8.2. 무통장서비스안내사항 1. 상점홈페이지의링크연결창에무통장 ( 가상계좌 ) 에관한아래의주의사항을포함해주시기바랍니다. 1) 가상계좌는일회성계좌이므로재사용시 ( 다시그계좌로입금하시는경우 ) 타인의계좌로입금될가능성이있습니다. 이경우는고객의책임이므로사용에주의하시기바랍니다. 2) 가상계좌의경우 CD 기에서현금입금하실수없습니다. CD 기에서이체는가능합니다 2. 무통장 ( 가상계좌 ) 서비스에서실질적인결제는고객이발급받으신계좌에입금하시는경우에완료됩니다. 1) 무통장의경우입금통보를받기위해가상계좌할당시에반드시 LGD_CASNOTEURL 을보내주셔야합니다. 3. 무통장 ( 가상계좌 ) 서비스에대한정산을받으시려면반드시정산요청 (FreeNoti) 작업을하시거나자동정산요청 상점으로등록하시기바랍니다. 정산요청을하시면계좌는자동으로해지처리됩니다. 24/31
4. 무통장 ( 가상계좌 ) 의경우 LGD_CASNOTEURL 페이지로두번의결과통보를보내드립니다. 1) 가상계좌할당시 (LGD_CASFLAG="R") 2) 할당된가상계좌에입금시 (LGD_CASFLAG="I") 3) 은행에서입금취소시 (LGD_CASFLAG="C") - 반드시실제입금이들어온경우에만결제성공처리하셔야합니다. - 입금완료후, 은행에서당일입금취소가가능함에입금취소시도반드시결과처리하시기바랍니다. 5. 결제결과 DB 처리실패내역조회 (CAS_NOTEURL 에서응답을실패로준건에대한사유확인메뉴 ) 1) 상점관리자 > 결제내역조회 > 전체거래내역조회 > 전송실패내역조회에서거래건을조회한후, 링크된거래번호 (tid) 를클릭하여상세화면을조회한다. 2) CAS_NOTEURL 응답이 OK 이외의값이면실패로간주합니다. ( OK 값을받기까지 3 분간격 2 시간동안재전송 ) 6 무통장입금 ( 가상계좌 ) 의입금결과연동을위한입금테스트는 LG U+ 홈페이지 (http://ecredit.uplus.co.kr) > 기술지원 > 결제데모의 무통장입금테스트 페이지에서테스트아이디를이용하여발급받은입금계좌정보를 입력하시면무통장결과처리페이지 (cas_noteurl) 에서입금 / 취소결과를받으실수있습니다. ( 서비스아이디를 이용하여발급받은계좌를사용하지않도록유의하세요.) 8.2.1. 무통장입금은행별특성 은행명 과오납 ( 분할입금 ) 당일입금취소 외환 가능 가능 기업 선택 ( 불가 / 가능 ) 가능 국민 선택 ( 불가 / 가능 ) 가능 농협 선택 ( 불가 / 가능 ) 불가 신한 선택 ( 불가 / 가능 ) 가능 하나 선택 ( 불가 / 가능 ) 불가 우체국 선택 ( 불가 / 가능 ) 가능 경남 선택 ( 불가 / 가능 ) 가능 우리 선택 ( 불가 / 가능 ) 가능 부산 선택 ( 불가 / 가능 ) 가능 수협 선택 ( 불가 / 가능 ) 가능 대구 선택 ( 불가 / 가능 ) 가능 [ 용어설명 ] 과오납체크 : 가상계좌발급시입금요청금액과구매자가은행에입금하는금액이일치하는지여부 당일입금취소 : 은행시스템오류및구매고객이상점과의협의나동의없이입금당일입금한금액을은행에직접 취소하여회수가능 25/31
9. 부록 I. 결제연동추가기능 9.1. 신용카드무이자할부적용하기 1. 무이자할부서비스란 상점 / 카드사 /LG 유플러스가할부수수료를부담하여, 고객에게는별도의비용추가없이할부를이용하는서비스입니다. 무이자할부서비스적용전상점은무이자계약을맺어야하며, 상점구분은 대표가맹점 이어야합니다. 1) 카드사부담무이자할부서비스별도의신청이필요없으며, 카드사는고객에게할부거래로발생한할부수수료를청구하지않습니다. 2) 상점부담무이자할부서비스상점은 LG 유플러스와계약시상점구분을 ' 대표가맹점 ( 상점이원하는거래무이자 )' 또는 ' 대표무이자가맹점 ( 모든거래무이자 )' 으로계약되어야하며, 무이자거래가일어나는경우, 할부수수료를상점에서부담합니다. 즉별도의추가수수료가부담됩니다. 2 상점부담무이자할부서비스적용방법 ( 특정카드 / 특정개월무이자할부방법 ) 일반적으로 LG 유플러스가제공하는상점관리자에서적용하는경우와결제연동시상점에서정의하는바에따른적용방법이있으며, 상점에서정의하는경우에는결제방식에따라다소의차이가있습니다. 1) LG 유플러스상점관리자에서적용하는방법상점관리자접속 (http://pgweb.uplus.co.kr) 고객지원 -> 서비스추가 / 변경 -> 무이자할부신청 -> 관리자에서신청하기 -> 원하는무이자선택 2) 결제연동시상점정의에따른적용방법 ( 무이자할부 LGD_NOINTINF 파라미터사용법 ) 카드타입-':' 을구분자로하는할부개월리스트예제 : 비씨 /KB 3 개월, 6 개월무이자, 신한 3 개월무이자할부시 ==> 31-3:6,11-3:6,41-3 주의 : 공백문자열을넣으시면안됩니다. 신용카드카드사코드참조 9.2. 결제거래영수증출력링크걸기 1. 영수증 ( 현금영수증포함 ) 을다이렉트로링크하는방법 1) 결제거래영수증출력스크립트 receipt_link.js 에서제공하는영수증출력함수 (showreceiptbytid) 를사용합니다. <script language="javascript" src="http://pgweb.uplus.co.kr/web_server/js/receipt_link.js"></script> 테스트거래건출력시는포트 7085 를첨가합니다. 예 ) // 테스트 26/31
<script language="javascript" src="http://pgweb.uplus.co.kr:7085/web_server/js/receipt_link.js"></script> <a href="javascript:showreceiptbytid('lgd_mid', 'LGD_TID', 'authdata')"> 영수증출력 </a> // 서비스 <script language="javascript" src="http://pgweb.uplus.co.kr/web_server/js/receipt_link.js"></script> <a href="javascript:showreceiptbytid('lgd_mid', 'LGD_TID', 'authdata')"> 영수증출력 </a> 2) 현금영수증출력스크립트 receipt_link.js 에서제공하는현금영수증출력함수 (showcashreceipts) 를사용합니다. <script language="javascript" src="http://pgweb.uplus.co.kr /WEB_SERVER/js/receipt_link.js"></script> 테스트거래건출력시는포트 7085 를첨가합니다예 ) // 테스트 <script language="javascript" src="http://pgweb.uplus.co.kr:7085/web_server/js/receipt_link.js"></script> <a href="javascript:showcashreceipts('lgd_mid','lgd_oid','seqno',' 거래종류 ','test')"> 현금영수증보기 </a> // 서비스 <script language="javascript" src="http://pgweb.uplus.co.kr/web_server/js/receipt_link.js"></script> <a href="javascript:showcashreceipts('lgd_mid','lgd_oid','seqno',' 거래종류 ','service')"> 현금영수증보기 </a> [ 파라미터명설명 ] LGD_MID : 상점아이디 LGD_OID : 주문번호 LGD_TID : 거래번호 seqno : 가상계좌입급순서 (CASNOTEURL[ 가상계좌입금결과수신페이지 ] 에서받은 LGD_SEQNO 값 ) 계좌이체일경우, 필드를체크하지않음 ( 임의의정보를넣어도무방 ) 거래종류 : BANK( 계좌이체 ), CAS( 가상계좌 ), CR( 무통장입금단독등록건 ) CR 거래의경우 LG 유플러스의계좌이체 / 가상계좌결제를이용하지않고, 상점관리자의무통장입금건별 / 배치등록또는현금영수증직접발급샘플을통해무통장입금단독 (SC0100) 으로별도등록 ( 요청 ) 한거래 authdata : 무결성검증필드 (= md5 (LGD_MID, LGD_TID, mertkey)) authdata 생성방법은결제요청샘플의 LGD_HASHDATA 생성부분을참고해주시기바랍니다. 27/31
9.3. 현금영수증 / 신용카드매출전표에면세금액적용하기 1. 현금영수증면세처리방법 면세처리를하고자하는건은 LGD_TAXFREEAMOUNT 파라미터를설정하시면됩니다. 1) 구매하고자하는물품의금액이 15,000 원이고면세받고자하는금액이 15,000 원일경우 LGD_TAXFREEAMOUNT 의값을 15000 으로설정 2) 단일주문번호로여러물품을구매한금액이 45,000 원이고일부가면세품목 ( 면세총액 35,000 원 ) 일경우 LGD_TAXFREEAMOUNT 의값을 35000 으로설정 2. 신용카드매출전표에서 ( 일부금액 ) 면세처리방법과세상품과면세상품을같이취급하는고객사의경우신용카드매출전표에면세적용을하기위해서는 LG 유플러스와별도부분면세계약이되어야합니다. ( 계약필수 ) 면세처리를하고자하는건은 LGD_TAXFREEAMOUNT 파라미터를설정하시면됩니다. 1) 구매하고자하는물품의금액이 15,000 원이고면세받고자하는금액이 15,000 원일경우 LGD_TAXFREEAMOUNT 의값을 15000 으로설정 2) 단일주문번호로여러물품을구매한금액이 45,000 원이고일부가면세품목 ( 면세총액 35,000 원 ) 일경우 LGD_TAXFREEAMOUNT 의값을 35000 으로설정 28/31
10. 부록 II. 결제연동참조코드표 10.1. 결제수단정의코드표 결제수단신용카드계좌이체무통장휴대폰유선전화 (KT) OK 캐쉬백문화상품권게임문화상품권도서문화상품권모바일 T 머니 코드 SC0010 SC0030 SC0040 SC0060 SC0070 SC0090 SC0111 SC0112 SC0113 SC0220 10.2. 신용카드카드사코드표 카드사 코드 카드사 코드 국민 11 광주 46 외환 21 삼성 51 산은캐피탈 29 현대 61 비씨 31 롯데 71 하나 32 NH 91 우리 ( 구. 평화 VISA) 33 해외 JCB 4J 수협 34 해외 VISA 4V 전북 35 해외 MASTER 4M 씨티 36 해외 DINERS 6D 신한 ( 구.LG 카드포함 ) 41 해외 DISCOVER 6I 제주 42 붉은글씨는무이자할부불가카드입니다. 카드사코드변경사항 : 2009. 7월이전- 수협 (44), 전북 (45), 2009. 8월이전- 씨티 (16) 29/31
10.3. 계좌이체은행사코드표 은행명 코드 은행명 코드 기업 003(03) 광주 034(34) 외환 005(05) 전북 037(37) 국민 004(06) 경남 039(39) 농협 011(11) 우체국 071(71) 우리 020(20) 하나 081(81) 신한 088(88) 신협 048(48) 제일 023(23) 새마을금고 045(45) 씨티 027(27) 제주 035(35) 대구 031(31) 수협 007(07) 부산 032(32) 산업 002(02) 증권계좌동양증권 209(S0) 삼성증권 240(S3) 미래에셋 230(S1) 한국투자증권 243(S6) 신한금융투자 278(S2) 한화증권 269(SG) 우체국, 산업, 수협, 신협은법인계좌를이용한결제가불가함 증권계좌추가로은행코드가 3자리로제공이됩니다. 기존이용고객의경우 2자리코드로기존과동일하게 제공이됩니다. 붉은글씨는 2자리은행코드와 3자리은행코드가다른경우입니다. 10.4. 가상계좌은행사코드표 은행명 코드 은행명 코드 기업 003(03) 우리 020(20) 외환 005(05) 신한 088(26) 국민 004(06) 경남 039(39) 농협 011(11) 우체국 071(71) 하나 081(81) 부산 032(32) 수협 007(07) 대구 031(31) 계좌이체은행코드변경으로인해가상계좌은행코드가 3자리로제공이됩니다. 기존이용고객사의경우 2자리코드로기존그대로제공이됩니다. 붉은글씨는 2자리은행코드와 3자리은행코드가다른경우입니다. 30/31
10.5. 휴대폰이동통신사코드표 이통사 코드 SKT 011 KT 016 LGT 019 31/31