diff --git a/adm/config_form.php b/adm/config_form.php index 3c458808f..93918eac8 100644 --- a/adm/config_form.php +++ b/adm/config_form.php @@ -272,12 +272,25 @@ if(!isset($member['mb_scrap_cnt'])) { } // 아이코드 토큰키 추가 -if( ! isset($config['cf_icode_token_key']) ){ +if(!isset($config['cf_icode_token_key']) ){ $sql = "ALTER TABLE `{$g5['config_table']}` ADD COLUMN `cf_icode_token_key` VARCHAR(100) NOT NULL DEFAULT '' AFTER `cf_icode_server_port`; "; sql_query($sql, false); } - +// 아이디/비밀번호 찾기에 본인확인 사용 여부 필드 추가 +if(!isset($config['cf_cert_find']) ){ + $sql = "ALTER TABLE `{$g5['config_table']}` + ADD COLUMN `cf_cert_find` TINYINT(4) NOT NULL DEFAULT '0' AFTER `cf_cert_use`; "; + sql_query($sql, false); +} +// 통합인증 필드 추가 +if(!isset($config['cf_cert_sa']) ){ + $sql = "ALTER TABLE `{$g5['config_table']}` + ADD COLUMN `cf_cert_sa` VARCHAR(255) NOT NULL DEFAULT '' AFTER `cf_cert_hp`, + ADD COLUMN `cf_cert_kg_cd` VARCHAR(255) NOT NULL DEFAULT '' AFTER `cf_cert_sa`, + ADD COLUMN `cf_cert_kg_mid` VARCHAR(255) NOT NULL DEFAULT '' AFTER `cf_cert_kg_cd`; "; + sql_query($sql, false); +} if(!$config['cf_faq_skin']) $config['cf_faq_skin'] = "basic"; if(!$config['cf_mobile_faq_skin']) $config['cf_mobile_faq_skin'] = "basic"; @@ -836,7 +849,6 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) { - @@ -844,9 +856,8 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) { @@ -875,10 +886,10 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) { MID -
+

