KG이니시스 TX모듈을 사용하는 코드를 API로 전환 건

This commit is contained in:
thisgun
2023-04-13 20:10:48 +09:00
parent b01adc51c7
commit 4b92543c61
35 changed files with 457 additions and 6716 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,673 +0,0 @@
<?php
/**
* Copyright (C) 2007 INICIS Inc.
*
* 해당 라이브러리는 절대 수정되어서는 안됩니다.
* 임의로 수정된 코드에 대한 책임은 전적으로 수정자에게 있음을 알려드립니다.
*
* @version 5.0
* @author ddaemiri
*
* @buildno 5000
* @date 2007.12.27
* @note first release
*
* @buildno 5001
* @date 2008.01.15
* @note 자체에스크로 추가, DNS Lookup Timeout 추가, DNS Lookup 실패시 socket close안하는 부분 추가
* @date 2008.01.16
* @note Encrypt,Decrypt 모듈 개선, pkcs5 padding 추가
* @date 2008.01.24
* @note non block connect immediate return check code/str
* @date 2008.02.11
* @note key load 후 read에러발생시 fclose 추가
* @date 2008.03.03
* @note 참조에 의한 전달(passing by reference) 수정
* @date 2008.03.11
* @note 에스크로 망취소 Cmd 추가
* @date 2008.03.12
* @note 기존 연결된 IP로 망취소 수정
* @buildno 5002
* @note 망취소시 Sign추가(기존에 안했음->5001은 망취소시 서버측에서 서명오류가 남,그래도 망취소처리는 됨)
* @date 2008.03.12
* @buildno 5016
* @note pg1ip, pg2ip 추가/취소 원거래없음시 drpg로 재시도
* @date 2008.04.02
* @buildno 5017
* @note 1)chkfake시 파라미터 로깅 삭제(중복)
* 2)call-time pass-by-reference => pass-by-value로 수정
* @date 2009.01.12
* @buildno 5019
* @note delete UIP
* @date 2009.01.21
* @note add mkey/mergelog ( for Makeshop )
* @date 2009.02.24
* @note 1)define MKEY deprecated 2009.02.19 ( Makeshop 초기 한번나감. 서비스되고 있는지는 모름)
* 2)Makeshop PG Updrade용으로 새로나감 2009.02.19 (interface에서 mkey값을 받아 처리하게 변경)
* 3)Makeshop PG Updrade용으로 새로나감 2009.02.24 (interface에서 mergelog값을 받아 처리하게 변경)
* @date 2009.05.07
* @note add BUILDDATE in TXVersion
* @date 2009.08.05
* @buildno 5030
* @note add vacct refund
* @date 2009.12.16
* @buildno 5030
* @note add recv info
* @date 2010.07.14
* @note add Tax, TaxFree info(TX_TAX, TX_TAXFREE)
* @date 2010.09.09
* @note 취소요청시 PG 설정 변경(도메인->IP, INILib.php)
* @note BUILDDATE update(100414 -> 100909)
* @note 2011.05.23 5030 XML ELEMENT 중 ROOT 를 ROOTINFO로 수정
* @buildno 5032
* @note 2012.07.09 거래조회 추가 (TYPE_INQUIRY)
* @note 2012.07.09 PHP ini 파일 error display setting 추가
* @buildno 5036
* @note 2014.12.09 add gather parameter tid, type
* @note 20151113 주문번호 거래조회 추가
*/
ini_set('error_reporting', E_ALL ^ E_NOTICE);
ini_set('display_errors', 'Off');
/* GLOBAL */
define("PROGRAM", "INIPHP");
define("LANG", "PHP");
define("VERSION", "NV5053");
define("BUILDDATE", "20190404");
if( ! defined('TID_LEN')) define("TID_LEN", 40);
define("MAX_KEY_LEN", 24);
define("MAX_IV_LEN", 8);
/* TIMEOUT */
define("TIMEOUT_CONNECT", 5);
define("TIMEOUT_WRITE", 2);
define("TIMEOUT_READ", 20);
define("G_TIMEOUT_CONNECT", 2);
define("DNS_LOOKUP_TIMEOUT", 5);
/* LOG LEVEL */
define("CRITICAL", 1);
define("ERROR", 2);
define("NOTICE", 3);
define("INFO", 5);
define("DEBUG", 7);
/* SERVER INFO */
define("PG_HOST", "formpg.inicis.com");
define("PG_IP", "203.238.37.3");
define("KSPG_IP", "39.115.212.10");
define("PG_PORT", 34049);
define("G_SERVER", "gthr.inicis.com");
define("G_CGI", "/cgi-bin/g.cgi");
define("G_PORT", 80);
define("OK", "0");
define("IV", "Initiative Tech");
define("IMHK", "SFBQSU5JTkZPUk1BVElPTg==");
define("IMHV", "SU5JQ0lTIENJUEhFUi4uLg==");
define("IMJK", "UkVHSVNUX05PX1JDNEtFWQ==");
define("IMJV", "UkVHSVNUX05PX1JDNElW");
//define for mkey
//deprecated 2009.02.19 ( Makeshop 초기 한번나감. 서비스되고 있는지는 모름)
//Makeshop PG Updrade용으로 새로나감 2009.02.19 (interface에서 mkey값을 받아 처리하게 변경)
//define("MKEY", 1);
//non block connect immediate return check code/str
define("ERRSTR_INPROGRESS", "Operation now in progress");
define("ERRCODE_INPROGRESS_LINUX", 115);
define("ERRCODE_INPROGRESS_FREEBSD", 36);
define("ERRCODE_INPROGRESS_WIN", 10035);
//------------------------------------------------------
// IFD Header
//------------------------------------------------------
define("MSGHEADER_LEN", 150);
define("BODY_LEN", 5);
define("TAIL_LEN", 5);
define("FLGCRYPTO_LEN", 1);
define("FLGSIGN_LEN", 5);
define("MPUBSN_LEN", 20);
define("PIPGPUBSN_LEN", 20);
define("TXPGPUBSN_LEN", 20);
define("CMD_LEN", 4);
define("MID_LEN", 10);
define("TOTPRICE_LEN", 20);
//------------------------------------------------------
// IFD CMD
//------------------------------------------------------
define("CMD_REQ_PAY", "0200");
define("CMD_RES_PAY", "0210");
define("CMD_REQ_CAP", "0300");
define("CMD_RES_CAP", "0310");
define("CMD_REQ_CAN", "0420");
define("CMD_RES_CAN", "0430");
define("CMD_REQ_NETC", "0520");
define("CMD_RES_NETC", "0530");
define("CMD_REQ_PRTC", "0620");
define("CMD_RES_PRTC", "0630");
define("CMD_REQ_ACK", "0800");
define("CMD_RES_ACK", "0810");
//자체에스크로
//added 2008.01.08
define("CMD_REQ_DLV", "3020"); //배송등록
define("CMD_REQ_CNF", "3030"); //구매확인
define("CMD_REQ_DNY", "3040"); //구매거절
define("CMD_REQ_DNY_CNF", "3080"); //거절확인
define("CMD_REQ_DLV_NETC", "3520"); //배송등록망상취소
define("CMD_REQ_CNF_NETC", "3530"); //구매확인망상취소
define("CMD_REQ_DNY_NETC", "3540"); //구매거절망상취소
//가상계좌환불(09.08.05)
define("CMD_REQ_RFD", "0421");
define("CMD_RES_RFD", "0431");
//거래조회(12.04.20)
define("CMS_REQ_INQR", "0900");
define("CMS_RES_INQR", "0910");
//서브몰하위가맹점등록(14.03.06)
define("CMS_REQ_OPEN_SUB", "1040");
define("CMS_RES_OPEN_SUB", "1041");
//------------------------------------------------------
// HEADER FLAGS
//------------------------------------------------------
define("FLAG_TEST", "T");
define("FLAG_REAL", "R");
define("FLAG_CRYPTO_NONE", "N");
define("FLAG_CRYPTO_SEED", "S");
define("FLAG_CRYPTO_RC4", "R");
define("FLAG_CRYPTO_3DES", "D");
define("FLAG_SIGN_SHA", "SHA");
define("FLAG_SIGN_SHA1", "SHA1");
define("FLAG_SIGN_MD5", "MD5");
//------------------------------------------------------
//TYPE(서비스별)
//------------------------------------------------------
define("TYPE_SECUREPAY", "securepay");
define("TYPE_CANCEL", "cancel");
define("TYPE_FORMPAY", "formpay");
define("TYPE_RECEIPT", "receipt");
define("TYPE_REPAY", "repay");
define("TYPE_ESCROW", "escrow"); //자체에스크로!
define("TYPE_CONFIRM", "confirm");
define("TYPE_OCBQUERY", "ocbquery");
define("TYPE_OCBSAVE", "ocbsave");
define("TYPE_OCBPOINT", "OCBPoint");
define("TYPE_AUTH", "auth");
define("TYPE_AUTHBILL", "auth_bill");
define("TYPE_CAPTURE", "capture");
define("TYPE_CMS", "CMS");
define("TYPE_VBANK", "VBank");
define("TYPE_REQREALBILL", "reqrealbill");
define("TYPE_FORMAUTH", "formauth");
define("TYPE_CHKFAKE", "chkfake");
//가상계좌환불(09.08.05)
define("TYPE_REFUND", "refund");
//가상계좌부분환불(12.06.05)
define("TYPE_VACCTREPAY", "vacctrepay");
//거래조회(12.04.20)
define("TYPE_INQUIRY", "inquiry");
//서브몰하위가맹점등록(14.03.06)
define("TYPE_OPENSUB", "opensub");
//------------------------------------------------------
//EscrowType(자체에스크로 타입)
//added 2008.01.08
//------------------------------------------------------
define("TYPE_ESCROW_DLV", "dlv");
define("TYPE_ESCROW_CNF", "confirm"); //구매확인/거절(플러그인)
define("TYPE_ESCROW_DNY", "deny"); //위에서 처리됨,의미없음
define("TYPE_ESCROW_DNY_CNF", "dcnf");
//------------------------------------------------------
//PayMethod(서비스별, TX)
//------------------------------------------------------
define("NM_TX_ISP", "VCard");
define("NM_TX_CARD", "Card");
define("NM_TX_HPP", "HPP");
define("NM_TX_ACCT", "DirectBank");
define("NM_TX_VACT", "VBank");
define("NM_TX_OCB", "OCBPoint");
define("NM_TX_CSHR", "CASH");
define("NM_TX_ARSB", "Ars1588Bill");
define("NM_TX_PHNB", "PhoneBill");
define("NM_TX_CULT", "Culture");
define("NM_TX_GAMG", "DGCL");
define("NM_TX_EDUG", "EDCL");
define("NM_TX_TEEN", "TEEN");
define("NM_TX_ESCR", "Escrow");
//------------------------------------------------------
//PayMethod(서비스별, PG)
//------------------------------------------------------
define("NM_ISP", "ISP");
define("NM_CARD", "CARD");
define("NM_HPP", "HPP");
define("NM_ACCT", "ACCT");
define("NM_VACT", "VACT");
define("NM_OCB", "OCB");
define("NM_CSHR", "CASH");
define("NM_ARSB", "ARSB");
define("NM_PHNB", "PHNB");
define("NM_CULT", "CULT");
define("NM_GAMG", "DGCL");
define("NM_EDUG", "EDCL");
define("NM_TEEN", "TEEN");
define("NM_ESCR", "Escrow");
//------------------------------------------------------
//Charset
//------------------------------------------------------
define("EUCKR", "EUC-KR");
define("UTF8", "UTF-8");
//------------------------------------------------------
//URL Encoding/Decoding Name
//------------------------------------------------------
define("URLENCODE", "urlencode");
define("URLDECODE", "urldecode");
//------------------------------------------------------
//요청전문
//------------------------------------------------------
define("TX_GOOSCNT", "GoodsCnt");
define("TX_MOID", "MOID");
define("TX_CURRENCY", "Currency");
define("TX_SMID", "SMID");
define("TX_GOODSCNTS", "GoodsCnts");
define("TX_GOODSNAME", "GoodsName");
define("TX_GOODSPRICE", "GoodsPrice");
define("TX_BUYERNAME", "BuyerName");
define("TX_BUYEREMAIL", "BuyerEmail");
define("TX_BUYERTEL", "BuyerTel");
define("TX_PARENTEMAIL", "ParentEmail");
define("TX_RECVNAME", "RecvName");
define("TX_RECVTEL", "RecvTel");
define("TX_RECVMSG", "RecvMsg");
define("TX_RECVADDR", "RecvAddr");
define("TX_RECVPOSTNUM", "RecvPostNum");
define("TX_TAXFREE", "TaxFree");
define("TX_TAX", "Tax");
//PaymentInfo
define("TX_PAYMETHOD", "PayMethod");
define("TX_JOINCARD", "JoinCard");
define("TX_JOINEXPIRE", "JoinExpire");
define("TX_MAILORDER", "MailOrder");
define("TX_SESSIONKEY", "SessionKey");
define("TX_ENCRYPTED", "Encrypted");
//ReservedInfo
define("TX_MRESERVED1", "MReserved1");
define("TX_MRESERVED2", "MReserved2");
define("TX_MRESERVED3", "MReserved3");
//ManageInfo
define("TX_LANGUAGE", "Language");
define("TX_URL", "URL");
define("TX_TXVERSION", "TXVersion");
define("TX_TXUSERIP", "TXUserIP");
define("TX_TXUSERID", "TXUserID");
define("TX_TXREGNUM", "TXRegNum");
define("TX_ACK", "Ack");
define("TX_RN", "TXRN");
//CancelInfo
define("TX_CANCELTID", "CancelTID");
define("TX_CANCELMSG", "CancelMsg");
define("TX_CANCELREASON", "CancelReason"); //2012-10-19 취소사유코드 추가
//가상계좌환불(09.08.05)
define("TX_REFUNDACCTNUM", "RefundAcctNum");
define("TX_REFUNDBANKCODE", "RefundBankCode");
define("TX_REFUNDACCTNAME", "RefundAcctName");
define("TX_REFUNDFLGREMIT", "RefundFlgRemit");
//PartCancelInfo
define("TX_PRTC_TID", "PRTC_TID");
define("TX_PRTC_PRICE", "PRTC_Price");
define("TX_PRTC_REMAINS", "PRTC_Remains");
define("TX_PRTC_QUOTA", "PRTC_Quota");
define("TX_PRTC_INTEREST", "PRTC_Interest");
define("TX_PRTC_TAX", "Tax");
define("TX_PRTC_TAXFREE", "TaxFree");
define("TX_PRTC_CURRENCY", "Currency");
//국민은행 I계좌이체 부분취소시 계좌번호/계좌주성명추가 2011-10-06
define("TX_PRTC_NOACCT", "PRTC_NoAcctFNBC");
define("TX_PRTC_NMACCT", "PRTC_NmAcctFNBC");
//가상계좌 부분환불 관련 추가
define("TX_PRTC_REFUNDFLGREMIT", "PRTC_RefundFlgRemit");
define("TX_PRTC_REFUNDBANKCODE", "PRTC_RefundBankCode");
//CaptureInfo
define("TX_CAPTURETID", "CaptureTID");
//현금영수증
define("TX_CSHR_APPLPRICE", "CSHR_ApplPrice");
define("TX_CSHR_SUPPLYPRICE", "CSHR_SupplyPrice");
define("TX_CSHR_TAX", "CSHR_Tax");
define("TX_CSHR_SERVICEPRICE", "CSHR_ServicePrice");
define("TX_CSHR_REGNUM", "CSHR_RegNum");
define("TX_CSHR_TYPE", "CSHR_Type");
define("TX_CSHR_COMPANYNUM", "CSHR_CompanyNum");
define("TX_CSHR_OPENMARKET", "CSHR_OpenMarket");
define("TX_CSHR_SUBCNT", "CSHR_SubCnt");
define("TX_CSHR_SUBCOMPANYNAME1", "CSHR_SubCompanyName1");
define("TX_CSHR_SUBCOMPANYNUM1", "CSHR_SubCompanyNum1");
define("TX_CSHR_SUBREGNUM1", "CSHR_SubRegNum1");
define("TX_CSHR_SUBMID1", "CSHR_SubMID1");
define("TX_CSHR_SUBAPPLPRICE1", "CSHR_SubApplPrice1");
define("TX_CSHR_SUBSERVICEPRICE1", "CSHR_SubServicePrice1");
//거래조회(12.04.20)
define("TX_INQR_TID", "INQR_TID");
define("TX_INQR_OID", "INQR_OID");
//서브몰하위가맹점등록(14.03.06)
define("TX_OPENREG_TID", "OrgTID");
define("TX_OPENREG_MID", "MID");
define("TX_OPENREG_SUBCNT", "SubCnt");
define("TX_OPENREG_SUBGOODS", "SubGoods");
define("TX_OPENREG_SUBCOMPNO", "SubCompNo");
define("TX_OPENREG_SUBCOMPNM", "SubCompNm");
define("TX_OPENREG_SUBPRSUPPLY", "SubPrSupply");
define("TX_OPENREG_SUBPRFREE", "SubPrFree");
define("TX_OPENREG_SUBPRTAX", "SubPrTax");
define("TX_OPENREG_SUBPRSERVICE", "SubPrService");
define("TX_OPENREG_SUBPRICE", "SubPrice");
//------------------------------------------------------
//
//응답전문
//
//------------------------------------------------------
//HEAD
define("NM_MID", "MID");
define("NM_TID", "TID");
define("NM_TOTPRICE", "TotPrice");
//BODY
define("NM_GOODSCNT", "GoodsCnt");
define("NM_MOID", "MOID");
define("NM_CURRENCY", "Currency");
define("NM_SMID", "SMID");
define("NM_GOODSNAME", "GoodsName");
define("NM_GOODSPRICE", "GoodsPrice");
define("NM_PAYMETHOD", "PayMethod");
define("NM_RESULTCODE", "ResultCode");
define("NM_RESULTERRORCODE", "ResultErrorCode");
define("NM_RESULTMSG", "ResultMsg");
define("NM_SESSIONKEY", "SessionKey");
define("NM_ENCRYPTED", "Encrypted");
define("NM_CANCELDATE", "CancelDate");
define("NM_CANCELTIME", "CancelTime");
define("NM_EVENTCODE", "EventCode");
define("NM_ORGCURRENCY", "OrgCurrency");
define("NM_ORGPRICE", "OrgPrice");
define("NM_EXCHANGERATE", "ExchangeRate");
define("NM_RESERVEDINFO", "ReservedInfo");
define("NM_MRESERVED1", "MReserved1");
define("NM_MRESERVED2", "MReserved2");
define("NM_MRESERVED3", "MReserved3");
define("PRTC_TID", "PRTC_TID");
define("PRTC_PRICE", "PRTC_Price");
define("PRTC_REMAINS", "PRTC_Remains");
define("PRTC_QUOTA", "PRTC_Quota");
define("PRTC_INTEREST", "PRTC_Interest");
define("PRTC_TYPE", "PRTC_Type");
define("PRTC_CNT", "PRTC_Cnt");
define("NM_CAPTUREDATE", "CaptureDate");
define("NM_CAPTURETIME", "CaptureTime");
define("NM_PGPUBKEY", "PGcertKey");
//RECV DATA XPATH
//XML XPATH
define("ROOTINFO", "INIpay");
define("GOODSINFO", "GoodsInfo");
define("GOODS", "Goods");
define("BUYERINFO", "BuyerInfo");
define("PAYMENTINFO", "PaymentInfo");
define("PAYMENT", "Payment");
define("MANAGEINFO", "ManageInfo");
define("RESERVEDINFO", "ReservedInfo");
//Cancel(NetCancel)
define("CANCELINFO", "CancelInfo");
//PartCancel Encrypt
define("PARTCANCELINFO", "PartCancelInfo");
//Capture
define("CAPTUREINFO", "CaptureInfo");
//거래조회(12.04.20)
define("INQUIRYINFO", "InquiryInfo");
//서브몰하위가맹점등록(14.03.06)
define("OPENSUBINFO", "OpenSubInfo");
//Escrow
//added 2008.01.09
define("ESCROWINFO", "EscrowInfo");
define("ESCROW_DELIVERY", "Delivery");
define("ESCROW_CONFIRM", "Confirm");
define("ESCROW_DENY", "Deny");
define("ESCROW_DENYCONFIRM", "DenyConfirm");
//------------------------------------------------------
//Auth Encrypt XPATH
//------------------------------------------------------
//CARD COMMON
define("APPLDATE", "ApplDate");
define("APPLTIME", "ApplTime");
define("APPLNUM", "ApplNum");
//CARD
define("CARD_NUM", "CARD_Num");
define("CARD_EXPIRE", "CARD_Expire");
define("CARD_CODE", "CARD_Code");
define("CARD_APPLPRICE", "CARD_ApplPrice");
define("CARD_BANKCODE", "CARD_BankCode");
define("CARD_QUOTA", "CARD_Quota");
define("CARD_INTEREST", "CARD_Interest");
define("CARD_POINT", "CARD_Point");
define("CARD_AUTHTYPE", "CARD_AuthType");
define("CARD_REGNUM", "CARD_RegNum");
define("CARD_APPLDATE", "CARD_ApplDate");
define("CARD_APPLTIME", "CARD_ApplTime");
define("CARD_APPLNUM", "CARD_ApplNum");
define("CARD_RESULTCODE", "CARD_ResultCode");
define("CARD_RESULTMSG", "CARD_ResultMsg");
define("CARD_TERMINALNUM", "CARD_TerminalNum");
define("CARD_MEMBERNUM", "CARD_MemberNum");
define("CARD_PURCHASECODE", "CARD_PurchaseCode");
//ISP
define("ISP_BANKCODE", "ISP_BankCode");
define("ISP_QUOTA", "ISP_Quota");
define("ISP_INTEREST", "ISP_Interest");
define("ISP_APPLPRICE", "ISP_ApplPrice");
define("ISP_CARDCODE", "ISP_CardCode");
define("ISP_CARDNUM", "ISP_CardNum");
define("ISP_POINT", "ISP_Point");
define("ISP_APPLDATE", "ISP_ApplDate");
define("ISP_APPLTIME", "ISP_ApplTime");
define("ISP_APPLNUM", "ISP_ApplNum");
define("ISP_RESULTCODE", "ISP_ResultCode");
define("ISP_RESULTMSG", "ISP_ResultMsg");
define("ISP_TERMINALNUM", "ISP_TerminalNum");
define("ISP_MEMBERNUM", "ISP_MemberNum");
define("ISP_PURCHASECODE", "ISP_PurchaseCode");
//ACCT
define("ACCT_APPLDATE", "ACCT_ApplDate");
define("ACCT_APPLTIME", "ACCT_ApplTime");
define("ACCT_APPLNUM", "ACCT_ApplNum");
//HPP
define("HPP_APPLDATE", "HPP_ApplDate");
define("HPP_APPLTIME", "HPP_ApplTime");
define("HPP_APPLNUM", "HPP_ApplNum");
//VACT
define("VACT_APPLDATE", "VACT_ApplDate");
define("VACT_APPLTIME", "VACT_ApplTime");
//CASH
define("CSHR_APPLDATE", "CSHR_ApplDate");
define("CSHR_APPLTIME", "CSHR_ApplTime");
define("CSHR_APPLNUM", "CSHR_ApplNum");
//ARSB
define("ARSB_APPLDATE", "ARSB_ApplDate");
define("ARSB_APPLTIME", "ARSB_ApplTime");
define("ARSB_APPLNUM", "ARSB_ApplNum");
//PHNB
define("PHNB_APPLDATE", "PHNB_ApplDate");
define("PHNB_APPLTIME", "PHNB_ApplTime");
define("PHNB_APPLNUM", "PHNB_ApplNum");
//CULT
define("CULT_APPLDATE", "CULT_ApplDate");
define("CULT_APPLTIME", "CULT_ApplTime");
define("CULT_APPLNUM", "CULT_ApplNum");
//DGCL
define("GAMG_CNT", "GAMG_Cnt");
define("GAMG_APPLDATE", "GAMG_ApplDate");
define("GAMG_APPLTIME", "GAMG_ApplTime");
define("GAMG_APPLNUM", "GAMG_ApplNum");
function MakePathGAMG($cnt) {
for ($i = 1; $i <= $cnt; $i++) {
define("GAMG_NUM$i", "GAMG_Num$i");
define("GAMG_REMAINS$i", "GAMG_Remains$i");
define("GAMG_ERRMSG$i", "GAMG_ErrMsg$i");
}
}
//EDUG
define("EDUG_APPLDATE", "EDUG_ApplDate");
define("EDUG_APPLTIME", "EDUG_ApplTime");
define("EDUG_APPLNUM", "EDUG_ApplNum");
//TEEN
define("TEEN_APPLDATE", "TEEN_ApplDate");
define("TEEN_APPLTIME", "TEEN_ApplTime");
define("TEEN_APPLNUM", "TEEN_ApplNum");
//----------------------------------
//ERROR CODE
//----------------------------------
//!!신TX에 추가된 에러!!!
define("NULL_DIR_ERR", "TX9001");
define("NULL_TYPE_ERR", "TX9002");
define("NULL_NOINTEREST_ERR", "TX9003");
define("NULL_QUOTABASE_ERR", "TX9004");
define("DNS_LOOKUP_ERR", "TX9005");
define("MERCHANT_DB_ERR", "TX9006");
define("DNS_LOOKUP_TIMEOUT_ERR", "TX9007");
define("PGPUB_UPDATE_ERR", "TX9612");
//암복호화 에러
define("B64DECODE_UPDATE_ERR", "TX9101");
define("B64DECODE_FINAL_ERR", "TX9102");
define("B64DECODE_LENGTH_ERR", "TX9103");
define("GET_KEYPW_EVP_B2K_ERR", "TX9104");
define("GET_KEYPW_FILE_OPEN_ERR", "TX9105");
define("GET_KEYPW_FILE_READ_ERR", "TX9106");
define("GET_KEYPW_DECRYPT_INIT_ERR", "TX9107");
define("GET_KEYPW_DECRYPT_UPDATE_ERR", "TX9108");
define("GET_KEYPW_DECRYPT_FINAL_ERR", "TX9109");
define("ENC_RAND_BYTES_ERR", "TX9110");
define("ENC_INIT_ERR", "TX9111");
define("ENC_UPDATE_ERR", "TX9112");
define("ENC_FINAL_ERR", "TX9113");
define("ENC_RSA_ERR", "TX9114");
define("DEC_RSA_ERR", "TX9115");
define("DEC_CIPHER_ERR", "TX9116");
define("DEC_INIT_ERR", "TX9117");
define("DEC_UPDATE_ERR", "TX9118");
define("DEC_FINAL_ERR", "TX9119");
define("SIGN_FINAL_ERR", "TX9120");
define("SIGN_CHECK_ERR", "TX9121");
define("ENC_NULL_F_ERR", "TX9122");
define("ENC_INIT_RAND_ERR", "TX9123");
define("ENC_PUTENV_ERR", "TX9124");
//필드체크
define("NULL_KEYPW_ERR", "TX9201");
define("NULL_MID_ERR", "TX9202");
define("NULL_PGID_ERR", "TX9203");
define("NULL_TID_ERR", "TX9204");
define("NULL_UIP_ERR", "TX9205");
define("NULL_URL_ERR", "TX9206");
define("NULL_PRICE_ERR", "TX9207");
define("NULL_PRICE1_ERR", "TX9208");
define("NULL_PRICE2_ERR", "TX9209");
define("NULL_CARDNUMBER_ERR", "TX9210");
define("NULL_CARDEXPIRE_ERR", "TX9211");
define("NULL_ENCRYPTED_ERR", "TX9212");
define("NULL_CARDQUOTA_ERR", "TX9213");
define("NULL_QUOTAINTEREST_ERR", "TX9214");
define("NULL_AUTHENTIFICATION_ERR", "TX9215");
define("NULL_AUTHFIELD1_ERR", "TX9216");
define("NULL_AUTHFIELD2_ERR", "TX9217");
define("NULL_BANKCODE_ERR", "TX9218");
define("NULL_BANKACCOUNT_ERR", "TX9219");
define("NULL_REGNUMBER_ERR", "TX9220");
define("NULL_OCBCARDNUM_ERR", "TX9221");
define("NULL_OCBPASSWD_ERR", "TX9222");
define("NULL_PASSWD_ERR", "TX9223");
define("NULL_CURRENCY_ERR", "TX9224");
define("NULL_PAYMETHOD_ERR", "TX9225");
define("NULL_GOODNAME_ERR", "TX9226");
define("NULL_BUYERNAME_ERR", "TX9227");
define("NULL_BUYERTEL_ERR", "TX9228");
define("NULL_BUYEREMAIL_ERR", "TX9229");
define("NULL_SESSIONKEY_ERR", "TX9230");
//pg공개키 로드 오류
define("NULL_PGCERT_FP_ERR", "TX9231");
define("NULL_X509_ERR", "TX9232");
define("NULL_PGCERT_ERR", "TX9233");
define("RESULT_MSG_FORMAT_ERR", "TX9234");
// 가상 계좌 이체 예약
define("NULL_PERNO_ERR", "TX9235"); // 주민번호 빠짐
define("NULL_OID_ERR", "TX9236"); // 주문번호 빠짐
define("NULL_VCDBANK_ERR", "TX9237"); // 은행코드 빠짐
define("NULL_DTINPUT_ERR", "TX9238"); // 입금 예정일 빠짐
define("NULL_NMINPUT_ERR", "TX9239"); // 송금자 성명 빠짐
//실시간 빌링
define("NULL_BILLKEY_ERR", "TX9240"); // 빌키 빠짐
define("NULL_CARDPASS_ERR", "TX9241"); // 카드 비번 빠짐
define("NULL_BILLTYPE_ERR", "TX9242"); // 빌타입 누락
// CMS 계좌이체
define("NULL_PRICE_ORG_ERR", "TX9250"); // CMS 출금총금액 빠짐
define("NULL_CMSDAY_ERR", "TX9251"); // CMS 출금일자 빠짐
define("NULL_CMSDATEFROM_ERR", "TX9252"); // CMS 출금시작월 빠짐
define("NULL_CMSDATETO_ERR", "TX9253"); // CMS 출금종료월 빠짐
// 부분취소
define("NULL_CONFIRM_PRICE_ERR", "TX9260"); // 재승인 요청금액 누락 에러
// 현금영수증 발행
define("NULL_CR_PRICE_ERR", "TX9270"); // 현금결제 금액 빠짐
define("NULL_SUP_PRICE_ERR", "TX9271"); // 공급가액 빠짐
define("NULL_TAX_ERR", "TX9272"); // 부가세 빠짐
define("NULL_SRVC_PRICE_ERR", "TX9273"); // 봉사료 빠짐
define("NULL_REG_NUM_ERR", "TX9274"); // 주민번호(사업자번호)
define("NULL_USEOPT_ERR", "TX9275"); // 현금영수증 용도 구분자 빠짐
define("PRIVKEY_FILE_OPEN_ERR", "TX9301");
define("INVALID_KEYPASS_ERR", "TX9302");
define("MAKE_TID_ERR", "TX9401");
define("ACK_CHECKSUM_ERR", "TX9402");
define("NETCANCEL_SOCK_CREATE_ERR", "TX9403");
define("NETCANCEL_SOCK_SEND_ERR", "TX9404");
define("NETCANCEL_SOCK_RECV_ERR", "TX9405");
define("LOG_OPEN_ERR", "TX9406");
define("LOG_WRITE_ERR", "TX9407");
define("SOCK_MAKE_EP_ERR", "TX9501");
define("SOCK_CONN_ERR", "TX9502");
define("SOCK_SEND1_ERR", "TX9503");
define("SOCK_SEND2_ERR", "TX9504");
define("SOCK_CLOSED_BY_PEER_ERR", "TX9505");
define("SOCK_RECV1_ERR", "TX9506");
define("SOCK_RECV2_ERR", "TX9507");
define("SOCK_RECV_LEN_ERR", "TX9508");
define("SOCK_TIMEO_ERR", "TX9509");
define("SOCK_ETC1_ERR", "TX9510");
define("SOCK_ETC2_ERR", "TX9511");
define("NULL_ESCROWTYPE_ERR", "TX6000");
define("NULL_ESCROWMSG_ERR", "TX6001");
define("NULL_FIELD_REFUNDACCTNUM", "TX9245");
define("NULL_FIELD_REFUNDBANKCODE", "TX9243");
define("NULL_FIELD_REFUNDACCTNAME", "TX9244");

