<?php

require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';
//ini_set("display_errors",0);
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에 그대로 사용하여야함
*/
//############################################
// 1.전문 필드 값 설정(***가맹점 개발수정***)
//############################################
// 여기에 설정된 값은 Form 필드에 동일한 값으로 설정
//$mid = "INIpayTest";  // 가맹점 ID(가맹점 수정후 고정)
//$signKey = "SU5JTElURV9UUklQTEVERVNfS0VZU1RS"; // 가맹점에 제공된 웹 표준 사인키(가맹점 수정후 고정)
$mid = get_option('wper_inicis_option_3');
$signKey = get_option('wper_inicis_option_4');
/*
if($_REQUEST['mid']){
	$mid = $_REQUEST['mid'];
 /**
  *@brief 결제 처리
  **/
 function procInipaystandardDoIt()
 {
     if (!$_SESSION['inipaystandard']['transaction_srl']) {
         return new Object(-1, 'msg_invalid_request');
     }
     $vars = Context::getRequestVars();
     $oEpayController = getController('epay');
     //결제 실패시
     if (strcmp("0000", $vars->resultCode) !== 0) {
         /*
         $payArgs = new Object(-1, $resultMap["resultMsg"]);
         $payArgs->add('transaction_srl', $_SESSION['inipaystandard']['transaction_srl']);
         $payArgs->add('state', '3');
         $payArgs->add('result_code', $vars->resultCode);
         $payArgs->add('result_message', $vars->resultMsg);
         $output = $oEpayController->afterPayment($payArgs);
         if(!$output->toBool()) return $output;
         */
         return new Object(-1, '결제가 취소되었습니다.');
         /*
         $return_url = substr(Context::getRequestUri() , 0, -1) . $_SESSION['inipaystandard']['error_return_url'];
         unset($_SESSION['inipaystandard']);
         header('location:' . $return_url);
         */
     } else {
         if (!$vars->authUrl || !$vars->authToken) {
             return new Object(-1, 'msg_invalid_request');
         }
     }
     $vars->transaction_srl = $_SESSION['inipaystandard']['transaction_srl'];
     $output = $oEpayController->beforePayment($vars);
     if (!$output->toBool()) {
         return $output;
     }
     require_once 'libs/INIStdPayUtil.php';
     require_once 'libs/HttpClient.php';
     $util = new INIStdPayUtil();
     $httpUtil = new HttpClient();
     $timestamp = $util->getTimestamp();
     $signParam = array();
     $signParam["authToken"] = $vars->authToken;
     $signParam["timestamp"] = $timestamp;
     $signature = $util->makeSignature($signParam);
     $authMap = array();
     $authMap["mid"] = $this->module_info->inipay_mid;
     $authMap["authToken"] = $vars->authToken;
     $authMap["signature"] = $signature;
     $authMap["timestamp"] = $timestamp;
     $authMap["charset"] = 'UTF-8';
     $authMap["format"] = 'JSON';
     $authMap["price"] = $_SESSION['inipaystandard']['price'];
     //결제 인증
     $authResultString = '';
     if ($httpUtil->processHTTP($vars->authUrl, $authMap)) {
         $authResultString = $httpUtil->body;
     } else {
         echo "Http Connect Error\n";
         echo $httpUtil->errormsg;
         throw new Exception("Http Connect Error");
     }
     //인증 결과
     $resultMap = json_decode($authResultString, true);
     //성공
     if (strcmp("0000", $resultMap["resultCode"]) == 0) {
         $payArgs = new Object(0, $resultMap["resultMsg"]);
         //가상계좌
         if ($this->getPaymethod($resultMap["payMethod"]) == 'VA') {
             $payArgs->add('state', '1');
         } else {
             $payArgs->add('state', '2');
         }
     } else {
         $payArgs = new Object(-1, $resultMap["resultMsg"]);
         $payArgs->add('state', '3');
     }
     $payArgs->add('transaction_srl', $_SESSION['inipaystandard']['transaction_srl']);
     $payArgs->add('payment_method', $this->getPaymethod($resultMap["payMethod"]));
     $payArgs->add('payment_amount', $resultMap["TotPrice"]);
     $payArgs->add('result_code', $resultMap["resultCode"]);
     $payArgs->add('result_message', $resultMap["resultMsg"]);
     $payArgs->add('pg_tid', $resultMap["tid"]);
     //가상계좌
     if ($this->getPaymethod($resultMap["payMethod"]) == 'VA') {
         $payArgs->add('vact_num', $resultMap["VACT_Num"]);
         $payArgs->add('vact_bankname', $this->getBankName($resultMap["VACT_BankCode"]));
         $payArgs->add('vact_bankcode', $resultMap["VACT_BankCode"]);
         $payArgs->add('vact_name', $resultMap["VACT_Name"]);
         $payArgs->add('vact_inputname', $resultMap["VACT_InputName"]);
         $payArgs->add('vact_date', $resultMap["VACT_Date"]);
         $payArgs->add('vact_time', $resultMap["VACT_Time"]);
     }
     $output = $oEpayController->afterPayment($payArgs);
     if (!$output->toBool()) {
         //DB 에러시 결제 취소
         if (!$httpUtil->processHTTP($vars->netCancel, $authMap)) {
             echo "Http Connect Error\n";
             echo $httpUtil->errormsg;
             throw new Exception("Http Connect Error");
         }
         return $output;
     }
     $return_url = $output->get('return_url');
     if ($return_url) {
         $this->setRedirectUrl($return_url);
     }
     unset($_SESSION['inipaystandard']);
 }
 function wp_ajax_generate_payment_form()
 {
     global $woocommerce, $inicis_payment;
     $orderid = $_REQUEST['orderid'];
     if (!empty($this->id)) {
         switch ($this->id) {
             case 'inicis_card':
             case 'inicis_bank':
             case 'inicis_vbank':
             case 'inicis_hpp':
             case 'inicis_kpay':
             case 'inicis_escrow_bank':
                 //라이브러리 존재여부 체크
                 if (!file_exists($inicis_payment->plugin_path() . "/lib/inipay50/INILib.php")) {
                     wp_send_json_error(__('에러 : INILib.php 파일이 없습니다. 사이트 관리자에게 문의하여 주십시오.', 'inicis_payment'));
                 }
                 try {
                     require_once $inicis_payment->plugin_path() . "/lib/inipay50/INILib.php";
                 } catch (Exception $e) {
                     wp_send_json_error(__('에러 : INILib.php 파일이 없습니다. 사이트 관리자에게 문의하여 주십시오.', 'inicis_payment') . ' [' . $e->getMessage() . ']');
                 }
                 //SSL 체크
                 $use_ssl = get_option('woocommerce_force_ssl_checkout');
                 //결제옵션 가져오기
                 $acceptmethod = $this->get_accpetmethod();
                 $userid = get_current_user_id();
                 $order = new WC_Order($orderid);
                 $txnid = $this->make_txnid($order);
                 $productinfo = $this->make_product_info($order);
                 $order_total = $this->inicis_get_order_total($order);
                 $inipay = new INIpay50();
                 $inipay->SetField("inipayhome", $this->settings['libfolder']);
                 $inipay->SetField("type", "chkfake");
                 $inipay->SetField("debug", "true");
                 $inipay->SetField("enctype", "asym");
                 $inipay->SetField("admin", "1111");
                 $inipay->SetField("checkopt", "false");
                 $inipay->SetField("mid", $this->merchant_id);
                 $inipay->SetField("price", $order_total);
                 $inipay->SetField("nointerest", $this->settings['nointerest']);
                 $inipay->SetField("quotabase", mb_convert_encoding($this->settings['quotabase'], "EUC-KR", "UTF-8"));
                 $inipay->startAction();
                 if ($inipay->GetResult("ResultCode") != "00") {
                     wp_send_json_error($inipay->GetResult("ResultMsg"));
                 }
                 update_post_meta($orderid, "ini_rn", $inipay->GetResult("rn"));
                 update_post_meta($orderid, "ini_enctype", $inipay->GetResult("enctype"));
                 if (wp_is_mobile()) {
                     $str = "{$this->merchant_id}|{$txnid}||{$order_total}|{$productinfo}|{$order->billing_first_name}|{$order->billing_email}|||||||||||";
                     $hash = hash('sha512', $str);
                     $notification = $this->encrypt_notification($txnid, $hash);
                     ob_start();
                     include $inicis_payment->plugin_path() . '/templates/payment_form_mobile.php';
                     $form_tag = ob_get_clean();
                 } else {
                     $str = "{$this->merchant_id}|{$txnid}|{$userid}|{$order_total}|{$productinfo}|{$order->billing_first_name}|{$order->billing_email}|||||||||||";
                     $hash = hash('sha512', $str);
                     ob_start();
                     include $inicis_payment->plugin_path() . '/templates/payment_form_pc.php';
                     $form_tag = ob_get_clean();
                 }
                 break;
             case 'inicis_stdcard':
                 //웹표준
                 //라이브러리 존재여부 체크
                 if (!file_exists($inicis_payment->plugin_path() . "/lib/inistd/INIStdPayUtil.php")) {
                     wp_send_json_error(__('에러 : INIStdPayUtil.php 파일이 없습니다. 사이트 관리자에게 문의하여 주십시오.', 'inicis_payment'));
                 }
                 try {
                     require_once $inicis_payment->plugin_path() . "/lib/inistd/INIStdPayUtil.php";
                 } catch (Exception $e) {
                     wp_send_json_error(__('에러 : INIStdPayUtil.php 파일이 없습니다. 사이트 관리자에게 문의하여 주십시오.', 'inicis_payment') . ' [' . $e->getMessage() . ']');
                 }
                 $use_ssl = get_option('woocommerce_force_ssl_checkout');
                 //SSL 체크
                 $SignatureUtil = new INIStdPayUtil();
                 $mid = $this->settings['merchant_id'];
                 if (empty($this->settings['signkey'])) {
                     $signKey = 'SU5JTElURV9UUklQTEVERVNfS0VZU1RS';
                     //INIpayTest 기본값
                 } else {
                     $signKey = $this->settings['signkey'];
                 }
                 $timestamp = $SignatureUtil->getTimestamp();
                 //타임스탬프
                 //결제옵션 가져오기
                 $acceptmethod = $this->get_accpetmethod();
                 $cardNoInterestQuota = $this->settings['nointerest'];
                 //카드무이자 여부 설정
                 $cardQuotaBase = $this->settings['quotabase'];
                 //가맹점에서 사용할 할부 개월수 설정
                 $mKey = $SignatureUtil->makeHash($signKey, "sha256");
                 $userid = get_current_user_id();
                 $order = new WC_Order($orderid);
                 $txnid = $this->make_txnid($order);
                 $productinfo = $this->make_product_info($order);
                 $price = $this->inicis_get_order_total($order);
                 $order_total = $this->inicis_get_order_total($order);
                 $params = array("oid" => $txnid, "price" => $price, "timestamp" => $timestamp);
                 $sign = $SignatureUtil->makeSignature($params, "sha256");
                 $str = "{$this->merchant_id}|{$txnid}|{$userid}|{$order_total}|{$productinfo}|{$order->billing_first_name}|{$order->billing_email}|||||||||||";
                 $hash = hash('sha512', $str);
                 $notification = $this->encrypt_notification($txnid, $hash);
                 $payView_type = 'overlay';
                 ob_start();
                 include $inicis_payment->plugin_path() . '/templates/payment_form_std.php';
                 $form_tag = ob_get_clean();
                 break;
             default:
                 wp_send_json_error(__('결제오류 : 결제 수단이 선택되지 않았습니다 사이트 관리자에게 문의하여 주십시오', 'inicis_payment'));
                 break;
         }
     } else {
         wp_send_json_error(__('결제오류 : 결제 수단이 선택되지 않았습니다 사이트 관리자에게 문의하여 주십시오', 'inicis_payment'));
     }
     wp_send_json_success('<div data-id="mshop-payment-form" style="display:none">' . $form_tag . '</div>');
 }
