이니시스 모바일 결제 프로그램 정리

이니시스 모바일 결제 프로그램 정리

이미지1KG INICIS(이니시스 로고)


처리 언어 : PHP 5.3 

업체에서 아직 5.3 버전을 사용중이고, MySQL 의 경우 mysqli 또는 PDO가 아닌 예전 API를 사용중입니다. 적절히 코드를 바꿔 주시기 바랍니다.


준비물(이니시스 회원가입 필요)

이니시스 모바일결제 매뉴얼 - 메뉴 중 INIpay(Mobile)

Receive API 샘플


먼저 프로그램에 들어가기전에 매뉴얼을 2~3회 읽어주세요.

솔직히 읽어봐도 도통 무슨 말인지 정말이지 모르겠더라구요.

부족한 매뉴얼 이지만 보면서 하나하나 적용해보니 이해할 수 있었습니다.




결제방법에 따른 결제 진행방법(이게 정말 이해가 안가더라구요.무조건 직접 해 봐야 이해가 갑니다.)

  • 신용카드 : (쇼핑몰)결제폼에서 결제버튼 클릭 -> (이니시스)인증시스템 접속 -> (이니시스)인증 후 결제프로그램 실행(각 카드사의 앱이 실행됨) -> (이니시스)카드앱에서 결제완료 -> (이니시스)P_NOTI_URL로 결과값 전송 -> (쇼핑몰)P_NOTI_URL에서 전송결과 내용받아 DB저장 또는 실패처리 -> (쇼핑몰)P_RETURN_URL로 이동(완료)
  • 계좌이체 : (쇼핑몰)결제폼에서 결제버튼 클릭 -> (이니시스)인증시스템 접속 -> (이니시스)인증 후 결제프로그램(금융결제원의 BankPayPG 앱) 실행 또는 (만약 금융결제원의 BankPayPG 앱이 설치 안되어 있다면 설치)결제완료 -> (이니시스)P_NOTI_URL로 결과값 전송 -> (쇼핑몰)P_NOTI_URL에서 전송결과 내용받아 DB저장 또는 실패처리 -> (쇼핑몰)P_RETURN_URL로 이동(완료)
  • 가상계좌 : (쇼핑몰)결제폼에서 결제버튼 클릭 -> (이니시스)인증시스템 접속 -> (이니시스)인증 후 P_NEXT_URL에 가상계자 보여줌 -> (이니시스)P_NOTI_URL로 가상계좌 결제 완료여부 전송(입금통보/채번등) -> (쇼핑몰)P_NOTI_URL에서 전송결과 내용받아 입금완료일 경우에만 DB저장 후 echo "OK" / 나머지는 그냥 패스(echo "FAIL";) -> (쇼핑몰)P_RETURN_URL로 이동(완료)


다른 결제수단은 업체에서 필요없다해서 작업을 진행하지 않았고, 가상계좌나 계좌이체는 결제하기 번거롭다고 사용하지 않더라구요.




폼 작성하기

폼은 매뉴얼에 나와있는대로 해도되고, 결제데모(샘플)에 접속해서, 이니페이 모바일(스마트폰용) 결제샘플 페이지의 소스보기를 이용해 작성하셔도 됩니다.

소스보기를 이용해서 보시기를 추천드립니다.


소스 전체를 적기에는 너무 기니 간단히 중요한 부분만 요약하겠습니다.

결제시스템 자체가 EUC-KR 인코딩을 사용합니다. 따라서 보통 요즘 UTF-8과 호환이 껄끄롭습니다.


폼 시작부분에

<form name="ini" id="ini" method="post" action="">

부분이 있습니다. 이걸 아래처럼 변경해 주세요.

<form name="ini" id="ini" method="post" action="" accept-charset="EUC-KR">


폼의 값들을 지정한 인코딩형식으로 보냅니다.

요즘 대부분의 사이트는 UTF-8로 제작됩니다. 하지만 이니시스의 시스템은 예전 EUC-KR 을 많이 사용하던 시절에 만들어진 것이 되다보니, 여전히 EUC-KR을 사용중입니다.

