카카오페이 (KG 이니시스) 결제모듈 수정

This commit is contained in:
thisgun
2020-07-01 11:29:15 +09:00
parent b893b9f236
commit f2516c586e
25 changed files with 1112 additions and 1345 deletions

View File

@ -1,55 +1,108 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if($is_kakaopay_use) {
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);
?>
<script src="<?php echo ($CnsPayDealRequestUrl) ?>/dlp/scripts/lib/easyXDM.min.js" type="text/javascript"></script>
<script src="<?php echo ($CnsPayDealRequestUrl) ?>/dlp/scripts/lib/json3.min.js" type="text/javascript"></script>
<form id="inicis_kakaopay_request" name="inicis_kakaopay_request" method="POST">
<link href="https://pg.cnspay.co.kr:443/dlp/css/kakaopayDlp.css" rel="stylesheet" type="text/css" />
<?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
}
?>
<!-- DLP창에 대한 KaKaoPay Library -->
<script type="text/javascript" src="<?php echo ($CNSPAY_WEB_SERVER_URL) ?>/js/dlp/client/kakaopayDlpConf.js" charset="utf-8"></script>
<script type="text/javascript" src="<?php echo ($CNSPAY_WEB_SERVER_URL) ?>/js/dlp/client/kakaopayDlp.min.js" charset="utf-8"></script>
<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 $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">
/**
cnspay 를 통해 결제를 시작합니다.
*/
function cnspay(frm) {
if(document.getElementById("od_settle_kakaopay").checked){
// TO-DO : 가맹점에서 해줘야할 부분(TXN_ID)과 KaKaoPay DLP 호출 API
// 결과코드가 00(정상처리되었습니다.)
if(frm.resultCode.value == '00') {
// TO-DO : 가맹점에서 해줘야할 부분(TXN_ID)과 KaKaoPay DLP 호출 API
kakaopayDlp.setTxnId(frm.txnId.value);
kakaopayDlp.setChannelType('WPM', 'TMS');
kakaopayDlp.addRequestParams({ MOBILE_NUM : frm.od_hp.value});
kakaopayDlp.callDlp('kakaopay_layer', frm, submitFunc);
} else {
alert('[RESULT_CODE] : ' + frm.resultCode.value + '\n[RESULT_MSG] : ' + frm.resultMsg.value);
}
}
}
function makeHashData(frm) {
//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_url+"/shop/kakaopay/makehashdata.php",
url: g5_shop_url+ajax_str_url,
type: "POST",
data: {
Amt : frm.good_mny.value,
ediDate : frm.EdiDate.value
price : frm.good_mny.value
},
dataType: "json",
async: false,
cache: false,
success: function(data) {
if(data.error == "") {
frm.EncryptData.value = data.hash_String;
frm.timestamp.value = data.timestamp;
frm.signature.value = data.sign;
frm.mKey.value = data.mKey;
} else {
alert(data.error);
result = false;
@ -61,50 +114,66 @@ if($is_kakaopay_use) {
}
function getTxnId(frm) {
if(makeHashData(frm)) {
frm.Amt.value = frm.good_mny.value;
frm.BuyerEmail.value = frm.od_email.value;
frm.BuyerName.value = frm.od_name.value;
$.ajax({
url: g5_url+"/shop/kakaopay/getTxnId.php",
type: "POST",
data: $("#kakaopay_request input").serialize(),
dataType: "json",
async: false,
cache: false,
success: function(data) {
frm.resultCode.value = data.resultCode;
frm.resultMsg.value = data.resultMsg;
frm.txnId.value = data.txnId;
frm.prDt.value = data.prDt;
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";
cnspay(frm);
},
error: function(data) {
console.log(data);
}
});
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;
}
var submitFunc = function cnspaySubmit(data){
if(data.RESULT_CODE === '00') {
// 부인방지토큰은 기본적으로 name="NON_REP_TOKEN"인 input박스에 들어가게 되며, 아래와 같은 방법으로 꺼내서 쓸 수도 있다.
// 해당값은 가군인증을 위해 돌려주는 값으로서, 가맹점과 카카오페이 양측에서 저장하고 있어야 한다.
// var temp = data.NON_REP_TOKEN;
document.forderform.submit();
} else if(data.RESLUT_CODE === 'KKP_SER_002') {
// X버튼 눌렀을때의 이벤트 처리 코드 등록
alert('[RESULT_CODE] : ' + data.RESULT_CODE + '\n[RESULT_MSG] : ' + data.RESULT_MSG);
} else {
alert('[RESULT_CODE] : ' + data.RESULT_CODE + '\n[RESULT_MSG] : ' + data.RESULT_MSG);
}
};
</script>
<?php
}
?>
</script>