Beispiel #4
0
 function dispInipaystandardForm()
 {
     $oEpayController = getController('epay');
     $reviewOutput = $oEpayController->reviewOrder();
     if (!$reviewOutput->toBool()) {
         return $reviewOutput;
     }
     $payment_method = Context::get('payment_method');
     $_SESSION['inipaystandard']['payment_method'] = $payment_method;
     $_SESSION['inipaystandard']['transaction_srl'] = $reviewOutput->transaction_srl;
     $_SESSION['inipaystandard']['price'] = $reviewOutput->price;
     $_SESSION['inipaystandard']['error_return_url'] = Context::get('error_return_url');
     Context::set('order_srl', $reviewOutput->order_srl);
     Context::set('review_form', $reviewOutput->review_form);
     Context::set('item_name', $reviewOutput->item_name);
     Context::set('price', $reviewOutput->price);
     Context::set('purchaser_name', $reviewOutput->purchaser_name);
     Context::set('purchaser_email', $reviewOutput->purchaser_email);
     Context::set('purchaser_telnum', '010-0000-0000');
     //payment method
     switch ($payment_method) {
         case "CC":
             $payment_method = "Card";
             break;
         case "IB":
             $payment_method = "DirectBank";
             break;
         case "VA":
             $payment_method = "VBank";
             break;
         case "MP":
             $payment_method = "HPP";
             break;
         default:
             $payment_method = "Card";
     }
     Context::set('payment_method', $payment_method);
     if ($this->module_info->method_mobilephone == 'Y') {
         $HPP = '1';
     }
     if ($this->module_info->method_mobilephone == 'M') {
         $HPP = '2';
     }
     $acceptmethod = sprintf("HPP(%s):Card(0):OCB:receipt:cardpoint", $HPP);
     if (!$this->module_info->va_receipt || $this->module_info->va_receipt == 'Y') {
         $acceptmethod .= ':va_receipt';
     }
     Context::set('acceptmethod', $acceptmethod);
     require_once 'libs/INIStdPayUtil.php';
     $SignatureUtil = new INIStdPayUtil();
     if ($this->module_info->ini_payment_test_mode == 'Y') {
         $inipay_mid = 'INIpayTest';
         $inipay_signkey = 'SU5JTElURV9UUklQTEVERVNfS0VZU1RS';
     } else {
         $inipay_mid = $this->module_info->inipay_mid;
         $inipay_signkey = $this->module_info->inipay_signkey;
     }
     $timestamp = $SignatureUtil->getTimestamp();
     Context::set('timestamp', $timestamp);
     Context::set('pay_mid', $inipay_mid);
     $mKey = $SignatureUtil->makeHash($inipay_signkey, "sha256");
     Context::set('mKey', $mKey);
     $params = array("oid" => $reviewOutput->order_srl, "price" => $reviewOutput->price, "timestamp" => $timestamp);
     $sign = $SignatureUtil->makeSignature($params, "sha256");
     Context::set('sign', $sign);
     //template
     $template_path = sprintf("%sskins/%s/", $this->module_path, $this->module_info->skin);
     if (!is_dir($template_path) || !$this->module_info->skin) {
         $this->module_info->skin = 'default';
         $template_path = sprintf("%sskins/%s/", $this->module_path, $this->module_info->skin);
     }
     $this->setTemplatePath($template_path);
     $this->setTemplateFile('pay');
 }
                form.action = "http://walletpaydemo.inicis.com/stdpay/cancel/INIcancel_index.jsp";
                form.method = "post";
                form.target = "OnLine";
                form.submit();

            }
        </script>
    </head>
    <body bgcolor="#FFFFFF" text="#242424" leftmargin=0 topmargin=15 marginwidth=0 marginheight=0 bottommargin=0 rightmargin=0>
        <div style="padding:10px;width:100%;font-size:14px;color: #ffffff;background-color: #000000;text-align: center">
            이니시스 표준결제 인증결과 수신 / 승인요청, 승인결과 표시 샘플
        </div>
        <?php 
require_once '../libs/INIStdPayUtil.php';
require_once '../libs/HttpClient.php';
$util = new INIStdPayUtil();
try {
    //#############################
    // 인증결과 파라미터 일괄 수신
    //#############################
    //		$var = $_REQUEST["data"];
    //		System.out.println("paramMap : "+ paramMap.toString());
    //#####################
    // 인증이 성공일 경우만
    //#####################
    if (strcmp("0000", $_REQUEST["resultCode"]) == 0) {
        echo "####인증성공/승인요청####";
        echo "<br/>";
        //############################################
        // 1.전문 필드 값 설정(***가맹점 개발수정***)
        //############################################