[이니시스] 모바일결제 ( euc-kr / utf-8 ) > 온라인강의

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

최근 방문자

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

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

전자결제 | [이니시스] 모바일결제 ( euc-kr / utf-8 )

페이지 정보

작성일2013-07-04 15:33 조회18,228회 댓글0건

본문

이니시스 모바일 결제를 이용하면 스마트폰에서 결제가 가능합니다.

홈페이지가 euc-kr 로 구성된 경우에는 별무리없이 사용하면 됩니다.

그러나 utf-8로 운영중인 홈페이지인 경우에 모바일에서 결제를 진행하면 상품명, 주문자 이름이 깨지는 문제가 발생합니다.
아래 주문예제를 잘 보시고 여러분의 홈페이지에 잘 적용해보세요.


##### pay.php #####

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<meta name="viewport" content="width=device-width"/>
<title>INIpayMobile 결제</title>

<style>
  body, tr, td { font-size:10pt; font-family:돋움,verdana; color:#433F37; line-height:19px; }
  table { border:none; }
  img { border:none; border:0; }
</style>

<script type="application/x-javascript">
addEventListener("load", function() {
  setTimeout(updateLayout, 0);
}, false);
 
var currentWidth = 0;
    
function updateLayout() {
  if (window.innerWidth != currentWidth) {
    currentWidth = window.innerWidth;
    var orient = currentWidth == 320 ? "profile" : "landscape";
    document.body.setAttribute("orient", orient);
    setTimeout(function() {
      window.scrollTo(0, 1);
    }, 100);            
  }
}

setInterval(updateLayout, 400);
</script>

<script language=javascript>
window.name = "BTPG_CLIENT";
var width = 330;
var height = 480;
var xpos = (screen.width - width) / 2;
var ypos = (screen.width - height) / 2;
var position = "top=" + ypos + ",left=" + xpos;
var features = position + ", width=320, height=550";
var date = new Date();
var date_str = "testoid_"+date.getFullYear()+""+date.getMinutes()+""+date.getSeconds();
if( date_str.length != 16 ) {
  for( i = date_str.length ; i < 16 ; i++ ) {
    date_str = date_str+"0";
  }
}
function setOid() {
  document.ini.P_OID.value = ""+date_str;
}

function on_app() {
  var order_form = document.ini;
  var paymethod;
  if(order_form.paymethod.value == "wcard")
    paymethod = "CARD";
  else if(order_form.paymethod.value == "mobile")
    paymethod = "HPP";
  else if(order_form.paymethod.value == "vbank")
    paymethod = "VBANK";
  else if(order_form.paymethod.value == "culture")
    paymethod = "CULT";
  else if(order_form.paymethod.value == "hpmn")
    paymethod = "HPMN";    

  param = "";
  param = param + "mid=" + order_form.P_MID.value + "&";
  param = param + "oid=" + order_form.P_OID.value + "&";
  param = param + "price=" + order_form.P_AMT.value + "&";
  param = param + "goods=" + order_form.P_GOODS.value + "&";
  param = param + "uname=" + order_form.P_UNAME.value + "&";
  param = param + "mname=" + order_form.P_MNAME.value + "&";
  param = param + "mobile=000-111-2222" + order_form.P_MOBILE.value + "&";
  param = param + "paymethod=" + paymethod + "&";
  param = param + "noteurl=" + order_form.P_NOTI_URL.value + "&";
  param = param + "ctype=1" + "&";
  param = param + "returl=" + "&";
  param = param + "email=" + order_form.P_EMAIL.value;
  var ret = location.href="INIpayMobile://" + encodeURI(param);
}

function on_web() {
  var order_form = document.ini;
  var paymethod = order_form.paymethod.value;
  var wallet = window.open("", "BTPG_WALLET", features);
 
  if (wallet == null)  {
    if ((webbrowser.indexOf("Windows NT 5.1")!=-1) && (webbrowser.indexOf("SV1")!=-1)) {    // Windows XP Service Pack 2
      alert("팝업이 차단되었습니다. 브라우저의 상단 노란색 [알림 표시줄]을 클릭하신 후 팝업창 허용을 선택하여 주세요.");
    }
    else {
      alert("팝업이 차단되었습니다.");
    }
    return false;
  }
 
  order_form.target = "BTPG_WALLET";
  order_form.action = "https://mobile.inicis.com/smart/" + paymethod + "/";
  order_form.submit();
}

function onSubmit() {
  var order_form = document.ini;
  var inipaymobile_type = order_form.inipaymobile_type.value;
  if( inipaymobile_type == "app" )
    return on_app();
  else if( inipaymobile_type == "web" )
    return on_web();
}
</script>

<?php
$hp = $_POST["hp1"] . '-' . $_POST["hp2"] . '-' . $_POST["hp3"];  // 앞에서 넘어온 전화번호
$email = $_POST["email"];  // 앞에서 넘어온 주문자 이메일
$P_OID = time();  // 주문번호

$price = $POST["price"];     // 앞페이지의 장바구니 또는 앞에서 넘어온 제품가격
$P_AMT = $price;

$name = $_POST["name"];  // 앞페이지에서 넘어온 주문자 이름
$P_UNAME = $name;
$P_UNAME = iconv("UTF-8","EUC-KR",$P_UNAME);  // 앞페이지가 utf-8 인경우 사용

$product   = $_POST["product"];  // 앞에서 넘어온 주문 상품명
$P_GOODS = $product;
$P_GOODS = iconv("UTF-8","EUC-KR",$P_GOODS);  // 앞페이지가 utf-8 인경우 사용

$P_NOTI = "";  // 기타주문정보 , 800byte 이내 , 사용법: 변수명=변수값,변수명=변수값

$P_MID = "INIpayTest";    //상점ID  ,  테스트: INIpayTest
$P_MNAME = "해피정닷컴";  // 상점이름

// $P_NEXT_URL : VISA3D (가상계좌를 제외한 기타지불수단) , 인증결과를 브라우저에서 해당 URL로 POST 합니다.
// $P_NEXT_URL ="https://mobile.inicis.com/smart/testmall/next_url_test.php";
$P_NEXT_URL ="http://m.happyjung.com.kr/m/pay_save.php";

// $P_NOTI_URL : 가상계좌, ISP 인증 및 결제 후 상점의 결제 수신 서버URL로 결제 결과를 통보합니다.
// $P_NOTI_URL = "http://ts.inicis.com/~esjeong/mobile_rnoti/rnoti.php";
$P_NOTI_URL = "http://m.happyjung.com/m/INIpaypay_save.php";

// $P_RETURN_URL : ISP 인증 및 결제 완료 후 상점으로 이동하기 위한 APP URL 또는 상점 홈페이지 URL
// $P_RETURN_URL = "http://ts.inicis.com/~esjeong/mobile_rnoti/rnoti.php";
$P_RETURN_URL = "http://m.happyjung.com/m/pay_save.php";
?>
</head>

<body onload="setOid()" topmargin="0"  leftmargin="0" marginwidth="0" marginheight="0">
<form id="form1" name="ini" method="post" action="" >
<table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td height="69" align="center" style="color:#ffffff; font-size:16px; font-weight:bold;">INIpay Mobile 결제요청</td>
  </tr>
  <tr>
    <td>
      주문자명: <input type="text" name="name" value="<?php echo $name; ?>" /><br />
      상품이름: <input type="text" name="goods" value="<?php echo $product; ?>" /><br />
      휴대전화: <input type="text" name="hp" value="<?php echo $hp; ?>" /><br />
      제품가격: <input type="text" name="price" value="<?php echo $price; ?>" />
    </td>
  </tr>
  <tr>
    <td height="39" align="center" onClick="javascript:onSubmit();"><img src="INIpayMobile/btn_confirm.png" width="55" height="29" /></td>
  </tr>
</table>

  <!-- 이니시스 카드결재관련 -->


  <input type="hidden" name="inipaymobile_type" value="web" />
  <input type="hidden" name="P_OID" value="<? echo $P_OID;?>" />
  <input type="hidden" name="P_GOODS" value="<?php echo $P_GOODS; ?>" />
  <input type="hidden" name="P_AMT" value="<?php echo $P_AMT; ?>" />
  <input type="hidden" name="P_UNAME" value="<?php echo $P_UNAME; ?>" />
  <input type="hidden" name="P_MNAME" value="<?php echo $P_MNAME; ?>" />
  <input type="hidden" name="P_MOBILE" value="<?php echo $P_MOBILE; ?>" />
  <input type="hidden" name="P_EMAIL" value="<?php echo $P_EMAIL; ?>" />
  <input type="hidden" name="paymethod" value="wcard" />
  <input type="hidden" name="P_MID" value="<?php echo $P_MID; ?>" />
  <input type="hidden" name="P_NEXT_URL" value="<?php echo $P_NEXT_URL; ?>" />
  <input type="hidden" name="P_NOTI_URL" value="<?php echo $P_NOTI_URL; ?>" />
  <input type="hidden" name="P_RETURN_URL" value="<?php echo $P_RETURN_URL; ?>" />
  <input type="hidden" name="P_HPP_METHOD" value="1" />
</form>
</body>
</html>




##### INIpayMobile_rnoti.php #####

이니시스에서 공식적으로 넘겨받은 결제모듈 내용입니다.
결제에 필요한 정보를 암호화해서 결제창으로 넘기는 역할을 합니다.
내용은 다음과 같습니다.

<?php

//*******************************************************************************
// FILE NAME : mx_rnoti.php
// FILE DESCRIPTION :
// 이니시스 smart phone 결제 결과 수신 페이지 샘플
// 기술문의 : 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];

        //WEB 방식의 경우 가상계좌 채번 결과 무시 처리
        //(APP 방식의 경우 해당 내용을 삭제 또는 주석 처리 하시기 바랍니다.)
         if($P_TYPE == "VBANK")    //결제수단이 가상계좌이며
            {
                  if($P_STATUS != "02") //입금통보 "02" 가 아니면(가상계좌 채번 : 00 또는 01 경우)
                  {
                  echo "OK";
                  return;
                  }
            }

          $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);
 
        /***********************************************************************************
         ' 위에서 상점 데이터베이스에 등록 성공유무에 따라서 성공시에는 "OK"를 이니시스로 실패시는 "FAIL" 을
         ' 리턴하셔야합니다. 아래 조건에 데이터베이스 성공시 받는 FLAG 변수를 넣으세요
         ' (주의) OK를 리턴하지 않으시면 이니시스 지불 서버는 "OK"를 수신할때까지 계속 재전송을 시도합니다
         ' 기타 다른 형태의 echo "" 는 하지 않으시기 바랍니다
        '***********************************************************************************/
    
        // if(데이터베이스 등록 성공 유무 조건변수 = true)
            echo "OK"; //절대로 지우지 마세요
        // else
        //     echo "FAIL";
  }

