g4s ipin merge

This commit is contained in:
chicpro
2013-09-04 08:56:46 +09:00
35 changed files with 895 additions and 188 deletions

View File

@ -0,0 +1,3 @@
<?php
include_once('../../common.php');
?>

Binary file not shown.

BIN
plugin/okname/bin/okname Executable file

Binary file not shown.

Binary file not shown.

BIN
plugin/okname/bin/okname_x64 Executable file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,75 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if(!$config['cf_cert_use'] || $config['cf_cert_hp'] != 'kcb')
alert('기본환경설정에서 KCB 휴대폰본인확인 서비스로 설정해 주십시오.');
// key 디렉토리 체크
include_once('./key_dir_check.php');
/**************************************************************************
* okname 생년월일 본인 확인서비스 파라미터
**************************************************************************/
$memId = $config['cf_cert_kcb_cd']; // 회원사코드
if(!$memId)
alert('기본환경설정에서 KCB 회원사ID를 입력해 주십시오.');
$inTpBit = '0'; // 입력구분코드(고정값 '0' : KCB팝업에서 개인정보 입력)
$name = 'x'; // 성명 (고정값 'x')
$birthday = 'x'; // 생년월일 (고정값 'x')
$gender = 'x'; // 성별 (고정값 'x')
$ntvFrnrTpCd = 'x'; // 내외국인구분 (고정값 'x')
$mblTelCmmCd = 'x'; // 이동통신사코드 (고정값 'x')
$mbphnNo = 'x'; // 휴대폰번호 (고정값 'x')
$svcTxSeqno = get_uniqid(); // 거래번호. 동일문자열을 두번 사용할 수 없음. ( 20자리의 문자열. 0-9,A-Z,a-z 사용.)
$clientIp = $_SERVER['SERVER_ADDR']; // 회원사 IP, $_SERVER["SERVER_ADDR"] 사용가능.
$clientDomain = $_SERVER['HTTP_HOST']; // 회원사 도메인, $_SERVER["HTTP_HOST"] 사용가능.
$rsv1 = '0'; // 예약 항목
$rsv2 = '0'; // 예약 항목
$rsv3 = '0'; // 예약 항목
$hsCertMsrCd = '10'; // 인증수단코드 2byte (10:핸드폰)
$hsCertRqstCausCd = '00'; // 인증요청사유코드 2byte (00:회원가입, 01:성인인증, 02:회원정보수정, 03:비밀번호찾기, 04:상품구매, 99:기타)
$returnMsg = 'x'; // 리턴메시지 (고정값 'x')
//okname 실행 정보
// ########################################################################
// # 모듈 경로 지정 및 권한 부여 (절대경로)
// ########################################################################
// 실행모듈
if(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
if(PHP_INT_MAX == 2147483647) // 32-bit
$exe = G4_OKNAME_PATH.'/bin/okname';
else
$exe = G4_OKNAME_PATH.'/bin/okname_x64';
} else {
if(PHP_INT_MAX == 2147483647) // 32-bit
$exe = G4_OKNAME_PATH.'/bin/okname.exe';
else
$exe = G4_OKNAME_PATH.'/bin/oknamex64.exe';
}
$logPath = G4_OKNAME_PATH.'/log'; // 로그파일을 남기는 경우 로그파일이 생성될 경로 option에 'L'이 포함된 경우에만 생성
$targetId = ''; // 타겟ID (팝업오픈 스크립트의 window.name 과 동일하게 설정
if($config['cf_cert_use'] == 2) {
// 실서비스일 경우
$endPointURL = 'http://safe.ok-name.co.kr/KcbWebService/OkNameService';
$commonSvlUrl = 'https://safe.ok-name.co.kr/CommonSvl';
$endPointUrl = 'http://safe.ok-name.co.kr/KcbWebService/OkNameService';
} else {
// 테스트일 경우
$endPointURL = 'http://tsafe.ok-name.co.kr:29080/KcbWebService/OkNameService';
$commonSvlUrl = 'https://tsafe.ok-name.co.kr:2443/CommonSvl';
$endPointUrl = 'http://tsafe.ok-name.co.kr:29080/KcbWebService/OkNameService';
}
// ########################################################################
// # 리턴 URL 설정
// ########################################################################
$returnUrl = G4_OKNAME_URL.'/hpcert2.php'; // 본인인증 완료후 리턴될 URL (도메인 포함 full path)
?>

