1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
<?php include_once('./_common.php');
// 세션에 저장된 토큰과 폼으로 넘어온 토큰을 비교하여 틀리면 에러 if ($token && get_session("ss_token") == $token) { // 맞으면 세션을 지워 다시 입력폼을 통해서 들어오도록 한다. set_session("ss_token", ""); } else { alert_close("토큰 에러"); }
$od = sql_fetch(" select * from {$g5['g5_shop_order_table']} where od_id = '$od_id' and mb_id = '{$member['mb_id']}' ");
if (!$od['od_id']) { alert("존재하는 주문이 아닙니다."); }
// 주문상품의 상태가 주문인지 체크 $sql = " select SUM(IF(ct_status = '주문' or ct_status = '입금', 1, 0)) as od_count2, COUNT(*) as od_count1 from {$g5['g5_shop_cart_table']} where od_id = '$od_id' "; $ct = sql_fetch($sql);
$uid = md5($od['od_id'].$od['od_time'].$od['od_ip']);
if($od['od_cancel_price'] > 0 || $ct['od_count1'] != $ct['od_count2']) { alert("취소할 수 있는 주문이 아닙니다.", G5_SHOP_URL."/orderinquiryview.php?od_id=$od_id&uid=$uid"); }
// PG 결제 취소 if($od['od_tno']) { switch($od['od_pg']) { case 'lg': require_once('./settle_lg.inc.php'); $LGD_TID = $od['od_tno']; //LG유플러스으로 부터 내려받은 거래번호(LGD_TID)
$xpay = new XPay($configPath, $CST_PLATFORM);
// Mert Key 설정 $xpay->set_config_value('t'.$LGD_MID, $config['cf_lg_mert_key']); $xpay->set_config_value($LGD_MID, $config['cf_lg_mert_key']); $xpay->Init_TX($LGD_MID);
$xpay->Set("LGD_TXNAME", "Cancel"); $xpay->Set("LGD_TID", $LGD_TID);
if ($xpay->TX()) { //1)결제취소결과 화면처리(성공,실패 결과 처리를 하시기 바랍니다.) /* echo "결제 취소요청이 완료되었습니다. <br>"; echo "TX Response_code = " . $xpay->Response_Code() . "<br>"; echo "TX Response_msg = " . $xpay->Response_Msg() . "<p>"; */ } else { //2)API 요청 실패 화면처리 $msg = "결제 취소요청이 실패하였습니다.\\n"; $msg .= "TX Response_code = " . $xpay->Response_Code() . "\\n"; $msg .= "TX Response_msg = " . $xpay->Response_Msg();
alert($msg); } break; case 'inicis': include_once(G5_SHOP_PATH.'/settle_inicis.inc.php'); $cancel_msg = iconv_euckr('주문자 본인 취소-'.$cancel_memo);
/********************* * 3. 취소 정보 설정 * *********************/ $inipay->SetField("type", "cancel"); // 고정 (절대 수정 불가) $inipay->SetField("mid", $default['de_inicis_mid']); // 상점아이디 /************************************************************************************************** * admin 은 키패스워드 변수명입니다. 수정하시면 안됩니다. 1111의 부분만 수정해서 사용하시기 바랍니다. * 키패스워드는 상점관리자 페이지(https://iniweb.inicis.com)의 비밀번호가 아닙니다. 주의해 주시기 바랍니다. * 키패스워드는 숫자 4자리로만 구성됩니다. 이 값은 키파일 발급시 결정됩니다. * 키패스워드 값을 확인하시려면 상점측에 발급된 키파일 안의 readme.txt 파일을 참조해 주십시오. **************************************************************************************************/ $inipay->SetField("admin", $default['de_inicis_admin_key']); //비대칭 사용키 키패스워드 $inipay->SetField("tid", $od['od_tno']); // 취소할 거래의 거래아이디 $inipay->SetField("cancelmsg", $cancel_msg); // 취소사유
/**************** * 4. 취소 요청 * ****************/ $inipay->startAction();
/**************************************************************** * 5. 취소 결과 * * * * 결과코드 : $inipay->getResult('ResultCode') ("00"이면 취소 성공) * * 결과내용 : $inipay->getResult('ResultMsg') (취소결과에 대한 설명) * * 취소날짜 : $inipay->getResult('CancelDate') (YYYYMMDD) * * 취소시각 : $inipay->getResult('CancelTime') (HHMMSS) * * 현금영수증 취소 승인번호 : $inipay->getResult('CSHR_CancelNum') * * (현금영수증 발급 취소시에만 리턴됨) * ****************************************************************/
$res_cd = $inipay->getResult('ResultCode'); $res_msg = $inipay->getResult('ResultMsg');
if($res_cd != '00') { alert(iconv_utf8($res_msg).' 코드 : '.$res_cd); } break; case 'nicepay': $cancel_msg = $cancel_memo; if($default['de_card_test']=='1'){ // 테스트 결제 $mid = "nictest00m"; } else { $mid = $default['de_nicepay_mid']; } $_REQUEST['MID'] = $mid; $_REQUEST['TID'] = $od['od_tno']; $_REQUEST['CancelAmt'] = $od['od_receipt_price']; $_REQUEST['CancelMsg'] = $cancel_msg; $_REQUEST['CancelPwd'] = "123456"; $_REQUEST['Moid'] = $od['od_id']; $_REQUEST['PartialCancelCode'] = 0;
require_once(G5_SHOP_PATH.'/settle_nicepay.inc.php');
/** 2-4. 서비스모드 설정(결제 서비스 : PY0 , 취소 서비스 : CL0) */ $nicepayWEB->setParam("SERVICE_MODE", "CL0");
/** 3. 결제취소 요청 */ $responseDTO = $nicepayWEB->doService($_REQUEST);
$resultCode = $responseDTO->getParameter("ResultCode"); // 결과코드 (정상 :2001(취소성공), 2211(환불성공), 그 외 에러) $resultMsg = $responseDTO->getParameter("ResultMsg"); // 결과메시지 $cancelAmt = $responseDTO->getParameter("CancelAmt"); // 취소금액 $cancelDate = $responseDTO->getParameter("CancelDate"); // 취소일 $cancelTime = $responseDTO->getParameter("CancelTime"); // 취소시간 $cancelNum = $responseDTO->getParameter("CancelNum"); // 취소번호 $payMethod = $responseDTO->getParameter("PayMethod"); // 취소 결제수단 $mid = $responseDTO->getParameter("MID"); // 상점 ID $tid = $responseDTO->getParameter("TID"); // TID break; default: require_once('./settle_kcp.inc.php');
$_POST['tno'] = $od['od_tno']; $_POST['req_tx'] = 'mod'; $_POST['mod_type'] = 'STSC'; if($od['od_escrow']) { $_POST['req_tx'] = 'mod_escrow'; $_POST['mod_type'] = 'STE2'; if($od['od_settle_case'] == '가상계좌') $_POST['mod_type'] = 'STE5'; } $_POST['mod_desc'] = iconv("utf-8", "euc-kr", '주문자 본인 취소-'.$cancel_memo); $_POST['site_cd'] = $default['de_kcp_mid'];
// 취소내역 한글깨짐방지 setlocale(LC_CTYPE, 'ko_KR.euc-kr');
include G5_SHOP_PATH.'/kcp/pp_ax_hub.php';
// locale 설정 초기화 setlocale(LC_CTYPE, ''); } }
// 장바구니 자료 취소 sql_query(" update {$g5['g5_shop_cart_table']} set ct_status = '취소' where od_id = '$od_id' ");
// 주문 취소 $cancel_memo = addslashes($cancel_memo); $cancel_price = $od['od_cart_price'];
$sql = " update {$g5['g5_shop_order_table']} set od_send_cost = '0', od_send_cost2 = '0', od_receipt_price = '0', od_receipt_point = '0', od_misu = '0', od_cancel_price = '$cancel_price', od_cart_coupon = '0', od_coupon = '0', od_send_coupon = '0', od_status = '취소', od_shop_memo = concat(od_shop_memo,\"\\n주문자 본인 직접 취소 - ".G5_TIME_YMDHIS." (취소이유 : {$cancel_memo})\") where od_id = '$od_id' "; sql_query($sql);
// 주문취소 회원의 포인트를 되돌려 줌 if ($od['od_receipt_point'] > 0) insert_point($member['mb_id'], $od['od_receipt_point'], "주문번호 $od_id 본인 취소");
// 상품재고부분을 처리한다. set_item_stock_cal("",$od_id); //장바구니 상태에 맞춰서 재고 차감 -> 현재 정책은 취소될때 재고 복원
goto_url(G5_SHOP_URL."/orderinquiryview.php?od_id=$od_id&uid=$uid"); ?>
|