이니시스
목차 목차 1. 실시간빌링서비스개요...3 2. 실시간빌링서비스의조건...4 3. 메시지전달방식...5 3-1) 방화벽문제... 5 4. 처리절차...6 5. 빌링방법...7 5.1 실시간신용카드빌링... 7 5.1.1 단계 - 실시간빌링을위한신용카드의유효성확인및등록단계... 7 5.1.2 단계 - 빌링요청단계... 11 5.2 실시간휴대폰빌링... 14 5.2.1 단계 - 실시간휴대폰빌링을위한휴대폰의유효성확인및등록단계 14 5.2.2 단계 - 빌링요청단계... 17 Page ii Pub. Date: 2018. 10
1. 실시간빌링서비스개요 1. 실시간빌링서비스개요 상점고객이회원제서비스또는월정액과금상품구매요청단계에서, 이니시스가제공하는본인인증서비스수행후전달받은 KEY 를이용하여, 추후해당고객에대한과금필요시해당 KEY 를이니시스로전송하여실시간으로과금하는서비스. 이니시스는최초본인인증수행후, 고객의신용카드번호등의결제정보를대체하는빌키를상점에전달하며, 실시간빌링처리를위해상점에서빌키를전달하여야한다. ( 단, 자체가맹점의경우별도협의가필요할수있음 ) Pub. Date: 2018. 10 Page III
2. 실시간빌링서비스의조건 2. 실시간빌링서비스의조건 1. 반드시실시간빌링서비스업체로당사에등록. 2. 현재실시간빌링가능카드.( 현재 2013 년 3 월 ) - 외한, 롯데, 삼성, 신한, 현대, 국민, 비씨, NH, 하나 SK,( 씨티 ) - 당사는씨티카드와직접적인가맹점계약은되어있지않음 3. 신용카드본인인증트랜잭션처리후전달받은 BillingKey 을실시간빌링요청시전송해야만빌링가능. Page 4 Pub. Date: 2018. 10
3. 메시지전달방식 3. 메시지전달방식 이니시스가제공하는지불시스템을통해상점의지불서버와이니시스 PG 서버사이에 TCP/IP 소켓통신을통해메시지를송수신받아처리한다. 3-1) 방화벽문제 연결대상 : 203.238.37.3, 39.115.212.10 프로토콜 : TCP 포트번호 : 9400 연결방향 : OUTBOUND Pub. Date: 2018. 10 Page V
4. 처리절차 4. 처리절차 1. 상점고객이본인인증트랜잭션을통해본인인증절차를거쳐 BillingKey 를받아상점 DB 에보관한다. (BillingKey : Billing 트랜잭션을위한기본 key ( 40 자리 )) 2. 빌링작업시빌링요청트랜잭션을통하여 BillingKey 를전송하여카드승인을받는다. Page 6 Pub. Date: 2018. 10
5. 빌링방법 5. 빌링방법 5.1 실시간신용카드빌링 5.1.1 단계 - 실시간빌링을위한신용카드의유효성확인및 등록단계 본인인증 API : AUTH 본인인증입력페이지 : INIauthbill.html 본인인증처리, 결과페이지 : INIauthbill.jsp 3. 본인인증입력페이지의입력파라미터정리.(INIauthbill.html) Pub. Date: 2018. 10 Page VII
5. 빌링방법 NAME VALUE NOTE buyername goodname mid 구매자명 상품명 상점아이디 price 상품금액 ( 숫자만가능 ) ini_offer_period print_msg acceptmethod encrypted sessionkey uid MerchantReserved3 20140101 부터 20140131 까지제공한다면 2014010120140131 Ex) 고객님의매월결제일은 24 일입니다. BILLAUTH 해당값변경불가 ( 필수 ) 제공기간상점안내메시지개인 / 법인카드구분 ( 선택 ) - 개인 : PERCARD - 법인 : COCARD 플러그인에서자동입력플러그인에서자동입력플러그인에서자동입력상점회원 ID( 추후문제발생시에검증용 ) 이외에 version, clickcontrol 해당필드의값은플러그인에서자동으로처리하므로 value 에값을임으로채우지마시기바랍니다. 제공기간 (ini_offer_period) 상세설정안내 - 일자기준으로제공기간표시예 ) 20140101 부터 20140131 까지제공한다면 <input type=hidden name=ini_offer_period value="2014010120140131"> - 일자 + 시간까지포함해서제공기간표시예 ) 20140101 10:00 부터 20140131 23:00 까지제공한다면 <input type=hidden name=ini_offer_period value="201401011000201401312300"> Page 8 Pub. Date: 2018. 10
5. 빌링방법 개인 / 법인카드구분 - acceptmethod value에 BILLAUTH 값은필수 - 카드구분을원할시, BILLAUTH 값뒤에 : 을구분자로하여옵션셋팅개인 : PERCARD / 법인 : COCARD 옵션셋팅예 ) 개인카드시 <input type= hidden name= acceptmethod value= BILLAUTH:PERCARD > 예 ) 법인카드시 <input type= hidden name= acceptmethod value= BILLAUTH:COCARD > 4. 본인인증처리, 결과페이지결과값정리.( INIauth_bill.jsp) A. 처리진행단계 i. INIpay4 클래스참조선언및 include 참조선언 <%@ page import = "com.inicis.inipay4.inipay" %> <%@ page import = "com.inicis.inipay4.util.inidata" %> <%@ include file= "config.jsp"%> ii. INIpay41 클래스의인스턴스생성 INIpay inipay = new INIpay(); INIdata data = new INIdata(); iii. 정보설정 data.setdata("type", "authbill"); // 결제 type, 고정 data.setdata("inipayhome", inipayhome); // 이니페이가설치된절대경로 data.setdata("logmode", logmode); // logmode data.setdata("keypw",keypw); // 키패스워드 data.setdata("subpgip","203.238.37.3"); // Sub PG IP ( 고정 ) data.setdata("mid", request.getparameter("mid")); // 상점아이디 data.setdata("paymethod", request.getparameter("paymethod")); // 지불방법, 빌링등록고정 data.setdata("billtype", "Card"); // 빌링유형고정 data.setdata("price", request.getparameter("price")); // 상품금액 data.setdata("currency", "WON"); // 화폐단위 data.setdata("goodname", request.getparameter("goodname")); // 상품명 ( 최대 40자 ) data.setdata("buyername", request.getparameter("buyername")); // 구매자 ( 최대 15자 ) data.setdata("buyertel", request.getparameter("buyertel")); // 구매자이동전화 data.setdata("buyeremail", request.getparameter("buyeremail")); // 구매자이메일 data.setdata("url", "http://www.your_domain.co.kr"); // 홈페이지주소 (URL) data.setdata("uip", request.getremoteaddr()); // IP Addr Pub. Date: 2018. 10 Page IX
5. 빌링방법 data.setdata("encrypted", request.getparameter("encrypted")); data.setdata("sessionkey", request.getparameter("sessionkey")); iv. 본인인증절차를통한실시간빌링등록요청 data = inipay.payrequest(data); v. 결과받기실시간빌링등록결과값받기. 표 1 결과값에대한정리 NAME VALUE NOTE resultcode 00 또는 00 외의값 00 성공, 00 외의값은실패 resultmsg 결과메시지결과메시지 CardResultCode 카드사코드카드사코드 2 자리 tid TID 거래번호 40 자리 BillKey Bill Key Billing 트랜잭션을위한기본 key ( 40 자리 ) CardPass 카드비밀번호앞 2 자리 ( 법인인경우 null 일수있슴 ) CardKind 법인카드 / 개인카드구분 0 개인. 1- 법인. 카드코드카드명카드코드카드명 01 외환카드 03 롯데카드 04 현대카드 06 국민카드 11 BC 카드 12 삼성카드 13 LG 카드 14 신한카드 17 하나 SK 21 해외비자카드 22 해외마스타카드 23 해외 JCB 카드 24 해외아멕스카드 56 카카오뱅크 99 기타카드 Page 10 Pub. Date: 2018. 10
5. 빌링방법 5.1.2 단계 - 빌링요청단계 실시간빌링 API : ReqBill 실시간빌링입력페이지 : INIreqrealbill.html 실시간빌링처리, 결과페이지 : INIreqrealbill.jsp 5. 실시간빌링입력페이지의입력파리미터정리. Pub. Date: 2018. 10 Page XI
5. 빌링방법 NAME VALUE NOTE billkey Billing 트랜잭션을위한기본 key ( 40 자리 ) goodname 상점아이디 price 상품결제금액 ( 숫자만가능 ) buyername 구매자명 RegNumber cardpass buyeremail buyertel cardquota currency quotainterest mid moid authentification merchantreserved1 신용카드의유효성확인및등록단계에서플러그인창에서입력했던주민번호앞 6 자리또는법인카드인경우사업자번호 10 자리신용카드비밀번호앞 2 자리구매자이메일주소구매자휴대폰번호할부기간화폐단위무이자유무상점아이디상점주문번호본인인증여부 00: 본인인증 ( 카드번호, 유효기간, 생년월일6자리, 카드비번 ) 01: 비인증 ( 카드번호, 유효기간 ) Tax( 부가세 ) / TaxFree( 면세 ) ( 예 Tax=100&TaxFree=900) merchantreserved3 card_point=1 or 0 1 포인트결제, 0 포인트결제아님 encodecharset 인코딩을위한 charset 설정 ex) KSC5601, UTF-8 이외에 clickcontrol 필드의값은플러그인에서자동으로처리하므로 value 에값을임으로채우지 마시기바랍니다. 6. 실시간빌링처리, 결과페이지결과값정리. A. 처리진행단계 i. INIpay4 클래스참조선언및 include 참조선언 <%@ page import = "com.inicis.inipay4.inipay" %> Page 12 Pub. Date: 2018. 10
5. 빌링방법 <%@ page import = "com.inicis.inipay4.util.inidata" %> <%@ include file= "config.jsp"%> ii. INIpay41 클래스의인스턴스생성 INIpay inipay = new INIpay(); INIdata data = new INIdata(); < 소스내용 > iii. 정보설정 INIreqrealbill.html 에서넘긴데이타를해당모듈에 Setting 하기위한단계 data.setdata("type", "reqrealbill"); // 결제 type, 고정 data.setdata("inipayhome", inipayhome); // 이니페이가설치된절대경로 data.setdata("logmode", logmode); // logmode data.setdata("keypw",keypw); // 키패스워드 data.setdata("subpgip","203.238.37.3"); // Sub PG IP ( 고정 ) data.setdata("mid", request.getparameter("mid")); // 상점아이디 data.setdata("moid", request.getparameter("moid")); // 상점주문번호 data.setdata("uid", request.getparameter("mid") ); // INIpay User ID data.setdata("goodname", request.getparameter("goodname")); // 상품명 ( 최대 40자 ) data.setdata("currency", request.getparameter("currency")); // 화폐단위 data.setdata("price", request.getparameter("price")); // 가격 data.setdata("buyername", request.getparameter("buyername")); // 구매자 ( 최대 15자 ) data.setdata("buyertel", request.getparameter("buyertel")); // 구매자이동전화 data.setdata("buyeremail", request.getparameter("buyeremail")); // 구매자이메일 data.setdata("paymethod", "Card"); // 지불방법, 카드빌링 data.setdata("billkey", request.getparameter("billkey")); // 빌링등록키 ( 빌키 ) data.setdata("cardpass", request.getparameter("cardpass")); // 카드비번앞자리 2자리 data.setdata("reqnumber", request.getparameter("reqnumber")); // 주민번호앞 6자리또는사업자번호 data.setdata("url", "http://www.your_domain.co.kr"); // 홈페이지주소 (URL) data.setdata("uip", request.getremoteaddr()); // IP Addr data.setdata("cardquota", request.getparameter("cardquota")); data.setdata("authentification",request.getparameter("authentification")); data.setdata("authfield1", request.getparameter("authfield1")); data.setdata("authfield2", request.getparameter("authfield2")); data.setdata("authfield3", request.getparameter("authfield3")); data.setdata("encodecharset","utf-8"); // 가맹점서버 UTF-8 인경우 iv. 빌링승인요청 data = inipay.payrequest(data); Pub. Date: 2018. 10 Page XIII
5. 빌링방법 v. 빌링승인결과실시간빌링승인결과값받기. 표 2 결과값에대한정리 (INIreqrealbill.jsp) NAME VALUE NOTE tid TID 거래번호 40 자리 resultcode 00 또는 00 외의값 00 성공, 00 외의값은실패 resultmsg 결과메세지 authcode 승인번호신용카드승인번호 pgauthdate 이니시스승인날짜 YYYYMMDD pgauthtime 이니시스승인시각 HHMMSS 5.2 실시간휴대폰빌링 5.2.1 단계 - 실시간휴대폰빌링을위한휴대폰의유효성확인 및등록단계 본인인증 API : AUTH 본인인증입력페이지 : INIauth_hpp.html 본인인증처리, 결과페이지 : INIauth_hpp.jsp 1. 본인인증입력페이지의입력파리미터정리.(INIauth_hpp.html) Page 14 Pub. Date: 2018. 10
5. 빌링방법 NAME VALUE NOTE buyername goodname mid price ini_offer_period print_msg 반드시결제금액으로입력해야함 20140101 부터 20140131 까지제공한다면 2014010120140131 Ex) 고객님의매월결제일은 24 일입니다. 구매자명상품명상점아이디상품금액 ( 숫자만가능 ) 필수입력제공기간상점메시지 ( 안내문구 ) acceptmethod BILLAUTH(HPP):HPP(4) 소스내주석참조 필수입력 INIregno encrypted sessionkey 주민번호앞 7 자리 플러그인에서자동입력 플러그인에서자동입력 cardcode N/A ( 필드는반드시있어야함 ) uid 플러그인에서자동입력 MerchantReserved1 moid=merchant_oid 상점주문번호설정 MerchantReserved3 상점회원 ID( 추후문제 발생시에검증용 ) 이외에 version, clickcontrol 해당필드의값은플러그인에서자동으로처리하므로 value 에값을임으로채우지마시기바랍니다. 가. 제공기간 (ini_offer_period) 상세설정안내 - 일자기준으로제공기간표시예 ) 20140101 부터 20140131 까지제공한다면 <input type=hidden name=ini_offer_period value="2014010120140131"> - 일자 + 시간까지포함해서제공기간표시 Pub. Date: 2018. 10 Page XV
5. 빌링방법 예 ) 20140101 10:00 부터 20140131 23:00 까지제공한다면 <input type=hidden name=ini_offer_period value="201401011000201401312300"> 나. acceptmethod 상세설정안내 - 이니시스와계약한빌링방법이컨텐츠인경우예 ) BILLAUTH(HPP):HPP(4) - 이니시스와계약한빌링방법이실물인경우 예 ) BILLAUTH(HPP):HPP(5) - 주민번호앞 7 자리플러그인자동입력옵션 ( 바로아래 INIregno 필드에주민번호앞 7 자리가입력되어있어야함 ) 예 ) BILLAUTH(HPP): HPREG 계약방법이명확하지않은경우이니시스영업으로문의하시기 바랍니다. 다. 상점주문번호설정안내 - 상점에서빌키를생성요청시주문번호를설정할경우예 ) 상점주문번호 M1101 MerchantReserved1 필드에 moid=m1101 을설정한다. 2. 본인인증처리, 결과페이지결과값정리.( INIauth_hpp.jsp) A. 처리진행단계 i. INIpay4 클래스참조선언및 include 참조선언 ii. INIpay41 클래스의인스턴스생성 INIpay inipay = new INIpay(); INIdata data = new INIdata(); iii. < 소스내용 > 정보설정 INIauth_hpp.html 에서전달된데이터를해당모듈에 Setting 하기위한단계 data.setdata("type", "authbill"); // 결제 type, 고정 data.setdata("inipayhome", inipayhome); // 이니페이가설치된절대경로 data.setdata("logmode", logmode); // logmode data.setdata("keypw",keypw); // 키패스워드 data.setdata("subpgip","203.238.37.3"); // Sub PG IP ( 고정 ) data.setdata("mid", request.getparameter("mid")); // 상점아이디 data.setdata("paymethod", request.getparameter("paymethod")); // 지불방법, 빌링등록 data.setdata("billtype", "HPP"); // 빌링유형고정 data.setdata("price", request.getparameter("price")); // 상품금액 Page 16 Pub. Date: 2018. 10
5. 빌링방법 data.setdata("currency", "WON"); // 화폐단위 data.setdata("goodname", request.getparameter("goodname")); // 상품명 ( 최대 40자 ) data.setdata("buyername", request.getparameter("buyername")); // 구매자 ( 최대 15자 ) data.setdata("buyertel", request.getparameter("buyertel")); // 구매자이동전화 data.setdata("buyeremail", request.getparameter("buyeremail")); // 구매자이메일 data.setdata("url", "http://www.your_domain.co.kr"); // 홈페이지주소 (URL) data.setdata("uip", request.getremoteaddr()); //IP Addr data.setdata("authentification", "11"); data.setdata("encrypted", request.getparameter("encrypted")); data.setdata("sessionkey", request.getparameter("sessionkey")); iv. 본인인증절차를통한실시간빌링등록요청 data = inipay.payrequest(data); v. 결과받기실시간빌링등록결과값받기. 표 3 결과값에대한정리 NAME VALUE NOTE resultcode 00 또는 00 외의값 00 성공, 00 외의값은실패 resultmsg 결과메시지결과메시지 tid TID 거래번호 40 자리 BillKey Bill Key Billing 트랜잭션을위한기본 key ( 40 자리 ) nohpp 휴대폰번호 hcorp *** 이통사정보 5.2.2 단계 - 빌링요청단계 실시간빌링 API : ReqBill 실시간빌링입력페이지 : INIreq_hpp.html 실시간빌링처리, 결과페이지 : INIreq_hpp.jsp Pub. Date: 2018. 10 Page XVII
5. 빌링방법 1. 실시간빌링입력페이지의입력파리미터정리 NAME VALUE NOTE billkey goodname Billing 트랜잭션을위한기본 key ( 40 자리 ) 상점아이디 price 상품결제금액 ( 숫자만가능 ) buyername regnumber buyeremail buyertel mid moid currency encodecharset 구매자명휴대폰의유효성확인및등록단계에서플러그인창에서입력했던고객주민번호앞 7 자리 ( 법인휴대폰사용불가 ) 구매자이메일주소구매자휴대폰번호상점아이디상점주문번호화폐단위인코딩을위한 charset 설정 ex) KSC5601, UTF-8 <%@ page import = "com.inicis.inipay4.inipay" %> <%@ page import = "com.inicis.inipay4.util.inidata" %> <%@ include file= "config.jsp"%> 이외에 clickcontrol 필드의값은플러그인에서자동으로처리하므로 value 에값을 임으로채우지마시기바랍니다. 2. 실시간빌링처리, 결과페이지결과값정리. A. 처리진행단계 i. INIpay4 클래스참조선언및 include 참조선언 ii. INIpay41 클래스의인스턴스생성 Page 18 Pub. Date: 2018. 10
5. 빌링방법 INIpay inipay = new INIpay(); INIdata data = new INIdata(); iii. 정보설정 INIreq_hpp.html 에서넘긴데이타를해당모듈에 Setting 하기위한단계 < 소스내용 > data.setdata("type", "reqrealbill"); // 결제 type, 고정 data.setdata("inipayhome", inipayhome); // 이니페이가설치된절대경로 data.setdata("logmode", logmode); // logmode data.setdata("keypw",keypw); // 키패스워드 data.setdata("subpgip","203.238.37.3"); // Sub PG IP ( 고정 ) data.setdata("mid", request.getparameter("mid")); // 상점아이디 data.setdata("moid", request.getparameter("moid")); // 상점주문번호 data.setdata("uid", request.getparameter("mid") ); // INIpay User ID data.setdata("goodname", request.getparameter("goodname")); // 상품명 ( 최대 40자 ) data.setdata("currency", request.getparameter("currency")); // 화폐단위 data.setdata("price", request.getparameter("price")); // 가격 data.setdata("buyername", request.getparameter("buyername")); // 구매자 ( 최대 15자 ) data.setdata("buyertel", request.getparameter("buyertel"));// 구매자이동전화 data.setdata("buyeremail", request.getparameter("buyeremail")); // 구매자이메일 data.setdata("paymethod", "HPP"); // 지불방법, 카드빌링 data.setdata("billkey", request.getparameter("billkey")); // 빌링등록키 ( 빌키 ) data.setdata("cardpass", request.getparameter("cardpass")); // 카드비번앞자리 2자리 data.setdata("reqnumber", request.getparameter("reqnumber")); // 주민번호앞 7자리및사업자번호 data.setdata("url", "http://www.your_domain.co.kr"); // 홈페이지주소 (URL) data.setdata("uip", request.getremoteaddr()); // IP Addr data.setdata("cardquota", request.getparameter("cardquota")); data.setdata("authentification",request.getparameter("authentification")); data.setdata("authfield1", request.getparameter("authfield1")); data.setdata("authfield2", request.getparameter("authfield2")); data.setdata("authfield3", request.getparameter("authfield3")); data.setdata("encodecharset","utf-8"); // 가맹점서버 UTF-8 인경우 iv. 빌링승인요청 data = inipay.payrequest(data); v. 빌링승인결과 Pub. Date: 2018. 10 Page XIX
5. 빌링방법 실시간빌링승인결과값받기. 표 4 결과값에대한정리 (INIreq_hpp.jsp) NAME VALUE NOTE tid TID 거래번호 40 자리 resultcode 00 또는 00 외의값 00 성공, 00 외의값은실패 resultmsg 결과메세지 pgauthdate 이니시스승인날짜 YYYYMMDD pgauthtime 이니시스승인시각 HHMMSS Page 20 Pub. Date: 2018. 10