View File

@ -1,735 +0,0 @@
<?php
/**
* Copyright (C) 2007 INICIS Inc.
*
* 해당 라이브러리는 절대 수정되어서는 안됩니다.
* 임의로 수정된 코드에 대한 책임은 전적으로 수정자에게 있음을 알려드립니다.
*
*/
require_once('INICls.php');
require_once('INISoc.php');
class INIpay50 {
var $m_type; // 거래 유형
var $m_resulterrcode; // 결과메세지 에러코드
var $m_connIP;
var $m_cancelRC = 0;
var $m_Data;
var $m_Log;
var $m_Socket;
var $m_Crypto;
var $m_REQUEST = array();
var $m_REQUEST2 = array();
var $m_RESULT = array();
function INIpay() {
$this->UnsetField();
}
function UnsetField() {
unset($this->m_REQUEST);
unset($this->m_RESULT);
}
/* -------------------------------------------------- */
/* */
/* 결제/취소 요청값 Set or Add */
/* */
/* -------------------------------------------------- */
function SetField($key, $val) { //Default Entity
$this->m_REQUEST[$key] = $val;
}
function SetXPath($xpath, $val) { //User Defined Entity
$this->m_REQUEST2[$xpath] = $val;
}
/* -------------------------------------------------- */
/* */
/* 결제/취소 결과값 fetch */
/* */
/* -------------------------------------------------- */
function GetResult($name) { //Default Entity
$result = isset($this->m_RESULT[$name]) ? $this->m_RESULT[$name] : '';
if ($result == "")
$result = $this->m_Data->GetXMLData($name);
if ($result == "")
$result = $this->m_Data->m_RESULT[$name];
return $result;
}
/* -------------------------------------------------- */
/* */
/* 결제/취소 처리 메인 */
/* */
/* -------------------------------------------------- */
function startAction() {
/* -------------------------------------------------- */
/* Overhead Operation */
/* -------------------------------------------------- */
$this->m_Data = new INIData($this->m_REQUEST, $this->m_REQUEST2);
/* -------------------------------------------------- */
/* Log Start */
/* -------------------------------------------------- */
$this->m_Log = new INILog($this->m_REQUEST);
if (!$this->m_Log->StartLog()) {
$this->MakeTXErrMsg(LOG_OPEN_ERR, "로그파일을 열수가 없습니다.[" . $this->m_REQUEST["inipayhome"] . "]");
return;
}
/* -------------------------------------------------- */
/* Logging Request Parameter */
/* -------------------------------------------------- */
$this->m_Log->WriteLog(DEBUG, $this->m_REQUEST);
/* -------------------------------------------------- */
/* Set Type */
/* -------------------------------------------------- */
$this->m_type = $this->m_REQUEST["type"];
/* -------------------------------------------------- */
/* Check Field */
/* -------------------------------------------------- */
if (!$this->m_Data->CheckField()) {
$err_msg = "필수항목(" . $this->m_Data->m_ErrMsg . ")이 누락되었습니다.";
$this->MakeTXErrMsg($this->m_Data->m_ErrCode, $err_msg);
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
return;
}
$this->m_Log->WriteLog(INFO, "Check Field OK");
/* -------------------------------------------------- */
//웹페이지위변조용 키생성. 여기서 끝!!
/* -------------------------------------------------- */
if ($this->m_type == TYPE_CHKFAKE) {
return $this->MakeChkFake();
}
//TID 인입 기반 거래의 경우 TID 를 기록함
$temp_request = array_change_key_case($this->m_REQUEST, CASE_LOWER);
if(isset($temp_request['tid'])){
$this->m_Log->WriteLog(INFO, "INPUT TID > ".$temp_request['tid']);
}
/* -------------------------------------------------- */
//Generate TID
/* -------------------------------------------------- */
if ($this->m_type == TYPE_SECUREPAY || $this->m_type == TYPE_FORMPAY || $this->m_type == TYPE_OCBSAVE ||
$this->m_type == TYPE_AUTHBILL || $this->m_type == TYPE_FORMAUTH || $this->m_type == TYPE_REQREALBILL ||
$this->m_type == TYPE_REPAY || $this->m_type == TYPE_VACCTREPAY || $this->m_type == TYPE_RECEIPT || $this->m_type == TYPE_AUTH
) {
if (!$this->m_Data->MakeTID()) {
$err_msg = "TID생성에 실패했습니다.::" . $this->m_Data->m_sTID;
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg(MAKE_TID_ERR, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
return;
}
$this->m_Log->WriteLog(INFO, 'Make TID OK ' . $this->m_Data->m_sTID);
}
$this->m_Crypto = new INICrypto($this->m_REQUEST);
/* -------------------------------------------------- */
//PI공개키 로드
/* -------------------------------------------------- */
$this->m_Data->ParsePIEncrypted();
$this->m_Log->WriteLog(INFO, "PI PUB KEY LOAD OK [" . $this->m_Data->m_PIPGPubSN . "]");
/* -------------------------------------------------- */
//PG공개키 로드
/* -------------------------------------------------- */
if (($rtv = $this->m_Crypto->LoadPGPubKey($pg_cert_SN)) != OK) {
$err_msg = "PG공개키 로드오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
return;
}
$this->m_Data->m_TXPGPubSN = $pg_cert_SN;
$this->m_Log->WriteLog(INFO, "PG PUB KEY LOAD OK [" . $this->m_Data->m_TXPGPubSN . "]");
/* -------------------------------------------------- */
//상점개인키 로드
/* -------------------------------------------------- */
if (($rtv = $this->m_Crypto->LoadMPrivKey()) != OK) {
$err_msg = "상점개인키 로드오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreePubKey();
return;
}
$this->m_Log->WriteLog(INFO, "MERCHANT PRIV KEY LOAD OK");
/* -------------------------------------------------- */
//상점 공개키 로드(SN 를 알기위해!!)
/* -------------------------------------------------- */
if (($rtv = $this->m_Crypto->LoadMPubKey($m_cert_SN)) != OK) {
$err_msg = "상점공개키 로드오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
return;
}
$this->m_Data->m_MPubSN = $m_cert_SN;
$this->m_Log->WriteLog(INFO, "MERCHANT PUB KEY LOAD OK [" . $this->m_Data->m_MPubSN . "]");
/* -------------------------------------------------- */
//폼페이 암호화( formpay, cancel, repay, recept, inquiry, opensub)
/* -------------------------------------------------- */
if ($this->m_type == TYPE_CANCEL || $this->m_type == TYPE_REPAY || $this->m_type == TYPE_VACCTREPAY ||
$this->m_type == TYPE_FORMPAY || $this->m_type == TYPE_RECEIPT ||
$this->m_type == TYPE_CAPTURE || $this->m_type == TYPE_INQUIRY || $this->m_type == TYPE_OPENSUB ||
($this->m_type == TYPE_ESCROW && $this->m_Data->m_EscrowType == TYPE_ESCROW_DLV ) ||
($this->m_type == TYPE_ESCROW && $this->m_Data->m_EscrowType == TYPE_ESCROW_DNY_CNF ) ||
$this->m_type == TYPE_REFUND
) {
if (($rtv = $this->m_Data->MakeEncrypt($this->m_Crypto)) != OK) {
$err_msg = "암호화 오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
return;
}
//$this->m_Log->WriteLog( DEBUG, "MAKE ENCRYPT OK" );
$this->m_Log->WriteLog(DEBUG, "MAKE ENCRYPT OK[" . $this->m_Data->m_EncBody . "]");
}
/* -------------------------------------------------- */
//전문생성(Body)
/* -------------------------------------------------- */
$this->m_Data->MakeBody();
$this->m_Log->WriteLog(INFO, "MAKE BODY OK");
//$this->m_Log->WriteLog( INFO, "MAKE BODY OK[".$this->m_Data->m_sBody."]" );
/* -------------------------------------------------- */
//서명(sign)
/* -------------------------------------------------- */
if (($rtv = $this->m_Crypto->Sign($this->m_Data->m_sBody, $sign)) != OK) {
$err_msg = "싸인실패";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Data->m_sTail = $sign;
$this->m_Log->WriteLog(INFO, "SIGN OK");
//$this->m_Log->WriteLog( INFO, "SIGN OK[".$sign."]" );
/* -------------------------------------------------- */
//전문생성(Head)
/* -------------------------------------------------- */
$this->m_Data->MakeHead();
$this->m_Log->WriteLog(INFO, "MAKE HEAD OK");
//$this->m_Log->WriteLog( INFO, "MAKE HEAD OK[".$head."]" );
$this->m_Log->WriteLog(DEBUG, "MSG_TO_PG:[" . $this->m_Data->m_sMsg . "]");
/* -------------------------------------------------- */
//소켓생성
/* -------------------------------------------------- */
//플러그인 에스크로 결제 구분 설정
$is_plugin_escrow = FALSE;
if($this->m_type == TYPE_ESCROW && ($this->m_Data->m_EscrowType == TYPE_ESCROW_CNF || $this->m_Data->m_EscrowType == TYPE_ESCROW_DNY)) $is_plugin_escrow = TRUE;
if(isset($this->m_REQUEST["pgn"]) && $this->m_REQUEST["pgn"] != "") {
$host = $this->m_REQUEST["pgn"];
} else {
if ($this->m_type == TYPE_SECUREPAY || $is_plugin_escrow == TRUE) { //plugin
$host = $this->m_Data->m_PG1;
} else if ($this->m_cancelRC == 1){ //원거래없음
$host = KSPG_IP;
} else {
$host = PG_HOST;
}
}
$this->m_Socket = new INISocket($host);
//1차 NSLOOKUP FAIL
if (($rtv = $this->m_Socket->DNSLookup()) != OK) {
$err_msg = "[" . $host . "] 1차 DNS LOOKUP 실패" . $this->m_Socket->getErr();
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
if ($this->m_type == TYPE_SECUREPAY || $is_plugin_escrow == TRUE) {
$this->m_Socket->ip = $this->m_Data->m_PG1IP;
} else {
if ($this->m_cancelRC == 1) $this->m_Socket->ip = KSPG_IP;
else $this->m_Socket->ip = PG_IP;
}
}
$this->m_Log->WriteLog(INFO, "DNS LOOKUP OK(" . $this->m_Socket->host . ", " . $this->m_Socket->ip . ":" . $this->m_Socket->port . ") laptime:" . $this->m_Socket->dns_laptime);
if (($rtv = $this->m_Socket->open()) != OK) {
$this->m_Socket->close();
//PG2로 전환
$err_msg = "[" . $host."(". $this->m_Socket->ip .") 소켓연결오류(1차):: 2차 연결시도";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
if ($this->m_type == TYPE_SECUREPAY || $is_plugin_escrow == TRUE) {
$host = $this->m_Data->m_PG2;
} else {
$host = $this->m_Socket->ip == PG_IP ? KSPG_IP:PG_IP;
}
$this->m_Socket = new INISocket($host);
//SECUREPAY만 2차 NSLOOKUP 진행, 이외는 IP통신
if ($this->m_type == TYPE_SECUREPAY || $is_plugin_escrow == TRUE) {
if (($rtv = $this->m_Socket->DNSLookup()) != OK) {
$err_msg = "[" . $host . "] 2차 DNS LOOKUP 실패" . $this->m_Socket->getErr();
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Socket->ip = $this->m_Data->m_PG2IP;
}
} else {
$this->m_Socket->ip = $host;
}
$this->m_Log->WriteLog(INFO, "DNS LOOKUP OK(" . $this->m_Socket->host . ", " . $this->m_Socket->ip . ":" . $this->m_Socket->port . ") laptime:" . $this->m_Socket->dns_laptime);
if (($rtv = $this->m_Socket->open()) != OK) {
$err_msg = "[" . $host . "소켓연결오류(2차)::" . $this->m_Socket->getErr();
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Socket->close();
$this->m_Crypto->FreeAllKey();
return;
}
}
$this->m_connIP = $this->m_Socket->ip;
$this->m_Log->WriteLog(INFO, "SOCKET CONNECT OK");
/* -------------------------------------------------- */
//전문송신
/* -------------------------------------------------- */
if (($rtv = $this->m_Socket->send($this->m_Data->m_sMsg)) != OK) {
$err_msg = "소켓송신오류(MAIN)::" . $this->m_Socket->getErr();
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
$this->m_Socket->close();
return;
}
$this->m_Log->WriteLog(INFO, "SEND OK");
/* -------------------------------------------------- */
//전문수신
/* -------------------------------------------------- */
if (($rtv = $this->m_Socket->recv($head, $body, $tail)) != OK) {
$err_msg = "소켓수신오류(MAIN)::" . $this->m_Socket->getErr();
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Socket->close();
$this->NetCancel();
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Log->WriteLog(INFO, "RECV OK");
$this->m_Log->WriteLog(INFO, "MSG_FROM_PG:[" . $head . $body . $tail . "]");
$this->m_Data->m_Body = $body;
/* -------------------------------------------------- */
//서명확인
/* -------------------------------------------------- */
if (($rtv = $this->m_Crypto->Verify($body, $tail)) != OK) {
$err_msg = "VERIFY FAIL";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Socket->close();
$this->NetCancel();
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Log->WriteLog(INFO, "VERIFY OK");
/* -------------------------------------------------- */
//Head 파싱
/* -------------------------------------------------- */
if (($rtv = $this->m_Data->ParseHead($head)) != OK) {
$err_msg = "수신전문(HEAD) 파싱 오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Socket->close();
$this->NetCancel();
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Log->WriteLog(INFO, "PARSE HEAD OK");
/* -------------------------------------------------- */
//Body 파싱
/* -------------------------------------------------- */
if (($rtv = $this->m_Data->ParseBody($body, $encrypted, $sessionkey)) != OK) {
$err_msg = "수신전문(Body) 파싱 오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Socket->close();
$this->NetCancel();
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Log->WriteLog(INFO, "PARSE BODY OK");
/* -------------------------------------------------- */
//복호화
/* -------------------------------------------------- */
if ($this->m_type == TYPE_SECUREPAY || $this->m_type == TYPE_FORMPAY || $this->m_type == TYPE_OCBSAVE ||
$this->m_type == TYPE_CANCEL || $this->m_type == TYPE_AUTHBILL || $this->m_type == TYPE_FORMAUTH ||
$this->m_type == TYPE_REQREALBILL || $this->m_type == TYPE_REPAY || $this->m_type == TYPE_VACCTREPAY || $this->m_type == TYPE_RECEIPT ||
$this->m_type == TYPE_AUTH || $this->m_type == TYPE_CAPTURE || $this->m_type == TYPE_ESCROW ||
$this->m_type == TYPE_REFUND || $this->m_type == TYPE_INQUIRY || $this->m_type == TYPE_OPENSUB
) {
if (($rtv = $this->m_Crypto->Decrypt($sessionkey, $encrypted, $decrypted)) != OK) {
$err_msg = "복호화 실패[" . $this->GetResult(NM_RESULTMSG) . "]";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Socket->close();
$this->NetCancel();
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Log->WriteLog(INFO, "DECRYPT OK");
$this->m_Log->WriteLog(DEBUG, "DECRYPT MSG:[" . $decrypted . "]");
//Parse Decrypt
$this->m_Data->ParseDecrypt($decrypted);
$this->m_Log->WriteLog(INFO, "DECRYPT PARSE OK");
}
/* -------------------------------------------------- */
//Assign Interface Variables
/* -------------------------------------------------- */
$this->m_RESULT = $this->m_Data->m_RESULT;
/* -------------------------------------------------- */
//ACK
/* -------------------------------------------------- */
//if( $this->GetResult(NM_RESULTCODE) == "00" &&
if ((strcmp($this->GetResult(NM_RESULTCODE), "00") == 0) &&
( $this->m_type == TYPE_SECUREPAY || $this->m_type == TYPE_OCBSAVE ||
$this->m_type == TYPE_FORMPAY || $this->m_type == TYPE_RECEIPT
)
) {
$this->m_Log->WriteLog(INFO, "WAIT ACK INVOKING");
if (($rtv = $this->Ack()) != OK) {
//ERROR
$err_msg = "ACK 실패";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Socket->close();
$this->NetCancel();
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Log->WriteLog(INFO, "SUCCESS ACK INVOKING");
}
/* -------------------------------------------------- */
//PG 공개키가 바뀌었으면 공개키 UPDATE
/* -------------------------------------------------- */
$pgpubkey = $this->m_Data->GetXMLData(NM_PGPUBKEY);
if ($pgpubkey != "") {
if (($rtv = $this->m_Crypto->UpdatePGPubKey($pgpubkey)) != OK) {
$err_msg = "PG공개키 업데이트 실패";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->m_Data->GTHR($rtv, $err_msg);
} else
$this->m_Log->WriteLog(INFO, "PGPubKey UPDATED!!");
}
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
$this->m_Socket->close();
return;
}
// End of StartAction
/* -------------------------------------------------- */
/* */
/* 웹페이지 위변조 방지용 데이타 생성 */
/* */
/* -------------------------------------------------- */
function MakeChkFake() {
$this->m_Crypto = new INICrypto($this->m_REQUEST);
/* -------------------------------------------------- */
//상점개인키 로드
/* -------------------------------------------------- */
if (($rtv = $this->m_Crypto->LoadMPrivKey()) != OK) {
$err_msg = "상점개인키 로드오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreePubKey();
return;
}
$this->m_Log->WriteLog(INFO, "MERCHANT PRIV KEY LOAD OK");
/* -------------------------------------------------- */
//상점 공개키 로드(SN 를 알기위해!!)
/* -------------------------------------------------- */
if (($rtv = $this->m_Crypto->LoadMPubKey($m_cert_SN)) != OK) {
$err_msg = "상점공개키 로드오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
$this->MakeTXErrMsg($rtv, $err_msg);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
return;
}
$this->m_Log->WriteLog(INFO, "MERCHANT PUB KEY LOAD OK [" . $this->m_Data->m_MPubSN . "]");
foreach ($this->m_REQUEST as $key => $val) {
if ($key == "inipayhome" || $key == "type" || $key == "debug" ||
$key == "admin" || $key == "checkopt" || $key == "enctype")
continue;
if ($key == "mid")
$temp1 .= $key . "=" . $val . "&"; //msg
else
$temp2 .= $key . "=" . $val . "&"; //hashmsg
}
//Make RN
$this->m_RESULT["rn"] = $this->m_Data->MakeRN();
$temp1 .= "rn=" . $this->m_RESULT["rn"] . "&";
$checkMsg = $temp1;
$checkHashMsg = $temp2;
$retHashStr = Base64Encode(sha1($checkHashMsg, TRUE));
$checkMsg .= "data=" . $retHashStr;
$HashMid = Base64Encode(sha1($this->m_REQUEST["mid"], TRUE));
$this->m_Crypto->RSAMPrivEncrypt($checkMsg, $RSATemp);
$this->m_RESULT["encfield"] = "enc=" . $RSATemp . "&src=" . Base64Encode($checkHashMsg);
$this->m_RESULT["certid"] = $HashMid . $m_cert_SN;
$this->m_Log->WriteLog(INFO, "CHKFAKE KEY MAKE OK:" . $this->m_RESULT["rn"]);
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Crypto->FreeAllKey();
$this->m_RESULT[NM_RESULTCODE] = "00";
return;
}
/* -------------------------------------------------- */
/* */
/* 결제처리 확인 메세지 전송 */
/* */
/* -------------------------------------------------- */
function Ack() {
//ACK용 Data
$this->m_Data->m_sBody = "";
$this->m_Data->m_sTail = "";
$this->m_Data->m_sCmd = CMD_REQ_ACK;
//전문생성(Head)
$this->m_Data->MakeHead();
$this->m_Log->WriteLog(DEBUG, "MAKE HEAD OK");
//$this->m_Log->WriteLog( DEBUG, "MSG_TO_PG:[".$this->m_Data->m_sMsg."]" );
//Send
if (($rtv = $this->m_Socket->send($this->m_Data->m_sMsg)) != OK) {
$err_msg = "ACK 전송오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
return ACK_CHECKSUM_ERR;
}
//$this->m_Log->WriteLog( DEBUG, "SEND OK" );
if (($rtv = $this->m_Socket->recv($head, $body, $tail)) != OK) {
$err_msg = "ACK 수신오류(ACK)";
$this->m_Log->WriteLog(ERROR, $err_msg);
return ACK_CHECKSUM_ERR;
}
//$this->m_Log->WriteLog( DEBUG, "RECV OK" );
//$this->m_Log->WriteLog( INFO, "MSG_FROM_PG:[".$recv."]" );
return OK;
}
/* -------------------------------------------------- */
/* */
/* 망취소 메세지 전송 */
/* */
/* -------------------------------------------------- */
function NetCancel() {
$this->m_Log->WriteLog(INFO, "WAIT NETCANCEL INVOKING");
if ($this->m_type == TYPE_CANCEL || $this->m_type == TYPE_REPAY || $this->m_type == TYPE_VACCTREPAY || $this->m_type == TYPE_RECEIPT ||
$this->m_type == TYPE_CONFIRM || $this->m_type == TYPE_OCBQUERY || $this->m_type == TYPE_ESCROW ||
$this->m_type == TYPE_CAPTURE || $this->m_type == TYPE_AUTH || $this->m_type == TYPE_AUTHBILL ||
($this->m_type == TYPE_ESCROW && $this->m_Data->m_EscrowType == TYPE_ESCROW_DNY_CNF ) ||
$this->m_type == TYPE_NETCANCEL
) {
$this->m_Log->WriteLog(INFO, "DON'T NEED NETCANCEL");
return true;
}
//NetCancel용 Data
$this->m_Data->m_REQUEST["cancelmsg"] = "망취소";
$body = "";
$sign = "";
$this->m_Data->m_Type = TYPE_CANCEL; //망취소 전문은 취소전문과 같음.헤더만틀리고..쩝~
//added escrow netcancel, 08.03.11
if ($this->m_type == TYPE_ESCROW && $this->m_Data->m_EscrowType == TYPE_ESCROW_DLV)
$this->m_Data->m_sCmd = CMD_REQ_DLV_NETC;
else if ($this->m_type == TYPE_ESCROW && $this->m_Data->m_EscrowType == TYPE_ESCROW_CNF)
$this->m_Data->m_sCmd = CMD_REQ_CNF_NETC;
else if ($this->m_type == TYPE_ESCROW && $this->m_Data->m_EscrowType == TYPE_ESCROW_DNY)
$this->m_Data->m_sCmd = CMD_REQ_DNY_NETC;
else
$this->m_Data->m_sCmd = CMD_REQ_NETC;
$this->m_Data->m_sCrypto = FLAG_CRYPTO_3DES;
//암호화
if (($rtv = $this->m_Data->MakeEncrypt($this->m_Crypto)) != OK) {
$err_msg = "암호화 오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
return;
}
$this->m_Log->WriteLog(DEBUG, "MAKE ENCRYPT OK[" . $this->m_Data->m_EncBody . "]");
//전문생성(Body)
$this->m_Data->MakeBody();
$this->m_Log->WriteLog(INFO, "MAKE BODY OK");
//서명(sign)
if (($rtv = $this->m_Crypto->Sign($this->m_Data->m_sBody, $sign)) != OK) {
$err_msg = "싸인실패";
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
return false;
}
$this->m_Data->m_sTail = $sign;
$this->m_Log->WriteLog(INFO, "SIGN OK");
//전문생성(Head)
$this->m_Data->MakeHead();
$this->m_Log->WriteLog(INFO, "MAKE HEAD OK");
$this->m_Log->WriteLog(DEBUG, "MSG_TO_PG:[" . $this->m_Data->m_sMsg . "]");
//소켓생성
$this->m_Socket = new INISocket("");
$this->m_Socket->ip = $this->m_connIP; //기존연결된 IP 사용, 08.03.12
if (($rtv = $this->m_Socket->open()) != OK) {
$err_msg = "[" . $this->m_Socket->ip . "]소켓연결오류(NETC)::" . $this->m_Socket->getErr();
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
$this->m_Log->CloseLog($this->GetResult(NM_RESULTMSG));
$this->m_Socket->close();
$this->m_Crypto->FreeAllKey();
return;
}
$this->m_Log->WriteLog(INFO, "SOCKET CONNECT OK::" . $this->m_Socket->ip);
//전문송신
if (($rtv = $this->m_Socket->send($this->m_Data->m_sMsg)) != OK) {
$err_msg = "소켓송신오류(NETC)" . $this->m_Socket->getErr();
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
$this->m_Socket->close();
return false;
}
$this->m_Log->WriteLog(INFO, "SEND OK");
//전문수신
if (($rtv = $this->m_Socket->recv($head, $body, $tail)) != OK) {
$err_msg = "소켓수신오류(NETC)";
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
$this->m_Socket->close();
return false;
}
$this->m_Log->WriteLog(INFO, "RECV OK");
$this->m_Log->WriteLog(DEBUG, "MSG_FROM_PG:[" . $head . $body . $tail . "]");
//서명확인
if (($rtv = $this->m_Crypto->Verify($body, $tail)) != OK) {
$err_msg = "VERIFY FAIL";
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
$this->m_Socket->close();
return false;
}
$this->m_Log->WriteLog(INFO, "VERIFY OK");
//이하 헤더나 본문은 파싱하지 않는다!!!!
//그냥 여기서 끝내자 피곤하다.-_-;;
//Head 파싱
if (($rtv = $this->m_Data->ParseHead($head)) != OK) {
$err_msg = "수신전문(HEAD) 파싱 오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
$this->m_Socket->close();
return;
}
//Body 파싱
if (($rtv = $this->m_Data->ParseBody($body, $encrypted, $sessionkey)) != OK) {
$err_msg = "수신전문(Body) 파싱 오류";
$this->m_Log->WriteLog(ERROR, $err_msg);
//$this->MakeTXErrMsg( $rtv, $err_msg );
$this->m_Socket->close();
return;
}
//if( $this->GetResult(NM_RESULTCODE) == "00" )
if (strcmp($this->GetResult(NM_RESULTCODE), "00") == 0)
$this->m_Log->WriteLog(INFO, "SUCCESS NETCANCEL");
else
$this->m_Log->WriteLog(ERROR, "ERROR NETCANCEL[" . $this->GetResult(NM_RESULTMSG) . "]");
return true;
}
function MakeIMStr($s, $t) {
$this->m_Crypto = new INICrypto($this->m_REQUEST);
if ($t == "H")
return $this->m_Crypto->MakeIMStr($s, base64_decode(IMHK));
else if ($t == "J")
return $this->m_Crypto->MakeIMStr($s, base64_decode(IMJK));
}
/* -------------------------------------------------- */
/* */
/* 에러메세지 Make */
/* */
/* -------------------------------------------------- */
function MakeTXErrMsg($err_code, $err_msg) {
$this->m_RESULT[NM_RESULTCODE] = "01";
$this->m_RESULT[NM_RESULTERRORCODE] = $err_code;
$this->m_RESULT[NM_RESULTMSG] = "[" . $err_code . "|" . $err_msg . "]";
$this->m_Data->GTHR($err_code, $err_msg);
return;
}
}

View File

@ -1,226 +0,0 @@
<?php
/**
* Copyright (C) 2007 INICIS Inc.
*
* 해당 라이브러리는 절대 수정되어서는 안됩니다.
* 임의로 수정된 코드에 대한 책임은 전적으로 수정자에게 있음을 알려드립니다.
*
*/
class INISocket {
var $hnd;
var $host;
var $ip;
var $port;
var $type;
var $family;
var $protocol;
var $bConnected;
var $sBuffer;
var $sSocErr;
var $dns_laptime;
function error($msg = null) {
$errCode = socket_last_error($this->hnd);
if ($errCode != 0) {
//Connection reset by peer
if ($errCode == 104)
$this->bConnected = false;
$errMsg = socket_strerror($errCode);
$this->sSocErr = "(" . $errCode . ")(" . $errMsg . ")";
socket_clear_error($this->hnd);
}
elseif (strlen($msg)) {
$this->sSocErr = $errMsg;
}
return false;
}
function __construct($host) {
$this->family = AF_INET;
$this->type = SOCK_STREAM;
$this->protocol = SOL_TCP;
$this->hnd = @socket_create($this->family, $this->type, $this->protocol);
$this->error();
$this->sBuffer = false;
$this->ip = null;
$this->host = $host;
$this->port = PG_PORT;
}
function DNSLookUP() {
$starttime = GetMicroTime();
$ip = @gethostbyname($this->host);
if ($ip == PG_IP || $ip == KSPG_IP) {
$this->ip = $ip;
} else {
$this->error("Hostname " . $this->host . " could not be resolved");
return DNS_LOOKUP_ERR;
}
$this->dns_laptime = round(GetMicroTime() - $starttime, 3);
if ($this->dns_laptime > DNS_LOOKUP_TIMEOUT)
return DNS_LOOKUP_TIMEOUT_ERR;
return OK;
}
function open() {
//Connect timeout Trickkkkkkkkk ##2. NONBLOCKING NEED , less CPU clocking!!^^
//modified by ddaemiri, 2007.08.30
socket_set_nonblock($this->hnd);
if (!@socket_connect($this->hnd, $this->ip, $this->port)) {
$err = socket_last_error($this->hnd);
$err_str = socket_strerror($err);
if ($err == 106) { //EISCONN
$this->bConnected = true;
socket_set_block($this->hnd);
return OK;
}
//EINPROGRESS( Linux:115, Window Socket:10035, FreeBSD4.10:36, 모든 OS 체크 불가능해서 str으로도 검색 )
if ($err != ERRCODE_INPROGRESS_LINUX && $err != ERRCODE_INPROGRESS_WIN &&
$err != ERRCODE_INPROGRESS_FREEBSD && $err_str != ERRSTR_INPROGRESS) {
$this->error();
socket_close($this->hnd);
return SOCK_CONN_ERR;
}
}
$read = array($this->hnd);
$write = array($this->hnd);
$except = NULL;
$rtv = @socket_select($read, $write, $except, TIMEOUT_CONNECT);
if ($rtv == 0) { //TIMEOUT
$this->error();
socket_close($this->hnd);
return SOCK_TIMEO_ERR;
} else if ($rtv === FALSE) {
$this->error();
socket_close($this->hnd);
return SOCK_ETC1_ERR;
}
if (in_array($this->hnd, $read) || in_array($this->hnd, $write)) {
if (@socket_get_option($this->hnd, SOL_SOCKET, SO_ERROR) === FALSE) {
$this->error();
socket_close($this->hnd);
return SOCK_ETC2_ERR;
}
}
$this->bConnected = true;
socket_set_block($this->hnd);
return OK;
}
function close() {
//if(!$this->bConnected) return;
@socket_shutdown($this->hnd, 2);
@socket_close($this->hnd);
}
function send($sBuf) {
if (!$this->bConnected) {
$this->error("Socket error. Cannot send data on a closed socket.");
return SOCK_SEND1_ERR;
}
$vWrite = array($this->hnd);
$vRead = null;
$vExcept = null;
while (($rtv = @socket_select($vRead, $vWrite, $vExcept, TIMEOUT_WRITE)) === FALSE);
if ($rtv == 0) {
$this->error();
//return SOCK_TIMEO_ERR;
return SOCK_CONN_ERR; //modify 2008.04.01
}
if ($rtv === FALSE) {
$this->error();
return SOCK_SEND2_ERR;
}
$tmpBuf = strlen($sBuf) ? $sBuf : $this->sBuffer;
$iBufLen = strlen($tmpBuf);
$res = @socket_send($this->hnd, $tmpBuf, $iBufLen, 0);
if ($res === FALSE) {
$this->error();
return SOCK_SEND2_ERR;
} elseif ($res < $iBufLen) {
$tmpBuf = substr($tmpBuf, $res);
$this->send($tmpBuf);
}
return OK;
}
function WaitRecv(&$recv_buf, $nleft) {
$recv_buf = null;
$read = array($this->hnd);
$buf = null;
while ($nleft > 0) {
$write = null;
$except = null;
$rtv = @socket_select($read, $write, $except, TIMEOUT_READ);
if ($rtv == 0) {
$this->error();
return SOCK_TIMEO_ERR;
} else if ($rtv === FALSE) {
$this->error();
return SOCK_ETC1_ERR;
}
if (!in_array($this->hnd, $read)) {
$this->error();
return SOCK_RECV1_ERR;
}
if ($buf = @socket_read($this->hnd, $nleft)) {
$recv_buf .= $buf;
} else {
$this->error();
return SOCK_RECV1_ERR;
}
$nleft -= strlen($buf);
}
return OK;
}
function recv(&$head, &$body, &$tail) {
if (!$this->bConnected) {
$this->error("Socket error. Cannot read any data on a closed socket.");
return SOCK_RECV1_ERR;
}
//------------------------------------------------------
//head
//------------------------------------------------------
if (($rtv = $this->WaitRecv($head, MSGHEADER_LEN)) != OK)
return $rtv;
if ($head == "")
return SOCK_RECV2_ERR;
$body_len = intval(substr($head, 0, BODY_LEN));
$tail_len = intval(substr($head, BODY_LEN, TAIL_LEN));
//------------------------------------------------------
//body
//------------------------------------------------------
if (($rtv = $this->WaitRecv($body, $body_len)) != OK)
return $rtv;
//------------------------------------------------------
//tail
//------------------------------------------------------
if (($rtv = $this->WaitRecv($tail, $tail_len)) != OK)
return $rtv;
return OK;
}
function getErr() {
return $this->sSocErr;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,134 @@
<?php
if (!defined('_GNUBOARD_')) exit;
function get_inicis_iniapi_key() {
global $default;
// iniapi_key 는 전체취소, 부분취소, 현금영수증, 에스크로 배송등록에 사용됨
if ($default['de_card_test']) { // 테스트결제이면
if ($default['de_inicis_mid'] === 'iniescrow0') { // 에스크로 테스트용 mid
return 'yERbIlJ3NhTeObsA';
} else if ($default['de_inicis_mid'] === 'INIpayTest'){ // 일반 테스트용 mid
return 'ItEQKi3rY7uvDS8l';
}
}
return $default['de_inicis_iniapi_key'];
}
function get_inicis_iniapi_iv() {
global $default;
// iniapi_iv 는 현금영수증 발급에 사용됨
if ($default['de_card_test']) { // 테스트결제이면
if ($default['de_inicis_mid'] === 'iniescrow0') { // 에스크로 테스트용 mid
return 'tOGDXbfoajk2DQ==';
} else if ($default['de_inicis_mid'] === 'INIpayTest'){ // 일반 테스트용 mid
return 'HYb3yQ4f65QL89==';
}
}
return $default['de_inicis_iniapi_iv'];
}
// KG 이니시스 일반 주문 취소 함수
// $args 변수의 타입은 array, $is_part 변수는 부분취소 구분 변수
function inicis_tid_cancel($args, $is_part=false){
global $default;
// step1. 요청을 위한 파라미터 설정
// 가맹점관리자 > 상점정보 > 계약정보 > 부가정보 > INIAPI key 생성조회
$key = isset($args['key']) ? $args['key'] : get_inicis_iniapi_key();
$type = "Refund"; // 고정
$paymethod = isset($args['paymethod']) ? $args['paymethod'] : "Card";
$timestamp = isset($args['timestamp']) ? $args['timestamp'] : date("YmdHis");
$clientIp = isset($args['clientIp']) ? $args['clientIp'] : $_SERVER['SERVER_ADDR'];
$mid = isset($args['mid']) ? $args['mid'] : $default['de_inicis_mid'];
$tid = $args['tid'];
$msg = $args['msg'];
// 부분취소인 경우
if ($is_part){
$type = 'PartialRefund';
$price = $args['price'];
$confirmPrice = $args['confirmPrice'];
// INIAPIKey + type + paymethod + timestamp + clientIp + mid + tid + price + confirmPrice
$hashData = hash("sha512",(string)$key.(string)$type.(string)$paymethod.(string)$timestamp.(string)$clientIp.(string)$mid.(string)$tid.(string)$price.(string)$confirmPrice); // hash 암호화
//step2. key=value 로 post 요청
$data = array(
'type' => $type,
'paymethod' => $paymethod,
'timestamp' => $timestamp,
'clientIp' => $clientIp,
'mid' => $mid,
'tid' => $tid,
'price' => $price,
'confirmPrice' => $confirmPrice,
'msg' => $msg,
'hashData'=> $hashData
);
} else {
// 전체취소인 경우
// INIAPIKey + type + paymethod + timestamp + clientIp + mid + tid
$hashData = hash("sha512", (string)$key.(string)$type.(string)$paymethod.(string)$timestamp.(string)$clientIp.(string)$mid.(string)$tid); // hash 암호화
//step2. key=value 로 post 요청
$data = array(
'type' => $type,
'paymethod' => $paymethod,
'timestamp' => $timestamp,
'clientIp' => $clientIp,
'mid' => $mid,
'tid' => $tid,
'msg' => $msg,
'hashData'=> $hashData
);
}
$url = "https://iniapi.inicis.com/api/v1/refund";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=utf-8'));
curl_setopt($ch, CURLOPT_POST, 1);
$response = curl_exec($ch);
curl_close($ch);
//step3. 요청 결과
return $response;
}
function get_type_inicis_paymethod($od_settle_case){
$ini_paymethod = '';
switch ($od_settle_case) {
case '신용카드':
case '간편결제':
$ini_paymethod = 'Card';
break;
case '가상계좌':
$ini_paymethod = 'GVacct'; // 가상계좌 (입금전, 채번취소 시 사용)
break;
case '계좌이체':
$ini_paymethod = 'Acct';
break;
case '휴대폰':
$ini_paymethod = 'HPP';
break;
}
if (! $ini_paymethod) {
if (is_inicis_order_pay($od_settle_case)) {
$ini_paymethod = 'Card';
}
}
return $ini_paymethod;
}