분명 시스템을 UTF-8로 변경하는데 문제가 있기 때문에 변경을 못하는 것으로 보입니다.

그래서 이때까지는 폼을 넘길 때 iconv를 이용했었는데, 그렇게 보내도 받을 때 글자가 깨져 보이는 경우가 많더라구요.

그런데 위 처럼 폼 자체의 내용을 EUC-KR로 강제지정해 두면 따로 iconv 해서 보낼 필요가 없더군요.

나중에 결과값을 받을 때만 iconv를 사용해서 UTF-8 형식으로 변환해 주면 됩니다.


<!-- 테스트 완료시 가맹점ID로 변경 -->

<input type="hidden" name="P_MID" value="INIpayTest">

<!-- <input type="hidden" name="P_MID" value="가맹점ID"> -->

<input type=hidden name="inipaymobile_type" value="web">


<!--

가상계좌에서 사용되는 주소

P_NEXT_URL : 결제가 진행되는 동안 이니시스에서 우리쪽으로 송신만 하는 주소.

즉 채번(가상계좌번호 받기) 송신만 하지 수신은 안함. 송신 시 전달하는 Parameter 는 아래와 같습니다.

P_STATUS : 인증상태 성공시 00, 그 외 실패

P_RMESG1 : 결과메시지

P_TID : 인증거래번호 Char(40) / 성공시에만 반환

P_REQ_URL(승인요청 Url) : 가맹점에서 이니페이모바일로 승인요청을 할 때, 사용되는 Url입니다. 거래 건 마다 상이한 URL 이 전달됩니다. 따라서, 절대 고정하여 사용하지 마십시오. Http Scheme 은 https 를 사용합니다.(http를 사용함에 발생하는 문제에 대해서는 책임 안진다 함)

P_NOTI(기타주문정보) : 최초 거래시 주문정보에 P_NOTI 를 설정하셨다면, 그 값을 전달받을 수 있습니다. 이 값은 P_NOTI 값을 그대로 리턴.->P_OID 값이 이상하게 넘어온다면 여기에다가 P_OID 를 넣어서 전송하면 됨.

-->

<input type=hidden name="P_NEXT_URL" value="http://www.example.com/cart/pay_next.php?oid=<?php echo $oid?>">


<input type="hidden" name="P_NOTI" value="<?php echo $oid;?>">


<!--

계좌이체, 신용카드 결제에서 사용되는 주소

P_NOTI_URL : 결제가 완료되면 이 URL로 이니시스가 정보를 보내고, 우리는 여기서 DB 저장까지 처리해야 한다.

단 네트워크 불안정으로 인해 이니시스에서 정보를 제공받지 못하면 다시 요청하므로 우리는 이 페이지에서 중복체크에 대한 방안을 모색해야 한다.

즉 P_OID 또는 P_TID를 체크해서 이미 결제 완료된 내역이면 OK를 찍어 보여줘야 하는것이다.

그 이후(OK 가 찍힌 이후) P_RETURN_URL로 URL이 자동으로 변경된다.

-->

<input type=hidden name="P_NOTI_URL" value="http://www.example.com/cart/pay_noti.php">

<input type=hidden name="P_RETURN_URL" value="http://www.example.com/cart/pay_result.php">


<!-- 매뉴얼에서는 지원하지 않는다고 나오는데...도대체 왜 있는지 모르겠음... -->

<input type=hidden name="P_CANCEL_URL" value="http://www.example.com/cart/pay_cancel.php">


<!--

신용카드 결재시 필히 적어줘야 하는 부분

자세한 내용은 매뉴얼 참고 : 페이지 10 쪽 ~ 11쪽

-->

<input type=hidden name="P_RESERVED" value="twotrs_isp=Y&block_isp=Y&twotrs_isp_noti=N&ismart_use_sign=Y&vbank_receipt=Y&bank_receipt=N&apprun_check=Y">


<!-- 상점이름 : 없어도 됨 -->

<!-- <input type=hidden name="P_MNAME" value="INIpay"> -->


