[이니시스] [PHP] 모바일결제 > 기술자료 | 해피정닷컴

[이니시스] [PHP] 모바일결제 > 기술자료

본문 바로가기

사이트 내 전체검색

[이니시스] [PHP] 모바일결제 > 기술자료

전자결제 [이니시스] [PHP] 모바일결제

페이지 정보


본문

처음작성 : 2015-12-30 22:20:24


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 값을 그대로 리턴합니다.


4-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);
// 참고자료: https://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/이니시스-모바일-결제-프로그램-정리 

댓글목록

profile_image

아님의 댓글

메일보내기 이름으로 검색 작성일

뭘쓴거임 원글보다 못한듯...

profile_image
profile_image

벌레1님의 댓글

벌레1 이름으로 검색 작성일

IOS에서 삼성카드나 그런 앱카드 결제 할때 제대로 응답 넘어 오나요

profile_image

관리자1님의 댓글의 댓글

관리자1 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

2015-12-30 작성이후 업데이트 안된 강좌입니다.
이후 모듈이 변경되거나 추가된 사항에 대해서 기회가 되면 확인해보겠습니다.


Total 2,634건 46 페이지
  • RSS
기술자료 목록
1734
ClassicASP   10397  2016-01-22 15:58  
1733
Oracle   18977  2016-01-22 14:19  
1732
JavaScript   13835  2016-01-21 17:25  
1731
일반   15388  2016-01-20 17:56  
1730
일반   12978  2016-01-19 22:57 ~ 2016-02-15 00:00  
1729
그누보드   15216  2016-01-19 20:25  
1728
ClassicASP   12326  2016-01-18 22:59  
1727
영카트   11811  2016-01-16 13:55  
1726
일반   18407  2016-01-13 17:55  
1725
ClassicASP   10480  2016-01-13 04:34 ~ 2018-05-28 18:34  
1724
SNS   9605  2016-01-12 05:24  
1723
WindowsServer   14678  2016-01-09 23:05  
1722
일반   13042  2016-01-06 16:40  
1721
Adobe   14351  2016-01-06 16:09  
열람
전자결제   62964  2015-12-30 22:20  
1719
그누보드   14156  2015-12-29 13:27  
1718
Adobe   13267  2015-12-26 22:26 ~ 2016-03-22 00:00  
1717
테크노트   13904  2015-12-24 12:33  
1716
ClassicASP   11411  2015-12-16 16:12 ~ 2016-02-03 00:00  
1715
XpressEngine   10200  2015-12-15 09:56  

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.