feat: SIRK 전용 카카오페이 연동 종료와 기존 주문 지원 절차 추가

전용 신규 결제와 자동 취소를 차단하고 기존 주문 조회 및 실제 PG 취소 확인 후 수동 정리를 지원한다. 기존 DB와 일반 PG 경로를 보존하고 5.6.37 전환 및 사후지원 절차를 문서화한다.

검증: 변경 PHP 문법, SIRK 요청 차단, 설치 스키마 및 쇼핑몰 후설치 검사 통과. 실제 PG 결제·취소 검증은 별도 진행한다.
This commit is contained in:
whitedot
2026-09-09 07:58:05 +00:00
parent e74486e171
commit e784186b0f
41 changed files with 161 additions and 1352 deletions
+1
View File
@@ -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)
-2
View File
@@ -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}
+7 -62
View File
@@ -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);
}
}
}
}
}
-15
View File
@@ -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}',
+3 -2
View File
@@ -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']));
+10 -6
View File
@@ -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&amp;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() {
+12 -6
View File
@@ -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');
+4
View File
@@ -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이니시스는 신용카드만 부분취소가 가능합니다.');
+4
View File
@@ -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']);
-1
View File
@@ -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 간 세션 공유 문제로 인해 추가
);
+44
View File
@@ -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 변경 후에는 마이그레이션 스키마 검사와 쇼핑몰 설치 검사를 함께 수행한다.
배포 담당자는 고객별로 안내 일시, 적용 버전/시각, 진행 중 거래 확인 결과, 실제 취소 경로, 지원 상태와 후속 담당자를 비공개로 관리한다. 테스트 결제·실거래 확인과 고객 안내는 코드 검사와 구분해서 기록한다.
-5
View File
@@ -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 '',
+2 -2
View File
@@ -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 -31
View File
@@ -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 = '';
+7 -18
View File
@@ -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) {
+3 -1
View File
@@ -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>
+4
View File
@@ -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;
+2 -5
View File
@@ -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';
-2
View File
@@ -1,2 +0,0 @@
<?php
include_once('../../common.php');
-58
View File
@@ -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';
+2 -83
View File
@@ -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';
+4 -83
View File
@@ -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 전용 카카오페이의 자동 취소 지원이 종료되었습니다. 이니시스 상점관리자에서 실제 취소 후 주문 상태와 환불금액을 확인해 주십시오.';
-28
View File
@@ -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;
+5 -37
View File
@@ -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&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)));
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;
-130
View File
@@ -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>
+2 -202
View File
@@ -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';
-40
View File
@@ -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', '');
+2 -3
View File
@@ -1,4 +1,3 @@
<?php
include_once('./_common.php');
// 카카오페이 (KG 이니시스) 의 경우 NOTI 과정이 없으므로 이 페이지를 사용하지 않습니다.
// 이전 결제창의 요청을 성공 처리하지 않고 종료 안내를 반환한다.
require dirname(__FILE__) . '/retired.php';
+2 -3
View File
@@ -1,4 +1,3 @@
<?php
include_once('./_common.php');
// 카카오페이 (KG 이니시스) 의 경우 NOTI 과정이 없으므로 이 페이지를 사용하지 않습니다.
// 이전 결제창의 요청을 성공 처리하지 않고 종료 안내를 반환한다.
require dirname(__FILE__) . '/retired.php';
-179
View File
@@ -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>
-19
View File
@@ -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
}
-2
View File
@@ -1,2 +0,0 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가;
+3 -59
View File
@@ -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;
-214
View File
@@ -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("<", "&lt;", $$netcancelResultString);
$netcancelResultString = str_replace(">", "&gt;", $$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>결제 에러가 일어났습니다. 에러 이유는 위와 같습니다.");
}
+13
View File
@@ -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
View File
@@ -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 = '';
+8 -19
View File
@@ -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 : '';
+4
View File
@@ -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&amp;uid=$uid");
}
if ($od['od_pg'] === 'KAKAOPAY') {
alert('이 주문의 취소·환불은 쇼핑몰 고객센터에 문의해 주십시오.');
}
// INIpay PRO 가상계좌 입금통보와 주문자 취소가 동시에 처리되지 않도록
// PG 취소부터 로컬 주문 취소 완료까지 동일 주문 잠금을 유지한다.
$inicis_pro_order_lock = '';
+3 -1
View File
@@ -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>
+2 -5
View File
@@ -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');
}
+3 -1
View File
@@ -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">