[이니시스] PHP 개별결제창 만들기 > 기술자료 | 해피정닷컴

[이니시스] PHP 개별결제창 만들기 > 기술자료

본문 바로가기

사이트 내 전체검색

[이니시스] PHP 개별결제창 만들기 > 기술자료

전자결제 [이니시스] PHP 개별결제창 만들기

페이지 정보


본문

이니시스 표준모듈 2018-07-18 배포된 샘플을 이용해서 개별결제창을 만들어 봅니다.

1. 이니시스 상점관리자 메뉴에서 표준 결제모듈 (PC버전)을 다운로드
INIpayWebStandard_Sample_20180718.zip


2. INIStdPay.php 파일 생성
이것은 결제금액과 결제자 정보를 입력받습니다.
배포된 파일중 INIStdPayRequest.php 에서 결제가 시작되지만 결제금액은 이 파일에서 입력받는 형식으로 이용은 정상적인 결제가 진행되지 않습니다.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script>
  // 숫자만 입력되도록 하는 코드
  function onlyNumber()
  {
  //alert(event.keyCode);
    if ( ( (96<=event.keyCode) && (event.keyCode<=105) ) ||  ( (48<=event.keyCode) && (event.keyCode<=57) ) || (event.keyCode==8)  || (event.keyCode==37) || (event.keyCode==39) || (event.keyCode==9))
    {
      event.returnValue=true;
    }
    else
    {
      event.returnValue=false;
    }
  }
  
  function input_check() {   
    var f = document.SendPayForm;  // 본문 form에서의 name 값으로 수정
    if(f.price.value == "") {
      alert("결제금액을 입력하셔야 합니다.");
      f.price.focus();
      return false;
    }
    if(f.buyeremail.value == '' || f.buyeremail.value.indexOf('@') == -1) {
      alert('이메일 주소를 적지 않았거나, 옳바른 E-mail이 아닙니다.\n확인 후 입력해주세요');
      f.buyeremail.focus();
      return false;
    }
    if(f.buyertel.value == "") {
      alert("연락처를 입력해주세요");
      f.buyertel.focus();
      return false;
    }
    return true;
  }

</script>
</head>

<body>
<?php
// siteDomain 은 INIStdPayRequest.php 입력하는 정보와 동일하게 사용합니다.
$siteDomain = "http://www.도메인/INIpay/INIStdPay";
?>
<form name="SendPayForm" id="SendPayForm_id" action="<?php echo $siteDomain; ?>/INIStdPayRequest.php" method="POST" onSubmit="return input_check()">
<!-- 개별결제창에서 결제가 넘어간것을 알리기 위해 추가 -->
<input type="hidden" name="directPay" value="directPay">
<div style="padding:10px;background-color:#f3f3f3;width:650px; font-size:13px;color: #ffffff;background-color: #000000;text-align: center">
    신용카드 개별결제
</div>