68
plugin/okname/hpcert1.php Normal file
View File

@ -0,0 +1,68 @@
<?php
include_once('./_common.php');
include_once('./hpcert.config.php');
/**************************************************************************
okname 실행
**************************************************************************/
$option = "Q";
$cmd = "$exe $svcTxSeqno \"$name\" $birthday $gender $ntvFrnrTpCd $mblTelCmmCd $mbphnNo $rsv1 $rsv2 $rsv3 \"$returnMsg\" $returnUrl $inTpBit $hsCertMsrCd $hsCertRqstCausCd $memId $clientIp $clientDomain $endPointURL $logPath $option";
//cmd 실행
exec($cmd, $out, $ret);
/**************************************************************************
okname 응답 정보
**************************************************************************/
$retcode = ""; // 결과코드
$retmsg = ""; // 결과메시지
$e_rqstData = ""; // 암호화된요청데이터
if ($ret == 0) {//성공일 경우 변수를 결과에서 얻음
$retcode = $out[0];
$retmsg = $out[1];
$e_rqstData = $out[2];
}
else {
if($ret <=200)
$retcode=sprintf("B%03d", $ret);
else
$retcode=sprintf("S%03d", $ret);
}
$g4['title'] = 'KCB 휴대폰 본인확인';
include_once(G4_PATH.'/head.sub.php');
?>
<script>
function request(){
//window.name = "<?php echo $targetId; ?>";
document.form1.action = "<?php echo $commonSvlUrl; ?>";
document.form1.method = "post";
document.form1.submit();
}
</script>
<form name="form1">
<!-- 인증 요청 정보 -->
<!--// 필수 항목 -->
<input type="hidden" name="tc" value="kcb.oknm.online.safehscert.popup.cmd.P901_CertChoiceCmd"> <!-- 변경불가-->
<input type="hidden" name="rqst_data" value="<?php echo $e_rqstData; ?>"> <!-- 요청데이터 -->
<input type="hidden" name="target_id" value="<?php echo $targetId; ?>"> <!-- 타겟ID -->
<!-- 필수 항목 //-->
</form>
<?php
if ($retcode == "B000") {
//인증요청
echo ("<script>request();</script>");
} else {
//요청 실패 페이지로 리턴
echo ("<script>alert(\"$retcode\"); self.close();</script>");
}
include_once(G4_PATH.'/tail.sub.php');
?>

133
plugin/okname/hpcert2.php Normal file
View File

