2018-08-24 16:19:25 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* @file orderpay.pgkcp.php
|
|
|
|
* @date 2018-08-25
|
2019-10-13 15:43:14 +00:00
|
|
|
* @updated 2019-10-14
|
2018-08-24 16:19:25 +00:00
|
|
|
* @author Go Namhyeon <gnh1201@gmail.com>
|
2018-08-24 16:43:43 +00:00
|
|
|
* @brief KCP PG(Payment Gateway) Controller
|
2018-08-24 16:19:25 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
if(!defined("_DEF_RSF_")) set_error_exit("do not allow access");
|
|
|
|
|
2018-08-28 18:40:17 +00:00
|
|
|
$debug = get_requested_value("debug");
|
2019-10-13 15:43:14 +00:00
|
|
|
$mode = get_requested_value("mode");
|
2018-08-28 18:40:17 +00:00
|
|
|
|
|
|
|
if($debug != "true") {
|
2019-05-20 08:19:05 +00:00
|
|
|
// 필수 항목 체크
|
|
|
|
$required_fields = array("pay_method_alias", "good_name", "good_mny", "buyr_name", "buyr_mail", "buyr_tel1", "chk_agree");
|
|
|
|
foreach($required_fields as $name) {
|
|
|
|
if(array_key_empty($name, $requests['_ALL'])) {
|
|
|
|
set_error_exit("required field is empty. " . $name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// detect CSRF attack
|
2019-10-13 15:43:14 +00:00
|
|
|
if($mode != "widget" && check_token_abuse_by_requests("_token")) {
|
2019-10-05 18:05:58 +00:00
|
|
|
set_error("Security violation: Access denied. May be your session is expired or abused.");
|
2019-05-20 08:19:05 +00:00
|
|
|
show_errors();
|
|
|
|
}
|
2018-08-28 17:44:56 +00:00
|
|
|
}
|
2018-08-24 16:37:39 +00:00
|
|
|
|
2018-08-26 18:11:42 +00:00
|
|
|
set_session_token();
|
|
|
|
|
2018-08-28 18:51:03 +00:00
|
|
|
loadHelper("pgkcp.lnk"); // load KCP PG Helper
|
2018-08-28 17:44:56 +00:00
|
|
|
loadHelper("JSLoader.class"); // load javascript loader
|
2018-08-26 17:23:20 +00:00
|
|
|
|
2018-08-26 16:13:24 +00:00
|
|
|
// load PG KCP configuration
|
|
|
|
$pgkcp_config = get_pgkcp_config();
|
|
|
|
|
2018-08-28 17:44:56 +00:00
|
|
|
// extract PGKCP configuration
|
|
|
|
extract($pgkcp_config);
|
|
|
|
|
2018-08-26 16:13:24 +00:00
|
|
|
// initalize data
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo = array();
|
2018-08-26 18:11:42 +00:00
|
|
|
$data = array(
|
2019-05-20 08:19:05 +00:00
|
|
|
"payinfo" => $payinfo,
|
|
|
|
"redirect_url" => get_requested_value("redirect_url"),
|
|
|
|
"_token" => get_session_token(),
|
|
|
|
"_next_route" => "orderpay.step2.pgkcp",
|
2018-08-26 17:23:20 +00:00
|
|
|
);
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 1. 주문 정보 입력: 결제에 필요한 주문 정보를 입력 및 설정합니다.
|
2018-08-24 16:27:27 +00:00
|
|
|
$fieldnames = array(
|
2019-05-20 08:19:05 +00:00
|
|
|
"pay_method", // 지불 방법
|
|
|
|
"pay_method_alias", // 지불 방법 별칭
|
|
|
|
"ordr_idxx", // 주문 번호
|
|
|
|
"good_name", // 상품 이름
|
|
|
|
"good_mny", // 결제 금액
|
|
|
|
"buyr_name", // 주문자 이름
|
|
|
|
"buyr_mail", // 주문자 전자우편(이메일) 주소
|
|
|
|
"buyr_tel1", // 주문자 연락처 1
|
|
|
|
"buyr_tel2", // 주문자 연락처 2
|
|
|
|
"pay_data" // 주문 상세 데이터
|
2018-08-24 16:27:27 +00:00
|
|
|
);
|
2018-08-24 16:19:25 +00:00
|
|
|
foreach($fieldnames as $name) {
|
2019-05-20 08:19:05 +00:00
|
|
|
$payinfo[$name] = make_safe_argument(get_requested_value($name));
|
2018-08-24 16:19:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// pay_method 처리
|
|
|
|
$pay_method_rules = array(
|
2019-05-20 08:19:05 +00:00
|
|
|
"CRE" => "100000000000", // 신용카드
|
|
|
|
"ACC" => "010000000000", // 계좌이체
|
|
|
|
"VAC" => "001000000000", // 가상계좌
|
|
|
|
"POI" => "000100000000", // 포인트
|
|
|
|
"PHO" => "000010000000", // 휴대폰
|
|
|
|
"GIF" => "000000001000", // 상품권
|
|
|
|
"ARS" => "000000000010", // ARS
|
|
|
|
"CAV" => "111000000000" // 신용카드/계좌이체/가상계좌
|
2018-08-24 16:19:25 +00:00
|
|
|
);
|
2018-08-28 18:40:17 +00:00
|
|
|
$pay_method = get_value_in_array("pay_method", $payinfo, $pay_method_rules['CRE']);
|
|
|
|
$pay_method_alias = get_value_in_array("pay_method_alias", $payinfo, "");
|
2018-08-24 16:19:25 +00:00
|
|
|
foreach($pay_method_rules as $k=>$v) {
|
2019-05-20 08:19:05 +00:00
|
|
|
if(array_key_exists($pay_method_alias, $pay_method_rules)) {
|
|
|
|
$pay_method = $pay_method_rules[$pay_method_alias];
|
|
|
|
}
|
2018-08-24 16:19:25 +00:00
|
|
|
}
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo['pay_method'] = $pay_method;
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 2.가맹점 필수 정보 설정: 승인(pay)/취소,매입(mod)
|
2018-08-24 16:27:27 +00:00
|
|
|
$req_tx = get_requested_value("req_tx");
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo['req_tx'] = in_array($req_tx, array("pay", "mod")) ? $req_tx : "pay";
|
|
|
|
$payinfo['site_cd'] = $g_conf_site_cd;
|
|
|
|
$payinfo['site_name'] = $g_conf_site_name;
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 할부옵션: 0 ~ 18 개월까지, 50,000원 이상만 가능
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo['quotaopt'] = get_requested_value("quotaopt");
|
|
|
|
if(array_key_empty("quotaopt", $payinfo)) {
|
2019-05-20 08:19:05 +00:00
|
|
|
$payinfo['quotaopt'] = 12;
|
2018-08-24 16:32:03 +00:00
|
|
|
}
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 결제 금액/화폐단위: 필수항목
|
2018-08-24 16:32:03 +00:00
|
|
|
$currency = get_requested_value("currency");
|
2018-08-28 18:40:17 +00:00
|
|
|
if(array_key_empty("currency", $payinfo)) {
|
2019-05-20 08:19:05 +00:00
|
|
|
$payinfo['currency'] = "WON";
|
2018-08-24 16:32:03 +00:00
|
|
|
}
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 3. 변경 제한 영역: 표준 웹 설정 영역
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo['module_type'] = $module_type;
|
|
|
|
$payinfo['res_cd'] = "";
|
|
|
|
$payinfo['res_msg'] = "";
|
|
|
|
$payinfo['enc_info'] = "";
|
|
|
|
$payinfo['enc_data'] = "";
|
|
|
|
$payinfo['ret_pay_method'] = "";
|
|
|
|
$payinfo['ordr_chk'] = ""; // 주문정보 검증 관련 정보
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 변경 제한 영역: 현금영수증 관련 정보
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo['cash_yn'] = "";
|
|
|
|
$payinfo['cash_tr_code'] = "";
|
|
|
|
$payinfo['cash_id_info'] = "";
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 변경 제한 영역: 2012년 8월 18일 전자상거래법 개정 (0:일회성 1:기간설정(ex 1:2012010120120131))
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo['good_expr'] = "";
|
2018-08-24 16:19:25 +00:00
|
|
|
|
|
|
|
// 4. 옵션 정보: 결제에 필요한 추가 옵션 정보를 입력 및 설정합니다.
|
|
|
|
$default_options = array(
|
2019-05-20 08:19:05 +00:00
|
|
|
"used_card_YN" => "Y", // 사용카드 설정 여부 파라미터
|
|
|
|
"used_card" => "CCBC:CCKM:CCSS", // 사용카드 설정 파라미터
|
|
|
|
"used_card_CCXX" => "Y", // 해외카드 구분 파라미터 ((해외비자, 해외마스터, 해외JCB)
|
|
|
|
"save_ocb" => "Y", // 신용카드 결제시 OK캐쉬백 적립 여부
|
|
|
|
"fix_inst" => "07", // 고정 할부 개월 수 선택
|
|
|
|
"kcp_noint" => "", // 설정할부: '', 일반할부: 'N', 무이자할부: 'Y'
|
|
|
|
"kcp_noint_quota" => "CCBC-02:03:06,CCKM-03:06,CCSS-03:06:09",
|
|
|
|
// 전 카드 2,3,6개월 무이자(국민,비씨,엘지,삼성,신한,현대,롯데,외환) : ALL-02:03:04
|
|
|
|
// BC 2,3,6개월, 국민 3,6개월, 삼성 6,9개월 무이자 : CCBC-02:03:06,CCKM-03:06,CCSS-03:06:04
|
|
|
|
"wish_vbank_list" => "05:03:04:07:11:23:26:32:34:81:71", // 가상계좌 은행 선택 파라미터 (은행코드는 매뉴얼을 참조)
|
|
|
|
"vcnt_expire_term" => "3", // 가상계좌 입금 기한 설정하는 파라미터 - 발급일 + 3일
|
|
|
|
"vcnt_expire_term_time" => "120000", // 가상계좌 입금 시간 설정하는 파라미터 (HHMMSS 형식, 기본값은 23시59분59초)
|
|
|
|
"complex_pnt_yn" => "N", // 포인트 결제시 복합 결제(신용카드+포인트) 여부를 결정
|
|
|
|
"disp_tax_yn" => "Y", // 현금영수증 등록 창을 출력 여부를 설정하는 파라미터
|
|
|
|
"site_logo" => "", // 사이트 로고, 로고 용량이 150 X 50 이상일 경우 site_name 값이 표시
|
|
|
|
"eng_flag" => "", // 결제창 영문 표시 파라미터, 사용 시 'Y'로 설정
|
|
|
|
"tax_flag" => "TG03", // 변경불가: 과세품목코드
|
|
|
|
"comm_tax_mny" => "", // 과세금액
|
|
|
|
"comm_vat_mny" => "", // 부가세
|
|
|
|
"comm_free_mny" => "", // 비과세금액
|
|
|
|
"skin_indx" => "1", // 스킨 변경 파라미터. 7개 (1~7) 지원
|
|
|
|
"good_cd" => "", // 상품코드 설정 파라미터
|
|
|
|
"shop_user_id" => "", // 가맹점에서 관리하는 고객 아이디, 상품권 결제 시 반드시 입력
|
|
|
|
"pt_memcorp_cd" => "" // 복지포인트 결제시 가맹점에 할당되어진 코드 값을 입력
|
2018-08-24 16:19:25 +00:00
|
|
|
);
|
2018-08-24 16:27:27 +00:00
|
|
|
foreach($default_options as $k=>$v) {
|
2019-05-20 08:19:05 +00:00
|
|
|
$req_value = get_requested_value($k);
|
|
|
|
if(!empty($req_value)) {
|
|
|
|
$payinfo[$k] = ($req_value === "_DEFAULT_") ? $v : $req_value;
|
|
|
|
}
|
2018-08-24 16:27:27 +00:00
|
|
|
}
|
2018-08-24 16:19:25 +00:00
|
|
|
|
2018-08-26 16:13:24 +00:00
|
|
|
// 설정 불러오기
|
2018-08-28 18:40:17 +00:00
|
|
|
$payinfo['g_conf_site_cd'] = $pgkcp_config['g_conf_site_cd'];
|
|
|
|
$payinfo['g_conf_site_name'] = $pgkcp_config['g_conf_site_name'];
|
|
|
|
$payinfo['module_type'] = $pgkcp_config['module_type'];
|
|
|
|
|
|
|
|
// 결제 정보 업데이트
|
|
|
|
$data['payinfo'] = $payinfo;
|
2018-08-26 17:23:20 +00:00
|
|
|
|
|
|
|
// 스크립트 설정
|
|
|
|
$jsloader = new JSLoader();
|
2018-08-28 18:40:17 +00:00
|
|
|
$jsloader->add_scripts(base_url() . "view/public/js/route/orderpay.pgkcp.1.js");
|
2018-08-26 17:23:20 +00:00
|
|
|
$jsloader->add_scripts($g_conf_js_url);
|
2018-08-28 18:40:17 +00:00
|
|
|
$jsloader->add_scripts(base_url() . "view/public/js/route/orderpay.pgkcp.2.js");
|
2018-08-26 17:23:20 +00:00
|
|
|
$jsoutput = $jsloader->get_output();
|
|
|
|
$data['jsoutput'] = $jsoutput;
|
2018-08-26 16:13:24 +00:00
|
|
|
|
2018-08-26 17:27:06 +00:00
|
|
|
// 결제 진행 URL
|
2018-08-26 18:11:42 +00:00
|
|
|
$data['pgkcp_action_url'] = base_url();
|
2018-08-26 17:27:06 +00:00
|
|
|
|
2018-08-28 18:40:17 +00:00
|
|
|
// 디버그 시
|
|
|
|
if($debug == "true") {
|
2019-05-20 08:19:05 +00:00
|
|
|
$auto_fills = array(
|
|
|
|
"good_name" => "테스트 상품",
|
|
|
|
"good_mny" => "1",
|
|
|
|
"buyr_name" => "홍길동",
|
|
|
|
"buyr_mail" => "webmaster@example.org",
|
|
|
|
"buyr_tel1" => "01000000000"
|
|
|
|
);
|
|
|
|
foreach($auto_fills as $k=>$v) {
|
|
|
|
if(array_key_empty($k, $payinfo)) {
|
|
|
|
$payinfo[$k] = $v;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$data['payinfo'] = $payinfo;
|
2018-08-28 18:40:17 +00:00
|
|
|
}
|
|
|
|
|
2018-08-24 16:19:25 +00:00
|
|
|
// 결제창 불러오기
|
|
|
|
renderView("view_orderpay.pgkcp", $data);
|