나머지는 매뉴얼에 나와있는대로 하시면 됩니다.

저 같은 경우엔 P_OID (상점주문번호) 를 넘겼는데, 제대로 돌아오지 않아 P_NOTI에 P_OID를 넣어서 보내고 결과로 받아 처리했습니다.

왜 그런지 모르겠더군요. 혹시라도 P_OID가 제대로 안넘어 온다면 위 처럼 하시면 됩니다.


그 외 자세한 설정은 매뉴얼을 필히 참고하시기 바랍니다.




P_NOTI_URL(pay_noti.php) - 신용카드, 계좌이체 결제 인증 후 P_NOTI_URL로 값이 넘어왔을 경우 처리

매뉴얼에 나와있는 부분에서 저에게 맞게 수정했습니다.

DB 입력, 업데이트등의 쿼리문은 자신의 프로그램에 맞게 수정하시기 바랍니다.

<?php

//*******************************************************************************

// FILE NAME : mx_rnoti.php

// FILE DESCRIPTION :

// 이니시스 smart phone - 가상계좌, ISP 결제 결과 수신 페이지 샘플

// 기술문의 : ts@inicis.com

// HISTORY

// 2010. 02. 25 최초작성

// 2010  06. 23 WEB 방식의 가상계좌 사용시 가상계좌 채번 결과 무시 처리 추가(APP 방식은 해당 없음!!)

// WEB 방식일 경우 이미 P_NEXT_URL 에서 채번 결과를 전달 하였으므로,

// 이니시스에서 전달하는 가상계좌 채번 결과 내용을 무시 하시기 바랍니다.

//*******************************************************************************


$PGIP = $_SERVER['REMOTE_ADDR'];


if($PGIP == "211.219.96.165" || $PGIP == "118.129.210.25")    //PG에서 보냈는지 IP로 체크

