Files
Gnuboard5/shop/nicepay/cancel_process.php
T
thisgun 5a36b2d85d 나이스페이 통지와 취소 응답 처리 보강
(cherry picked from commit e65d17d227028fc5eabe4d6a831485bf27685c01)
2026-08-24 07:44:22 +00:00

68 lines
2.5 KiB
PHP

<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
/*
****************************************************************************************
* <Cancel Request Parameter>
* The sample page only shows basic (required) parameters.
****************************************************************************************
*/
$merchantKey = $default['de_nicepay_key'];
$mid = $default['de_nicepay_mid'];
$moid = isset($od_id) ? $od_id : get_session('ss_order_id');
$cancelMsg = $cancel_msg;
$tid = $tno;
$partialCancelCode = isset($partialCancelCode) ? (int) $partialCancelCode : 0;
/*
****************************************************************************************
* <Hash encryption> (do not modify)
* SHA-256 hash encryption is a way to prevent forgery.
****************************************************************************************
*/
$ediDate = preg_replace('/[^0-9]/', '', G5_TIME_YMDHIS);
$signData = bin2hex(hash('sha256', $mid . $cancelAmt . $ediDate . $merchantKey, true));
try{
$data = Array(
'TID' => $tid,
'MID' => $mid,
'Moid' => $moid,
'CancelAmt' => $cancelAmt,
'CancelMsg' => iconv("UTF-8", "EUC-KR", $cancelMsg),
'PartialCancelCode' => $partialCancelCode,
'EdiDate' => $ediDate,
'SignData' => $signData,
'CharSet' => 'utf-8'
);
/*
****************************************************************************************
* <Cancel Request>
****************************************************************************************
*/
$response = nicepay_reqPost($data, "https://pg-api.nicepay.co.kr/webapi/cancel_process.jsp"); //Cancel API call
$result = json_decode($response, true);
if (isset($result['ResultCode'])) {
$responseTid = isset($result['TID']) ? $result['TID'] : $tid;
$responseCancelAmt = isset($result['CancelAmt']) ? $result['CancelAmt'] : $cancelAmt;
$responseSignature = isset($result['Signature']) ? $result['Signature'] : '';
$responseSignData = bin2hex(hash('sha256', $responseTid . $mid . $responseCancelAmt . $merchantKey, true));
$isCancelSuccess = ($result['ResultCode'] === '2001' || $result['ResultCode'] === '2211');
if (($isCancelSuccess || $responseSignature) && $responseSignature != $responseSignData) {
$result['ResultCode'] = '9998';
$result['ResultMsg'] = '취소 응답 유효성 검증 실패';
}
}
}catch(Exception $e){
$e->getMessage();
$result = array(
'ResultCode' => '9999',
'ResultMsg' => '통신실패'
);
}