[이니시스] PHP 모바일결제 > 온라인강의

본문 바로가기
 
 
 
오늘 874
어제 1,706
최대 2,526
전체 3,395,393

최근 방문자

1011
1853
1775
1756
1706
874
18 19 20 21 22 23
비즈니스의 시작 비즈명함 ~ 가격, 품질, 배송 3가지 만족을 드리는 비즈명함 / 즉석명함 / 급행서비스 / 서울 전지역 수도권일부 3시간배송

select * from g5_menu where me_use = '1' and me_link like '%lecture%'
온라인강좌 홈 > 온라인강좌 > 온라인강좌

전자결제 | [이니시스] PHP 모바일결제 (update. 2016-08-28)

페이지 정보

작성일2015-12-30 22:20 조회3,187회 댓글0건

본문

1. 장바구니  : / shop / cart.php  :  utf-8
<?php
$P_OID = date("Ymd") . '-' . substr(time() . '-' . md5(microtime()), 0, 23);  // 32 byte
?>
<form name="wcart" method="post">
<input type="hidden" name="P_oid" value="<?php echo $P_oid; ?>">


2. 결제페이지 구성 예제  :  / shop / pay.php   :  utf-8
<?php
$P_OID = $_POST["P_OID"];
?>
<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8”>
<script>
function formSubmit(){
document.getElementById(“form1”).submit();
}
</script>
<form id=”form1” name=”form1” method=”post” action=”지불수단URL” accept-charset="EUC-KR">
<!--
요즘 대부분의 사이트는 UTF-8로 제작됩니다. 하지만 이니시스의 시스템은 예전 EUC-KR을 사용중이므로
accept-charset="EUC-KR" 을 선언해서 폼의 값들을 euc-kr 인코딩형식으로 보냅니다.
나중에 결과값을 받을 때만 iconv를 사용해서 UTF-8 형식으로 변환합니다.
결과값 받을때 $name = iconv("UTF-8","EUC-KR",$P_UNAME);
-->
    <input type=hidden name="inipaymobile_type" value="web">
    <input type="hidden" name="P_MID" value="INIpayTest"> <!-- 테스트 완료시 가맹점ID로 변경 -->
    <input type="hidden" name="P_MNAME" value="상점이름" /><!-- 상점이름-->
    <input type=”hidden” name=”P_GOODS” value=”테스트상품” />
    <input type=”hidden” name=”P_MID” value=”상점아이디” />
    <input type=”hidden” name=”P_AMT” value=”상품가격” />
    <input type=”hidden” name=”P_OID” value=”<?php echo $P_OID;?>” />
    <input type=”hidden” name=”P_EMAIL” value=”abc@abc.com” />
    <input type=”hidden” name=”P_UNAME” value=”구매자명” />
    
    <input type="hidden" name="P_NOTI" value="<?php echo $P_OID;?>">
    <input type="hidden" name="P_NOTI_URL" value="http://쇼핑몰/shop/INIpayMobile_rnoti.php">
    <input type="hidden" name="P_RETURN_URL" value="http://쇼핑몰/shop/pay_result.php?OID=<?php echo $P_OID; ?>">
    <input type="hidden" name="P_RESERVED" value="twotrs_isp=Y&block_isp=Y&twotrs_isp_noti=N&cp_yn=Y&bank_receipt=N&apprun_check=Y&xtension_enable=Y">
    <input type="hidden" name="P_HPP_METHOD" value="1"><!-- 컨텐츠 1 / 실물 2-->

    <input type=”button” onclick=”formSubmit();” />
</form>


3. 결제 테이블 필드 추가
payResult   //  varchar(20)
P_UNAME = $P_UNAME   // 결제고객성명   varchar(30)
ACCT_BankCode = $P_FN_CD1  // 실시간 계좌이체 - 은행코드
CSHR_ResultCode = $P_CSHR_ResultCode  // 실시간 계좌이체 - 현금영수증 발행결과코드
CSHR_Type = $P_CSHR_Type  // 실시간 계좌이체 - 현금영수증 발행구분코드
ApplNum = $P_AUTH_NO  // 신용카드 승인번호  varchar(30)
CARD_Quota  = $P_RMESG2  // 할부기간   varchar(2)
CARD_Interest = $P_CARD_INTEREST  // 1이면 무이자 할부   varchar(2)
CARD_Code = $P_FN_CD1  // 신용카드사 코드  char(4)
CARD_BankCode = $P_CARD_ISSUER_CODE  // 카드발급사 코드
CARD_AuthType = P_CARD_AuthType  // 본인인증 수행여부(00 이면 수행)   varchar(2)
EventCode = $P_EVENT_CODE  // 각종 이벤트 적용여부
TID = $P_TID  // 거래번호   char(40)
PayMethod = $P_TYPE  // 결제방법    BANK : 실시간 계좌이체 ,  CARD : 신용카드   varchar(10)
ApplDate = $P_ApplDate  // 이니시스 승인날짜
ApplTime =  $P_ApplTime  // 이니시스 승인시각
ResultCode = $P_STATUS  // 결과코드
ResultMsg = $P_RMESG1 //  결과메시지