{

    // 이니시스 NOTI 서버에서 받은 Value

    $P_TID = '';                // 1 거래번호

    $P_MID = '';                // 2 상점아이디

    $P_AUTH_DT = '';            // 3 승인일자

    $P_STATUS = '';            // 4 거래상태 (00:성공, 01:실패)

    $P_TYPE = '';            // 5 지불수단

    $P_OID = '';                // 6 상점주문번호

    $P_FN_CD1 = '';            // 7 금융사코드1

    $P_FN_CD2 = '';            // 8 금융사코드2

    $P_FN_NM = '';            // 9 금융사명 (은행명, 카드사명, 이통사명)

    $P_AMT = '';                // 10 거래금액

    $P_UNAME = '';            // 11 결제고객성명

    $P_RMESG1 = '';            // 12 결과코드

    $P_RMESG2 = '';            // 13 결과메시지

    $P_NOTI = '';            // 14 노티메시지(상점에서 올린 메시지)

    $P_AUTH_NO = '';            // 15 승인번호


    $P_TID = $_REQUEST['P_TID'];

    $P_MID = $_REQUEST['P_MID'];

    $P_AUTH_DT = $_REQUEST['P_AUTH_DT'];

    $P_STATUS = $_REQUEST['P_STATUS'];

    $P_TYPE = $_REQUEST['P_TYPE'];

    $P_OID = $_REQUEST['P_OID'];

    $P_FN_CD1 = $_REQUEST['P_FN_CD1'];

    $P_FN_CD2 = $_REQUEST['P_FN_CD2'];

    $P_FN_NM = $_REQUEST['P_FN_NM'];

    $P_AMT = $_REQUEST['P_AMT'];

    $P_UNAME = $_REQUEST['P_UNAME'];

    $P_RMESG1 = $_REQUEST['P_RMESG1'];

    $P_RMESG2 = $_REQUEST['P_RMESG2'];

    $P_NOTI = $_REQUEST['P_NOTI'];

    $P_AUTH_NO = $_REQUEST['P_AUTH_NO'];


    // $oid = $P_OID; //주문번호

    $oid = $P_NOTI; //주문번호 $P_OID 값이 이상하게 넘어와서 이걸 대신 씀


    $P_ApplDate = substr($P_AUTH_DT, 0, 8); #이니시스 승인날짜

    $P_ApplTime = substr($P_AUTH_DT, 8); #이니시스 승인시각


    /**********************************************

    * Start : 가상계좌의 경우 처리

    * 업체에서 가상계좌를 요청했지만 사용하지않아 테스트는 못해봤습니다.

    * 아마 문제 없지 싶습니다.

    **********************************************/


    //WEB 방식의 경우 가상계좌 채번 결과 무시 처리

    //(APP 방식의 경우 해당 내용을 삭제 또는 주석 처리 하시기 바랍니다.)

    if($P_TYPE == "VBANK")    //결제수단이 가상계좌이며

    {

        if($P_STATUS == "02") //입금통보 "02" 가 아니면(가상계좌 채번 : 00 또는 01 경우)

        {

            $qry  = "UPDATE cart SET payResult='결제완료'";

            $qry .= " , PayMethod='".escapeString($P_TYPE)."'"; #결제방법

            $qry .= " , ApplDate='".escapeString($P_ApplDate)."'"; #이니시스 승인날짜

            $qry .= " , ApplTime='".escapeString($P_ApplTime)."'"; #이니시스 승인시각

            $qry .= " , ResultCode='".escapeString($P_STATUS)."'"; #결과코드

            $qry .= " , ResultMsg='".escapeString($P_RMESG1)."'"; #결과메시지

            $qry .= " WHERE oid='".$oid."' AND TID='".$P_TID."'";

            $obj->query($qry , "N");


            echo "OK";

            return;

        }


        if($P_STATUS != "02") //입금통보 "02" 가 아니면(가상계좌 채번 : 00 또는 01 경우)

        {

            echo "OK";

            return;

        }

    }

    /**********************************************

    * End : 가상계좌의 경우 처리

    **********************************************/


    $PageCall_time = date("H:i:s");


    $value = array(

            "PageCall time" => $PageCall_time,

            "P_TID"     => $P_TID,

            "P_MID"     => $P_MID,

            "P_AUTH_DT" => $P_AUTH_DT,

            "P_STATUS"  => $P_STATUS,

            "P_TYPE"    => $P_TYPE,

            "P_OID"     => $P_OID,

            "P_FN_CD1"  => $P_FN_CD1,

            "P_FN_CD2"  => $P_FN_CD2,

            "P_FN_NM"   => $P_FN_NM,

            "P_AMT"     => $P_AMT,

            "P_UNAME"   => $P_UNAME,

            "P_RMESG1"  => $P_RMESG1,

            "P_RMESG2"  => $P_RMESG2,

            "P_NOTI"    => $P_NOTI,

            "P_AUTH_NO" => $P_AUTH_NO

            );


    // 결제처리에 관한 로그 기록

    writeLog($value);




    /**********************************************

    * Start : DB입력 구문이 들어와야 함.

    **********************************************/


    // 결제가 정상적으로 이뤄졌다면

    if ( $P_STATUS=='00' ) {

        $P_CSHR_ResultCode  = '';

        $P_CSHR_Type        = '';

        $P_CARD_INTEREST    = $_REQUEST['P_CARD_INTEREST'];

        $P_CARD_ISSUER_CODE = $_REQUEST['P_CARD_ISSUER_CODE'];

        $P_CARD_AuthType    = $_REQUEST['P_CARD_AuthType'];

        $P_EVENT_CODE       = $_REQUEST['P_EVENT_CODE'];

        $P_ResultErrorCode  = $_REQUEST['P_ResultErrorCode'];


        // oid(주문번호)와 TID(거래번호)가 NULL 인 것에만 입력해야 함.

        // 이미 있다면 입력하지않고 바로 OK 를 출력.

        $qry = $obj->query("SELECT COUNT(*) AS CNT FROM cart WHERE oid='".$oid."' AND TID = '".$P_TID."'" ,"N");

        $res = $obj->fetch_assoc($qry);

        if($res['CNT']==0) {

            $payResult = '결제완료';

        

            $qry  = "UPDATE cart SET";

            $qry .= " payResult='".$payResult."' ";

            if ($P_TYPE == "BANK") {

                $qry .= " , ACCT_BankCode='".escapeString($P_FN_CD1)."'"; #실시간 계좌이체 - 은행코드

                $qry .= " , CSHR_ResultCode='".escapeString($P_CSHR_ResultCode)."'"; #실시간 계좌이체 - 현금영수증 발행결과코드

                $qry .= " , CSHR_Type='".escapeString($P_CSHR_Type)."'"; #실시간 계좌이체 - 현금영수증 발행구분코드

            } else if ($P_TYPE == "CARD") {

                $qry .= " , ApplNum='".escapeString($P_AUTH_NO)."'"; #신용카드 승인번호

                $qry .= " , CARD_Quota='".escapeString($P_RMESG2)."'"; #할부기간

                $qry .= " , CARD_Interest='".escapeString($P_CARD_INTEREST)."'"; #1이면 무이자 할부

                $qry .= " , CARD_Code='".escapeString($P_FN_CD1)."'"; #신용카드사 코드

                $qry .= " , CARD_BankCode='".escapeString($P_CARD_ISSUER_CODE)."'"; #카드발급사 코드

                $qry .= " , CARD_AuthType='".escapeString($P_CARD_AuthType)."'"; #본인인증 수행여부(00 이면 수행)

                $qry .= " , EventCode='".escapeString($P_EVENT_CODE)."'"; #각종 이벤트 적용여부

            }

            $qry .= " , TID='".escapeString($P_TID)."'"; #거래번호

            $qry .= " , PayMethod='".escapeString($P_TYPE)."'"; #결제방법

            $qry .= " , ApplDate='".escapeString($P_ApplDate)."'"; #이니시스 승인날짜

            $qry .= " , ApplTime='".escapeString($P_ApplTime)."'"; #이니시스 승인시각

            $qry .= " , ResultCode='".escapeString($P_STATUS)."'"; #결과코드

            $qry .= " , ResultMsg='".escapeString($P_RMESG1)."'"; #결과메시지

            $qry .= " WHERE oid='".$oid."'";

            $obj->query($qry , "N");

        }


        /***********************************************************************************

         ' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을

         ' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요

         ' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다

         ' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다

        '***********************************************************************************/

        echo "OK"; //절대로 지우지 마세요

    } else {

        $obj->query("UPDATE cart SET payResult='결제실패' WHERE oid='".$oid."'" , "N");

        echo "FAIL";

    }

    /**********************************************

    * End : DB입력 구문이 들어와야 함.

    **********************************************/

}


