first commit 2

This commit is contained in:
hmw1001
2026-06-11 18:47:38 +09:00
parent c768729ce6
commit 6f534e33a6
11095 changed files with 1595758 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
<?php
include_once('../../common.php');
+58
View File
@@ -0,0 +1,58 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 카카오페이를 사용하지 않을 경우 return;
if( ! $default['de_kakaopay_enckey'] ) return;
if( !isset($is_mobile_order) ){
$is_mobile_order = is_mobile();
}
if( $is_mobile_order ){
include_once(G5_MSHOP_PATH.'/settle_inicis.inc.php');
if ( $default['de_card_test']) {
if ($default['de_escrow_use'] == 1) {
$default['de_kakaopay_mid'] = 'iniescrow0';
$default['de_kakaopay_cancelpwd'] = '1111';
} else {
$default['de_kakaopay_mid'] = 'INIpayTest';
$default['de_kakaopay_cancelpwd'] = '1111';
}
} else {
$default['de_kakaopay_mid'] = 'SIRK'.$default['de_kakaopay_mid'];
}
$noti_url = G5_SHOP_URL.'/kakaopay/mobile_settle_common.php';
$next_url = G5_SHOP_URL.'/kakaopay/mobile_pay_approval.php';
$return_url = G5_SHOP_URL.'/kakaopay/mobile_pay_return.php?oid=';
return;
}
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
if ($default['de_card_test']) {
if ($default['de_escrow_use'] == 1) {
$default['de_kakaopay_mid'] = 'iniescrow0';
$default['de_kakaopay_key'] = 'SU5JTElURV9UUklQTEVERVNfS0VZU1RS';
$default['de_kakaopay_cancelpwd'] = '1111';
} else {
$default['de_kakaopay_mid'] = 'INIpayTest';
$default['de_kakaopay_key'] = 'SU5JTElURV9UUklQTEVERVNfS0VZU1RS';
$default['de_kakaopay_cancelpwd'] = '1111';
}
if( !(isset($stdpay_js_url) && $stdpay_js_url) ){
$stdpay_js_url = 'https://stgstdpay.inicis.com/stdjs/INIStdPay.js';
}
} else {
$default['de_kakaopay_mid'] = 'SIRK'.$default['de_kakaopay_mid'];
// 실 결제 URL
if( !(isset($stdpay_js_url) && $stdpay_js_url) ){
$stdpay_js_url = 'https://stdpay.inicis.com/stdjs/INIStdPay.js';
}
}
$returnUrl = G5_SHOP_URL.'/kakaopay/inicis_kk_return.php';
+84
View File
@@ -0,0 +1,84 @@
<?php
include_once('./_common.php');
include_once(G5_SHOP_PATH.'/kakaopay/incKakaopayCommon.php');
require_once(G5_SHOP_PATH.'/inicis/libs/HttpClient.php');
require_once(G5_SHOP_PATH.'/inicis/libs/json_lib.php');
// 카카오페이를 사용하지 않을 경우
if( ! $default['de_kakaopay_enckey'] ) die('카카오페이를 사용하지 않습니다.');
@header("Progma:no-cache");
@header("Cache-Control:no-cache,must-revalidate");
$request_mid = isset($_POST['mid']) ? clean_xss_tags($_POST['mid']) : '';
if( ($request_mid != $default['de_kakaopay_mid']) ){
alert("요청된 mid 와 설정된 mid 가 틀립니다.");
}
$orderNumber = isset($_POST['orderNumber']) ? preg_replace("/[ #\&\+%@=\/\\\:;,\.'\"\^`~|\!\?\*$#<>()\[\]\{\}]/i", "", strip_tags($_POST['orderNumber'])) : 0;
$session_order_num = get_session('ss_order_id');
if( !$orderNumber ){
alert("주문번호가 없습니다.");
}
$sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '$orderNumber' ";
$row = sql_fetch($sql);
if( empty($row) ){
alert("임시 주문정보가 저장되지 않았습니다.");
}
if ( base64_encode(base64_decode($row['dt_data'], true)) === $row['dt_data']){
$data = unserialize(base64_decode($row['dt_data']));
} else {
$data = unserialize($row['dt_data']);
}
$params = array();
$var_datas = array();
foreach($data as $key=>$value) {
if(is_array($value)) {
foreach($value as $k=>$v) {
$_POST[$key][$k] = $params[$key][$k] = clean_xss_tags(strip_tags($v));
}
} else {
$_POST[$key] = $params[$key] = clean_xss_tags(strip_tags($value));
}
}
if(isset($data['pp_id']) && $data['pp_id']) { //개인결제
foreach($params as $key=>$value){
if( in_array($key, array('pp_name', 'pp_email', 'pp_hp', 'pp_settle_case')) ){
$var_datas[$key] = $value;
$$key = $value;
}
}
include_once(G5_SHOP_PATH.'/personalpayformupdate.php');
} else { //상점주문
foreach($params as $key=>$value){
if( in_array($key, array('od_price', 'od_name', 'od_tel', 'od_hp', 'od_email', 'od_memo', 'od_settle_case', 'max_temp_point', 'od_temp_point', 'od_bank_account', 'od_deposit_name', 'od_test', 'od_ip', 'od_zip', 'od_addr1', 'od_addr2', 'od_addr3', 'od_addr_jibeon', 'od_b_name', 'od_b_tel', 'od_b_hp', 'od_b_addr1', 'od_b_addr2', 'od_b_addr3', 'od_b_addr_jibeon', 'od_b_zip', 'od_send_cost', 'od_send_cost2', 'od_hope_date')) ){
$var_datas[$key] = $value;
$$key = $value;
}
}
$od_send_cost = (int) $_POST['od_send_cost'];
$od_send_cost2 = (int) $_POST['od_send_cost2'];
include_once(G5_SHOP_PATH.'/orderformupdate.php');
}
+85
View File
@@ -0,0 +1,85 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
/*******************************************************************
* 7. DB연동 실패 시 강제취소 *
* *
* 지불 결과를 DB 등에 저장하거나 기타 작업을 수행하다가 실패하는 *
* 경우, 아래의 코드를 참조하여 이미 지불된 거래를 취소하는 코드를 *
* 작성합니다. *
*******************************************************************/
$cancelFlag = "true";
// $cancelFlag를 "true"로 변경하는 condition 판단은 개별적으로
// 수행하여 주십시오.
if($cancelFlag == "true")
{
if( isset($is_noti_pay) && $is_noti_pay ){
return;
}
include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
if( get_session('ss_order_id') && $tno ){
$ini_oid = preg_replace('/[^a-z0-9_\-]/i', '', get_session('ss_order_id'));
$tno = preg_replace('/[^a-z0-9_\-]/i', '', $tno);
$sql = "select oid from {$g5['g5_shop_inicis_log_table']} where oid = '$ini_oid' and P_TID = '$tno' ";
$exists_log = sql_fetch($sql);
if( $exists_log['oid'] ){
$sql = " update {$g5['g5_shop_inicis_log_table']}
set P_STATUS = 'cancel',
P_AUTH_DT = '".preg_replace('/[^0-9]/', '', G5_TIME_YMDHIS)."' where oid = '$ini_oid' and P_TID = '$tno' ";
} else {
$sql = " insert into {$g5['g5_shop_inicis_log_table']}
set oid = '$ini_oid',
P_TID = '$tno',
P_STATUS = 'cancel',
P_AUTH_DT = '".preg_replace('/[^0-9]/', '', G5_TIME_YMDHIS)."' ";
}
sql_query($sql, false);
}
$db_check = 1;
$cancel_msg = "DB FAIL";
if( $is_admin ){
$tmp = sql_fetch("select * from `{$g5['g5_shop_order_table']}` where od_tno = '".trim($_REQUEST['TID'])."' ");
if( $tmp['od_pg'] === 'KAKAOPAY' ){
$tno = trim($_REQUEST['TID']);
$db_check = 0;
$cancel_msg = isset($_REQUEST['CancelMsg']) ? iconv_euckr($_REQUEST['CancelMsg']) : iconv_euckr('관리자 승인 취소');
}
}
$args = array(
'key' => isset($default['de_kakaopay_iniapi_key']) ? $default['de_kakaopay_iniapi_key'] : '',
'mid' => $default['de_kakaopay_mid'],
'paymethod' => 'Card',
'tid' => $tno,
'msg' => $cancel_msg // 취소사유
);
$response = inicis_tid_cancel($args);
$result = json_decode($response, true);
if (isset($result['resultCode'])) {
if ($result['resultCode'] != '00') {
$pg_res_cd = $result['resultCode'];
$pg_res_msg = $result['resultMsg'];
}
} else {
$pg_res_cd = '';
$pg_res_msg = 'curl 로 데이터를 받지 못했습니다.';
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if( isset($_POST['P_NOTI']) ){
$sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '".preg_replace("/\s+/", "", $_POST['P_NOTI'])."' ";
$row = sql_fetch($sql);
if (isset($row['dt_data']) && (base64_encode(base64_decode($row['dt_data'], true)) === $row['dt_data'])){
$data = unserialize(base64_decode($row['dt_data']));
} else {
$data = isset($row['dt_data']) ? unserialize($row['dt_data']) : array();
}
if( isset($data['is_inicis_mobile_kakaopay']) && $data['is_inicis_mobile_kakaopay'] == 'mobile' ){
include G5_SHOP_PATH.'/kakaopay/mobile_pay_result.php';
return;
}
}
if( isset($_REQUEST['P_STATUS']) && isset($_REQUEST['P_TID']) && isset($_REQUEST['P_REQ_URL']) && isset($_POST['P_NOTI']) && isset($_POST['P_AMT']) ){
include G5_SHOP_PATH.'/kakaopay/mobile_pay_result.php';
return;
}
include G5_SHOP_PATH.'/kakaopay/pc_pay_result.php';
return;
+38
View File
@@ -0,0 +1,38 @@
<?php
include_once('./_common.php');
include(G5_SHOP_PATH.'/kakaopay/incKakaopayCommon.php');
// 카카오페이를 사용하지 않을 경우
if (!$default['de_kakaopay_enckey']) {
die('카카오페이를 사용하지 않습니다.');
}
if (!($default['de_kakaopay_mid'] && $default['de_kakaopay_key'])) {
die(json_encode(array('error' => '올바른 방법으로 이용해 주십시오.')));
}
$orderNumber = get_session('ss_order_id');
$price = preg_replace('#[^0-9]#', '', $_POST['price']);
if (strlen($price) < 1) {
die(json_encode(array('error' => '가격이 올바르지 않습니다.')));
}
//
//###################################
// 2. 가맹점 확인을 위한 signKey를 해시값으로 변경 (SHA-256방식 사용)
//###################################
$mKey = hash("sha256", $default['de_kakaopay_key']);
/*
//*** 위변조 방지체크를 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에 그대로 사용하여야함
*/
$params = "oid=" . $orderNumber . "&price=" . $price . "&timestamp=" . $timestamp;
$sign = hash("sha256", $params);
die(json_encode(array('error'=>'', 'mKey'=>$mKey, 'timestamp'=>$timestamp, 'sign'=>$sign)));
+130
View File
@@ -0,0 +1,130 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// KAKAOPAY SIRK***** 전용아이디 사용시 ( KG 이니시스 )
if( ! $is_kakaopay_use || ('inicis' === $default['de_pg_service']) ){ //PG가 이니시스인 경우 아래 내용 사용 안함
return;
}
if(!function_exists('get_inicis_app_scheme')){
function get_inicis_app_scheme(){
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$iPod = stripos($user_agent,"iPod");
$iPhone = stripos($user_agent,"iPhone");
$iPad = stripos($user_agent,"iPad");
if( $iPod || $iPhone || $iPad ){ //IOS 의 앱브라우저에서 ISP결제시 리다이렉트 safari로 돌아가는 문제가 있음
if( preg_match('/NAVER\(inapp;/', $user_agent) ){ //네이버
return 'app_scheme=naversearchapp://&';
}
else if( preg_match('/CriOS/', $user_agent) ){ //크롬
return 'app_scheme=googlechromes://&';
}
else if( preg_match('/DaumDevice/', $user_agent) ){ //다음
return 'app_scheme=daumapps://&';
}
else if( preg_match('/KAKAOTALK/', $user_agent) ){ //카카오톡
return 'app_scheme=kakaotalk://&';
}
else if( preg_match('/(FBAN|FBAV)/', $user_agent) ){ //페이스북
return 'app_scheme=fb://&';
}
}
return '';
}
}
?>
<form name="inicis_kakaopay_form" id="inicis_kakaopay_form" method="POST" action="" accept-charset="euc-kr">
<input type="hidden" name="P_OID" value="<?php echo $od_id; ?>">
<input type="hidden" name="P_GOODS" value="<?php echo $goods; ?>">
<input type="hidden" name="P_AMT" value="<?php echo $tot_price; ?>">
<input type="hidden" name="P_UNAME" value="">
<input type="hidden" name="P_MOBILE" value="">
<input type="hidden" name="P_EMAIL" value="">
<input type="hidden" name="P_MID" value="<?php echo $default['de_kakaopay_mid']; ?>">
<input type="hidden" name="P_NEXT_URL" value="<?php echo $next_url; ?>">
<input type="hidden" name="P_NOTI_URL" value="<?php echo $noti_url; ?>">
<input type="hidden" name="P_RETURN_URL" value="">
<input type="hidden" name="P_HPP_METHOD" value="2">
<input type="hidden" name="P_RESERVED" value="<?php echo get_inicis_app_scheme(); ?>bank_receipt=N&twotrs_isp=Y&block_isp=Y<?php echo $useescrow; ?>">
<input type="hidden" name="DEF_RESERVED" value="<?php echo get_inicis_app_scheme(); ?>bank_receipt=N&twotrs_isp=Y&block_isp=Y<?php echo $useescrow; ?>">
<input type="hidden" name="P_NOTI" value="<?php echo $od_id; ?>">
<input type="hidden" name="P_QUOTABASE" value="01:02:03:04:05:06:07:08:09:10:11:12"> <!-- 할부기간 설정 01은 일시불 -->
<input type="hidden" name="P_SKIP_TERMS" value="Y">
<input type="hidden" name="good_mny" value="<?php echo $tot_price; ?>" >
<?php if($default['de_tax_flag_use']) { ?>
<input type="hidden" name="P_TAX" value="">
<input type="hidden" name="P_TAXFREE" value="">
<?php } ?>
</form>
<script type="text/javascript">
if( typeof g5_shop_url === 'undefined' ){
var g5_shop_url = g5_url+"/shop";
}
function getTxnId(pf) {
var inicis_kakaopay_form = document.inicis_kakaopay_form;
var paymethod = "";
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=440";
var p_reserved = inicis_kakaopay_form.DEF_RESERVED.value;
inicis_kakaopay_form.P_RESERVED.value = p_reserved;
paymethod = "wcard";
inicis_kakaopay_form.P_RESERVED.value = inicis_kakaopay_form.P_RESERVED.value.replace("&useescrow=Y", "")+"&d_kakaopay=Y";
if( ! jQuery("form[name='sm_form']").length ){
alert("해당 폼이 존재 하지 않는 결제오류입니다.");
return false;
}
inicis_kakaopay_form.P_AMT.value = inicis_kakaopay_form.good_mny.value = document.sm_form.good_mny.value;
inicis_kakaopay_form.P_UNAME.value = pf.od_name.value;
inicis_kakaopay_form.P_MOBILE.value = pf.od_hp.value;
inicis_kakaopay_form.P_EMAIL.value = pf.od_email.value;
<?php if($default['de_tax_flag_use']) { ?>
inicis_kakaopay_form.P_TAX.value = pf.comm_vat_mny.value;
inicis_kakaopay_form.P_TAXFREE = pf.comm_free_mny.value;
<?php } ?>
inicis_kakaopay_form.P_RETURN_URL.value = "<?php echo $return_url.$od_id; ?>";
inicis_kakaopay_form.action = "https://mobile.inicis.com/smart/" + paymethod + "/";
// 주문 정보 임시저장
var order_data = $(pf).serialize();
var save_result = "";
$.ajax({
type: "POST",
data: order_data,
url: g5_shop_url+"/ajax.orderdatasave.php",
cache: false,
async: false,
success: function(data) {
save_result = data;
}
});
if(save_result) {
alert(save_result);
return;
}
inicis_kakaopay_form.submit();
return false;
}
</script>
+203
View File
@@ -0,0 +1,203 @@
<?php
include_once('./_common.php');
$is_mobile_order = true;
include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
// 카카오페이를 사용하지 않을 경우
if( ! $default['de_kakaopay_enckey'] ) die('카카오페이를 사용하지 않습니다.');
// 세션 초기화
set_session('P_TID', '');
set_session('P_AMT', '');
set_session('P_HASH', '');
$oid = isset($_REQUEST['P_NOTI']) ? trim($_REQUEST['P_NOTI']) : '';
$p_req_url = isset($_REQUEST['P_REQ_URL']) ? is_inicis_url_return(trim($_REQUEST['P_REQ_URL'])) : '';
if( ! $p_req_url || !preg_match('/^https\:\/\//i', $p_req_url)){
alert("잘못된 요청 URL 입니다.");
}
$sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '$oid' ";
$row = sql_fetch($sql);
if (isset($row['dt_data']) && (base64_encode(base64_decode($row['dt_data'], true)) === $row['dt_data'])){
$data = unserialize(base64_decode($row['dt_data']));
} else {
$data = isset($row['dt_data']) ? unserialize($row['dt_data']) : array();
}
if(isset($data['pp_id']) && $data['pp_id']) {
$order_action_url = G5_HTTPS_MSHOP_URL.'/personalpayformupdate.php';
$page_return_url = G5_SHOP_URL.'/personalpayform.php?pp_id='.$data['pp_id'];
} else {
$order_action_url = G5_HTTPS_MSHOP_URL.'/orderformupdate.php';
$page_return_url = G5_SHOP_URL.'/orderform.php';
if(get_session('ss_direct'))
$page_return_url .= '?sw_direct=1';
// 장바구니가 비어있는가?
if (get_session('ss_direct'))
$tmp_cart_id = get_session('ss_cart_direct');
else
$tmp_cart_id = get_session('ss_cart_id');
if (get_cart_count($tmp_cart_id) == 0)// 장바구니에 담기
alert('세션을 잃거나 다른 브라우저에서 데이터가 변경된 경우입니다. 장바구니 상태를 확인후에 다시 시도해 주세요.', G5_SHOP_URL.'/cart.php');
$error = "";
// 장바구니 상품 재고 검사
$sql = " select it_id,
ct_qty,
it_name,
io_id,
io_type,
ct_option
from {$g5['g5_shop_cart_table']}
where od_id = '$tmp_cart_id'
and ct_select = '1' ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
// 상품에 대한 현재고수량
if($row['io_id']) {
$it_stock_qty = (int)get_option_stock_qty($row['it_id'], $row['io_id'], $row['io_type']);
} else {
$it_stock_qty = (int)get_it_stock_qty($row['it_id']);
}
// 장바구니 수량이 재고수량보다 많다면 오류
if ($row['ct_qty'] > $it_stock_qty)
$error .= "{$row['ct_option']} 의 재고수량이 부족합니다. 현재고수량 : $it_stock_qty\\n\\n";
}
if($i == 0)
alert('장바구니가 비어 있습니다.', G5_SHOP_URL.'/cart.php');
if ($error != "")
{
$error .= "결제진행이 중단 되었습니다.";
alert($error, G5_SHOP_URL.'/cart.php');
}
}
if($_REQUEST['P_STATUS'] != '00') {
alert('오류 : '.iconv_utf8($_REQUEST['P_RMESG1']).' 코드 : '.$_REQUEST['P_STATUS'], $page_return_url);
} else {
$post_data = array(
'P_MID' => $default['de_kakaopay_mid'],
'P_TID' => $_REQUEST['P_TID']
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_PORT, 443);
curl_setopt($ch, CURLOPT_URL, $p_req_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$return = curl_exec($ch);
if(!$return)
alert('KG이니시스와 통신 오류로 결제등록 요청을 완료하지 못했습니다.\\n결제등록 요청을 다시 시도해 주십시오.', $page_return_url);
// 결과를 배열로 변환
parse_str($return, $ret);
$PAY = array_map('trim', $ret);
$PAY = array_map('strip_tags', $PAY);
$PAY = array_map('get_search_string', $PAY);
if($PAY['P_STATUS'] != '00')
alert('오류 : '.iconv_utf8($PAY['P_RMESG1']).' 코드 : '.$PAY['P_STATUS'], $page_return_url);
// TID, AMT 를 세션으로 주문완료 페이지 전달
$hash = md5($PAY['P_TID'].$PAY['P_MID'].$PAY['P_AMT']);
set_session('P_TID', $PAY['P_TID']);
set_session('P_AMT', $PAY['P_AMT']);
set_session('P_HASH', $hash);
}
$params = array();
//개인결제
if(isset($data['pp_id']) && !empty($data['pp_id'])) {
// 개인결제 정보
$pp_check = false;
$sql = " select * from {$g5['g5_shop_personalpay_table']} where pp_id = '{$PAY['P_OID']}' and pp_tno = '{$PAY['P_TID']}' and pp_use = '1' ";
$pp = sql_fetch($sql);
if( !$pp['pp_tno'] && $data['pp_id'] == $oid ){
$res_cd = $PAY['P_STATUS'];
$pp_id = $oid;
$exclude = array('res_cd', 'P_HASH', 'P_TYPE', 'P_AUTH_DT', 'P_VACT_BANK', 'LGD_PAYKEY', 'pp_id', 'good_mny', 'pp_name', 'pp_email', 'pp_hp', 'pp_settle_case');
foreach($data as $key=>$v) {
if( !in_array($key, $exclude) ){
$_POST[$key] = $params[$key] = clean_xss_tags(strip_tags($v));
}
}
$good_mny = $PAY['P_AMT'];
$pp_name = clean_xss_tags($data['pp_name']);
$pp_email = clean_xss_tags($data['pp_email']);
$pp_hp = clean_xss_tags($data['pp_hp']);
$pp_settle_case = clean_xss_tags($data['pp_settle_case']);
$_POST['P_HASH'] = $hash;
$_POST['P_AUTH_NO'] = $PAY['P_AUTH_NO'];
$_POST['pp_id'] = $PAY['P_OID'];
$_POST['good_mny'] = $PAY['P_AMT'];
$_POST['P_TYPE'] = $PAY['P_TYPE'];
$_POST['P_AUTH_DT'] = $PAY['P_AUTH_DT'];
$_POST['P_AUTH_NO'] = $PAY['P_AUTH_NO'];
$_POST['P_HPP_CORP'] = isset($PAY['P_HPP_CORP']) ? $PAY['P_HPP_CORP'] : '';
$_POST['P_APPL_NUM'] = isset($PAY['P_APPL_NUM']) ? $PAY['P_APPL_NUM'] : '';
$_POST['P_VACT_NUM'] = isset($PAY['P_VACT_NUM']) ? $PAY['P_VACT_NUM'] : '';
$_POST['P_VACT_NAME'] = isset($PAY['P_VACT_NAME']) ? iconv_utf8($PAY['P_VACT_NAME']) : '';
$_POST['P_VACT_BANK'] = (isset($PAY['P_VACT_BANK_CODE']) && isset($BANK_CODE[$PAY['P_VACT_BANK_CODE']])) ? $BANK_CODE[$PAY['P_VACT_BANK_CODE']] : '';
$_POST['P_CARD_ISSUER'] = (isset($PAY['P_CARD_ISSUER_CODE']) && isset($CARD_CODE[$PAY['P_CARD_ISSUER_CODE']])) ? $CARD_CODE[$PAY['P_CARD_ISSUER_CODE']] : '';
$_POST['P_UNAME'] = iconv_utf8($PAY['P_UNAME']);
include_once( G5_MSHOP_PATH.'/personalpayformupdate.php' );
}
} else {
// 상점 결제
$exclude = array('res_cd', 'P_HASH', 'P_TYPE', 'P_AUTH_DT', 'P_VACT_BANK', 'P_AUTH_NO');
foreach($data as $key=>$value) {
if(!empty($exclude) && in_array($key, $exclude))
continue;
if(is_array($value)) {
foreach($value as $k=>$v) {
$_POST[$key][$k] = $params[$key][$k] = clean_xss_tags(strip_tags($v));
}
} else {
$_POST[$key] = $params[$key] = clean_xss_tags(strip_tags($value));
}
}
$res_cd = $_POST['res_cd'] = $PAY['P_STATUS'];
$P_HASH = $_POST['P_HASH'] = $hash;
$P_TYPE = $_POST['P_TYPE'] = $PAY['P_TYPE'];
$P_AUTH_DT = $_POST['P_AUTH_DT'] = $PAY['P_AUTH_DT'];
$P_AUTH_NO = $_POST['P_AUTH_NO'] = $PAY['P_AUTH_NO'];
$P_HPP_CORP = $_POST['P_HPP_CORP'] = isset($PAY['P_HPP_CORP']) ? $PAY['P_HPP_CORP'] : '';
$P_APPL_NUM = $_POST['P_APPL_NUM'] = isset($PAY['P_APPL_NUM']) ? $PAY['P_APPL_NUM'] : '';
$P_VACT_NUM = $_POST['P_VACT_NUM'] = isset($PAY['P_VACT_NUM']) ? $PAY['P_VACT_NUM'] : '';
$P_VACT_NAME = $_POST['P_VACT_NAME'] = isset($PAY['P_VACT_NAME']) ? iconv_utf8($PAY['P_VACT_NAME']) : '';
$P_VACT_BANK = $_POST['P_VACT_BANK'] = (isset($PAY['P_VACT_BANK_CODE']) && isset($BANK_CODE[$PAY['P_VACT_BANK_CODE']])) ? $BANK_CODE[$PAY['P_VACT_BANK_CODE']] : '';
$P_CARD_ISSUER = $_POST['P_CARD_ISSUER'] = (isset($PAY['P_CARD_ISSUER_CODE']) && isset($CARD_CODE[$PAY['P_CARD_ISSUER_CODE']])) ? $CARD_CODE[$PAY['P_CARD_ISSUER_CODE']] : '';
$P_UNAME = $_POST['P_UNAME'] = iconv_utf8($PAY['P_UNAME']);
$check_keys = array('od_name', 'od_tel', 'od_pwd', 'od_hp', 'od_zip', 'od_addr1', 'od_addr2', 'od_addr3', 'od_addr_jibeon', 'od_email', 'ad_default', 'ad_subject', 'od_hope_date', 'od_b_name', 'od_b_tel', 'od_b_hp', 'od_b_zip', 'od_b_addr1', 'od_b_addr2', 'od_b_addr3', 'od_b_addr_jibeon', 'od_memo', 'od_settle_case', 'max_temp_point', 'od_temp_point', 'od_send_cost', 'od_send_cost2', 'od_bank_account', 'od_deposit_name', 'od_test', 'od_ip');
foreach($check_keys as $key){
$$key = isset($params[$key]) ? $params[$key] : '';
}
include_once( G5_MSHOP_PATH.'/orderformupdate.php' );
}
exit;
+40
View File
@@ -0,0 +1,40 @@
<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
// 세션비교
$hash = md5(get_session('P_TID').$default['de_kakaopay_mid'].get_session('P_AMT'));
if($hash != $_POST['P_HASH'])
alert('결제 정보가 일치하지 않습니다. 올바른 방법으로 이용해 주십시오.');
//최종결제요청 결과 성공 DB처리
$tno = get_session('P_TID');
$amount = get_session('P_AMT');
$app_time = $_POST['P_AUTH_DT'];
$pay_method = $_POST['P_TYPE'];
$pay_type = $PAY_METHOD[$pay_method];
$depositor = $_POST['P_UNAME'];
$commid = $_POST['P_HPP_CORP'];
$mobile_no = $_POST['P_APPL_NUM'];
$app_no = $_POST['P_AUTH_NO'];
$card_name = $_POST['P_CARD_ISSUER'];
if ($default['de_escrow_use'] == 1)
$escw_yn = 'Y';
switch($pay_type) {
case '계좌이체':
$bank_name = $_POST['P_VACT_BANK'];
break;
case '가상계좌':
$bankname = $_POST['P_VACT_BANK'];
$account = $_POST['P_VACT_NUM'].' '.$_POST['P_VACT_NAME'];
$app_no = $_POST['P_VACT_NUM'];
break;
default:
break;
}
// 세션 초기화
set_session('P_TID', '');
set_session('P_AMT', '');
set_session('P_HASH', '');
+4
View File
@@ -0,0 +1,4 @@
<?php
include_once('./_common.php');
// 카카오페이 (KG 이니시스) 의 경우 NOTI 과정이 없으므로 이 페이지를 사용하지 않습니다.
+4
View File
@@ -0,0 +1,4 @@
<?php
include_once('./_common.php');
// 카카오페이 (KG 이니시스) 의 경우 NOTI 과정이 없으므로 이 페이지를 사용하지 않습니다.
+179
View File
@@ -0,0 +1,179 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if( ! $is_kakaopay_use) return;
if( $is_mobile_order ){
include_once(G5_SHOP_PATH.'/kakaopay/mobile_orderform.1.php');
return;
}
// PC 결제에서는 이니시스 결제를 같이 설정하면 중복 오류 문제가 일어나므로 SIRK***** 를 사용하는 카카오페이( 이니시스결제 )를 활성화하지 않습니다.
if( $default['de_inicis_lpay_use'] || $default['de_inicis_kakaopay_use'] || ('inicis' == $default['de_pg_service']) ){
?>
<script>
function getTxnId(frm) {
alert('결제 설정에 문제가 있습니다. ( 중복설정문제 )');
return false;
}
</script>
<?php
return;
}
include_once(G5_SHOP_PATH.'/kakaopay/incKakaopayCommon.php');
add_javascript('<script language="javascript" type="text/javascript" src="'.$stdpay_js_url.'" charset="UTF-8"></script>', 10);
?>
<form id="inicis_kakaopay_request" name="inicis_kakaopay_request" method="POST">
<?php /* 주문폼 자바스크립트 에러 방지를 위해 추가함 */ ?>
<input type="hidden" name="good_mny" value="">
<?php
if($default['de_tax_flag_use']) {
?>
<input type="hidden" name="comm_tax_mny" value=""> <!-- 과세금액 -->
<input type="hidden" name="comm_vat_mny" value=""> <!-- 부가세 -->
<input type="hidden" name="comm_free_mny" value=""> <!-- 비과세 금액 -->
<?php
}
?>
<input type="hidden" name="version" value="1.0" >
<input type="hidden" name="mid" value="<?php echo $default['de_kakaopay_mid']; ?>">
<input type="hidden" name="goodname" value="<?php echo isset($goods) ? get_text($goods) : ''; ?>">
<input type="hidden" name="oid" value="<?php echo $od_id; ?>">
<input type="hidden" name="price" value="<?php echo $tot_price; ?>" >
<input type="hidden" name="currency" value="WON" >
<input type="hidden" name="buyername" value="">
<input type="hidden" name="buyeremail" value="">
<input type="hidden" name="parentemail" value="">
<input type="hidden" name="buyertel" value="">
<input type="hidden" name="recvname" value="">
<input type="hidden" name="recvtel" value="">
<input type="hidden" name="recvaddr" value="">
<input type="hidden" name="recvpostnum" value="">
<input type="hidden" name="timestamp" value="">
<input type="hidden" name="signature" value="">
<input type="hidden" name="returnUrl" value="<?php echo $returnUrl; ?>">
<input type="hidden" name="mKey" value="" >
<input type="hidden" name="gopaymethod" value="">
<input type="hidden" name="acceptmethod" value="<?php echo $acceptmethod; ?>">
<input type="hidden" name="charset" value="UTF-8">
<input type="hidden" name="payViewType" value="overlay">
<input type="hidden" name="closeUrl" value="<?php echo $closeUrl; ?>">
<input type="hidden" name="popupUrl" value="<?php echo $popupUrl; ?>">
<input type="hidden" name="nointerest" value="<?php echo $cardNoInterestQuota ?>" >
<input type="hidden" name="quotabase" value="<?php echo $cardQuotaBase ?>" >
<?php if($default['de_tax_flag_use']) { ?>
<input type="hidden" name="tax" value="">
<input type="hidden" name="taxfree" value="">
<?php } ?>
</form>
<script type="text/javascript">
//var inicis_kakaopay_request = jQuery("#inicis_pay_form").length ? "inicis_pay_form" : "inicis_kakaopay_request";
var inicis_kakaopay_request = "inicis_kakaopay_request";
if( typeof g5_shop_url === 'undefined' ){
var g5_shop_url = g5_url+"/shop";
}
function inicis_kakao_signature(frm)
{
// 데이터 암호화 처리
var result = true;
//var ajax_str_url = (inicis_kakaopay_request == "inicis_pay_form") ? "/inicis/makesignature.php" : "/kakaopay/makesignature.php";
var ajax_str_url = "/kakaopay/makesignature.php";
$.ajax({
url: g5_shop_url+ajax_str_url,
type: "POST",
data: {
price : frm.good_mny.value
},
dataType: "json",
async: false,
cache: false,
success: function(data) {
if(data.error == "") {
frm.timestamp.value = data.timestamp;
frm.signature.value = data.sign;
frm.mKey.value = data.mKey;
} else {
alert(data.error);
result = false;
}
}
});
return result;
}
function getTxnId(frm) {
var pf = document.forderform,
inicis_kk_form = document.forms[inicis_kakaopay_request];
inicis_kk_form.removeAttribute("target");
inicis_kk_form.gopaymethod.value = "onlykakaopay";
inicis_kk_form.acceptmethod.value = "cardonly";
inicis_kk_form.price.value = inicis_kk_form.good_mny.value = pf.good_mny.value;
inicis_kk_form.goodname.value = (typeof pf.od_goods_name != "undefined") ? pf.od_goods_name.value : "";
if( inicis_kk_form.goodname.value == "" ){
if( jQuery("#LGD_PRODUCTINFO").length ){
inicis_kk_form.goodname.value = jQuery("#LGD_PRODUCTINFO").val();
} else if( jQuery("input[name=good_name]").length ){
inicis_kk_form.goodname.value = jQuery("input[name=good_name]").val();
}
}
inicis_kk_form.buyername.value = pf.od_name.value;
inicis_kk_form.buyeremail.value = pf.od_email.value;
inicis_kk_form.buyertel.value = pf.od_hp.value ? pf.od_hp.value : pf.od_tel.value;
inicis_kk_form.recvname.value = pf.od_b_name.value;
inicis_kk_form.recvtel.value = pf.od_b_hp.value ? pf.od_b_hp.value : pf.od_b_tel.value;
inicis_kk_form.recvpostnum.value = pf.od_b_zip.value;
inicis_kk_form.recvaddr.value = pf.od_b_addr1.value + " " +pf.od_b_addr2.value;
<?php if($default['de_tax_flag_use']) { ?>
inicis_kk_form.comm_tax_mny.value = pf.comm_tax_mny.value;
inicis_kk_form.comm_vat_mny.value = pf.comm_vat_mny.value;
inicis_kk_form.comm_free_mny.value = pf.comm_free_mny.value;
inicis_kk_form.tax.value = pf.comm_vat_mny.value;
inicis_kk_form.taxfree.value = pf.comm_free_mny.value;
<?php } ?>
// 주문 정보 임시저장
var order_data = $(pf).serialize();
var save_result = "";
$.ajax({
type: "POST",
data: order_data,
url: g5_url+"/shop/ajax.orderdatasave.php",
cache: false,
async: false,
success: function(data) {
save_result = data;
}
});
if(save_result) {
alert(save_result);
return false;
}
if(inicis_kakao_signature(inicis_kk_form)) {
setTimeout(function(){
INIStdPay.pay(inicis_kakaopay_request);
}, 1);
}
return false;
}
</script>
+19
View File
@@ -0,0 +1,19 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if($is_kakaopay_use) {
?>
<div id="kakaopay_request">
<?php if($default['de_tax_flag_use']) { ?>
<input type="hidden" name="SupplyAmt" value="<?php echo ((int)$comm_tax_mny + (int)$comm_free_mny); ?>">
<input type="hidden" name="GoodsVat" value="<?php echo $comm_vat_mny; ?>">
<input type="hidden" name="ServiceAmt" value="0">
<?php } ?>
<?php if($is_mobile_order){ ?>
<input type="hidden" name="is_inicis_mobile_kakaopay" value="mobile" >
<?php } ?>
</div>
<?php
}
+2
View File
@@ -0,0 +1,2 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가;
+61
View File
@@ -0,0 +1,61 @@
<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
if($od['od_pg'] != 'KAKAOPAY') return;
include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
$vat_mny = round((int)$tax_mny / 1.1);
$currency = 'WON';
$oldtid = $od['od_tno'];
$price = (int)$tax_mny + (int)$free_mny;
$confirm_price = (int)$od['od_receipt_price'] - (int)$od['od_refund_price'] - $price;
$buyeremail = $od['od_email'];
$tax = (int)$tax_mny - $vat_mny;
$taxfree = (int)$free_mny;
$args = array(
'key' => isset($default['de_kakaopay_iniapi_key']) ? $default['de_kakaopay_iniapi_key'] : '',
'mid' => $default['de_kakaopay_mid'],
'paymethod' => get_type_inicis_paymethod($od['od_settle_case']),
'tid' => $od['od_tno'],
'msg' => $od['od_id'].' '.$mod_memo,
'price' => $price,
'confirmPrice' => $confirm_price,
'tax' => $tax,
'taxFree' => $taxfree
);
$response = inicis_tid_cancel($args, true); // KG 이니시스 부분취소일 경우 inicis_tid_cancel 함수 2번째 인자값을 true로
$result = json_decode($response, true);
if (isset($result['resultCode']) && $result['resultCode'] == '00') {
// 환불금액기록
$tno = $result['prtcTid'];
$re_price = $result['prtcPrice'];
$sql = " update {$g5['g5_shop_order_table']}
set od_refund_price = od_refund_price + '$re_price',
od_shop_memo = concat(od_shop_memo, \"$mod_memo\")
where od_id = '{$od['od_id']}'
and od_tno = '$tno' ";
sql_query($sql);
// 미수금 등의 정보 업데이트
$info = get_order_info($od_id);
$sql = " update {$g5['g5_shop_order_table']}
set od_misu = '{$info['od_misu']}',
od_tax_mny = '{$info['od_tax_mny']}',
od_vat_mny = '{$info['od_vat_mny']}',
od_free_mny = '{$info['od_free_mny']}'
where od_id = '$od_id' ";
sql_query($sql);
} else {
if (isset($result['resultCode'])){
alert($result['resultMsg'].' 코드 : '.$result['resultCode']);
} else {
alert('curl 오류로 부분환불에 실패했습니다.');
}
}
+214
View File
@@ -0,0 +1,214 @@
<?php
include_once('./_common.php');
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
require_once(G5_SHOP_PATH.'/inicis/libs/HttpClient.php');
require_once(G5_SHOP_PATH.'/inicis/libs/json_lib.php');
$inicis_pay_result = false;
try {
//#############################
// 인증결과 파라미터 일괄 수신
//#############################
// $var = $_REQUEST["data"];
//#####################
// 인증이 성공일 경우만
//#####################
if (isset($_REQUEST['resultCode']) && strcmp('0000', $_REQUEST['resultCode']) == 0) {
//############################################
// 1.전문 필드 값 설정(***가맹점 개발수정***)
//############################################
$charset = 'UTF-8'; // 리턴형식[UTF-8,EUC-KR](가맹점 수정후 고정)
$format = 'JSON'; // 리턴형식[XML,JSON,NVP](가맹점 수정후 고정)
// 추가적 noti가 필요한 경우(필수아님, 공백일 경우 미발송, 승인은 성공시, 실패시 모두 Noti발송됨) 미사용
//String notiUrl = "";
$authToken = $_REQUEST['authToken']; // 취소 요청 tid에 따라서 유동적(가맹점 수정후 고정)
$authUrl = $_REQUEST['authUrl']; // 승인요청 API url(수신 받은 값으로 설정, 임의 세팅 금지)
$netCancel = $_REQUEST['netCancelUrl']; // 망취소 API url(수신 받은f값으로 설정, 임의 세팅 금지)
///$mKey = $util->makeHash(signKey, "sha256"); // 가맹점 확인을 위한 signKey를 해시값으로 변경 (SHA-256방식 사용)
$mKey = hash("sha256", $signKey);
//#####################
// 2.signature 생성
//#####################
$signParam['authToken'] = $authToken; // 필수
$signParam['timestamp'] = $timestamp; // 필수
// signature 데이터 생성 (모듈에서 자동으로 signParam을 알파벳 순으로 정렬후 NVP 방식으로 나열해 hash)
$signature = $util->makeSignature($signParam);
//#####################
// 3.API 요청 전문 생성
//#####################
$authMap['mid'] = $default['de_kakaopay_mid']; // 필수
$authMap['authToken'] = $authToken; // 필수
$authMap['signature'] = $signature; // 필수
$authMap['timestamp'] = $timestamp; // 필수
$authMap['charset'] = $charset; // default=UTF-8
$authMap['format'] = $format; // default=XML
//if(null != notiUrl && notiUrl.length() > 0){
// authMap.put("notiUrl" ,notiUrl);
//}
try {
$httpUtil = new HttpClient();
//#####################
// 4.API 통신 시작
//#####################
$authResultString = "";
if ($httpUtil->processHTTP($authUrl, $authMap)) {
$authResultString = $httpUtil->body;
} else {
echo "Http Connect Error\n";
echo $httpUtil->errormsg;
throw new Exception("Http Connect Error");
}
//############################################################
//5.API 통신결과 처리(***가맹점 개발수정***)
//############################################################
$resultMap = json_decode($authResultString, true);
$tid = $resultMap['tid'];
$oid = preg_replace('/[^A-Za-z0-9\-_]/', '', $resultMap['MOID']);
/************************* 결제보안 추가 2016-05-18 START ****************************/
$secureMap['mid'] = $default['de_kakaopay_mid']; //mid
$secureMap['tstamp'] = $timestamp; //timestemp
$secureMap['MOID'] = $resultMap['MOID']; //MOID
$secureMap['TotPrice'] = $resultMap['TotPrice']; //TotPrice
// signature 데이터 생성
$secureSignature = $util->makeSignatureAuth($secureMap);
/************************* 결제보안 추가 2016-05-18 END ****************************/
$sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '$oid' ";
$row = sql_fetch($sql);
$data = isset($row['dt_data']) ? unserialize(base64_decode($row['dt_data'])) : array();
if(isset($data['pp_id']) && $data['pp_id']) {
$page_return_url = G5_SHOP_URL.'/personalpayform.php?pp_id='.$data['pp_id'];
} else {
$page_return_url = G5_SHOP_URL.'/orderform.php';
if(get_session('ss_direct'))
$page_return_url .= '?sw_direct=1';
}
if ((strcmp('0000', $resultMap['resultCode']) == 0) && (strcmp($secureSignature, $resultMap['authSignature']) == 0) ) { //결제보안 추가 2016-05-18
/* * ***************************************************************************
* 여기에 가맹점 내부 DB에 결제 결과를 반영하는 관련 프로그램 코드를 구현한다.
[중요!] 승인내용에 이상이 없음을 확인한 뒤 가맹점 DB에 해당건이 정상처리 되었음을 반영함
처리중 에러 발생시 망취소를 한다.
* **************************************************************************** */
//최종결제요청 결과 성공 DB처리
$tno = $resultMap['tid'];
$amount = $resultMap['TotPrice'];
$app_time = $resultMap['applDate'].$resultMap['applTime'];
$pay_method = $resultMap['payMethod'];
$pay_type = $PAY_METHOD[$pay_method];
$depositor = isset($resultMap['VACT_InputName']) ? $resultMap['VACT_InputName'] : '';
$commid = '';
$mobile_no = isset($resultMap['HPP_Num']) ? $resultMap['HPP_Num'] : '';
$app_no = $resultMap['applNum'];
$card_name = $CARD_CODE[$resultMap['CARD_Code']];
switch($pay_type) {
case '계좌이체':
$bank_name = $BANK_CODE[$resultMap['ACCT_BankCode']];
if ($default['de_escrow_use'] == 1)
$escw_yn = 'Y';
break;
case '가상계좌':
$bankname = $BANK_CODE[$resultMap['VACT_BankCode']];
$account = $resultMap['VACT_Num'].' '.$resultMap['VACT_Name'];
$app_no = $resultMap['VACT_Num'];
if ($default['de_escrow_use'] == 1)
$escw_yn = 'Y';
break;
default:
break;
}
$inicis_pay_result = true;
} else {
$s = '(오류코드:'.$resultMap['resultCode'].') '.$resultMap['resultMsg'];
alert($s, $page_return_url);
}
// 수신결과를 파싱후 resultCode가 "0000"이면 승인성공 이외 실패
// 가맹점에서 스스로 파싱후 내부 DB 처리 후 화면에 결과 표시
// payViewType을 popup으로 해서 결제를 하셨을 경우
// 내부처리후 스크립트를 이용해 opener의 화면 전환처리를 하세요
//throw new Exception("강제 Exception");
} catch (Exception $e) {
// $s = $e->getMessage() . ' (오류코드:' . $e->getCode() . ')';
//####################################
// 실패시 처리(***가맹점 개발수정***)
//####################################
//---- db 저장 실패시 등 예외처리----//
$s = $e->getMessage() . ' (오류코드:' . $e->getCode() . ')';
echo $s;
//#####################
// 망취소 API
//#####################
$netcancelResultString = ""; // 망취소 요청 API url(고정, 임의 세팅 금지)
if ($httpUtil->processHTTP($netCancel, $authMap)) {
$netcancelResultString = $httpUtil->body;
} else {
echo "Http Connect Error\n";
echo $httpUtil->errormsg;
throw new Exception("Http Connect Error");
}
echo "## 망취소 API 결과 ##";
$netcancelResultString = str_replace("<", "&lt;", $$netcancelResultString);
$netcancelResultString = str_replace(">", "&gt;", $$netcancelResultString);
echo "<pre>", $netcancelResultString . "</pre>";
// 취소 결과 확인
}
} else {
//#############
// 인증 실패시
//#############
echo "<br/>";
echo "####인증실패####";
ob_start();
$debug_msg = ob_get_contents();
ob_clean();
echo "<pre>" . strip_tags($debug_msg) . "</pre>";
}
} catch (Exception $e) {
$s = $e->getMessage() . ' (오류코드:' . $e->getCode() . ')';
echo $s;
}
if( !$inicis_pay_result ){
die("<br><br>결제 에러가 일어났습니다. 에러 이유는 위와 같습니다.");
}