4. 결제 자료 받기

4-1. Transaction 거래의 경우, “ 결제창 Open (주문정보 전달) – 접속 주소 및 일반필드 장 에 기재된, P_NEXT_URL 로 인증결과를 전달합니다. 이때 이니페이모바일TM 에서 P_NEXT_URL 로 전달하는 Parameter 는 하기와 같습니다.

P_STATUS : 인증상태  :  성공시 00, 그 외 실패 
P_RMESG1 : 결과메시지
P_TID : 인증거래번호  :  Char(40) / 성공시에만 반환 
P_REQ_URL : 승인요청 Url
           가맹점에서 이니페이모바일로 승인요청을 할 때, 사용되는 Url 입니다. 
           거래 건 마다 상이한 URL 이 전달됩니다.
           따라서, 절대 고정하여 사용하지 마십시오.
            Http Scheme 은 https 를 사용합니다. 
P_NOTI : 기타주문정보
           최초 거래시 주문정보에 P_NOTI 를 설정하셨다면, 그 값을 전달받을 수 있습니다. 
           이 값은 P_NOTI 값을 그대로 리턴합니다.


3-2. 이니시스 NOTI 서버에서 받은 Value
$P_STATUS;            // 거래상태 (00:성공,  그외:실패)
$P_TID;                // 거래번호 char(40)
$P_TYPE;            // 지불수단 char(10)
$P_AUTH_DT;            // 승인일자 char(14) YYYYmmddHHmmss
$P_MID;            // 상점아이디 char(10)
$P_OID;                // 상점주문번호 char(100)
$P_AMT;            // 거래금액 char(8)
$P_UNAME;            // 결제고객성명 char(30)
$P_MNAME;            // 가맹점 이름
$P_RMESG1;            // 지불 결과 메시지 char(500)
$P_NOTI;            // 노티메시지(상점에서 올린 메시지) char(800)
$P_NOTEURL            // 가맹점 전달 , 거래요청 시 입력한 값을 그대로 반환합니다.
$P_NEXT_URL            // 가맹점 전달 NEXT URL , 거래요청 시 입력한 값을 그대로 반환합니다.
$P_RMESG2;            // 신용카드 할부 개월 수   char(500)
$P_FN_CD1;            // 카드코드  char(4)
$P_AUTH_NO;            // 신용카드 승인번호  char(30)
$P_FN_CD2;            // 금융사코드2
$P_FN_NM;            // 결제카드한글명 , BC카드,