function writeLog($msg)
{
    $file = "noti_input_".date("Ymd").".log";

    if(!($fp = fopen($path.$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;
}
?>



##### pay_insert.php #####

<?php
//require_once "common/dbconn.php";
$dbconn = mysql_connect("$mysql_host","$mysql_user","$mysql_password") or die("데이터베이스 연결에 실패하였습니다.");
@mysql_query("set names utf8");
mysql_select_db($mysql_db, $dbconn);

$oid = $_GET['P_OID'];  //return_url 뒤에 get방식으로 전달한 주문식별자 (ex: P_RETURN_URL = http://www.inicis.com/mx_rreturn.php?oid=123456)

if($row[6] == "00") { // 결재가 성공인 경우 DB에 입력
  //echo "결제종류 : " . $paymethod_type . "<br />";
  //echo $row[13]. "원 결제가 성공하였습니다. <br />";

  //if($row[7] =="CARD") echo "승인번호 : " . $row[17];
  if($row[7] =="VBANK") {
    $explode_data = explode('|', $row[14]);
    $aaa = explode('=', $explode_data[0]);
    $bbb = explode('=', $explode_data[1]);
    //echo "입금은행 : " . $row[11]. "<br />";
    //echo "입금계좌 : " . $aaa[1] . "<br />";
    //echo "입금기한 : " . $bbb[1] . "<br />";
  }
  $query = " insert into nux_pay (goods_name, total_price, buy_user, auth_code, pay_type, buy_date, name, email, hp, reg_date) values ('$goodname', '$row[10]', '$row[11]', '$oid', '1', '$oid', '$name', '$email', '$hp',  now()) ";
  $result = mysql_query($query);
 
  if (!$result) die("디비입력에 실패했습니다.");
  else {
    //if ($member['mb_id'] == 'hapyjung') {
    //  echo $query;
    //} else {
      echo("<script>location.href='03_thanks.php'< /script>");
    //}
  }

} else {
  echo "결제가 실패하였습니다. <br />";
 
}
//echo "승인 내역이 존재하지 않습니다. 승인내역 처리가 늦어서 조회되지 않는 경우일 수 있습니다. 개인결제내역 페이지에서 내역을 다시 확인해 주시기 바랍니다.";
?>



  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.


목록

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
 
모바일 버전으로 보기