/*----------------------------------------------------
ipay
주문번호 얻기
결제정보 얻기,출력
결제자정보 얻기,출력
주문상태
결제완료상태
결제수단
결제번호
판매취소
구매결정요청
------------------------------------------------------*/
/*----------------------------------------------------
각 API 별로 read,write를 함수화
------------------------------------------------------*/
class ipay
{
public $sellerid = ""; // ipay에 등록한 자신의 아이디
private $ticket = ''; // ipay 등록 후 발급받은 토큰입니다.
private $redirect_url = ''; // ipay의 결제모듈에서 사용자가 결제완료 시 해당 결제정보를 수신&처리할 파일
private $service_url = ''; // 사용자가 옥션에서 결제취소요청 등을 하였을 경우 해당 정보를 수신&처리할 파일
private $back_url = ''; // 전 그냥 홈으로 설정하였습니다.
private $payment_rule = ''; // 홈페이지에서 사용할 모든 결제수단을 설정 (메뉴얼 참조)
private $xmlProc;
public function __construct(){
$this->xmlProc = new xmlProcess ($this->ticket);
}
/* 주문번호 얻기(단일 상품기준입니다. 여러상품일 경우 아래의 ITEMS와 price에 대한 수정이 필요합니다.) */
public function get_cartNo($item_url,$thumbnail_url,$item_code,$item_name, $order_qty, $price, $shipping_type, $shipping_price=0,$mem_name='',$mem_phone='',$mem_email=''){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/InsertIpayOrderToLong"; // XML명령을 받을 주소
$orderQuery = "";
$orderQuery .= " ";
$orderQuery .= " ";
$orderQuery .= '';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'order_proc'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){ return false; }
$requestResult = $eleResult->firstChild->nodeValue; // 결과노드에서 결과값을 얻는다.
return $requestResult;
}
/* 결제정보 얻기,출력 */
public function get_orderInfo1($payNo){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/GetIpayAccountNumb"; // XML명령을 받을 주소
$orderQuery = '';
$orderQuery .= ' '.$payNo.'';
$orderQuery .= '';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'accountNum'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){return false; }
return $eleResult;
}
public function view_orderInfo1($eleResult){
if(!$eleResult){ echo 'false'; return false; }
echo "
";
echo "| IpayCartNo | ".$eleResult->getAttribute('IpayCartNo').' |
';
echo "| PayNo | ".$eleResult->getAttribute('PayNo').' |
';
echo "| OrderNo | ".$eleResult->getAttribute('OrderNo').' |
';
echo "| AuctionOrderNos | ".$eleResult->getAttribute('AuctionOrderNos').' |
';
echo "| ItemNos | ".$eleResult->getAttribute('ItemNos').' |
';
echo "| ApprNumb | ".$eleResult->getAttribute('ApprNumb').' |
';
echo "| InsDate | ".$eleResult->getAttribute('InsDate').' |
';
echo "| PayDate | ".$eleResult->getAttribute('PayDate').' |
';
echo "| PayPrice | ".$eleResult->getAttribute('PayPrice').' |
';
echo "| DiscountPrice | ".$eleResult->getAttribute('DiscountPrice').' |
';
echo "| ShippingPrice | ".$eleResult->getAttribute('ShippingPrice').' |
';
echo "| Emoney | ".$eleResult->getAttribute('Emoney').' |
';
echo "| PaymentType | ".$eleResult->getAttribute('PaymentType').' |
';
echo "| BankCode | ".$eleResult->getAttribute('BankCode').' |
';
echo "| BankName | ".$eleResult->getAttribute('BankName').' |
';;
echo "| AcctNumb | ".$eleResult->getAttribute('AcctNumb').' |
';
echo "| ExpireDate | ".$eleResult->getAttribute('ExpireDate').' |
';
echo "| CardName | ".$eleResult->getAttribute('CardName').' |
';
echo "| CardCode | ".$eleResult->getAttribute('CardCode').' |
';
echo "| NoInterestYN | ".$eleResult->getAttribute('NoInterestYN').' |
';
echo "| CardMonth | ".$eleResult->getAttribute('CardMonth').' |
';
echo "| CardNumb | ".$eleResult->getAttribute('CardNumb').' |
';
echo "| BuyerID | ".$eleResult->getAttribute('BuyerID').' |
';
echo "| BuyerName | ".$eleResult->getAttribute('BuyerName').' |
';
echo "| ServiceUrl | ".$eleResult->getAttribute('ServiceUrl').' |
';
echo "| RedirectUrl | ".$eleResult->getAttribute('RedirectUrl').' |
';
echo "
";
return true;
}
/* 결제자정보 얻기,출력 */
// 상태와 관계없이 모두 가능
public function get_orderInfo2($payNo){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/GetIpayPaidOrderList"; // XML명령을 받을 주소
$orderQuery = "";
$orderQuery .= " ";
$orderQuery .= " ";
$orderQuery .= "";
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
if(!$resultXml){ return 1; }
$resultNodeList = $this->xmlProc->parseXml($resultXml,'orderList'); // 결과XML에서 결과노드를 얻는다.
return $resultNodeList;
}
// 배송준비중 or 결제완료 등의 경우만 가능(환불완료 등 x)
public function get_orderInfo2_2($startDate,$endDate){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/GetIpayPaidOrderList"; // XML명령을 받을 주소
$orderQuery = '';
$orderQuery .= ' ';
$orderQuery .= ' ';
$orderQuery .= ' ';
$orderQuery .= '';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
if(!$resultXml){ return false; }
$resultNodeList = $this->xmlProc->parseXml($resultXml,'orderList'); // 결과XML에서 결과노드를 얻는다.
return $resultNodeList;
}
public function view_orderInfo2($resultNodeList){
if(!$resultNodeList){ echo 'false'; return false; }
$i=0;
while($eleResult = $resultNodeList->item($i)){
echo "";
echo "| CartNo | ".$CartNo = $eleResult->getAttribute('CartNo')." |
";
echo "| PayNo | ".$PayNo = $eleResult->getAttribute('PayNo')." |
";
echo "| OrderNo | ".$OrderNo = $eleResult->getAttribute('OrderNo')." |
";
echo "| CancelYn | ".$CancelYn = $eleResult->getAttribute('CancelYn')." |
";
echo "| ItemNo | ".$ItemNo = $eleResult->getAttribute('ItemNo')." |
";
echo "| ItemCode | ".$ItemCode = $eleResult->getAttribute('ItemCode')." |
";
echo "| ItemName | ".$ItemName = $eleResult->getAttribute('ItemName')." |
";
echo "| AwardQty | ".$AwardQty = $eleResult->getAttribute('AwardQty')." |
";
echo "| AwardAmount | ".$AwardAmount = $eleResult->getAttribute('AwardAmount')." |
";
echo "| BuyerId | ".$BuyerId = $eleResult->getAttribute('BuyerId')." |
";
echo "| BuyerName | ".$BuyerName = $eleResult->getAttribute('BuyerName')." |
";
echo "| DistMobileTel | ".$DistMobileTel = $eleResult->getAttribute('DistMobileTel')." |
";
echo "| DistTel | ".$DistTel = $eleResult->getAttribute('DistTel')." |
";
echo "| OrderDate | ".$OrderDate = $eleResult->getAttribute('OrderDate')." |
";
echo "| DistPostNo | ".$DistPostNo = $eleResult->getAttribute('DistPostNo')." |
";
echo "| DistAddressPost | ".$DistAddressPost = $eleResult->getAttribute('DistAddressPost')." |
";
echo "| DistAddressDetail | ".$DistAddressDetail = $eleResult->getAttribute('DistAddressDetail')." |
";
echo "| VisitReceiptNo | ".$VisitReceiptNo = $eleResult->getAttribute('VisitReceiptNo')." |
";
echo "| OrderStatus | ".$OrderStatus = $eleResult->getAttribute('OrderStatus')." |
";
echo "| GroupOrderSeqno | ".$GroupOrderSeqno = $eleResult->getAttribute('GroupOrderSeqno')." |
";
echo "| RequestOption | ".$RequestOption = $eleResult->getAttribute('RequestOption')." |
";
echo "| DeliveryRemark | ".$DeliveryRemark = $eleResult->getAttribute('DeliveryRemark')." |
";
echo "| DeliveryFee | ".$DeliveryFee = $eleResult->getAttribute('DeliveryFee')." |
";
echo "| DeliveryDelayDay | ".$DeliveryDelayDay = $eleResult->getAttribute('DeliveryDelayDay')." |
";
echo "| DeliveryDelayNotifyDate | ".$DeliveryDelayNotifyDate = $eleResult->getAttribute('DeliveryDelayNotifyDate')." |
";
echo "
";
++$i;
}
return true;
}
/* 주문상태 */
function get_orderStatus($cartNo,$itemNo){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/GetIpayReceiptStatus"; // XML명령을 받을 주소
$orderQuery = '
'.$cartNo.'
'.$itemNo.'
';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'receiptStatus'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){ return false; }
$requestResult = $eleResult->firstChild->nodeValue; // 결과노드에서 결과값을 얻는다.
return $requestResult;
}
/* 결제완료상태 */
function get_isPaid($cartNo,$itemNo){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/GetIpayAgreementStatus"; // XML명령을 받을 주소
$orderQuery = '
'.$cartNo.'
'.$itemNo.'
';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'agreementStatus'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){ return false; }
$requestResult = $eleResult->nodeValue; // 결과노드에서 결과값을 얻는다.
return $requestResult;
}
/* 결제수단 */
function get_paymentType($cartNo,$itemNo){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/GetIpaySettlementMeans"; // XML명령을 받을 주소
$orderQuery = '
'.$cartNo.'
'.$itemNo.'
';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'settlementMeans'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){ return false; }
$requestResult = $eleResult->nodeValue; // 결과노드에서 결과값을 얻는다.
return $requestResult;
}
/* 결제번호 */
function get_payNo($cartNo){
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/GetIpayOrderConfirm"; // XML명령을 받을 주소
$orderQuery = '
'.$cartNo.'
';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'orderConfirm'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){ return false; }
$requestResult = $eleResult->firstChild->nodeValue; // 결과노드에서 결과값을 얻는다.;
return $requestResult;
}
/* 판매취소 */
function set_denySell($orderNo,$itemNo){
$sellerId = $this->sellerid;
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/IpayDenySell"; // XML명령을 받을 주소
$orderQuery = '';
$orderQuery .= ' ';
$orderQuery .= '';
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'denySell'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){ return false; }
$requestResult = $eleResult->firstChild->getAttribute('DenySellResponseType');
return $requestResult;
}
/* 구매결정요청
결과는 string로 'true','false'
성공 시 한번만 'true'이고 재호출 시 'false'
*/
function set_orderDecisionRequest($orderNo,$itemNo){
$sellerId = $this->sellerid;
$soap_url = "http://www.auction.co.kr/IpayService/Ipay/DoIpayOrderDecisionRequest";
$orderQuery = "";
$orderQuery .= " ";
$orderQuery .= "";
$resultXml = $this->xmlProc->sendQuery($soap_url,$orderQuery); // 서비스를 호출하여 결과 XML을 얻는다.
$eleResult = $this->xmlProc->parseXml($resultXml,'decisionRequest'); // 결과XML에서 결과노드를 얻는다.
if(!$eleResult){ return false; }
$requestResult = $eleResult->firstChild->getAttribute('Result');
return $requestResult;
}
}
/*----------------------------------------------------
옥션서버에 curl로 연결하게 한다.
xmlProcess 클래스에서 호출된다
------------------------------------------------------*/
class auctionSession
{
private $serverUrl = "https://api.auction.co.kr/ArcheSystem/IpayService.asmx"; //실제 운영 서버 주소;
private $soapAuction;
public function __construct($soapAuction){
$this->soapAuction = $soapAuction;
}
/** sendHttpRequest
Sends a HTTP request to the server for this session
Input: $requestBody
Output: The HTTP Response as a String
*/
public function sendHttpRequest($requestBody)
{
//build auction headers using variables passed via constructor
$headers = $this->buildAuctionHeaders(strlen($requestBody));
//initialise a CURL session
$connection = curl_init();
//set the server we are using (could be Sandbox or Production server)
curl_setopt($connection, CURLOPT_URL, $this->serverUrl);
//stop CURL from verifying the peer's certificate
curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0);
//set the headers using the array of headers
curl_setopt($connection, CURLOPT_HTTPHEADER, $headers);
//set method as POST
curl_setopt($connection, CURLOPT_POST, 1);
//set the XML body of the request
curl_setopt($connection, CURLOPT_POSTFIELDS, $requestBody);
//set it to return the transfer as a string from curl_exec
curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
//Send the Request
$response = curl_exec($connection);
//close the connection
curl_close($connection);
//return the response
return $response;
}
private function buildAuctionHeaders($requestBodyLength)
{
$headers = array (
"Content-Type: text/xml; charset=utf-8",
"Content-Length: $requestBodyLength",
"SOAPAction: $this->soapAuction"
);
return $headers;
}
}
/*----------------------------------------------------
xml명령을 주고 받는 역할을 한다.
------------------------------------------------------*/
class xmlProcess
{
private $ticket;
private $resArr;
public function __construct($ticket){
$this->ticket = $ticket;
}
/* Request SOAP Message를 서버에 요청 */
public function sendQuery($soap_url,$orderQuery){
// Set Request SOAP Message
$requestXmlBody = ' ';
$requestXmlBody .= ' ';
$requestXmlBody .= ' ';
$requestXmlBody .= ' ';
$requestXmlBody .= ' ' . $this->ticket . ' ';
$requestXmlBody .= ' ';
$requestXmlBody .= ' ';
$requestXmlBody .= ' ';
$requestXmlBody .= $orderQuery;
$requestXmlBody .= ' ';
$requestXmlBody .= ' ';
$requestXmlBody = str_replace("&", "&", $requestXmlBody);
// Load the XML Document to Print Request SOAP
$requestDoc = new DomDocument();
$requestDoc->loadXML($requestXmlBody);
/* 디버깅용?
// Print Request SOAP
echo "* REQUEST SOAP
";
echo htmlentities ($requestDoc->saveXML());
*/
$session = new auctionSession($soap_url); //Create a new auction session with all details pulled in from included auctionSession.php
$responseXml = $session->sendHttpRequest($requestXmlBody); //send the request and get response
return $responseXml;
}
/* Response SOAP Message를 처리한다. */
public function parseXml($responseXml,$mode){
if(stristr($responseXml, 'HTTP 404') || $responseXml == '') {
die('Error sending request');
} else {
//Xml string is parsed and creates a DOM Document object
$responseDoc = new DomDocument();
$responseDoc->loadXML($responseXml);
/* 디버깅용?
// Print Response SOAP
echo "
";
echo "* RESPONSE SOAP
";
echo "
".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($responseDoc->saveXML(), ENT_NOQUOTES, "UTF-8")) );
echo "
";
*/
// Error
$eleFaultcode = $responseDoc->getElementsByTagName('faultcode')->item(0);
$eleFaultstring = $responseDoc->getElementsByTagName('faultstring')->item(0);
switch($mode){
case 'order_proc' :
$eleResult = $responseDoc->getElementsByTagName('InsertIpayOrderToLongResult')->item(0);
break;
case 'order_result' :
$eleResult = $responseDoc->getElementsByTagName('IpayResponse')->item(0);
break;
case 'accountNum' :
$eleResult = $responseDoc->getElementsByTagName('GetIpayAccountNumbResult')->item(0);
break;
case 'orderList' :
$eleResult = $responseDoc->getElementsByTagName('GetOrderListResponseT');
break;
case 'receiptStatus' :
$eleResult = $responseDoc->getElementsByTagName('GetIpayReceiptStatusResponse')->item(0);
break;
case 'agreementStatus' :
$eleResult = $responseDoc->getElementsByTagName('GetIpayAgreementStatusResponse')->item(0);
break;
case 'orderConfirm' :
$eleResult = $responseDoc->getElementsByTagName('GetIpayOrderConfirmResponse')->item(0);
break;
case 'settlementMeans' :
$eleResult = $responseDoc->getElementsByTagName('GetIpaySettlementMeansResponse')->item(0);
break;
case 'denySell' : // 판매취소 or 판매거부
$eleResult = $responseDoc->getElementsByTagName('IpayDenySellResponse')->item(0);
break;
case 'decisionRequest' :
$eleResult = $responseDoc->getElementsByTagName('DoIpayOrderDecisionRequestResponse')->item(0);
default :
break;
}
if ((empty($eleFaultcode)) && (!empty($eleResult))){
return $eleResult;
}else{
$this->processError($eleFaultcode, $eleFaultstring);
}
}
return '';
}
/**
* 에러 처리를 한다.
* $eleFaultcode : 오류 코드 메시지
* $eleFaultstring : 오류 메시지
*/
private function processError($eleFaultcode, $eleFaultstring){
return false;
/*
if ($eleFaultcode != null) echo "faultcode : ".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($eleFaultcode->nodeValue, ENT_NOQUOTES, "UTF-8")))."
";
if ($eleFaultstring != null) echo "faultstring : ".iconv("UTF-8", "EUC-KR", urldecode (htmlentities ($eleFaultstring->nodeValue, ENT_NOQUOTES, "UTF-8")))."
";
*/
}
}
?>