306 lines
12 KiB
PHP
306 lines
12 KiB
PHP
<?php
|
|
/**
|
|
* @file orderpay.step2.pgkcp.php
|
|
* @created_on 2018-08-27
|
|
* @updated_on 2020-01-25
|
|
* @author Go Namhyeon <abuse@catswords.net>
|
|
* @brief KCP PG(Payment Gateway) contoller when done
|
|
*/
|
|
|
|
if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
|
|
|
|
// detect CSRF attack
|
|
if(check_token_abuse_by_requests("_token", "_POST")) {
|
|
set_error("Access denied because of security violation");
|
|
show_errors();
|
|
}
|
|
|
|
loadHelper("webpagetool"); // load webpage tools
|
|
loadHelper("networktool"); // load network tools
|
|
loadHelper("string.utils"); // load string utility
|
|
loadHelper("pgkcp.lnk"); // load KCP PG Helper
|
|
loadHelper("JSLoader.class"); // load javascript loader
|
|
|
|
// load PGKCP configuration
|
|
$pgkcp_config = get_pgkcp_config();
|
|
|
|
// extract PGKCP configuration
|
|
extract($pgkcp_config);
|
|
|
|
// load PGKCP library
|
|
load_pgkcp_library();
|
|
|
|
// 01. 지불 요청 정보 설정
|
|
$payres = array();
|
|
$payinfo = array();
|
|
$fieldnames = array(
|
|
"req_tx",
|
|
"tran_cd",
|
|
"cust_ip",
|
|
"ordr_idxx",
|
|
"good_name",
|
|
"res_cd",
|
|
"res_msg",
|
|
"res_en_msg",
|
|
"tno",
|
|
"buyr_name",
|
|
"buyr_tel1",
|
|
"buyr_tel2",
|
|
"buyr_mail",
|
|
"pay_method_alias",
|
|
"pay_method",
|
|
"use_pay_method",
|
|
"bSucc",
|
|
"app_time",
|
|
"amount",
|
|
"total_amount",
|
|
"coupon_mny",
|
|
"app_time",
|
|
"amount",
|
|
"total_amount",
|
|
"coupon_mny",
|
|
"card_cd",
|
|
"card_name",
|
|
"app_no",
|
|
"noinf",
|
|
"quota",
|
|
"partcanc_yn",
|
|
"card_bin_type_01",
|
|
"card_bin_type_02",
|
|
"card_mny",
|
|
"bank_name",
|
|
"bank_code",
|
|
"bk_mny",
|
|
"bankname",
|
|
"depositor",
|
|
"account",
|
|
"va_date",
|
|
"pnt_issue",
|
|
"pnt_amount",
|
|
"pnt_app_time",
|
|
"pnt_app_no",
|
|
"add_pnt",
|
|
"use_pnt",
|
|
"rsv_pnt",
|
|
"commid",
|
|
"mobile_no",
|
|
"shop_user_id",
|
|
"tk_van_code",
|
|
"tk_app_no",
|
|
"cash_yn",
|
|
"cash_authno",
|
|
"cash_tr_code",
|
|
"cash_id_info",
|
|
"cash_no",
|
|
"pay_data"
|
|
);
|
|
foreach($fieldnames as $name) {
|
|
$payinfo[$name] = make_safe_argument(get_requested_value($name));
|
|
}
|
|
|
|
// set current ip address
|
|
$payinfo['cust_ip'] = get_network_client_addr();
|
|
|
|
// set converted result message
|
|
$payinfo['res_msg'] = get_converted_string($payinfo['res_msg'], "utf-8", "cp949");
|
|
|
|
// extract payinfo
|
|
extract($payinfo);
|
|
|
|
// initalize data
|
|
$data = array(
|
|
"payres" => $payres,
|
|
"payinfo" => $payinfo,
|
|
"redirect_url" => get_requested_value("redirect_url"),
|
|
"_token" => get_session_token(),
|
|
"_next_route" => "orderpay.step3.pgkcp",
|
|
);
|
|
|
|
// 02. 인스턴스 생성 및 초기화
|
|
$c_PayPlus = new C_PP_CLI;
|
|
$c_PayPlus->mf_clear();
|
|
|
|
// 03. 처리 요청 정보 설정
|
|
if($req_tx == "pay") {
|
|
$c_PayPlus->mf_set_ordr_data( "ordr_mony", get_requested_value("good_mny") );
|
|
$c_PayPlus->mf_set_encx_data( get_requested_value("enc_data"), get_requested_value("enc_info") );
|
|
}
|
|
|
|
// 04. 실행
|
|
if($tran_cd != "") {
|
|
// 응답 전문 처리
|
|
$c_PayPlus->mf_do_tx( "", $g_conf_home_dir, $g_conf_site_cd, $g_conf_site_key, $tran_cd, "",
|
|
$g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib", $ordr_idxx,
|
|
$cust_ip, $g_conf_log_level, 0, 0, $g_conf_log_path );
|
|
|
|
$payres['res_cd'] = $c_PayPlus->m_res_cd; // 결과 코드
|
|
$payres['res_msg'] = $c_PayPlus->m_res_msg; // 결과 메시지
|
|
|
|
// 결과 영문 메세지
|
|
//$payres['res_en_msg'] = $c_PayPlus->mf_get_res_data( "res_en_msg" );
|
|
} else {
|
|
$c_PayPlus->m_res_cd = "9562";
|
|
$c_PayPlus->m_res_msg = "연동 오류 tran_cd값이 설정되지 않았습니다.";
|
|
}
|
|
|
|
// 05. 승인 결과 값 추출
|
|
if($req_tx == "pay") {
|
|
if($res_cd == "0000") {
|
|
$payres['tno'] = $c_PayPlus->mf_get_res_data("tno"); // KCP 거래 고유 번호
|
|
$payres['amount'] = $c_PayPlus->mf_get_res_data("amount"); // KCP 실제 거래 금액
|
|
$payres['pnt_issue'] = $c_PayPlus->mf_get_res_data("pnt_issue"); // 결제 포인트사 코드
|
|
$payres['coupon_mny'] = $c_PayPlus->mf_get_res_data("coupon_mny" ); // 쿠폰금액
|
|
|
|
switch($use_pay_method) {
|
|
case "100000000000": // 05-1. 신용카드 승인 결과 처리
|
|
$payres['card_cd'] = $c_PayPlus->mf_get_res_data( "card_cd" ); // 카드사 코드
|
|
$payres['card_name'] = $c_PayPlus->mf_get_res_data( "card_name" ); // 카드 종류
|
|
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "app_time" ); // 승인 시간
|
|
$payres['app_no'] = $c_PayPlus->mf_get_res_data( "app_no" ); // 승인 번호
|
|
$payres['noinf'] = $c_PayPlus->mf_get_res_data( "noinf" ); // 무이자 여부 ( 'Y' : 무이자 )
|
|
$payres['quota'] = $c_PayPlus->mf_get_res_data( "quota" ); // 할부 개월 수
|
|
$payres['partcanc_yn'] = $c_PayPlus->mf_get_res_data( "partcanc_yn" ); // 부분취소 가능유무
|
|
$payres['card_bin_type_01'] = $c_PayPlus->mf_get_res_data( "card_bin_type_01" ); // 카드구분1
|
|
$payres['card_bin_type_02'] = $c_PayPlus->mf_get_res_data( "card_bin_type_02" ); // 카드구분2
|
|
$payres['card_mny'] = $c_PayPlus->mf_get_res_data( "card_mny" ); // 카드결제금액
|
|
|
|
// 05-1.1. 복합결제(포인트+신용카드) 승인 결과 처리
|
|
if(in_array($pnt_issue, array("SCSK", "SCWB"))) {
|
|
$payres['pnt_amount'] = $c_PayPlus->mf_get_res_data ( "pnt_amount" ); // 적립금액 or 사용금액
|
|
$payres['pnt_app_time'] = $c_PayPlus->mf_get_res_data ( "pnt_app_time" ); // 승인시간
|
|
$payres['pnt_app_no'] = $c_PayPlus->mf_get_res_data ( "pnt_app_no" ); // 승인번호
|
|
$payres['add_pnt'] = $c_PayPlus->mf_get_res_data ( "add_pnt" ); // 발생 포인트
|
|
$payres['use_pnt'] = $c_PayPlus->mf_get_res_data ( "use_pnt" ); // 사용가능 포인트
|
|
$payres['rsv_pnt'] = $c_PayPlus->mf_get_res_data ( "rsv_pnt" ); // 총 누적 포인트
|
|
$payres['total_amount'] = $amount + $pnt_amount; // 복합결제시 총 거래금액
|
|
}
|
|
|
|
break; // END 05-1
|
|
|
|
case "010000000000": // 05-2. 계좌이체 승인 결과 처리
|
|
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "app_time" ); // 승인 시간
|
|
$payres['bank_name'] = $c_PayPlus->mf_get_res_data( "bank_name" ); // 은행명
|
|
$payres['bank_code'] = $c_PayPlus->mf_get_res_data( "bank_code" ); // 은행코드
|
|
$payres['bk_mny'] = $c_PayPlus->mf_get_res_data( "bk_mny" ); // 계좌이체결제금액
|
|
|
|
break; // END 05-2
|
|
|
|
case "001000000000": // 05-3. 가상계좌 승인 결과 처리
|
|
$payres['bankname'] = $c_PayPlus->mf_get_res_data( "bankname" ); // 입금할 은행 이름
|
|
$payres['depositor'] = $c_PayPlus->mf_get_res_data( "depositor" ); // 입금할 계좌 예금주
|
|
$payres['account'] = $c_PayPlus->mf_get_res_data( "account" ); // 입금할 계좌 번호
|
|
$payres['va_date'] = $c_PayPlus->mf_get_res_data( "va_date" ); // 가상계좌 입금마감시간
|
|
|
|
break; // END 05-3
|
|
|
|
case "000100000000": // 05-4. 포인트 승인 결과 처리
|
|
$payres['pnt_amount'] = $c_PayPlus->mf_get_res_data( "pnt_amount" ); // 적립금액 or 사용금액
|
|
$payres['pnt_app_time'] = $c_PayPlus->mf_get_res_data( "pnt_app_time" ); // 승인시간
|
|
$payres['pnt_app_no'] = $c_PayPlus->mf_get_res_data( "pnt_app_no" ); // 승인번호
|
|
$payres['add_pnt'] = $c_PayPlus->mf_get_res_data( "add_pnt" ); // 발생 포인트
|
|
$payres['use_pnt'] = $c_PayPlus->mf_get_res_data( "use_pnt" ); // 사용가능 포인트
|
|
$payres['rsv_pnt'] = $c_PayPlus->mf_get_res_data( "rsv_pnt" ); // 적립 포인트
|
|
|
|
break; // END 05-4
|
|
|
|
case "000010000000": // 05-5. 휴대폰 승인 결과 처리
|
|
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "hp_app_time" ); // 승인 시간
|
|
$payres['commid'] = $c_PayPlus->mf_get_res_data( "commid" ); // 통신사 코드
|
|
$payres['mobile_no'] = $c_PayPlus->mf_get_res_data( "mobile_no" ); // 휴대폰 번호
|
|
|
|
break; // END 05-5
|
|
|
|
case "000000001000": // 05-6. 상품권 승인 결과 처리
|
|
$payres['app_time'] = $c_PayPlus->mf_get_res_data( "tk_app_time" ); // 승인 시간
|
|
$payres['tk_van_code'] = $c_PayPlus->mf_get_res_data( "tk_van_code" ); // 발급사 코드
|
|
$payres['tk_app_no'] = $c_PayPlus->mf_get_res_data( "tk_app_no" ); // 승인 번호
|
|
|
|
break; // END 05-6
|
|
}
|
|
|
|
// 05-7. 현금영수증 결과 처리
|
|
$payres['cash_authno'] = $c_PayPlus->mf_get_res_data( "cash_authno" ); // 현금 영수증 승인 번호
|
|
$payres['cash_no'] = $c_PayPlus->mf_get_res_data( "cash_no" ); // 현금 영수증 거래 번호
|
|
}
|
|
}
|
|
|
|
// checking vaild payment method
|
|
$res_succ_flag = false;
|
|
$pay_method_alias = get_value_in_array("pay_method_alias", $payinfo, "");
|
|
$pay_method_rules = array(
|
|
"CRE" => "100000000000", // 신용카드
|
|
"ACC" => "010000000000", // 계좌이체
|
|
"VAC" => "001000000000", // 가상계좌
|
|
"POI" => "000100000000", // 포인트
|
|
"PHO" => "000010000000", // 휴대폰
|
|
"GIF" => "000000001000", // 상품권
|
|
"ARS" => "000000000010", // ARS
|
|
"CAV" => "111000000000", // 신용카드/계좌이체/가상계좌
|
|
"NOP" => "" // 수기결제/무통장입금
|
|
);
|
|
foreach($pay_method_rules as $k=>$v) {
|
|
if($pay_method_alias == $k) {
|
|
$payres['use_pay_method_alias'] = $k;
|
|
$res_succ_flag = true;
|
|
break;
|
|
}
|
|
}
|
|
$payres['bSucc'] = $res_succ_flag ? "true" : "false";
|
|
|
|
// set result
|
|
extract($payres);
|
|
|
|
// cancel payment when failed
|
|
if($req_tx == "pay") {
|
|
if($res_cd == "0000") {
|
|
if($bSucc == "false") {
|
|
$c_PayPlus->mf_clear();
|
|
|
|
$payres['tran_cd'] = "00200000";
|
|
$c_PayPlus->mf_set_modx_data( "tno", $tno ); // KCP 원거래 거래번호
|
|
$c_PayPlus->mf_set_modx_data( "mod_type", "STSC" ); // 원거래 변경 요청 종류
|
|
$c_PayPlus->mf_set_modx_data( "mod_ip", $cust_ip); // 변경 요청자 IP
|
|
$c_PayPlus->mf_set_modx_data( "mod_desc", "결과 처리 오류 - 자동 취소" ); // 변경 사유
|
|
|
|
// 응답 전문 처리
|
|
$c_PayPlus->mf_do_tx(
|
|
"", $g_conf_home_dir, $g_conf_site_cd, $g_conf_site_key, $tran_cd, "",
|
|
$g_conf_gw_url, $g_conf_gw_port, "payplus_cli_slib", $ordr_idxx,
|
|
$cust_ip, $g_conf_log_level, 0, 0, $g_conf_log_path
|
|
);
|
|
|
|
$payres['res_cd'] = $c_PayPlus->m_res_cd;
|
|
$payres['res_msg'] = $c_PayPlus->m_res_msg;
|
|
}
|
|
}
|
|
} // End of [res_cd = "0000"]
|
|
|
|
// set encoding
|
|
foreach($payres as $k=>$v) {
|
|
$payres[$k] = get_converted_string($v, "utf-8", "cp949");
|
|
}
|
|
|
|
// set result
|
|
extract($payres);
|
|
|
|
// 08. 폼 구성 및 결과페이지 호출
|
|
|
|
// set javascript files
|
|
$jsloader = new JSLoader();
|
|
$jsloader->add_scripts(get_webproxy_url("https://code.jquery.com/jquery-3.3.1.min.js"));
|
|
$jsloader->add_scripts(base_url() . "view/public/js/route/orderpay.step2.pgkcp.js");
|
|
$jsoutput = $jsloader->get_output();
|
|
$data['jsoutput'] = $jsoutput;
|
|
|
|
// convert payres to payinfo
|
|
foreach($payres as $k=>$v) {
|
|
$payinfo[$k] = $v;
|
|
}
|
|
$data['payinfo'] = $payinfo;
|
|
|
|
// 결제 진행 URL
|
|
$data['pgkcp_action_url'] = base_url();
|
|
|
|
// 결제창 불러오기
|
|
renderView("view_orderpay.step2.pgkcp", $data);
|