@ -0,0 +1,133 @@
<?php
include_once('./_common.php');
include_once('./hpcert.config.php');
/**************************************************************************
파일명 : safe_hs_cert3.php
생년월일 본인 확인서비스 결과 화면(return url)
**************************************************************************/
/* 공통 리턴 항목 */
$idcfMbrComCd = $_POST['idcf_mbr_com_cd']; // 고객사코드
$hsCertSvcTxSeqno = $_POST['hs_cert_svc_tx_seqno']; // 거래번호
$rqstSiteNm = $_POST['rqst_site_nm']; // 접속도메인
$hsCertRqstCausCd = $_POST['hs_cert_rqst_caus_cd']; // 인증요청사유코드 2byte (00:회원가입, 01:성인인증, 02:회원정보수정, 03:비밀번호찾기, 04:상품구매, 99:기타)
$resultCd = $_POST['result_cd']; // 결과코드
$resultMsg = $_POST['result_msg']; // 결과메세지
$certDtTm = $_POST['cert_dt_tm']; // 인증일시
if($resultCd != 'B000') {
alert_close('휴대폰 본인확인 중 오류가 발생했습니다. 오류코드 : '.$resultCd.'\\n\\n문의는 코리아크레딧뷰로 고객센터 02-708-1000 로 해주십시오.');
}
/**************************************************************************
* 모듈 호출 ; 생년월일 본인 확인서비스 결과 데이터를 복호화한다.
**************************************************************************/
$encInfo = $_POST['encInfo'];
//KCB서버 공개키
$WEBPUBKEY = trim($_POST['WEBPUBKEY']);
//KCB서버 서명값
$WEBSIGNATURE = trim($_POST['WEBSIGNATURE']);
// ########################################################################
// # 암호화키 파일 설정 (절대경로) - 파일은 주어진 파일명으로 자동 생성 됨
// ########################################################################
$keypath = G4_OKNAME_PATH.'/key/safecert_'.$idcfMbrComCd.'.key';
$cpubkey = $WEBPUBKEY; //server publickey
$csig = $WEBSIGNATURE; //server signature
// ########################################################################
// # 로그 경로 지정 및 권한 부여 (절대경로)
// # 옵션값에 'L'을 추가하는 경우에만 로그가 생성됨.
// ########################################################################
$option = 'SU';
// 명령어
$cmd = "$exe $keypath $idcfMbrComCd $endPointUrl $WEBPUBKEY $WEBSIGNATURE $encInfo $logPath $option";
// 실행
exec($cmd, $out, $ret);
if($ret == 0) {
// 결과라인에서 값을 추출
foreach($out as $a => $b) {
if($a < 17) {
$field[$a] = $b;
}
}
$resultCd = $field[0];
}
else {
if($ret <=200)
$resultCd=sprintf("B%03d", $ret);
else
$resultCd=sprintf("S%03d", $ret);
}
/*
echo "처리결과코드 :$resultCd <br/>";
echo "처리결과메시지 :$field[1] <br/>";
echo "거래일련번호 :$field[2] <br/>";
echo "인증일시 :$field[3] <br/>";
echo "DI :$field[4] <br/>";
echo "CI :$field[5] <br/>";
echo "성명 :$field[7] <br/>";
echo "생년월일 :$field[8] <br/>";
echo "성별 :$field[9] <br/>";
echo "내외국인구분 :$field[10] <br/>";
echo "통신사코드 :$field[11] <br/>";
echo "휴대폰번호 :$field[12] <br/>";
echo "리턴메시지 :$field[16] <br/>";
*/
// 인증결과처리
$mb_name = $field[7];
$req_num = $field[12];
$mb_birth = $field[8];
// 휴대폰번호 중복체크
$phone_no = hyphen_hp_number($req_num);
$sql = " select mb_id from {$g4['member_table']} where mb_id <> '{$member['mb_id']}' and mb_hp = '{$phone_no}' ";
$row = sql_fetch($sql);
if ($row['mb_id']) {
alert_close("이미 가입되어 있는 휴대폰번호 입니다.\\n회원아이디 : ".$row['mb_id']);
}
// hash 데이터
$cert_type = 'hp';
$md5_cert_no = md5($req_num);
$hash_data = md5($mb_name.$cert_type.$mb_birth.$md5_cert_no);
// 성인인증결과
$adult_day = date("Ymd", strtotime("-19 years", G4_SERVER_TIME));
$adult = ((int)$mb_birth <= (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', $mb_birth);
set_session('ss_cert_sex', ($field[9] == 1 ? 'M' : 'F'));
$g4['title'] = 'KCB 휴대폰 본인확인';
include_once(G4_PATH.'/head.sub.php');
?>
<script>
$(function() {
var $opener = window.opener;
$opener.$("input[name=cert_type]").val("<?php echo $cert_type; ?>");
$opener.$("input[name=mb_name]").val("<?php echo $mb_name; ?>").attr("readonly", true);
$opener.$("input[name=mb_hp]").val("<?php echo $phone_no; ?>").attr("readonly", true);
window.close();
});
</script>
<?php
include_once(G4_PATH.'/tail.sub.php');
?>

View File

@ -0,0 +1,44 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if(!$config['cf_cert_use'] || $config['cf_cert_ipin'] != 'kcb')
alert('기본환경설정에서 KCB 아이핀 본인확인 서비스로 설정해 주십시오.');
// key 디렉토리 체크
include_once('./key_dir_check.php');
// 실행모듈
if(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
if(PHP_INT_MAX == 2147483647) // 32-bit
$exe = G4_OKNAME_PATH.'/bin/okname';
else
$exe = G4_OKNAME_PATH.'/bin/okname_x64';
} else {
if(PHP_INT_MAX == 2147483647) // 32-bit
$exe = G4_OKNAME_PATH.'/bin/okname.exe';
else
$exe = G4_OKNAME_PATH.'/bin/oknamex64.exe';
}
if($config['cf_cert_use'] == 2) {
// 실서비스일 경우
$cpCode = $config['cf_cert_kcb_cd'];
$idpUrl = 'https://ipin.ok-name.co.kr/tis/ti/POTI90B_SendCertInfo.jsp';
$EndPointURL = 'http://www.ok-name.co.kr/KcbWebService/OkNameService'; // 운영 서버
$kcbForm_action = 'https://ipin.ok-name.co.kr/tis/ti/POTI01A_LoginRP.jsp';
} else {
// 테스트일 경우
$cpCode = 'P00000000000';
$idpUrl = 'https://tipin.ok-name.co.kr:8443/tis/ti/POTI90B_SendCertInfo.jsp';
$EndPointURL = 'http://twww.ok-name.co.kr:8888/KcbWebService/OkNameService'; //EndPointURL, 테스트 서버
$kcbForm_action = 'https://tipin.ok-name.co.kr:8443/tis/ti/POTI01A_LoginRP.jsp';
}
$idpCode = 'V';
$returnUrl = G4_OKNAME_URL.'/ipin2.php'; // 아이핀 인증을 마치고 돌아올 페이지 주소
$keypath = G4_OKNAME_PATH.'/key/okname.key'; // 키파일이 생성될 위치. 웹서버에 해당파일을 생성할 권한 필요.
$memid = $cpCode; // 회원사코드
$reserved1 = '0'; //reserved1
$reserved2 = '0'; //reserved2
$logpath = G4_OKNAME_PATH.'/log'; // 로그파일을 남기는 경우 로그파일이 생성될 경로 option에 'L'이 포함된 경우에만 생성
?>

53
plugin/okname/ipin1.php Normal file
View File

@ -0,0 +1,53 @@
<?php
include_once('./_common.php');
include_once('./ipin.config.php');
$option = "C";// Option
// 명령어
$cmd = "$exe $keypath $memid \"{$reserved1}\" \"{$reserved2}\" $EndPointURL $logpath $option";
// 실행
exec($cmd, $out, $ret);
if($ret == 127) {
alert_close('모듈실행 파일이 존재하지 않습니다.\\n\\n'.basename($exe).' 파일이 '.G4_PLUGIN_DIR.'/'.G4_OKNAME_DIR.'/bin 안에 있어야 합니다.');
}
if($ret == 126) {
alert_close('모듈실행 파일의 실행권한이 없습니다.\\n\\nchmod 755 '.basename($exe).' 과 같이 실행권한을 부여해 주십시오.');
}
if($ret == -1) {
alert_close('모듈실행 파일의 실행권한이 없습니다.\\n\\ncmd.exe의 IUSER 실행권한이 있는지 확인하여 주십시오.');
}
$pubkey = "";
$sig = "";
$curtime = "";
$pubkey=$out[0];
$sig=$out[1];
$curtime=$out[2];
$g4['title'] = 'KCB 아이핀 본인확인';
include_once(G4_PATH.'/head.sub.php');
?>
<form name="kcbInForm" method="post" action="<?php echo $kcbForm_action; ?>">
<input type="hidden" name="IDPCODE" value="<?php echo $idpCode; ?>" />
<input type="hidden" name="IDPURL" value="<?php echo $idpUrl; ?>" />
<input type="hidden" name="CPCODE" value="<?php echo $cpCode; ?>" />
<input type="hidden" name="CPREQUESTNUM" value="<?php echo $curtime; ?>" />
<input type="hidden" name="RETURNURL" value="<?php echo $returnUrl; ?>" />
<input type="hidden" name="WEBPUBKEY" value="<?php echo $pubkey; ?>" />
<input type="hidden" name="WEBSIGNATURE" value="<?php echo $sig; ?>" />
</form>
<script>
document.kcbInForm.submit();
</script>
<?php
include_once(G4_PATH.'/tail.sub.php');
?>

95
plugin/okname/ipin2.php Normal file
View File

@ -0,0 +1,95 @@
<?php
include_once('./_common.php');
include_once('./ipin.config.php');
//아이핀팝업에서 조회한 PERSONALINFO이다.
@$encPsnlInfo = $_POST["encPsnlInfo"];
//KCB서버 공개키
@$WEBPUBKEY = trim($_POST["WEBPUBKEY"]);
//KCB서버 서명값
@$WEBSIGNATURE = trim($_POST["WEBSIGNATURE"]);
//아이핀 서버와 통신을 위한 키파일 생성
// 파라미터 정의
$cpubkey = $WEBPUBKEY; //server publickey
$csig = $WEBSIGNATURE; //server signature
$encdata = $encPsnlInfo; //PERSONALINFO
$option = "SU";
// 명령어
$cmd = "$exe $keypath $memid $EndPointURL $cpubkey $csig $encdata $logpath $option";
// 실행
exec($cmd, $out, $ret);
if($ret != 0) {
if($ret <=200)
$resultCd=sprintf("B%03d", $ret);
else
$resultCd=sprintf("S%03d", $ret);
alert_close('아이핀 본인확인 중 오류가 발생했습니다. 오류코드 : '.$resultCd.'\\n\\n문의는 코리아크레딧뷰로 고객센터 02-708-1000 로 해주십시오.');
}
// 결과라인에서 값을 추출
foreach($out as $a => $b) {
if($a < 13) {
$field[$a] = $b;
}
}
/*
$field_name_IPIN_DEC = array(
"dupInfo ", // 0
"coinfo1 ", // 1
"coinfo2 ", // 2
"ciupdate ", // 3
"virtualNo ", // 4
"cpCode ", // 5
"realName ", // 6
"cpRequestNumber", // 7
"age ", // 8
"sex ", // 9
"nationalInfo ", // 10
"birthDate ", // 11
"authInfo ", // 12
);
*/
$mb_name = $field[6];
$req_num = $field[7];
$mb_birth = $field[11];
// hash 데이터
$cert_type = 'ipin';
$md5_cert_no = md5($req_num);
$hash_data = md5($mb_name.$cert_type.$mb_birth.$md5_cert_no);
// 성인인증결과
$adult = $field[8] > 5 ? 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', $mb_birth);
set_session('ss_cert_sex', ($field[9] == 1 ? 'M' : 'F'));
$g4['title'] = 'KCB 아이핀 본인확인';
include_once(G4_PATH.'/head.sub.php');
?>
<script>
$(function() {
var $opener = window.opener;
$opener.$("input[name=cert_type]").val("<?php echo $cert_type; ?>");
$opener.$("input[name=mb_name]").val("<?php echo $mb_name; ?>").attr("readonly", true);
window.close();
});
</script>
<?php
include_once(G4_PATH.'/tail.sub.php');
?>

View File

@ -0,0 +1,25 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
$key_dir = G4_OKNAME_PATH.'/key';
if(!is_dir($key_dir)) {
alert_close(G4_PLUGIN_DIR.'/'.G4_OKNAME_DIR.' 에 key 디렉토리를 생성해 주십시오.\\n\\n디렉토리 생성 후 쓰기권한을 부여해 주십시오. 예: chmod 707 key');
}
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi') {
if (!(is_readable($key_dir) && is_executable($key_dir)))
{
$msg = G4_PLUGIN_DIR.'/'.G4_OKNAME_DIR.'/key 디렉토리의 퍼미션을 705로 변경하여 주십시오.\\nchmod 705 key 또는 chmod uo+rx key';
alert_close($msg);
}
} else {
if (!(is_readable($key_dir) && is_writeable($key_dir) && is_executable($key_dir)))
{
$msg = G4_PLUGIN_DIR.'/'.G4_OKNAME_DIR.'/key 디렉토리의 퍼미션을 707로 변경하여 주십시오.\\n\\nchmod 707 key 또는 chmod uo+rwx key';
alert_close($msg);
}
}
}
?>