//로그 작성을 위해 결제가 되는 경로상에 "Log" 디렉토리를 만들고 707 로 권한을 바꿔주셔야 합니다.

function writeLog($msg)

{

    $file = "./Log/noti_input_".date("Ymd").".log";


    if(!($fp = fopen($file, "a+"))) return 0;


    ob_start();

    print_r($msg);

    $ob_msg = ob_get_contents();

    ob_clean();


    if(fwrite($fp, " ".$ob_msg."\n") === FALSE)

    {

        fclose($fp);

        return 0;

    }

    fclose($fp);

    return 1;

}


//injection 방어

function escapeString($str) {

$result = "";

    $str = trim($str);

if( $str <> '' ) $result = mysql_real_escape_string($str);

return $result;

}

?>




P_NOTI_URL(pay_noti.php) - 가상계좌 처리

결제페이지에서 결제를 하게되면 인증을 거친 후 이니시스에서 가상계좌번호 페이지를 생성($P_REQ_URL)합니다.

쇼핑몰에서는 이 이니시스의 가상계좌번호 페이지를 읽어와서 쇼핑몰의 페이지에 보여줘야 합니다.

<?php

/**********************************************

* 이니시스 NOTI 서버에서 받은 Value

**********************************************/

$P_STATUS = '';  // 거래상태 (00:성공, 01:실패)

$P_RMESG1 = '';  // 가상계좌번호, 입금기한