<div style="width:650px; background-color:#6095BC; text-align:center; padding:10px">
    <div style="width:100%; background-color:#FFF; padding:20px">
        신용카드 결제요청 창입니다.<br/>
        <br/>
        <font color="#336699"><strong>아래 정보로 결제를 요청합니다.</strong></font>
    </div>
    
    <div style="width:100%; border:2px #dddddd double;padding:10px;background-color:#f3f3f3; line-height:35px; text-align:left; padding-left:130px;">
        <b>상품정보</b> : <input type="text" style="border:0px;" name="goodname" value="결제테스트" >
        <br/>
        <b>결제금액</b> : <input type="text" id="price" name="price" value="" maxlength="7" style="height:25px; IME-MODE:disabled" onkeydown="onlyNumber();"> (숫자만 입력해주세요)
        <br/>
        <b style="letter-spacing:0.9px;">부 가 세</b> : <input type="text" id="vat" name="vat" value="" readonly style="border:0px; background-color:#f3f3f3">
        <br/>
        <b>주문자명</b> : <input type="text" style="height:25px;" name="buyername" value="" >
        <br/>
        <b style="letter-spacing:0.9px;">연 락 처</b> : <input type="text" style="height:25px;" name="buyertel" value="" >
        <br/>
        <b style="letter-spacing:0.9px;">이 메 일</b> : <input type="text" style="height:25px;width:300px;" name="buyeremail" value="" >
    </div>
    <div style="padding:10px 3px; text-align:center">
        <style>
        .button1 { padding:10px; width:45%; background-color:#F30; color:#fff; font-size:1.3em; font-weight:bold; border:0px; }
        .button2 { padding:10px; width:45%; background-color:#333; font-size:1.3em; font-weight:bold; color:#fff; border:0px; }
        </style>
        <button class="button1">결제요청</button>
        &nbsp;&nbsp;&nbsp;
        <button onclick="location.href='/v3/html/code_request.php'" class="button2">결제취소</button>
    </div>
</div>
</form>

<script>
$("#price").on("keyup", function(){
    var val = $(this).val();
    var vat = val - val / 1.1;
    vat = Math.round(vat);
    $("#vat").val( vat );
});
</script>
</body>
</html>



3. INIStdPayRequest.php 을 아래와 같이 변경합니다.
<?php
require_once('../libs/INIStdPayUtil.php');
$SignatureUtil = new INIStdPayUtil();
/*
  //*** 위변조 방지체크를 signature 생성 ***
  oid, price, timestamp 3개의 키와 값을
  key=value 형식으로 하여 '&'로 연결한 하여 SHA-256 Hash로 생성 된값
  ex) oid=INIpayTest_1432813606995&price=819000&timestamp=2012-02-01 09:19:04.004
 * key기준 알파벳 정렬
 * timestamp는 반드시 signature생성에 사용한 timestamp 값을 timestamp input에 그대로 사용하여야함
 */

$oid = "";
$orderNumber = "";
$timestamp = "";
$buyername = $_POST['buyername'];
$buyertel = $_POST['buyertel'];
$buyeremail = $_POST['buyeremail'];
$tax = $_POST['tax'];

$price = $_POST['price'];
//$tax = $price - floor($price/1.1); // 이렇게 부가세를 추출할수도 있지만 이니시스 문제로 인하여 부가세가 1원씩 오류가 발생합니다.
$taxfree = 0;

$directPay = $_POST['directPay']; // 개별결제창에서 넘어온것인지 확인 = 개인결제창에서 넘어왔으면  Y
if ($directPay=="directPay") {
    $fname = $buyername;
    $email = $buyeremail;
    $hp = $buyertel;
}

//############################################
// 1.전문 필드 값 설정(***가맹점 개발수정***)
//############################################
// 여기에 설정된 값은 Form 필드에 동일한 값으로 설정
$mid = "INIpayTest";  // 가맹점 ID(가맹점 수정후 고정)                    
//인증
$signKey = "SU5JTElURV9UUklQTEVERVNfS0VZU1RS"; // 가맹점에 제공된 웹 표준 사인키(가맹점 수정후 고정)
$timestamp = $SignatureUtil->getTimestamp();   // util에 의해서 자동생성

$orderNumber = $mid . "_" . $SignatureUtil->getTimestamp(); // 가맹점 주문번호(가맹점에서 직접 설정)
$price = $price;        // 상품가격(특수기호 제외, 가맹점에서 직접 설정)

$cardNoInterestQuota = "11-2:3:,34-5:12,14-6:12:24,12-12:36,06-9:12,01-3:4";  // 카드 무이자 여부 설정(가맹점에서 직접 설정)
$cardQuotaBase = "2:3:4:5:6:11:12:24:36";  // 가맹점에서 사용할 할부 개월수 설정
//###################################
// 2. 가맹점 확인을 위한 signKey를 해시값으로 변경 (SHA-256방식 사용)
//###################################
$mKey = $SignatureUtil->makeHash($signKey, "sha256");

$params = array(
    "oid" => $orderNumber,
    "price" => $price,
    "timestamp" => $timestamp
);
$sign = $SignatureUtil->makeSignature($params, "sha256");

/* 기타 */
$siteDomain = "http://www.도메인/INIpay/INIStdPay"; //가맹점 도메인 입력
// 페이지 URL에서 고정된 부분을 적는다. 
// Ex) returnURL이 http://localhost:8082/demo/INIpayStdSample/INIStdPayReturn.jsp 라면
//                 http://localhost:8082/demo/INIpayStdSample 까지만 기입한다.


$shopTable= "결제저장테이블";

$sql =  "SELECT * FROM ". $shopTable ."  WHERE orderOID = '".$orderNumber ."' ";
//echo "sql => $sql <br>";  // 쿼리값의 정상여부를 판단
$result = sql_query($sql);
$data = sql_fetch_array($result);

if (!$data['orderOID']) {
    $query = "INSERT INTO ". $shopTable ." set 
        fname = '{$fname}'
        , email = '{$email}'
        , tel = '$tel'
        , hp = '$hp'
        , fax = '$fax'
        , zip = '$zip'
        , add1 = '$add1'
        , add2 = '$add2'
        , memo = '$memo'
        , bank = '".$bank."'
        , total = '$price'
        , orderOID = '".$orderNumber. "'
        , wdate = now()
         ";    // 글 작성날짜 ->  필드명: date  ==  함수명 : now()
    $result=sql_query($query);
}
?>
<!DOCTYPE html>
<html>
    <head>
        <script>
            function myFunction()
            {
                alert("I am an alert box!"); // this is the message in ""
            }
        </script>

        <!-- 이니시스 표준결제 js -->
        <!--
          연동시 유의 사항!!
          1) 테스트 URL(stgstdpay.inicis.com) - 샘플에 제공된 테스트 MID 전용으로 실제 가맹점 MID 사용 시 에러가 발생 할 수 있습니다.
          2) 상용 URL(stdpay.inicis.com) - 실제 가맹점 MID 로 테스트 및 오픈 시 해당 URL 변경하여 사용합니다.
          3) 가맹점의 URL이 http: 인경우 js URL도 https://stgstdpay.inicis.com/stdjs/INIStdPay.js 로 변경합니다.    
          4) 가맹점에서 사용하는 케릭터셋이 EUC-KR 일 경우 charset="UTF-8"로 UTF-8 일 경우 charset="UTF-8"로 설정합니다.
        -->    
        
        <!-- 상용 JS(가맹점 MID 변경 시 주석 해제, 테스트용 JS 주석 처리 필수!) -->
        <!--script language="javascript" type="text/javascript" src="https://stdpay.inicis.com/stdjs/INIStdPay.js" charset="UTF-8"></script-->
        
        <!-- 테스트 JS(샘플에 제공된 테스트 MID 전용) -->
        <script language="javascript" type="text/javascript" src="https://stgstdpay.inicis.com/stdjs/INIStdPay.js" charset="UTF-8"></script>

        <script type="text/javascript">
            function pay() {
                INIStdPay.pay('SendPayForm_id');
            }
        </script>
    </head>

    <body>
        <div style="padding:10px;background-color:#f3f3f3;width:100%;font-size:13px;color: #ffffff;background-color: #000000;text-align: center">
            신용카드 결제요청
        </div>
        <table width="650" border="0" cellspacing="0" cellpadding="0" style="padding:10px;" align="center">
            <tr>
                <td bgcolor="6095BC" align="center" style="padding:10px">
                    <table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" style="padding:20px">
                        <tr>
                            <td>
                                신용카드 결제요청 창입니다.<br/>
                                <br/>
                                <font color="#336699"><strong>아래 정보로 결제를 요청합니다.</strong></font>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <table>
                                    <tr>
                                        <td style="text-align:left;">
                                            <form id="SendPayForm_id" name="" method="POST">
                                                <!-- 필수 -->
                                                <div style="width:550px; border:2px #dddddd double;padding:10px;background-color:#f3f3f3; line-height:30px;">

                                                    <input type="hidden" name="version" value="1.0" >
                                                    <input type="hidden" name="mid" value="<?php echo $mid ?>" >
                                                    <input type="hidden" name="signature" value="<?php echo $sign ?>" >
                                                    <input type="hidden" name="currency" value="WON" >
                                                    <input type="hidden" name="timestamp" value="<?php echo $timestamp ?>" >
                                                    <input type="hidden" name="returnUrl" value="<?php echo $siteDomain ?>/INIStdPayReturn.php" >
                                                    <input type="hidden" name="mKey" value="<?php echo $mKey ?>" >
                                                    <input type="hidden" name="oid" value="<?php echo $orderNumber ?>" >
                                                    <input type="hidden" name="taxfree" value="<?php echo $taxfree; ?>" >
                                                    <input type="hidden" name="tax" value="<?php echo $tax; ?>" >

                                                    <b>상품정보</b> : <input style="border:0px; background-color:transparent;" name="goodname" value="플랜트코드교육 2018" >
                                                    <br/>
                                                    <b>결제금액</b> : <input type="text" style="border:0px; background-color:#f3f3f3; width:300px;" name="price" readonly value="<?php echo $price ?>" >
                                                    <br/>
                                                    <b>주문자 정보</b> : <input type="text" style="border:0px; background-color:#f3f3f3; width:300px;" readonly name="buyername" value="<?php echo $buyername; ?>" >
                                                    <br/>
                                                    <b>주문자 연락처</b> : <input type="text" style="border:0px; background-color:#f3f3f3; width:300px;" readonly name="buyertel" value="<?php echo $buyertel; ?>" >
                                                    <br/>
                                                    <b>주문자 이메일</b> : <input type="text" style="border:0px; background-color:#f3f3f3; width:300px;" readonly name="buyeremail" value="<?php echo $buyeremail; ?>" >

                                                    <!-- <br/><b>timestamp</b> : -->

                                                </div>
                                                
                                                <input type="hidden" name="gopaymethod" value="" >
                                                <input type="hidden" name="offerPeriod" value="2015010120150331" >
                                                <input type="hidden" name="acceptmethod" value="HPP(1):no_receipt:va_receipt:vbanknoreg(0):below1000" >
                                                
                                                <input type="hidden" name="languageView" value="" >
                                                <input type="hidden" name="charset" value="" >
                                                <input type="hidden" name="payViewType" value="" >
                                                <input type="hidden" name="closeUrl" value="<?php echo $siteDomain ?>/close.php" >
                                                <input type="hidden" name="popupUrl" value="<?php echo $siteDomain ?>/popup.php" >
                                                <input type="hidden" name="nointerest" value="<?php echo $cardNoInterestQuota ?>" >
                                                <input type="hidden" name="quotabase" value="<?php echo $cardQuotaBase ?>" >    
                                                <input type="hidden" name="vbankRegNo" value="" >
                                                <input type="hidden"  name="merchantData" value="" >
                                            </form>
                                        </td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr>
                            <td style="padding:10px 3px; text-align:center">
                                <style>
                                .button1 { padding:10px; width:45%; background-color:#F30; color:#fff; font-size:1.3em; font-weight:bold; border:0px; }
                                .button2 { padding:10px; width:45%; background-color:#333; font-size:1.3em; font-weight:bold; color:#fff; border:0px; }
                                </style>
                                <button onclick="pay()" class="button1">결제요청</button>
                                &nbsp;&nbsp;&nbsp;
                                <button onclick="location.href='/v3/html/code_request.php'" class="button2">결제취소</button>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </body>
</html>
 

댓글목록

등록된 댓글이 없습니다.


Total 2,640건 19 페이지
  • RSS
기술자료 목록
2280
PHP   10737  2018-09-30 15:07 ~ 2018-09-30 15:53  
2279
그누보드   9565  2018-09-27 23:56 ~ 2022-10-22 17:56  
2278
그누보드   8242  2018-09-27 22:01 ~ 2018-09-27 22:40  
2277
그누보드   12238  2018-09-22 01:04 ~ 2023-04-13 16:11  
2276
그누보드   8028  2018-09-21 19:28  
2275
그누보드   9466  2018-09-15 08:08 ~ 2022-04-21 03:02  
열람
전자결제   19393  2018-09-14 05:59 ~ 2020-09-08 23:29  
2273
전자결제   8676  2018-09-14 04:57 ~ 2018-09-14 04:58  
2272
전자결제   9052  2018-09-12 14:17 ~ 2019-03-21 17:04  
2271
일반   11735  2018-08-31 18:10 ~ 2018-09-14 20:50  
2270
HTML   7759  2018-08-30 15:47 ~ 2022-02-08 12:07  
2269
그누보드   7916  2018-08-30 10:41 ~ 2018-08-30 10:48  
2268
PHP   6568  2018-08-29 03:21 ~ 2018-08-29 17:13  
2267
JavaScript   11357  2018-08-28 18:49 ~ 2022-06-13 22:38  
2266
HTML   11038  2018-08-27 14:33 ~ 2021-07-25 18:16  
2265
HTML   13771  2018-08-26 14:07  
2264
일반   8266  2018-08-22 13:17  
2263
PHP   9072  2018-08-20 15:51  
2262
HTML   8829  2018-08-18 05:37  
2261
일반   9827  2018-08-17 15:18 ~ 2018-08-17 15:19  

검색

해피정닷컴 정보

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

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