4-3. 인증결과수신 :  / shop / INIpayMobile_rnoti.php   :  euc-kr
<?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); #이니시스 승인시각

    /**********************************************
    * 디비컨넥션
    **********************************************/
    //require_once("dbconn.php");
    $dbconn = mysql_connect("$db_host","$db_id","$db_passwd") or die("데이터베이스 연결에 실패하였습니다.");
    mysql_select_db($db_database, $dbconn);

    /**********************************************
    * 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 = "SELECT * FROM cart WHERE oid='".$oid."' AND TID = '".$P_TID."'";
        $result = mysql_query($qry,$dbconn);
        $data = mysql_fetch_array($result);
        $isset_check = $data["oid"];  // 필드 데이타 하나를 호출합니다.
        
        if(isset($isset_check)) { // 자료 있을때
        } else { // 자료 없을때
            $payResult = '결제완료';
        
            $qry2  = "UPDATE cart SET";
            $qry2 .= " payResult='".$payResult."' ";
            if ($P_TYPE == "BANK") {
                $qry2 .= " , ACCT_BankCode='".escapeString($P_FN_CD1)."'"; #실시간 계좌이체 - 은행코드
                $qry2 .= " , CSHR_ResultCode='".escapeString($P_CSHR_ResultCode)."'"; #실시간 계좌이체 - 현금영수증 발행결과코드
                $qry2 .= " , CSHR_Type='".escapeString($P_CSHR_Type)."'"; #실시간 계좌이체 - 현금영수증 발행구분코드
            } else if ($P_TYPE == "CARD") {
                $qry2 .= " , ApplNum='".escapeString($P_AUTH_NO)."'"; #신용카드 승인번호
                $qry2 .= " , CARD_Quota='".escapeString($P_RMESG2)."'"; #할부기간
                $qry2 .= " , CARD_Interest='".escapeString($P_CARD_INTEREST)."'"; #1이면 무이자 할부
                $qry2 .= " , CARD_Code='".escapeString($P_FN_CD1)."'"; #신용카드사 코드
                $qry2 .= " , CARD_BankCode='".escapeString($P_CARD_ISSUER_CODE)."'"; #카드발급사 코드
                $qry2 .= " , CARD_AuthType='".escapeString($P_CARD_AuthType)."'"; #본인인증 수행여부(00 이면 수행)
                $qry2 .= " , EventCode='".escapeString($P_EVENT_CODE)."'"; #각종 이벤트 적용여부
            }
            $qry2 .= " , TID='".escapeString($P_TID)."'"; #거래번호
            $qry2 .= " , PayMethod='".escapeString($P_TYPE)."'"; #결제방법
            $qry2 .= " , ApplDate='".escapeString($P_ApplDate)."'"; #이니시스 승인날짜
            $qry2 .= " , ApplTime='".escapeString($P_ApplTime)."'"; #이니시스 승인시각
            $qry2 .= " , ResultCode='".escapeString($P_STATUS)."'"; #결과코드
            $qry2 .= " , ResultMsg='".escapeString($P_RMESG1)."'"; #결과메시지
            $qry2 .= " WHERE oid='".$oid."'";
            $result2 = mysql_query($qry2);
        }

        /***********************************************************************************
         ' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을
         ' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요
         ' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다
         ' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다
        '***********************************************************************************/
        echo "OK"; //절대로 지우지 마세요
    } else {
        $qry = "UPDATE cart SET payResult='결제실패' WHERE oid='".$oid."'";
        $result = mysql_query($qry,$dbconn);
        echo "FAIL";
    }
    /**********************************************
    * End : DB입력
    **********************************************/
}
?>


5. 결제완료 페이지  :  / shop / pay_result.php   :  utf-8
<php
require_once("common/dbconn.php");

$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];
$P_ApplDate = $_REQUEST[P_ApplDate];
$P_ApplTime = $_REQUEST[P_ApplTime];
$PayMethod = $_REQUEST[PayMethod];
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td align="center" style="padding:20px 0 10px 0;">
<?php
$sql = "select * from nux_pay where oid ='". $P_OID ."' and  TID='". $P_TID ."'";
$result = mysql_query($sql);
/*
if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
*/
$data = mysql_fetch_array($result);
// 참고자료: http://www.happyjung.com/bbs/board.php?bo_table=lecture&wr_id=1132
$isset_check = $data["oid"];  // 필드 데이타 하나를 호출합니다.
//echo $isset_check;  // 정상보이는지 확인

if(isset($isset_check)) { // 자료 있을때
?>
신청해 주셔서 감사합니다.
<?php
} else { // 자료 없을때
?>
<br><br>주문내역이 없습니다.<br><br>
<?php
}
?>
        </td>
    </tr>
</table>


참고자료
http://thisblogbusy.tistory.com/entry/이니시스-모바일-결제-프로그램-정리 
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.


목록

Total 2,005건 1 페이지
온라인강의 목록
번호 제목
2005
2004
2003
2002
2001
2000
1999
1998
1997
1996
1995
1994
1993
1992
1991
1990
1989
1988
1987
1986
1985
1984
1983
1982
1981
게시물 검색
 
 
상호: 해피정닷컴 대표:정창용 사업자등록번호:119-05-36414 (08394) 서울시 구로구 디지털로 242 한화비즈메트로1차 1502호
전화: 070-7600-3500 팩스:02-865-3528 개인정보관리:정창용 mail@happyjung.com 에스크로확인
개인정보취급방침
COPYRIGHT 2001~2017 해피정닷컴. All rights reserved. 부가통신사업신고:서울체신청-1217 통신판매신고:2014-서울구로-0074
 
모바일 버전으로 보기