$P_TID = '';     // 거래번호

$P_REQ_URL = ''; // 이니시스 URL(고치면 안됨)

$P_NOTI = '';    // OID 대신 여기에 넣어서 넘김


$P_STATUS = $_POST['P_STATUS'];

$P_RMESG1 = iconv('euc-kr', 'utf-8', $_POST['P_RMESG1']); // 넘어오는 값은 EUC-KR 이다, 이것을 UTF-8 로 변경해야 한다.

$P_TID = $_POST['P_TID'];

$P_REQ_URL = $_POST['P_REQ_URL'];

$P_NOTI = $_POST['P_NOTI'];


/**********************************************

* 이 정보를 토대로 P_STATUS가 00(정상 승인)이면

* P_REQ_URL의 페이지를 긁어서 가상계좌 번호를 고객에게 보여주라는 이야기임.

**********************************************/

/*

//결제정보 찍어보기

echo 'P_STATUS : '.$P_STATUS.'<BR>';

echo 'P_RMESG1 : '.$P_RMESG1.'<BR>';

echo 'P_TID : '.$P_TID.'<BR>';

echo 'P_REQ_URL : '.$P_REQ_URL.'<BR>';

echo 'P_NOTI : '.$P_NOTI.'<BR>';


//결제정보 모두 찍어보기

PRINT_R($_REQUEST);

*/