API Key - + diff --git a/adm/config_form_update.php b/adm/config_form_update.php index de1200f85..1d5f8244a 100644 --- a/adm/config_form_update.php +++ b/adm/config_form_update.php @@ -22,7 +22,7 @@ check_admin_token(); $cf_social_servicelist = !empty($_POST['cf_social_servicelist']) ? implode(',', $_POST['cf_social_servicelist']) : ''; -$check_keys = array('cf_lg_mid', 'cf_lg_mert_key', 'cf_cert_kcb_cd', 'cf_cert_kcp_cd', 'cf_editor', 'cf_recaptcha_site_key', 'cf_recaptcha_secret_key', 'cf_naver_clientid', 'cf_naver_secret', 'cf_facebook_appid', 'cf_facebook_secret', 'cf_twitter_key', 'cf_twitter_secret', 'cf_google_clientid', 'cf_google_secret', 'cf_googl_shorturl_apikey', 'cf_kakao_rest_key', 'cf_kakao_client_secret', 'cf_kakao_js_apikey', 'cf_payco_clientid', 'cf_payco_secret'); +$check_keys = array('cf_lg_mid', 'cf_lg_mert_key', 'cf_cert_kcb_cd', 'cf_cert_kcp_cd', 'cf_editor', 'cf_recaptcha_site_key', 'cf_recaptcha_secret_key', 'cf_naver_clientid', 'cf_naver_secret', 'cf_facebook_appid', 'cf_facebook_secret', 'cf_twitter_key', 'cf_twitter_secret', 'cf_google_clientid', 'cf_google_secret', 'cf_googl_shorturl_apikey', 'cf_kakao_rest_key', 'cf_kakao_client_secret', 'cf_kakao_js_apikey', 'cf_payco_clientid', 'cf_payco_secret','cf_cert_kg_cd','cf_cert_kg_mid'); foreach( $check_keys as $key ){ if ( isset($_POST[$key]) && $_POST[$key] ){ @@ -99,8 +99,10 @@ $check_keys = array( 'cf_social_login_use' => 'int', 'cf_cert_req' => 'int', 'cf_cert_use' => 'int', +'cf_cert_find' => 'int', 'cf_cert_ipin' => 'char', 'cf_cert_hp' => 'char', +'cf_cert_sa' => 'char', 'cf_admin_email' => 'char', 'cf_admin_email_name' => 'char', 'cf_add_script' => 'text', @@ -171,12 +173,13 @@ foreach( $check_keys as $k => $v ){ } // 본인확인을 사용할 경우 아이핀, 휴대폰인증 중 하나는 선택되어야 함 -if($_POST['cf_cert_use'] && !$_POST['cf_cert_ipin'] && !$_POST['cf_cert_hp']) - alert('본인확인을 위해 아이핀 또는 휴대폰 본인확인 서비스를 하나이상 선택해 주십시오'); +if($_POST['cf_cert_use'] && !$_POST['cf_cert_ipin'] && !$_POST['cf_cert_hp'] && !$_POST['cf_cert_sa']) + alert('본인확인을 위해 아이핀, 휴대폰 본인확인, KG이니시스 통합인증 서비스 중 하나이상 선택해 주십시오'); if(!$_POST['cf_cert_use']) { $posts[$key] = $_POST['cf_cert_ipin'] = ''; $posts[$key] = $_POST['cf_cert_hp'] = ''; + $posts[$key] = $_POST['cf_cert_sa'] = ''; } $sql = " update {$g5['config_table']} @@ -274,8 +277,12 @@ $sql = " update {$g5['config_table']} cf_captcha_mp3 = '{$_POST['cf_captcha_mp3']}', cf_editor = '{$_POST['cf_editor']}', cf_cert_use = '{$_POST['cf_cert_use']}', + cf_cert_find = '{$_POST['cf_cert_find']}', cf_cert_ipin = '{$_POST['cf_cert_ipin']}', cf_cert_hp = '{$_POST['cf_cert_hp']}', + cf_cert_sa = '{$_POST['cf_cert_sa']}', + cf_cert_kg_cd = '{$_POST['cf_cert_kg_cd']}', + cf_cert_kg_mid = '{$_POST['cf_cert_kg_mid']}', cf_cert_kcb_cd = '{$_POST['cf_cert_kcb_cd']}', cf_cert_kcp_cd = '{$_POST['cf_cert_kcp_cd']}', cf_lg_mid = '{$_POST['cf_lg_mid']}', diff --git a/adm/member_list.php b/adm/member_list.php index 57811098d..b40fbb32b 100644 --- a/adm/member_list.php +++ b/adm/member_list.php @@ -194,6 +194,10 @@ $colspan = 16; $mb_certify_case = '아이핀'; $mb_certify_val = ''; break; + case 'sa': + $mb_certify_case = '통합인증'; + $mb_certify_val = ''; + break; case 'admin': $mb_certify_case = '관리자'; $mb_certify_val = 'admin'; diff --git a/config.php b/config.php index 2d568eb56..760110999 100644 --- a/config.php +++ b/config.php @@ -59,6 +59,7 @@ define('G5_MOBILE_DIR', 'mobile'); define('G5_OKNAME_DIR', 'okname'); define('G5_KCPCERT_DIR', 'kcpcert'); +define('G5_KGCERT_DIR', 'kgcert'); define('G5_LGXPAY_DIR', 'lgxpay'); define('G5_SNS_DIR', 'sns'); @@ -97,6 +98,7 @@ define('G5_PLUGIN_URL', G5_URL.'/'.G5_PLUGIN_DIR); define('G5_EDITOR_URL', G5_PLUGIN_URL.'/'.G5_EDITOR_DIR); define('G5_OKNAME_URL', G5_PLUGIN_URL.'/'.G5_OKNAME_DIR); define('G5_KCPCERT_URL', G5_PLUGIN_URL.'/'.G5_KCPCERT_DIR); +define('G5_KGCERT_URL', G5_PLUGIN_URL.'/'.G5_KGCERT_DIR); define('G5_LGXPAY_URL', G5_PLUGIN_URL.'/'.G5_LGXPAY_DIR); define('G5_SNS_URL', G5_PLUGIN_URL.'/'.G5_SNS_DIR); define('G5_SYNDI_URL', G5_PLUGIN_URL.'/'.G5_SYNDI_DIR); @@ -116,6 +118,7 @@ define('G5_EDITOR_PATH', G5_PLUGIN_PATH.'/'.G5_EDITOR_DIR); define('G5_OKNAME_PATH', G5_PLUGIN_PATH.'/'.G5_OKNAME_DIR); define('G5_KCPCERT_PATH', G5_PLUGIN_PATH.'/'.G5_KCPCERT_DIR); +define('G5_KGCERT_PATH', G5_PLUGIN_PATH.'/'.G5_KGCERT_DIR); define('G5_LGXPAY_PATH', G5_PLUGIN_PATH.'/'.G5_LGXPAY_DIR); define('G5_SNS_PATH', G5_PLUGIN_PATH.'/'.G5_SNS_DIR); diff --git a/install/gnuboard5.sql b/install/gnuboard5.sql index cbb98b45b..c0bdcb9d5 100644 --- a/install/gnuboard5.sql +++ b/install/gnuboard5.sql @@ -285,8 +285,12 @@ CREATE TABLE IF NOT EXISTS `g5_config` ( `cf_captcha_mp3` varchar(255) NOT NULL DEFAULT '', `cf_editor` varchar(50) NOT NULL DEFAULT '', `cf_cert_use` tinyint(4) NOT NULL DEFAULT '0', + `cf_cert_find` tinyint(4) NOT NULL DEFAULT '0', `cf_cert_ipin` varchar(255) NOT NULL DEFAULT '', `cf_cert_hp` varchar(255) NOT NULL DEFAULT '', + `cf_cert_sa` varchar(255) NOT NULL DEFAULT '', + `cf_cert_kg_cd` varchar(255) NOT NULL DEFAULT '', + `cf_cert_kg_mid` varchar(255) NOT NULL DEFAULT '', `cf_cert_kcb_cd` varchar(255) NOT NULL DEFAULT '', `cf_cert_kcp_cd` varchar(255) NOT NULL DEFAULT '', `cf_lg_mid` varchar(100) NOT NULL DEFAULT '', diff --git a/js/certify.js b/js/certify.js index 214c50561..999a1f516 100644 --- a/js/certify.js +++ b/js/certify.js @@ -100,6 +100,9 @@ function cert_confirm() var val = document.fregisterform.cert_type.value switch(val) { + case "sa": + type = "통합인증"; + break; case "ipin": type = "아이핀"; break; @@ -114,4 +117,28 @@ function cert_confirm() return true; else return false; +} + +function call_sa(directAgencys, url) { + let window = popupCenter(); + if(window != undefined && window != null) { + document.saForm.setAttribute("target", "sa_popup"); + document.saForm.setAttribute("method", "post"); + document.saForm.directAgency.value = directAgencys; + document.saForm.setAttribute("action", url); + document.saForm.submit(); + } +} + +function popupCenter() { + let _width = 400; + let _height = 620; + var xPos = (document.body.offsetWidth/2) - (_width/2); // 가운데 정렬 + xPos += window.screenLeft; // 듀얼 모니터일 때 + if( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) // 모바일일때 + { + return window; + }else { + return window.open("", "sa_popup", "width="+_width+", height="+_height+", left="+xPos+", menubar=yes, status=yes, titlebar=yes, resizable=yes"); + } } \ No newline at end of file diff --git a/lib/common.lib.php b/lib/common.lib.php index d84af1501..e98c1d149 100644 --- a/lib/common.lib.php +++ b/lib/common.lib.php @@ -2782,6 +2782,9 @@ function certify_count_check($mb_id, $type) $row = sql_fetch($sql); switch($type) { + case 'sa' : + $cert = '통합인증'; + break; case 'hp': $cert = '휴대폰'; break; diff --git a/mobile/skin/member/basic/register_form.skin.php b/mobile/skin/member/basic/register_form.skin.php index a6e38a612..65b0cb336 100644 --- a/mobile/skin/member/basic/register_form.skin.php +++ b/mobile/skin/member/basic/register_form.skin.php @@ -7,7 +7,7 @@ add_stylesheet('',
- + @@ -51,12 +51,12 @@ add_stylesheet('', 토스 인증'.PHP_EOL; - echo ''.PHP_EOL; - echo ''.PHP_EOL; - echo ''.PHP_EOL; - // } + if($config['cf_cert_sa']) { + echo ''.PHP_EOL; + echo ''.PHP_EOL; + echo ''.PHP_EOL; + echo ''.PHP_EOL; + } if($config['cf_cert_hp']) echo ''.PHP_EOL; if($config['cf_cert_ipin']) @@ -67,10 +67,17 @@ add_stylesheet('', ?>
본인확인성인인증 완료 @@ -283,6 +290,40 @@ add_stylesheet('', $(function() { $("#reg_zip_find").css("display", "inline-block"); + + // TOSS 통합인증 + $("#win_sa_toss_cert").click(function() { + if(!cert_confirm()) + return false; + + call_sa("TOSS", "/kg_request.php"); + return; + }); + // PASS 통합인증 + $("#win_sa_pass_cert").click(function() { + if(!cert_confirm()) + return false; + + call_sa("PASS", "/kg_request.php"); + return; + }); + // PAYCO 통합인증 + $("#win_sa_payco_cert").click(function() { + if(!cert_confirm()) + return false; + + call_sa("PAYCO", "/kg_request.php"); + return; + }); + // KFTC 통합인증 + $("#win_sa_kftc_cert").click(function() { + if(!cert_confirm()) + return false; + + call_sa("KFTC", "/kg_request.php"); + return; + }); + // 아이핀인증 $("#win_ipin_cert").click(function(e) { @@ -335,6 +376,9 @@ add_stylesheet('', var type; switch(val) { + case "sa": + type = "통합인증"; + break; case "ipin": type = "아이핀"; break; diff --git a/plugin/kgcert/_common.php b/plugin/kgcert/_common.php new file mode 100644 index 000000000..c7ed3c4ee --- /dev/null +++ b/plugin/kgcert/_common.php @@ -0,0 +1,2 @@ + + + + +
+ + + + + + + + + + + + + + + + +
+ diff --git a/plugin/kgcert/kg_response.php b/plugin/kgcert/kg_response.php new file mode 100644 index 000000000..23fd0a455 --- /dev/null +++ b/plugin/kgcert/kg_response.php @@ -0,0 +1,25 @@ + '; + +print_r2($_COOKIE); +// STEP2 에 이어 인증결과가 성공일(resultCode=0000) 경우 STEP2 에서 받은 인증결과로 아래 승인요청 진행 +$txId = $_POST['txId']; +$mid = substr($txId, 6, 10); +print_r2($_SERVER); +print_r2($_SESSION); +print_r2($_POST); +die; +// echo '<인증결과내역>'."

"; +// echo 'resultCode : '.$_REQUEST["resultCode"]."
"; +// echo 'resultMsg : '.$_REQUEST["resultMsg"]."
"; +// echo 'authRequestUrl : '.$_REQUEST["authRequestUrl"]."
"; +// echo 'txId : '.$_REQUEST["txId"]."
"; + +// 인증실패 +alert_close('코드 : '.$_POST['res_cd'].' '.urldecode($_POST['res_msg'])); +exit; + +include_once(G5_PATH.'/tail.sub.php'); \ No newline at end of file diff --git a/plugin/kgcert/kg_result.php b/plugin/kgcert/kg_result.php new file mode 100644 index 000000000..8b83e836d --- /dev/null +++ b/plugin/kgcert/kg_result.php @@ -0,0 +1,116 @@ + '; +$txId = $_POST['txId']; +$mid = substr($txId, 6, 10); +if ($_POST["resultCode"] === "0000") { + + $data = array( + 'mid' => $mid, + 'txId' => $txId + ); + + $post_data = json_encode($data); + + // curl 통신 시작 + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $_POST["authRequestUrl"]); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json')); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + + $response = curl_exec($ch); + curl_close($ch); + $res_data = json_decode($response, true); + // -------------------- 결과 수신 ------------------------------------------- + echo '<결과내역>'." '{$mid}'

"; + echo $response; + print_r2($_SESSION); + // print_r2($response); + if($res_data['resultCode'] == "0000") { + + @insert_cert_history($member['mb_id'], 'kg', 'sa'); // 인증성공 시 내역 기록 + + $cert_no = $res_data['txId']; // LG 인증처리번호 + $phone_no = $res_data['userPhone']; // 전화번호 + $user_name = $res_data['userName']; // 이름 + $birth_day = $res_data['userBirthday']; // 생년월일 + $ci = $res_data['userCi']; // CI + + if(!$phone_no) + alert_close("정상적인 인증이 아닙니다. 올바른 방법으로 이용해 주세요."); + + $ci_hash = md5($ci . $ci); + $phone_no = hyphen_hp_number($phone_no); + $mb_dupinfo = $ci_hash; + + $sql = " select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$mb_dupinfo}' "; + $row = sql_fetch($sql); + if ($row['mb_id']) { + alert_close("입력하신 본인확인 정보로 가입된 내역이 존재합니다.\\n회원아이디 : ".$row['mb_id']); + } + + // hash 데이터 + $cert_type = 'sa'; + $md5_cert_no = md5($cert_no); + $hash_data = md5($user_name.$cert_type.$birth_day.$md5_cert_no); + + // 성인인증결과 + $adult_day = date("Ymd", strtotime("-19 years", G5_SERVER_TIME)); + $adult = ((int)$birth_day <= (int)$adult_day) ? 1 : 0; + + set_session("ss_cert_type", $cert_type); + set_session("ss_cert_no", $md5_cert_no); + set_session("ss_cert_hash", $hash_data); + set_session("ss_cert_adult", $adult); + set_session("ss_cert_birth", $birth_day); + + //set_session("ss_cert_sex", ($sex_code=="01"?"M":"F")); + set_session('ss_cert_dupinfo', $mb_dupinfo); + }else{ + // 인증실패 + alert_close('코드 : '.$res_data['resultCode'].' '.urldecode($res_data['resultMsg'])); + exit; + } +} else { // resultCode===0000 아닐경우 아래 인증 실패를 출력함 + // 인증실패 + alert_close('코드 : '.$_POST['resultCode'].' '.urldecode($_POST['resultMsg'])); + exit; +} +$g5['title'] = '통합인증 결과'; +include_once(G5_PATH.'/head.sub.php'); + +?> + +',
- + @@ -56,13 +56,11 @@ add_stylesheet('',
  • 토스 인증'.PHP_EOL; - echo ''.PHP_EOL; - echo ''.PHP_EOL; - echo ''.PHP_EOL; - // } + if($config['cf_cert_sa']) + echo ''.PHP_EOL; + echo ''.PHP_EOL; + echo ''.PHP_EOL; + echo ''.PHP_EOL; if($config['cf_cert_hp']) echo ''.PHP_EOL; if($config['cf_cert_ipin']) @@ -73,10 +71,17 @@ add_stylesheet('', ?>
    본인확인성인인증 완료 @@ -292,10 +297,49 @@ gif, jpg, png파일만 가능하며 용량
    + +
    + +
    +