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

본문 바로가기
 
 
 
오늘 424
어제 2,038
최대 2,454
전체 3,144,022
비즈니스의 시작 비즈명함 ~ 가격, 품질, 배송 3가지 만족을 드리는 비즈명함 / 즉석명함 / 급행서비스 / 서울 전지역 수도권일부 3시간배송

온라인강좌 홈 > 온라인강좌 > 온라인강좌

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

페이지 정보

작성일2013-07-04 15:33 조회16,964회 댓글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 43건 1 페이지
온라인강의 목록
번호 제목
43
42
41
전자결제 [이니시스] PHP 모바일결제 (update.2016-08-28)인기글  Hit.2278
40
39
열람중
37
36
35
34
33
32
31
전자결제 [PayPal] 페이팔 수수료 (write.2012-03-20)인기글  Hit.4789
30
전자결제 [PayPal] 페이팔 가입방법 (write.2012-03-20)인기글  Hit.8945
29
28
27
26
25
24
23
22
전자결제 [다날] [FAQ] KTARS 결제 (write.2011-10-21)인기글  Hit.4644
21
20
전자결제 [다날] [FAQ] ClientModule (write.2011-10-21)인기글  Hit.7073
19
게시물 검색
 
 
상호: 해피정닷컴 대표:정창용 사업자등록번호: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
 
모바일 버전으로 보기