if ($P_STATUS === '00') {

    //페이지를 읽어오기위해 curl 을 사용합니다.

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $P_REQ_URL);

    curl_setopt($ch, CURLOPT_POST, true);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, 'P_MID=INIpayTest&P_TID='.$P_TID) ; // P_MID=INIpayTest 에서 INIpayTest 를 쇼핑몰에 맞게 수정 할 것

    $vbank = iconv('euc-kr', 'utf-8', curl_exec($ch)); //이니시스의 페이지는 EUC-KR이므로 UTF-8로 변환

    curl_close($ch);


    $data = array();

    parse_str($vbank, $data);


    //셋팅된 가격과 결제금액이 맞는지 체크

    $qry = $obj->query("SELECT price FROM cart WHERE oid = '".$_GET['oid']."'" ,"N");

    $res = $obj->fetch_assoc($qry);

    if ($data['P_STATUS'] == '00' && (int)$res['price'] === (int)$data['P_AMT']) {

        $payMethod = $data['P_TYPE'];

        ?>

        <p>

            <strong>아래 계좌로 결제금액을 입금하시면 결제가 완료 됩니다.</strong><br><br>

            선택한 은행 : <?php echo getBankName($data['P_VACT_BANK_CODE']); ?><br>

            계좌번호 : <?php echo $data['P_VACT_NUM']; ?><br>

            입급 기한 : 

            <?php echo substr($data['P_VACT_DATE'], 0, 4);?>년

            <?php echo substr($data['P_VACT_DATE'], 4, 2);?>월

            <?php echo substr($data['P_VACT_DATE'], 6, 2);?>일

            <?php echo substr($data['P_VACT_TIME'], 0, 2);?>:<?php echo substr($data['P_VACT_TIME'], 2, 2);?>:<?php echo substr($data['P_VACT_TIME'], 4, 2);?><br>

            계좌이름 : <?php echo $data['P_VACT_NAME']; ?>

        </p>

        <?php

        /*

        echo 'P_STATUS : '.$data['P_STATUS'].'<BR>';

        echo 'P_AUTH_DB : '.$data['P_AUTH_DB'].'<BR>';

        echo 'P_AUTH_NO : '.$data['P_AUTH_NO'].'<BR>';

        echo 'P_RMESG1 : '.$data['P_RMESG1'].'<BR>';

        echo 'P_RMESG2 : '.$data['P_RMESG2'].'<BR>';

        echo 'P_TID : '.$data['P_TID'].'<BR>';

        echo 'P_FN_CD1 : '.$data['P_FN_CD1'].'<BR>';

        echo 'P_AMT : '.$data['P_AMT'].'<BR>';

        echo 'P_TYPE : '.$data['P_TYPE'].'<BR>';

        echo 'P_UNAME : '.$data['P_UNAME'].'<BR>';

        echo 'P_MID : '.$data['P_MID'].'<BR>';

        echo 'P_OID : '.$data['P_OID'].'<BR>';

        echo 'P_NOTI : '.$data['P_NOTI'].'<BR>';

        echo 'P_NEXT_URL : '.$data['P_NEXT_URL'].'<BR>';

        echo 'P_MANME : '.$data['P_MNAME'].'<BR>';

        echo 'P_NOTEURL : '.$data['P_NOTiURL'].'<BR>';

        echo 'P_VACT_NUM : '.$data['P_VACT_NUM'].'<BR>';

        echo 'P_VACT_DATE : '.$data['P_VACT_DATE'].'<BR>';

        echo 'P_VACT_TIME : '.$data['P_VACT_TIME'].'<BR>';

        echo 'P_VACT_NAME : '.$data['P_VACT_NAME'].'<BR>';

        echo 'P_VACT_BANK_CODE : '.$data['P_VACT_BANK_CODE'].'<BR>';

        */


        /**********************************************

        * P_NOTI_URL에서 입금완료 시 처리해 주기위해 입력

        **********************************************/

        $qry  = "UPDATE cart SET";

        $qry .= " payResult='입금대기' ";

        $qry .= " , VACT_Num='".escapeString($data['P_VACT_NUM'])."'"; #무통장 입금 - 가상계좌 번호

        $qry .= " , VACT_BankCode='".escapeString($data['P_VACT_BANK_CODE'])."'"; #무통장 입금 - 입금할 은행 코드

        $qry .= " , VACT_Date='".escapeString($data['P_VACT_DATE'])."'"; #무통장 입금 - 입금예정일

        $qry .= " , VACT_InputName='".escapeString($data['P_UNAME'])."'"; #무통장 입금 - 송금자 명

        $qry .= " , VACT_Name='".escapeString($data['P_VACT_NAME'])."'"; #무통장 입금 - 예금주 명

        $qry .= " , TID='".escapeString($data['P_TID'])."'"; #거래번호

        $qry .= " , PayMethod='".escapeString($payMethod)."'"; #결제방법

        $qry .= " , ApplDate='".escapeString($data['P_ApplDate'])."'"; #이니시스 승인날짜

        $qry .= " , ApplTime='".escapeString($data['P_ApplTime'])."'"; #이니시스 승인시각

        $qry .= " , ResultCode='".escapeString($data['P_STATUS'])."'"; #결과코드

        $qry .= " , ResultMsg='".escapeString($data['P_RMESG1'])."'"; #결과메시지

        $qry .= " WHERE oid='".$oid."'";

        $obj->query($qry , "N");

    } else {

        ?>

        <p>

            <h1>결제 오류</h1>


            불편을 드려 죄송합니다.<br>

            현재 네트워크 사정이 좋지 않거나, 결제 시스템에 문제가 있을 수 있으니 고객센터로 문의 주시면 조속히 처리해 드리겠습니다.

        </p>

        <?php

        $qry  = "UPDATE cart SET payResult='결제실패' WHERE oid='".$oid."'";

        $obj->query($qry , "N");

    }

}

?>


여기서 사용자가 지정된 가상계좌로 입금을 하게 된다면, 이니시스에선 P_NOTI_URL로 입금결과를 통보하게 됩니다.

그 이후는 위의 P_NOTI_URL에서 처리가 됩니다.


이로써 이니시스의 모바일결제에 대한 마무리가 되었습니다.


추신.

다른 결제수단은 업체에서 요청이 없는 관계로 패스했습니다.

테스트 가맹점으로 실제 결제 테스트 시, 신용카드와 계좌이체는 그날 밤 10시 30분 부터 12시 안에 자동으로 취소가 됩니다.

하지만 가상계좌의 경우 취소 또는 환불이 어렵다고하니, 가상계좌 테스트시에는 필히 가맹점 ID로 변경하시고 결제테스트를 하시기 바랍니다.

+ Recent posts