feat: SIRK 전용 카카오페이 연동 종료와 기존 주문 지원 절차 추가
전용 신규 결제와 자동 취소를 차단하고 기존 주문 조회 및 실제 PG 취소 확인 후 수동 정리를 지원한다. 기존 DB와 일반 PG 경로를 보존하고 5.6.37 전환 및 사후지원 절차를 문서화한다. 검증: 변경 PHP 문법, SIRK 요청 차단, 설치 스키마 및 쇼핑몰 후설치 검사 통과. 실제 PG 결제·취소 검증은 별도 진행한다.
This commit is contained in:
@@ -79,6 +79,7 @@ php bin/check-runtime-ddl.php
|
||||
|
||||
## 문서 및 지원
|
||||
|
||||
- [5.6.37 SIRK 전용 카카오페이 연동 종료 및 기존 거래 지원](docs/sirk-kakaopay-retirement.md)
|
||||
- [그누보드5 공식 페이지](https://sir.kr/main/g5/)
|
||||
- [그누보드5 공식 매뉴얼](https://sir.kr/manuals/g5/1)
|
||||
- [그누보드5 Q&A](https://sir.kr/questions?s_tag=%EA%B7%B8%EB%88%84%EB%B3%B4%EB%93%9C5)
|
||||
|
||||
@@ -696,7 +696,6 @@ a.scf_pgreg {display:inline-block;margin:5px 0 0;padding:5px 10px;background:#22
|
||||
a.kcp_btn {display:inline-block;margin:5px 0 0;padding:5px 10px;background:#226C8B;color:#fff;font-weight:normal;text-decoration:none}
|
||||
a.lg_btn{display:inline-block;margin:5px 0 0;padding:5px 10px;background:#ED008C;color:#fff;font-weight:normal;text-decoration:none}
|
||||
a.kg_btn{display:inline-block;margin:5px 0 0;padding:5px 10px;background:#4A2C7C;color:#fff;font-weight:normal;text-decoration:none}
|
||||
a.kakao_btn{display:inline-block;margin:5px 0 0;padding:5px 10px;background:#FDDC2F;color:#3B1E1E;font-weight:normal;text-decoration:none}
|
||||
a.naver_btn {display:inline-block;margin:5px 0 0;padding:5px 10px;background:#00C73C;color:#fff;font-weight:normal;text-decoration:none}
|
||||
a.nicepay_btn{display:inline-block;margin:5px 0 0;padding:5px 10px;background:#0057bf;color:#fff;font-weight:normal;text-decoration:none}
|
||||
|
||||
@@ -740,7 +739,6 @@ ul.de_pg_tab li.tab-current a{background:#2CC185;color:#fff}
|
||||
.lg_info_fld th{background-color:#FFF4FA}
|
||||
.lg_info_fld_v2 th{background-color:#ffe8f5}
|
||||
.inicis_info_fld th{background-color:#F6F1FF}
|
||||
.kakao_info_fld th{background-color:#FFFCED}
|
||||
.naver_info_fld th{background-color:#F3FFF3}
|
||||
.nicepay_info_fld th{background-color:#d1e6ff}
|
||||
|
||||
|
||||
@@ -31,11 +31,15 @@ if( function_exists('pg_setting_check') ){
|
||||
pg_setting_check(true);
|
||||
}
|
||||
|
||||
if(!$default['de_kakaopay_cancelpwd']){
|
||||
$default['de_kakaopay_cancelpwd'] = '1111';
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if (!empty($default['de_kakaopay_mid']) || !empty($default['de_kakaopay_enckey'])) { ?>
|
||||
<div class="local_desc01 local_desc">
|
||||
<p>5.6.37부터 SIRK 전용 카카오페이 연동을 지원하지 않습니다. 기존 거래는 이니시스 상점관리자에서 승인·취소 내역을 확인해 주십시오.</p>
|
||||
<p>기존 이용 고객 지원: 김민섭 <a href="mailto:minsup@sir.kr">minsup@sir.kr</a></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<form name="fconfig" action="./configformupdate.php" onsubmit="return fconfig_check(this)" method="post" enctype="MULTIPART/FORM-DATA">
|
||||
<input type="hidden" name="token" value="">
|
||||
<section id="anc_scf_info">
|
||||
@@ -780,46 +784,6 @@ if(!$default['de_kakaopay_cancelpwd']){
|
||||
<input type="checkbox" name="de_inicis_cartpoint_use" value="1" id="de_inicis_cartpoint_use"<?php echo $default['de_inicis_cartpoint_use']?' checked':''; ?>> <label for="de_inicis_cartpoint_use">사용</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="kakao_info_fld">
|
||||
<th scope="row">
|
||||
<label for="de_kakaopay_mid">카카오페이 상점아이디<br>( KG이니시스 )</label>
|
||||
<a href="http://sir.kr/main/service/kakaopay.php?kk=yc5" target="_blank" class="kakao_btn">카카오페이 서비스신청하기</a>
|
||||
</th>
|
||||
<td>
|
||||
<?php echo help("KG이니시스로 부터 카카오페이 간편결제만 사용용도로 발급 받으신 상점아이디(MID) 10자리 중 SIRK 을 제외한 나머지 6자리를 입력 합니다."); ?>
|
||||
<span class="sitecode">SIRK</span> <input type="text" name="de_kakaopay_mid" value="<?php echo get_sanitize_input($default['de_kakaopay_mid']); ?>" id="de_kakaopay_mid" class="frm_input code_input" size="10" maxlength="7">
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="kakao_info_fld">
|
||||
<th scope="row"><label for="de_kakaopay_key">카카오페이 상점키<br>( KG이니시스 )</label></th>
|
||||
<td>
|
||||
<?php echo help("SIRK****** 아이디로 KG이니시스에서 발급받은 웹결제 사인키를 입력합니다.\nKG이니시스 상점관리자 > 상점정보 > 계약정보 > 부가정보의 웹결제 signkey생성 조회 버튼 클릭, 팝업창에서 생성 버튼 클릭 후 해당 값을 입력합니다."); ?>
|
||||
<input type="text" name="de_kakaopay_key" value="<?php echo get_sanitize_input($default['de_kakaopay_key']); ?>" id="de_kakaopay_key" class="frm_input" size="100">
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="kakao_info_fld">
|
||||
<th scope="row"><label for="de_kakaopay_cancelpwd">카카오페이 키패스워드<br>( KG이니시스 )</label></th>
|
||||
<td>
|
||||
<?php echo help("SIRK****** 아이디로 KG이니시스에서 발급받은 4자리 상점 키패스워드를 입력합니다.\nKG이니시스 상점관리자 패스워드와 관련이 없습니다.\n키패스워드 값을 확인하시려면 상점측에 발급된 키파일 안의 readme.txt 파일을 참조해 주십시오"); ?>
|
||||
<input type="text" name="de_kakaopay_cancelpwd" value="<?php echo get_sanitize_input($default['de_kakaopay_cancelpwd']); ?>" id="de_kakaopay_cancelpwd" class="frm_input" size="20">
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="kakao_info_fld">
|
||||
<th scope="row">
|
||||
<label for="de_kakaopay_enckey">KG이니시스<br>카카오페이 사용</label>
|
||||
</th>
|
||||
<td>
|
||||
<?php echo help("체크시 카카오페이 (KG 이니시스)를 사용합니다. <br >KG 이니시스의 SIRK****** 아이디를 받은 상점만 해당됩니다.", 50); ?>
|
||||
<input type="checkbox" name="de_kakaopay_enckey" value="1" id="de_kakaopay_enckey"<?php echo $default['de_kakaopay_enckey']?' checked':''; ?>> <label for="de_kakaopay_enckey">사용</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="kakao_info_fld" style="display:none">
|
||||
<th scope="row"><label for="de_kakaopay_hashkey">카카오페이 상점 HashKey</label></th>
|
||||
<td>
|
||||
<?php echo help("카카오페이로 부터 발급 받으신 상점 인증 전용 HashKey를 입력합니다."); ?>
|
||||
<input type="text" name="de_kakaopay_hashkey" value="<?php echo get_sanitize_input($default['de_kakaopay_hashkey']); ?>" id="de_kakaopay_hashkey" class="frm_input" size="20">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="pg_info_fld nicepay_info_fld" id="nicepay_info_anchor">
|
||||
<th scope="row"><label for="de_nicepay_mid">NICEPAY MID</label><br><a href="http://sir.kr/main/service/nicepayments_pg.php" target="_blank" id="scf_nicepay_reg" class="nicepay_btn">NICEPAY 신청하기</a></th>
|
||||
@@ -2005,26 +1969,7 @@ if($default['de_iche_use'] || $default['de_vbank_use'] || $default['de_hp_use']
|
||||
}
|
||||
}
|
||||
|
||||
// 카카오페이의 경우 log 디렉토리 체크
|
||||
if($default['de_kakaopay_mid'] && $default['de_kakaopay_key'] && $default['de_kakaopay_enckey'] && $default['de_kakaopay_hashkey'] && $default['de_kakaopay_cancelpwd']) {
|
||||
$log_path = G5_SHOP_PATH.'/kakaopay/log';
|
||||
|
||||
if(!is_dir($log_path)) {
|
||||
echo '<script>'.PHP_EOL;
|
||||
echo 'alert("'.str_replace(G5_PATH.'/', '', G5_SHOP_PATH).'/kakaopay 폴더 안에 log 폴더를 생성하신 후 쓰기권한을 부여해 주십시오.\n> mkdir log\n> chmod 707 log");'.PHP_EOL;
|
||||
echo '</script>'.PHP_EOL;
|
||||
} else {
|
||||
if(!is_writable($log_path)) {
|
||||
echo '<script>'.PHP_EOL;
|
||||
echo 'alert("'.str_replace(G5_PATH.'/', '',$log_path).' 폴더에 쓰기권한을 부여해 주십시오.\n> chmod 707 log");'.PHP_EOL;
|
||||
echo '</script>'.PHP_EOL;
|
||||
} else {
|
||||
if( function_exists('check_log_folder') && is_writable($log_path) ){
|
||||
check_log_folder($log_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -189,11 +189,6 @@ $check_sanitize_keys = array(
|
||||
'de_inicis_cartpoint_use', //KG이니시스 신용카드 포인트 결제
|
||||
'de_nicepay_mid', //NICEPAY 상점아이디
|
||||
'de_nicepay_key', //NICEPAY 상점키
|
||||
'de_kakaopay_mid', //카카오페이 상점MID
|
||||
'de_kakaopay_key', //카카오페이 상점키
|
||||
'de_kakaopay_enckey', //카카오페이 상점 EncKey
|
||||
'de_kakaopay_hashkey', //카카오페이 상점 HashKey
|
||||
'de_kakaopay_cancelpwd', //카카오페이 결제취소 비밀번호
|
||||
'de_naverpay_mid', //네이버페이 가맹점 아이디
|
||||
'de_naverpay_cert_key', //네이버페이 가맹점 인증키
|
||||
'de_naverpay_button_key', //네이버페이 버튼 인증키
|
||||
@@ -300,11 +295,6 @@ if($de_pg_service == 'kcp' && ! $de_card_test && ($de_iche_use || $de_vbank_use
|
||||
alert('NHN KCP SITE KEY를 입력해 주십시오.');
|
||||
}
|
||||
|
||||
if( $de_kakaopay_enckey && ($de_pg_service === 'inicis' || $de_inicis_lpay_use || $de_inicis_kakaopay_use) ){
|
||||
|
||||
$warning_msg = 'KG 이니시스 결제 또는 L.pay 또는 KG이니시스 카카오페이를 사용시 결제모듈 중복문제로 카카오페이를 활성화 할수 없습니다. \\n\\n카카오페이 사용을 비활성화 합니다.';
|
||||
$de_kakaopay_enckey = '';
|
||||
}
|
||||
|
||||
//
|
||||
// 영카트 default
|
||||
@@ -481,11 +471,6 @@ $sql = " update {$g5['g5_shop_default_table']}
|
||||
de_hp_use = '{$de_hp_use}',
|
||||
de_escrow_use = '{$de_escrow_use}',
|
||||
de_tax_flag_use = '{$de_tax_flag_use}',
|
||||
de_kakaopay_mid = '{$de_kakaopay_mid}',
|
||||
de_kakaopay_key = '{$de_kakaopay_key}',
|
||||
de_kakaopay_enckey = '{$de_kakaopay_enckey}',
|
||||
de_kakaopay_hashkey = '{$de_kakaopay_hashkey}',
|
||||
de_kakaopay_cancelpwd = '{$de_kakaopay_cancelpwd}',
|
||||
de_member_reg_coupon_use = '{$de_member_reg_coupon_use}',
|
||||
de_member_reg_coupon_term = '{$de_member_reg_coupon_term}',
|
||||
de_member_reg_coupon_price = '{$de_member_reg_coupon_price}',
|
||||
|
||||
@@ -30,6 +30,9 @@ if($w == 'd') {
|
||||
|
||||
// 주문정보
|
||||
$data = unserialize(base64_decode($od['dt_data']));
|
||||
if (isset($data['od_settle_case']) && $data['od_settle_case'] === 'KAKAOPAY') {
|
||||
alert('SIRK 전용 카카오페이 미완료 주문은 결제 상태를 이니시스에서 확인한 뒤 사후지원 담당자에게 문의해 주십시오.');
|
||||
}
|
||||
$data_od_cp_id = isset($data['od_cp_id']) ? safe_replace_regex($data['od_cp_id'], 'cp_id') : '';
|
||||
$data_sc_cp_id = isset($data['sc_cp_id']) ? safe_replace_regex($data['sc_cp_id'], 'cp_id') : '';
|
||||
|
||||
@@ -210,8 +213,6 @@ if($default['de_tax_flag_use']) {
|
||||
}
|
||||
|
||||
$od_pg = $default['de_pg_service'];
|
||||
if($data['od_settle_case'] == 'KAKAOPAY')
|
||||
$od_pg = 'KAKAOPAY';
|
||||
|
||||
$od_email = get_email_address($data['od_email']);
|
||||
$od_name = addslashes(clean_xss_tags($data['od_name']));
|
||||
|
||||
@@ -239,6 +239,13 @@ if ($is_nicepay_vbank_pg_cancel) {
|
||||
<input type="hidden" name="search" value="<?php echo $search; ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page;?>">
|
||||
<input type="hidden" name="pg_cancel" value="0">
|
||||
<?php if ($od['od_pg'] === 'KAKAOPAY') { ?>
|
||||
<div class="local_desc01 local_desc">
|
||||
<p>SIRK 전용 카카오페이의 자동 취소 지원이 종료되었습니다. <a href="https://iniweb.inicis.com/" target="_blank" rel="noopener noreferrer">이니시스 상점관리자</a>에서 전체·부분취소를 처리한 뒤 주문 상태와 환불금액을 정리해 주십시오. 이 화면의 상태 변경은 PG 취소를 수행하지 않습니다.</p>
|
||||
<p>기존 이용 고객 지원: 김민섭 <a href="mailto:minsup@sir.kr">minsup@sir.kr</a></p>
|
||||
<label><input type="checkbox" name="sirk_cancel_confirmed" value="1"> 이니시스에서 실제 취소 여부와 금액을 확인했습니다. 선택한 상품의 주문 상태만 변경합니다.</label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<input type="hidden" name="submit_ct_status" value="">
|
||||
<?php if ($is_nicepay_vbank_pg_cancel) { ?>
|
||||
<input type="hidden" name="RefundAcctNo" value="">
|
||||
@@ -1018,7 +1025,7 @@ if ($is_nicepay_vbank_pg_cancel) {
|
||||
<?php if($od['od_status'] == '주문' && $od['od_misu'] > 0) { ?>
|
||||
<a href="./personalpayform.php?popup=yes&od_id=<?php echo $od_id; ?>" id="personalpay_add" class="btn btn_02">개인결제추가</a>
|
||||
<?php } ?>
|
||||
<?php if($od['od_misu'] < 0 && ($od['od_receipt_price'] - $od['od_refund_price']) > 0 && ($od['od_settle_case'] == '신용카드' || $od['od_settle_case'] == '계좌이체' || $od['od_settle_case'] == 'KAKAOPAY' || ($od['od_pg'] == 'nicepay' && $od['od_settle_case'] == '간편결제'))) { ?>
|
||||
<?php if($od['od_pg'] !== 'KAKAOPAY' && $od['od_misu'] < 0 && ($od['od_receipt_price'] - $od['od_refund_price']) > 0 && ($od['od_settle_case'] == '신용카드' || $od['od_settle_case'] == '계좌이체' || $od['od_settle_case'] == 'KAKAOPAY' || ($od['od_pg'] == 'nicepay' && $od['od_settle_case'] == '간편결제'))) { ?>
|
||||
<a href="./orderpartcancel.php?od_id=<?php echo $od_id; ?>" id="orderpartcancel" class="btn btn_02"><?php echo get_text($od['od_settle_case']); ?> 부분취소</a>
|
||||
<?php } ?>
|
||||
<a href="./orderlist.php?<?php echo $qstr; ?>" class="btn btn_02">목록</a>
|
||||
@@ -1455,16 +1462,13 @@ function form_submit(f)
|
||||
|
||||
var msg = "";
|
||||
|
||||
<?php if (is_cancel_shop_pg_order($od)) { ?>
|
||||
<?php if ($od['od_pg'] !== 'KAKAOPAY' && is_cancel_shop_pg_order($od)) { ?>
|
||||
if(status == "취소" || status == "반품" || status == "품절") {
|
||||
var $ct_chk = $("input[name^=ct_chk]");
|
||||
var chk_cnt = $ct_chk.length;
|
||||
var chked_cnt = $ct_chk.filter(":checked").length;
|
||||
<?php if($od['od_pg'] == 'KAKAOPAY') { ?>
|
||||
var cancel_pg = "카카오페이";
|
||||
<?php } else { ?>
|
||||
var cancel_pg = "PG사의 <?php echo get_text($od['od_settle_case']); ?>";
|
||||
<?php } ?>
|
||||
|
||||
|
||||
// 체크하지 않은 나머지 품목이 모두 취소류 상태이면 이번 처리로 주문 전체가 취소된다.
|
||||
var remain_active_cnt = $ct_chk.not(":checked").filter(function() {
|
||||
|
||||
@@ -29,6 +29,16 @@ if (in_array($ct_status, $status_normal) || in_array($ct_status, $status_cancel)
|
||||
alert('변경할 상태가 올바르지 않습니다.');
|
||||
}
|
||||
|
||||
// SIRK 주문은 PG 취소를 호출하지 않고, 실제 취소를 확인한 운영자만 로컬 상태를 정리한다.
|
||||
if (in_array($ct_status, $status_cancel, true)) {
|
||||
$sirk_order = sql_fetch(" select od_pg from {$g5['g5_shop_order_table']} where od_id = '" . sql_escape_string($od_id) . "' ");
|
||||
if (isset($sirk_order['od_pg']) && $sirk_order['od_pg'] === 'KAKAOPAY') {
|
||||
if ($pg_cancel || empty($_POST['sirk_cancel_confirmed'])) {
|
||||
alert('SIRK 전용 카카오페이는 이니시스 상점관리자에서 실제 취소 여부를 확인한 뒤 주문 상태만 변경해 주십시오.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// INIpay PRO 전체취소는 로컬 상품상태를 바꾸기 전에 PG 취소를 먼저 확정한다.
|
||||
// PG 취소 실패 후에도 주문만 취소되어 가상계좌 입금이 남는 상태를 방지한다.
|
||||
$inicis_pro_cancel_preprocessed = false;
|
||||
@@ -455,12 +465,8 @@ if (in_array($ct_status, $status_cancel)) {
|
||||
|
||||
break;
|
||||
case 'KAKAOPAY':
|
||||
include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
|
||||
$_REQUEST['TID'] = $od['od_tno'];
|
||||
$_REQUEST['Amt'] = $od['od_receipt_price'];
|
||||
$_REQUEST['CancelMsg'] = '쇼핑몰 운영자 승인 취소';
|
||||
$_REQUEST['PartialCancelCode'] = 0;
|
||||
include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php';
|
||||
$pg_res_cd = 'SIRK_RETIRED';
|
||||
$pg_res_msg = 'SIRK 전용 카카오페이는 이니시스 상점관리자에서 취소해 주십시오.';
|
||||
break;
|
||||
default:
|
||||
include_once(G5_SHOP_PATH.'/settle_kcp.inc.php');
|
||||
|
||||
@@ -12,6 +12,10 @@ $od = sql_fetch($sql);
|
||||
if(! (isset($od['od_id']) && $od['od_id']))
|
||||
alert_close('주문정보가 존재하지 않습니다.');
|
||||
|
||||
if ($od['od_pg'] === 'KAKAOPAY') {
|
||||
alert_close('SIRK 전용 카카오페이의 자동 취소 지원이 종료되었습니다. 이니시스 상점관리자에서 실제 취소 후 주문 상태와 환불금액을 확인해 주십시오.');
|
||||
}
|
||||
|
||||
if($od['od_pg'] == 'inicis' && $od['od_settle_case'] == '계좌이체')
|
||||
alert_close('KG이니시스는 신용카드만 부분취소가 가능합니다.');
|
||||
|
||||
|
||||
@@ -27,6 +27,10 @@ if(! (isset($od['od_id']) && $od['od_id']))
|
||||
if($od['od_settle_case'] == '계좌이체' && substr($od['od_receipt_time'], 0, 10) >= G5_TIME_YMD)
|
||||
alert_close('실시간 계좌이체건의 부분취소 요청은 결제일 익일에 가능합니다.');
|
||||
|
||||
if ($od['od_pg'] === 'KAKAOPAY') {
|
||||
alert_close('SIRK 전용 카카오페이의 자동 취소 지원이 종료되었습니다. 이니시스 상점관리자에서 실제 취소 후 주문 상태와 환불금액을 확인해 주십시오.');
|
||||
}
|
||||
|
||||
// 금액비교
|
||||
$od_misu = abs($od['od_misu']);
|
||||
|
||||
|
||||
@@ -334,7 +334,6 @@ if( !function_exists('shop_check_is_pay_page') ){
|
||||
$mobile_dir.'/'.$shop_dir.'/lg/returnurl.php',
|
||||
$mobile_dir.'/'.$shop_dir.'/lg/xpay_approval.php',
|
||||
$mobile_dir.'/'.$shop_dir.'/kcp/order_approval_form.php',
|
||||
$shop_dir.'/kakaopay/inicis_kk_return.php', // 이니시스 카카오페이 (SIRK 로 시작하는 아이디 전용)
|
||||
$plugin_dir."/inicert/ini_result.php", // 이니시스 간편인증 모듈 2021-09-10 http <-> https 간 세션 공유 문제로 인해 추가
|
||||
$plugin_dir."/inicert/ini_find_result.php", // 이니시스 간편인증 모듈 2021-09-10 http <-> https 간 세션 공유 문제로 인해 추가
|
||||
);
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
# SIRK 전용 카카오페이 연동 종료와 기존 고객 지원
|
||||
|
||||
## 적용 범위
|
||||
|
||||
적용 예정 버전은 **5.6.37**이다. `SIRK`로 시작하는 KG이니시스 카카오페이 전용 MID와 주문의 `od_pg = 'KAKAOPAY'` 경로를 정리한다. 일반 KG이니시스/INIpay PRO, NHN KCP, NICEPAY 등 PG에 포함된 카카오페이는 계속 사용할 수 있다.
|
||||
|
||||
기존 이용 고객 사후지원 담당은 **김민섭(minsup@sir.kr)**이다. 실제 고객 안내·거래 확인·지원 완료 여부는 배포 담당자가 별도로 기록한다. 이 문서 작성이나 코드 변경만으로 고객 안내가 완료된 것은 아니다.
|
||||
|
||||
## 변경 내용
|
||||
|
||||
- 쇼핑몰설정의 전용 MID·웹결제 사인키·키패스워드·사용 여부·숨겨진 HashKey 입력과 저장을 제거한다. 기존 전용 설정이 남아 있는 사이트에는 종료와 지원 연락처를 안내한다.
|
||||
- PC·모바일 주문서에서 전용 결제 선택지를 제거하고, 이전 주문서의 POST와 임시 주문 저장도 서버에서 차단한다.
|
||||
- 전용 서명·승인 요청 코드를 제거한다. 이전 결제창의 서명·승인·반환·통보 URL은 HTTP 410과 종료 안내를 반환하며, PG 요청이나 DB 변경, 통보 성공 응답을 수행하지 않는다. 서명 URL은 오류 JSON을 반환한다.
|
||||
- 기존 주문 조회·매출 표시·영수증 표시는 유지한다. 구매자 자동 취소와 관리자 자동 전체·부분취소는 지원 안내로 차단한다. 다른 PG의 기본 분기로 넘기지 않는다.
|
||||
- 운영자가 실제 PG 취소를 확인한 경우에만 주문관리의 확인 항목을 체크하고 상품 상태를 취소·반품·품절로 정리할 수 있다. 이 동작은 PG 취소나 환불금액의 자동 반영을 수행하지 않는다.
|
||||
- 신규 설치 SQL에서 전용 설정 컬럼 5개를 제외한다. 기존 DB의 컬럼·설정값·주문·임시 주문·결제 로그는 삭제하지 않는다. `de_kakaopay_iniapi_key`를 추가하거나 다른 인증키로 치환하지 않는다.
|
||||
- `shop/settle_kakaopay.inc.php`는 이전 테마의 초기화 include 호환을 위해 비활성화 상태만 반환한다. 자동 취소 경로의 이전 파일도 실패 안내용으로 유지한다. 결제용 내부 폼·결과 파일은 제거하므로 커스텀 테마의 직접 참조는 배포 전에 정리한다.
|
||||
|
||||
## 배포 전 진행 중 거래 정리
|
||||
|
||||
1. 담당자가 기존 이용 고객에게 적용 버전과 실제 배포 시각, 지원 연락처를 안내하고 현재 사용 여부와 취소 처리 방식을 확인한다.
|
||||
2. 전용 결제를 사용 중인 사이트는 배포 전 점검 시간을 잡고, 주문 접수 점검으로 새 주문서 진입과 신규 결제 시작을 막는다. 기존 승인·반환 URL은 점검 차단 대상에서 제외한다. 기존 코드에서는 사용 설정을 끄면 진행 중 승인도 차단되므로, 거래 정리 전에 전용 사용 설정부터 해제하지 않는다. 이미 열린 결제창은 별도로 확인한다.
|
||||
3. 이 단계에서는 기존 승인·반환 경로를 유지한다. 진행 중 결제의 종료를 기다리고 이니시스 거래내역과 쇼핑몰 주문·임시 주문·결제 로그를 대조한다. 고정된 대기 시간만으로 완료됐다고 판단하지 않는다.
|
||||
4. PG 승인만 있고 주문이 없는 거래, 처리 중 취소, 미확인 반환 요청이 있으면 담당자가 먼저 해결한다. 미완료 주문의 자동 복구는 종료 버전에서 차단하므로 배포 전에 정리하거나 담당자 지원 대상으로 명시한다.
|
||||
5. 진행 중 거래가 정리된 것을 확인하고 DB·설정·소스를 백업한 뒤 종료 버전을 배포한다. 고객별 배포·안내·미해결 거래 여부를 기록한다.
|
||||
6. 배포 후에도 이전 URL 요청이 도착하면 성공 처리하지 않는다. 재결제를 유도하지 않고 담당자가 PG 승인 여부를 확인해 주문 누락·중복 결제를 처리한다.
|
||||
|
||||
고객의 운영 상황을 확인하지 않은 상태에서 종료 코드를 먼저 배포하면 진행 중 거래의 주문 반영이 중단될 수 있다. 배포 전 확인이 끝나지 않은 고객은 일정을 조정한다.
|
||||
|
||||
## 기존 거래 취소·부분취소 지원
|
||||
|
||||
1. 운영자가 거래 당시의 SIRK MID로 이니시스 상점관리자에 접속하고 주문번호·거래번호·승인금액·기존 취소금액을 대조한다. 이미 취소된 건을 다시 취소하지 않는다.
|
||||
2. 해당 거래의 전체 또는 부분취소 가능 여부를 확인해 처리한다. 상점관리자에서 처리할 수 없는 건은 사후지원 담당자가 KG이니시스와 확인한다.
|
||||
3. 이니시스의 실제 완료 상태·취소금액·잔액을 확인한다. 쇼핑몰 로그의 `cancel`이나 주문 상태만으로 PG 취소 완료를 판단하지 않는다.
|
||||
4. 쇼핑몰 주문관리에서 실제 취소 확인 항목을 체크한 뒤 해당 상품의 상태를 정리한다. 상태 변경만으로 PG 취소가 실행되거나 환불금액이 입력되지는 않는다.
|
||||
5. 주문관리의 결제취소/환불 금액에 PG에서 확인한 **누적 환불금액**을 반영하고 미수금·잔액을 대조한다. 상점메모에 처리 시각·금액·담당자·PG 확인 결과를 기록한다.
|
||||
6. 부분취소는 선택 상품과 세금·배송비·쿠폰 처리 범위를 함께 확인한다. 주문 상태 변경에 따른 재고 복원·포인트 환급과 실제 지급 내역도 대조하여 중복 처리하지 않는다.
|
||||
7. 구매자에게 완료 결과를 안내한다. 주문·임시 주문·로그는 확인 자료로 보존하며, 인증키·개인정보·거래 식별정보를 공개 이슈나 변경 기록에 게시하지 않는다.
|
||||
|
||||
## 검증과 지원 기록
|
||||
|
||||
`php bin/check-sirk-retirement.php`로 이전 결제·취소 요청의 차단, PG 성공 오인 방지, 잔여 참조와 설정 제거를 검사한다. 신규 설치 SQL 변경 후에는 마이그레이션 스키마 검사와 쇼핑몰 설치 검사를 함께 수행한다.
|
||||
|
||||
배포 담당자는 고객별로 안내 일시, 적용 버전/시각, 진행 중 거래 확인 결과, 실제 취소 경로, 지원 상태와 후속 담당자를 비공개로 관리한다. 테스트 결제·실거래 확인과 고객 안내는 코드 검사와 구분해서 기록한다.
|
||||
@@ -384,11 +384,6 @@ CREATE TABLE IF NOT EXISTS `g5_shop_default` (
|
||||
`de_hp_use` tinyint(4) NOT NULL DEFAULT '0',
|
||||
`de_escrow_use` tinyint(4) NOT NULL DEFAULT '0',
|
||||
`de_tax_flag_use` tinyint(4) NOT NULL DEFAULT '0',
|
||||
`de_kakaopay_mid` varchar(255) NOT NULL DEFAULT '',
|
||||
`de_kakaopay_key` varchar(255) NOT NULL DEFAULT '',
|
||||
`de_kakaopay_enckey` varchar(255) NOT NULL DEFAULT '',
|
||||
`de_kakaopay_hashkey` varchar(255) NOT NULL DEFAULT '',
|
||||
`de_kakaopay_cancelpwd` varchar(255) NOT NULL DEFAULT '',
|
||||
`de_naverpay_mid` varchar(255) NOT NULL DEFAULT '',
|
||||
`de_naverpay_cert_key` varchar(255) NOT NULL DEFAULT '',
|
||||
`de_naverpay_button_key` varchar(255) NOT NULL DEFAULT '',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 무통장 입금만 사용할 때는 아래 코드 실행되지 않음 ( 카카오페이 또는 삼성페이도 사용 안하면 )
|
||||
if(!($default['de_iche_use'] || $default['de_vbank_use'] || $default['de_hp_use'] || $default['de_card_use'] || $default['de_samsung_pay_use'] || $is_kakaopay_use ))
|
||||
// 무통장 입금만 사용할 때는 아래 코드 실행되지 않음 ( 삼성페이도 사용 안하면 )
|
||||
if(!($default['de_iche_use'] || $default['de_vbank_use'] || $default['de_hp_use'] || $default['de_card_use'] || $default['de_samsung_pay_use'] ))
|
||||
return;
|
||||
|
||||
$param_opt_1 = isset($_REQUEST['param_opt_1']) ? clean_xss_tags($_REQUEST['param_opt_1'], 1, 1) : '';
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
require_once(G5_MSHOP_PATH.'/settle_'.$default['de_pg_service'].'.inc.php');
|
||||
require_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
|
||||
|
||||
if( empty($inicis_pro_use) && is_inicis_simple_pay() ){ //이니시스 삼성페이 또는 Lpay 사용시
|
||||
require_once(G5_MSHOP_PATH.'/samsungpay/incSamsungpayCommon.php');
|
||||
@@ -275,12 +274,6 @@ if(function_exists('is_use_easypay') && is_use_easypay('global_nhnkcp')){ //
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
if($is_kakaopay_use) {
|
||||
require_once(G5_SHOP_PATH.'/kakaopay/orderform.1.php');
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="sod_frm" class="sod_frm_mobile">
|
||||
<form name="forderform" method="post" action="<?php echo $order_action_url; ?>" autocomplete="off">
|
||||
<input type="hidden" name="od_price" value="<?php echo $tot_sell_price; ?>">
|
||||
@@ -561,16 +554,10 @@ if($is_kakaopay_use) {
|
||||
$escrow_title = "에스크로 ";
|
||||
}
|
||||
|
||||
if ($is_kakaopay_use || $default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use'] || is_inicis_simple_pay()) {
|
||||
if ($default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use'] || is_inicis_simple_pay()) {
|
||||
echo '<div id="m_sod_frm_paysel"><ul>';
|
||||
}
|
||||
|
||||
// 카카오페이
|
||||
if($is_kakaopay_use) {
|
||||
$multi_settle++;
|
||||
echo '<li><input type="radio" id="od_settle_kakaopay" name="od_settle_case" value="KAKAOPAY" '.$checked.'> <label for="od_settle_kakaopay" class="kakaopay_icon lb_icon">KAKAOPAY</label></li>'.PHP_EOL;
|
||||
$checked = '';
|
||||
}
|
||||
|
||||
// 무통장입금 사용
|
||||
if ($default['de_bank_use']) {
|
||||
@@ -794,9 +781,6 @@ if($is_kakaopay_use) {
|
||||
require_once(G5_MSHOP_PATH.'/kcp/easypay_form.2.php');
|
||||
}
|
||||
|
||||
if($is_kakaopay_use) {
|
||||
require_once(G5_SHOP_PATH.'/kakaopay/orderform.2.php');
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="show_progress" style="display:none;">
|
||||
@@ -805,9 +789,6 @@ if($is_kakaopay_use) {
|
||||
</div>
|
||||
|
||||
<?php
|
||||
if($is_kakaopay_use) {
|
||||
require_once(G5_SHOP_PATH.'/kakaopay/orderform.3.php');
|
||||
}
|
||||
?>
|
||||
</form>
|
||||
|
||||
@@ -1087,7 +1068,7 @@ $(function() {
|
||||
$("#show_pay_btn").css("display", "inline");
|
||||
});
|
||||
|
||||
$("#od_settle_iche,#od_settle_card,#od_settle_vbank,#od_settle_hp,#od_settle_easy_pay,#od_settle_kakaopay,#od_settle_samsungpay,#od_settle_nhnkcp_payco,#od_settle_nhnkcp_naverpay,#od_settle_nhnkcp_naverpay_money,#od_settle_nhnkcp_kakaopay,#od_settle_inicislpay,#od_settle_inicis_kakaopay").bind("click", function() {
|
||||
$("#od_settle_iche,#od_settle_card,#od_settle_vbank,#od_settle_hp,#od_settle_easy_pay,#od_settle_samsungpay,#od_settle_nhnkcp_payco,#od_settle_nhnkcp_naverpay,#od_settle_nhnkcp_naverpay_money,#od_settle_nhnkcp_kakaopay,#od_settle_inicislpay,#od_settle_inicis_kakaopay").bind("click", function() {
|
||||
$("#settle_bank").hide();
|
||||
$("#show_req_btn").css("display", "inline");
|
||||
$("#show_pay_btn").css("display", "none");
|
||||
@@ -1326,16 +1307,6 @@ function pay_approval()
|
||||
}
|
||||
}
|
||||
|
||||
// 카카오페이 지불
|
||||
if(settle_method == "KAKAOPAY") {
|
||||
<?php if($default['de_tax_flag_use']) { ?>
|
||||
pf.SupplyAmt.value = parseInt(pf.comm_tax_mny.value) + parseInt(pf.comm_free_mny.value);
|
||||
pf.GoodsVat.value = parseInt(pf.comm_vat_mny.value);
|
||||
<?php } ?>
|
||||
pf.good_mny.value = f.good_mny.value;
|
||||
getTxnId(pf);
|
||||
return false;
|
||||
}
|
||||
|
||||
var form_order_method = '';
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
// 구 주문서나 직접 POST로도 SIRK 전용 결제를 다시 시작하지 않는다.
|
||||
if (isset($od_settle_case) && $od_settle_case === 'KAKAOPAY') {
|
||||
alert('이 결제 방식은 더 이상 지원하지 않습니다. 다른 결제수단을 선택해 주십시오.');
|
||||
}
|
||||
|
||||
include_once(G5_LIB_PATH.'/mailer.lib.php');
|
||||
|
||||
// CSRF 방지: 무통장입금만 Origin/Referer 검증 (PG 결제는 PG사에서 검증하므로 제외)
|
||||
@@ -40,7 +46,7 @@ if(get_session('ss_direct'))
|
||||
$page_return_url .= '?sw_direct=1';
|
||||
|
||||
// 결제등록 완료 체크
|
||||
if($od_settle_case != '무통장' && $od_settle_case != 'KAKAOPAY') {
|
||||
if($od_settle_case != '무통장') {
|
||||
if($default['de_pg_service'] == 'kcp' && ($post_tran_cd === '' || $post_enc_info === '' || $post_enc_data === ''))
|
||||
alert('결제등록 요청 후 주문해 주십시오.', $page_return_url);
|
||||
|
||||
@@ -557,29 +563,12 @@ else if ( is_inicis_order_pay($od_settle_case) ) //이니시스의 삼성페
|
||||
if($od_misu == 0)
|
||||
$od_status = '입금';
|
||||
}
|
||||
else if ($od_settle_case == "KAKAOPAY")
|
||||
{
|
||||
include G5_SHOP_PATH.'/kakaopay/kakaopay_result.php';
|
||||
|
||||
$od_tno = $tno;
|
||||
$od_app_no = $app_no;
|
||||
$od_receipt_price = $amount;
|
||||
$od_receipt_point = $i_temp_point;
|
||||
$od_receipt_time = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/", "\\1-\\2-\\3 \\4:\\5:\\6", $app_time);
|
||||
$od_bank_account = $card_name;
|
||||
$pg_price = $amount;
|
||||
$od_misu = $i_price - $od_receipt_price;
|
||||
if($od_misu == 0)
|
||||
$od_status = '입금';
|
||||
}
|
||||
else
|
||||
{
|
||||
die("od_settle_case Error!!!");
|
||||
}
|
||||
|
||||
$od_pg = $default['de_pg_service'];
|
||||
if($od_settle_case == 'KAKAOPAY')
|
||||
$od_pg = 'KAKAOPAY';
|
||||
|
||||
// 주문금액과 결제금액이 일치하는지 체크
|
||||
if($tno) {
|
||||
|
||||
@@ -626,7 +626,9 @@ if($od['od_pg'] == 'lg') {
|
||||
<?php
|
||||
// 취소한 내역이 없다면
|
||||
if ($cancel_price == 0) {
|
||||
if ($custom_cancel) {
|
||||
if ($od['od_pg'] === 'KAKAOPAY') {
|
||||
echo '<p>이 주문의 취소·환불은 쇼핑몰 고객센터에 문의해 주십시오.</p>';
|
||||
} elseif ($custom_cancel) {
|
||||
?>
|
||||
<button type="button" onclick="document.getElementById('sod_fin_cancelfrm').style.display='block';">주문 취소하기</button>
|
||||
|
||||
|
||||
@@ -15,6 +15,10 @@ sql_query($sql);
|
||||
*/
|
||||
|
||||
$od_settle_case = isset($_POST['od_settle_case']) ? clean_xss_tags($_POST['od_settle_case'], 1, 1) : '';
|
||||
if ($od_settle_case === 'KAKAOPAY') {
|
||||
die('이 결제 방식은 더 이상 지원하지 않습니다. 다른 결제수단을 선택해 주십시오.');
|
||||
}
|
||||
|
||||
// 저장되는 원본에도 정제한 값을 반영한다.
|
||||
$_POST['od_settle_case'] = $od_settle_case;
|
||||
|
||||
|
||||
@@ -22,11 +22,8 @@ switch($od_pg) {
|
||||
include G5_SHOP_PATH.'/nicepay/cancel_process.php';
|
||||
break;
|
||||
case 'KAKAOPAY':
|
||||
$_REQUEST['TID'] = $tno;
|
||||
$_REQUEST['Amt'] = $amount;
|
||||
$_REQUEST['CancelMsg'] = $cancel_msg;
|
||||
$_REQUEST['PartialCancelCode'] = 0;
|
||||
include G5_SHOP_PATH.'/kakaopay/kakaopay_cancel.php';
|
||||
$pg_res_cd = 'SIRK_RETIRED';
|
||||
$pg_res_msg = 'SIRK 전용 카카오페이는 이니시스 상점관리자에서 취소해 주십시오.';
|
||||
break;
|
||||
default:
|
||||
include G5_SHOP_PATH.'/kcp/pp_ax_hub_cancel.php';
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php
|
||||
include_once('../../common.php');
|
||||
@@ -1,58 +0,0 @@
|
||||
<?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';
|
||||
@@ -1,84 +1,3 @@
|
||||
<?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] = addslashes(clean_xss_tags(strip_tags(stripslashes($v))));
|
||||
}
|
||||
} else {
|
||||
$_POST[$key] = $params[$key] = addslashes(clean_xss_tags(strip_tags(stripslashes($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');
|
||||
}
|
||||
// 이전 결제창의 요청을 성공 처리하지 않고 종료 안내를 반환한다.
|
||||
require dirname(__FILE__) . '/retired.php';
|
||||
|
||||
@@ -1,85 +1,6 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
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 === 'super' ){
|
||||
$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 로 데이터를 받지 못했습니다.';
|
||||
}
|
||||
}
|
||||
// 이전 호출부가 남아 있어도 PG 취소 성공으로 처리하지 않는다.
|
||||
$pg_res_cd = 'SIRK_RETIRED';
|
||||
$pg_res_msg = 'SIRK 전용 카카오페이의 자동 취소 지원이 종료되었습니다. 이니시스 상점관리자에서 실제 취소 후 주문 상태와 환불금액을 확인해 주십시오.';
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?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;
|
||||
@@ -1,38 +1,6 @@
|
||||
<?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×tamp=2012-02-01 09:19:04.004
|
||||
* key기준 알파벳 정렬
|
||||
* timestamp는 반드시 signature생성에 사용한 timestamp 값을 timestamp input에 그대로 사용하여야함
|
||||
*/
|
||||
$params = "oid=" . $orderNumber . "&price=" . $price . "×tamp=" . $timestamp;
|
||||
$sign = hash("sha256", $params);
|
||||
|
||||
die(json_encode(array('error'=>'', 'mKey'=>$mKey, 'timestamp'=>$timestamp, 'sign'=>$sign)));
|
||||
header('HTTP/1.1 410 Gone');
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Cache-Control: no-store');
|
||||
echo json_encode(array('error' => '이 결제 방식은 더 이상 지원하지 않습니다. 다른 결제수단을 선택해 주십시오.'));
|
||||
exit;
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,203 +1,3 @@
|
||||
<?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 = addslashes(clean_xss_tags($data['pp_name']));
|
||||
$pp_email = addslashes(clean_xss_tags($data['pp_email']));
|
||||
$pp_hp = addslashes(clean_xss_tags($data['pp_hp']));
|
||||
$pp_settle_case = addslashes(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;
|
||||
// 이전 결제창의 요청을 성공 처리하지 않고 종료 안내를 반환한다.
|
||||
require dirname(__FILE__) . '/retired.php';
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
<?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', '');
|
||||
@@ -1,4 +1,3 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
// 카카오페이 (KG 이니시스) 의 경우 NOTI 과정이 없으므로 이 페이지를 사용하지 않습니다.
|
||||
// 이전 결제창의 요청을 성공 처리하지 않고 종료 안내를 반환한다.
|
||||
require dirname(__FILE__) . '/retired.php';
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
// 카카오페이 (KG 이니시스) 의 경우 NOTI 과정이 없으므로 이 페이지를 사용하지 않습니다.
|
||||
// 이전 결제창의 요청을 성공 처리하지 않고 종료 안내를 반환한다.
|
||||
require dirname(__FILE__) . '/retired.php';
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?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
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가;
|
||||
@@ -1,61 +1,5 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
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 오류로 부분환불에 실패했습니다.');
|
||||
}
|
||||
}
|
||||
alert('SIRK 전용 카카오페이의 자동 취소 지원이 종료되었습니다. 이니시스 상점관리자에서 실제 취소 후 주문 상태와 환불금액을 확인해 주십시오.');
|
||||
exit;
|
||||
|
||||
@@ -1,214 +0,0 @@
|
||||
<?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("<", "<", $$netcancelResultString);
|
||||
$netcancelResultString = str_replace(">", ">", $$netcancelResultString);
|
||||
|
||||
echo "<pre>", $netcancelResultString . "</pre>";
|
||||
// 취소 결과 확인
|
||||
}
|
||||
} else {
|
||||
|
||||
//#############
|
||||
// 인증 실패시
|
||||
//#############
|
||||
echo "<br/>";
|
||||
echo "####인증실패####";
|
||||
|
||||
ob_start();
|
||||
var_dump($_REQUEST);
|
||||
$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>결제 에러가 일어났습니다. 에러 이유는 위와 같습니다.");
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
// DB를 초기화하거나 PG 승인·취소를 요청하지 않는 이전 URL 응답.
|
||||
header('HTTP/1.1 410 Gone');
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
header('Cache-Control: no-store');
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="ko"><head><meta charset="utf-8"><title>결제 지원 종료 안내</title></head>
|
||||
<body><h1>결제 지원 종료 안내</h1>
|
||||
<p>이 결제 방식은 더 이상 지원하지 않습니다.</p>
|
||||
<p>결제를 진행 중이었다면 다시 결제하지 마시고, 쇼핑몰 고객센터에 승인 여부 확인과 취소·환불을 문의해 주십시오.</p>
|
||||
</body></html>
|
||||
<?php exit;
|
||||
+3
-28
@@ -2,7 +2,6 @@
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
require_once(G5_SHOP_PATH.'/settle_'.$default['de_pg_service'].'.inc.php');
|
||||
require_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
|
||||
|
||||
if( empty($inicis_pro_use) && ($default['de_inicis_lpay_use'] || $default['de_inicis_kakaopay_use']) ){ //이니시스 Lpay 또는 이니시스 카카오페이 사용시
|
||||
require_once(G5_SHOP_PATH.'/inicis/lpay_common.php');
|
||||
@@ -23,9 +22,6 @@ if(function_exists('is_use_easypay') && is_use_easypay('global_nhnkcp')){ //
|
||||
require_once(G5_SHOP_PATH.'/kcp/global_nhn_kcp_form.1.php');
|
||||
}
|
||||
|
||||
if($is_kakaopay_use) {
|
||||
require_once(G5_SHOP_PATH.'/kakaopay/orderform.1.php');
|
||||
}
|
||||
?>
|
||||
|
||||
<form name="forderform" id="forderform" method="post" action="<?php echo $order_action_url; ?>" autocomplete="off">
|
||||
@@ -263,9 +259,6 @@ if($is_kakaopay_use) {
|
||||
// 결제대행사별 코드 include (결제대행사 정보 필드)
|
||||
require_once(G5_SHOP_PATH.'/'.$default['de_pg_service'].'/orderform.2.php');
|
||||
|
||||
if($is_kakaopay_use) {
|
||||
require_once(G5_SHOP_PATH.'/kakaopay/orderform.2.php');
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 주문하시는 분 입력 시작 { -->
|
||||
@@ -579,17 +572,11 @@ if($is_kakaopay_use) {
|
||||
$escrow_title = "에스크로<br>";
|
||||
}
|
||||
|
||||
if ($is_kakaopay_use || $default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use'] || (empty($inicis_pro_use) && ($default['de_inicis_lpay_use'] || $default['de_inicis_kakaopay_use'])) || (!empty($inicis_pro_use) && is_inicis_simple_pay())) {
|
||||
if ($default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use'] || (empty($inicis_pro_use) && ($default['de_inicis_lpay_use'] || $default['de_inicis_kakaopay_use'])) || (!empty($inicis_pro_use) && is_inicis_simple_pay())) {
|
||||
echo '<fieldset id="sod_frm_paysel">';
|
||||
echo '<legend>결제방법 선택</legend>';
|
||||
}
|
||||
|
||||
// 카카오페이
|
||||
if($is_kakaopay_use) {
|
||||
$multi_settle++;
|
||||
echo '<input type="radio" id="od_settle_kakaopay" name="od_settle_case" value="KAKAOPAY" '.$checked.'> <label for="od_settle_kakaopay" class="kakaopay_icon lb_icon">KAKAOPAY</label>'.PHP_EOL;
|
||||
$checked = '';
|
||||
}
|
||||
|
||||
// 무통장입금 사용
|
||||
if ($default['de_bank_use']) {
|
||||
@@ -795,7 +782,7 @@ if($is_kakaopay_use) {
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
if ($is_kakaopay_use || $default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use'] || (empty($inicis_pro_use) && ($default['de_inicis_lpay_use'] || $default['de_inicis_kakaopay_use'])) || (!empty($inicis_pro_use) && is_inicis_simple_pay())) {
|
||||
if ($default['de_bank_use'] || $default['de_vbank_use'] || $default['de_iche_use'] || $default['de_card_use'] || $default['de_hp_use'] || $default['de_easy_pay_use'] || (empty($inicis_pro_use) && ($default['de_inicis_lpay_use'] || $default['de_inicis_kakaopay_use'])) || (!empty($inicis_pro_use) && is_inicis_simple_pay())) {
|
||||
echo '</fieldset>';
|
||||
}
|
||||
|
||||
@@ -810,9 +797,6 @@ if($is_kakaopay_use) {
|
||||
// 결제대행사별 코드 include (주문버튼)
|
||||
require_once(G5_SHOP_PATH.'/'.$default['de_pg_service'].'/orderform.3.php');
|
||||
|
||||
if($is_kakaopay_use) {
|
||||
require_once(G5_SHOP_PATH.'/kakaopay/orderform.3.php');
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
@@ -1087,7 +1071,7 @@ $(function() {
|
||||
$("#settle_bank").show();
|
||||
});
|
||||
|
||||
$("#od_settle_iche,#od_settle_card,#od_settle_vbank,#od_settle_hp,#od_settle_easy_pay,#od_settle_kakaopay,#od_settle_nhnkcp_payco,#od_settle_nhnkcp_naverpay,#od_settle_nhnkcp_naverpay_money,#od_settle_nhnkcp_kakaopay,#od_settle_inicislpay,#od_settle_inicis_kakaopay").bind("click", function() {
|
||||
$("#od_settle_iche,#od_settle_card,#od_settle_vbank,#od_settle_hp,#od_settle_easy_pay,#od_settle_nhnkcp_payco,#od_settle_nhnkcp_naverpay,#od_settle_nhnkcp_naverpay_money,#od_settle_nhnkcp_kakaopay,#od_settle_inicislpay,#od_settle_inicis_kakaopay").bind("click", function() {
|
||||
$("#settle_bank").hide();
|
||||
});
|
||||
|
||||
@@ -1454,15 +1438,6 @@ function forderform_check(f)
|
||||
}
|
||||
<?php } ?>
|
||||
|
||||
// 카카오페이 지불
|
||||
if(settle_method == "KAKAOPAY") {
|
||||
<?php if($default['de_tax_flag_use']) { ?>
|
||||
f.SupplyAmt.value = parseInt(f.comm_tax_mny.value) + parseInt(f.comm_free_mny.value);
|
||||
f.GoodsVat.value = parseInt(f.comm_vat_mny.value);
|
||||
<?php } ?>
|
||||
getTxnId(f);
|
||||
return false;
|
||||
}
|
||||
|
||||
var form_order_method = '';
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
// 구 주문서나 직접 POST로도 SIRK 전용 결제를 다시 시작하지 않는다.
|
||||
if (isset($od_settle_case) && $od_settle_case === 'KAKAOPAY') {
|
||||
alert('이 결제 방식은 더 이상 지원하지 않습니다. 다른 결제수단을 선택해 주십시오.');
|
||||
}
|
||||
|
||||
include_once(G5_LIB_PATH.'/mailer.lib.php');
|
||||
|
||||
// CSRF 방지: 무통장입금만 Origin/Referer 검증 (PG 결제는 PG사에서 검증하므로 제외)
|
||||
@@ -19,13 +25,13 @@ if(function_exists('is_use_easypay') && is_use_easypay('global_nhnkcp') && isset
|
||||
|
||||
if(function_exists('add_order_post_log')) add_order_post_log('init', 'init');
|
||||
|
||||
if(($od_settle_case != '무통장' && $od_settle_case != 'KAKAOPAY') && $default['de_pg_service'] == 'lg' && !$_POST['LGD_PAYKEY']){
|
||||
if(($od_settle_case != '무통장') && $default['de_pg_service'] == 'lg' && !$_POST['LGD_PAYKEY']){
|
||||
if(function_exists('add_order_post_log')) add_order_post_log('결제등록 요청 후 주문해 주십시오.');
|
||||
alert('결제등록 요청 후 주문해 주십시오.');
|
||||
}
|
||||
|
||||
// 토스 v2 대응
|
||||
if(($od_settle_case != '무통장' && $od_settle_case != 'KAKAOPAY') && $default['de_pg_service'] == 'toss' && !$_POST['paymentKey']){
|
||||
if(($od_settle_case != '무통장') && $default['de_pg_service'] == 'toss' && !$_POST['paymentKey']){
|
||||
if(function_exists('add_order_post_log')) add_order_post_log('결제등록 요청 후 주문해 주십시오.');
|
||||
alert('결제등록 요청 후 주문해 주십시오.');
|
||||
}
|
||||
@@ -513,29 +519,12 @@ else if ($od_settle_case == "간편결제" || (in_array($od_settle_case, array("
|
||||
if($od_misu == 0)
|
||||
$od_status = '입금';
|
||||
}
|
||||
else if ($od_settle_case == "KAKAOPAY")
|
||||
{
|
||||
include G5_SHOP_PATH.'/kakaopay/kakaopay_result.php';
|
||||
|
||||
$od_tno = $tno;
|
||||
$od_app_no = $app_no;
|
||||
$od_receipt_price = $amount;
|
||||
$od_receipt_point = $i_temp_point;
|
||||
$od_receipt_time = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/", "\\1-\\2-\\3 \\4:\\5:\\6", $app_time);
|
||||
$od_bank_account = $card_name;
|
||||
$pg_price = $amount;
|
||||
$od_misu = $i_price - $od_receipt_price;
|
||||
if($od_misu == 0)
|
||||
$od_status = '입금';
|
||||
}
|
||||
else
|
||||
{
|
||||
die("od_settle_case Error!!!");
|
||||
}
|
||||
|
||||
$od_pg = $default['de_pg_service'];
|
||||
if($od_settle_case == 'KAKAOPAY')
|
||||
$od_pg = 'KAKAOPAY';
|
||||
|
||||
$tno = isset($tno) ? $tno : '';
|
||||
$od_receipt_time = isset($od_receipt_time) ? $od_receipt_time : '';
|
||||
|
||||
@@ -35,6 +35,10 @@ if($od['od_cancel_price'] > 0 || $od['od_status'] != '주문' || $ct['od_count1'
|
||||
alert("취소할 수 있는 주문이 아닙니다.", G5_SHOP_URL."/orderinquiryview.php?od_id=$od_id&uid=$uid");
|
||||
}
|
||||
|
||||
if ($od['od_pg'] === 'KAKAOPAY') {
|
||||
alert('이 주문의 취소·환불은 쇼핑몰 고객센터에 문의해 주십시오.');
|
||||
}
|
||||
|
||||
// INIpay PRO 가상계좌 입금통보와 주문자 취소가 동시에 처리되지 않도록
|
||||
// PG 취소부터 로컬 주문 취소 완료까지 동일 주문 잠금을 유지한다.
|
||||
$inicis_pro_order_lock = '';
|
||||
|
||||
@@ -680,7 +680,9 @@ if($od['od_pg'] == 'lg') {
|
||||
<?php
|
||||
// 취소한 내역이 없다면
|
||||
if ($cancel_price == 0) {
|
||||
if ($custom_cancel) {
|
||||
if ($od['od_pg'] === 'KAKAOPAY') {
|
||||
echo '<p>이 주문의 취소·환불은 쇼핑몰 고객센터에 문의해 주십시오.</p>';
|
||||
} elseif ($custom_cancel) {
|
||||
?>
|
||||
<button type="button" onclick="document.getElementById('sod_fin_cancelfrm').style.display='block';">주문 취소하기</button>
|
||||
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// 이전 테마의 초기화 include 호환용. 5.6.37부터 SIRK 신규 결제를 지원하지 않는다.
|
||||
$is_kakaopay_use = false;
|
||||
if($default['de_kakaopay_enckey']) {
|
||||
$is_kakaopay_use = true;
|
||||
require_once(G5_SHOP_PATH.'/kakaopay/incKakaopayCommon.php');
|
||||
}
|
||||
@@ -594,7 +594,9 @@ if($od['od_pg'] == 'lg') {
|
||||
<?php
|
||||
// 취소한 내역이 없다면
|
||||
if ($cancel_price == 0) {
|
||||
if ($custom_cancel) {
|
||||
if ($od['od_pg'] === 'KAKAOPAY') {
|
||||
echo '<p>이 주문의 취소·환불은 쇼핑몰 고객센터에 문의해 주십시오.</p>';
|
||||
} elseif ($custom_cancel) {
|
||||
?>
|
||||
<button type="button" class="sod_fin_c_btn">주문 취소하기</button>
|
||||
<div id="sod_cancel_pop">
|
||||
|
||||
Reference in New Issue
Block a user