위토즈 - 개발자프로그램판매공간

정보공유

[그누보드팁] 크롬에서 결제만 되고 정상적으로 처리가 되지 않는 경우

크롬에서 결제 후 승인만 되고 다음화면으로 넘어가지 않는경우


크롬에서 결제도 되고 데이터도 등록되었는데 다음화면으로 넘어가지 않는경우


크롬에서 결제 후 세션처리에 문제가 있는 경우



아래와 같이 처리해보세요.


그누보드 기준 입니다. 영카트는 아래 코드가 존재하므로 pg_checks_pages 배열에 PG 결제사의 리턴페이지 목록 만 추가해주면 됩니다.


파일경로  : /common.php  


---------------------------------------------------------


ini_set("session.cookie_domain", G5_COOKIE_DOMAIN); 


[이곳에 아래 코드 적용]


$config = get_config();


---------------------------------------------------------



0a118740abf6919478078a5f7f0f51a8_1600085850_5227.png
 



-----------------------------------------------------------------------------------------------


if( ! class_exists('XenoPostToForm') ){

class XenoPostToForm

{

public static function check() {

return !isset($_COOKIE['PHPSESSID']) && count($_POST) && ((isset($_SERVER['HTTP_REFERER']) && !preg_match('~^https://'.preg_quote($_SERVER['HTTP_HOST'], '~').'/~', $_SERVER['HTTP_REFERER']) || ! isset($_SERVER['HTTP_REFERER']) ));

}


public static function submit($posts) {

echo '<html><head><meta charset="UTF-8"></head><body>';

echo '<form id="f" name="f" method="post">';

echo self::makeInputArray($posts);

echo '</form>';

echo '<script>';

echo 'document.f.submit();';

echo '</script></body></html>';

exit;

}


public static function makeInputArray($posts) {

$res = array();

foreach($posts as $k => $v) {

$res[] = self::makeInputArray_($k, $v);

}

return implode('', $res);

}


private static function makeInputArray_($k, $v) {

if(is_array($v)) {

$res = array();

foreach($v as $i => $j) {

$res[] = self::makeInputArray_($k.'['.htmlspecialchars($i).']', $j);

}

return implode('', $res);

}

return '<input type="hidden" name="'.$k.'" value="'.htmlspecialchars($v).'" />';

}

}

}


if( !function_exists('shop_check_is_pay_page') ){

function shop_check_is_pay_page(){

$shop_dir = 'shop';

$mobile_dir = G5_MOBILE_DIR;


// PG 결제사의 리턴페이지 목록들

$pg_checks_pages = array(

$shop_dir.'/inicis/INIStdPayReturn.php', // 영카트 5.2.9.5 이하에서 사용됨, 그 이상버전에서는 파일 삭제됨

$shop_dir.'/inicis/inistdpay_return.php', // 영카트 5.2.9.6 이상에서 사용됨

$mobile_dir.'/'.$shop_dir.'/inicis/pay_return.php',

$mobile_dir.'/'.$shop_dir.'/inicis/pay_approval.php',

$shop_dir.'/lg/returnurl.php',

$mobile_dir.'/'.$shop_dir.'/lg/returnurl.php',

$mobile_dir.'/'.$shop_dir.'/lg/xpay_approval.php',

            '--------------------------', // wetoz : 이곳에 결제 후 리턴되는 URL 을 등록합니다.

);


$server_script_name = str_replace('', '/', $_SERVER['SCRIPT_NAME']);


// PG 결제사의 리턴페이지이면

foreach( $pg_checks_pages as $pg_page ){

if( preg_match('~'.preg_quote($pg_page).'$~i', $server_script_name) ){

return true;

}

}


return false;

}

}


// PG 결제시에 세션이 없으면 내 호출페이지를 다시 호출하여 쿠키 PHPSESSID를 살려내어 세션값을 정상적으로 불러오게 합니다.

// 위와 같이 코드를 전부 한페이지에 넣은 이유는 이전 버전 사용자들이 패치시 어려울수 있으므로 한페이지에 코드를 다 넣었습니다.

if(XenoPostToForm::check()) {

if ( shop_check_is_pay_page() ){ // PG 결제 리턴페이지에서만 사용

XenoPostToForm::submit($_POST); // session_start(); 하기 전에

}

}


-----------------------------------------------------------------------------------------------





버전이 5.4.1.6 이하 버전인경우 아래 코드를 추가해야하는 경우도 있습니다.


$config = sql_fetch(" select * from {$g5['config_table']} "); 밑에 아래 코드가 추가되어 있는지 확인해보세요.



---------------------------------------------------------------------------------------


// 본인인증 또는 쇼핑몰 사용시에만 secure; SameSite=None 로 설정합니다.

// 크롬이슈에 반드시 대응할것이므로 아래 붉은색 부분은 삭제 합니다. 


if( $config['cf_cert_use'] || (defined('G5_YOUNGCART_VER') && G5_YOUNGCART_VER) ) {

// Chrome 80 버전부터 아래 이슈 대응

// https://developers-kr.googleblog.com/2020/01/developers-get-ready-for-new.html?fbclid=IwAR0wnJFGd6Fg9_WIbQPK3_FxSSpFLqDCr9bjicXdzy--CCLJhJgC9pJe5ss

if(!function_exists('session_start_samesite')) {

function session_start_samesite($options = array())

{

$res = @session_start($options);


// IE 브라우저 또는 엣지브라우저 일때는 secure; SameSite=None 을 설정하지 않습니다.

if( preg_match('/Edge/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']) || preg_match('~Trident/7.0(; Touch)?; rv:11.0~',$_SERVER['HTTP_USER_AGENT']) ){

return $res;

}


$headers = headers_list();

krsort($headers);

foreach ($headers as $header) {

if (!preg_match('~^Set-Cookie: PHPSESSID=~', $header)) continue;

$header = preg_replace('~; secure(; HttpOnly)?$~', '', $header) . '; secure; SameSite=None';

header($header, false);

break;

}

return $res;

}

}


session_start_samesite();

} else {

@session_start();

}


-----------------------------------------------------------------------------------------------




첨부파일

정보공유
Total 462건 1 페이지
번호 제목 글쓴이 날짜 조회
462 회원아이디 자동 생성 함수 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-20 16
461 중앙 토스트 레이어 , 버튼을 클릭하면 화면 중앙에 3초간 보였다가 fadeout 되는 레이어창. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-19 20
460 관리자 권한이 super 아니고 관리권한설정을 부여받은 회원이 관리자 화면에 접속했을때 부여받은 메뉴로 바로 접속되도록 처리 (2) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-15 160
459 관리자 권한이 super 아니고 관리권한설정을 부여받은 회원이 관리자 화면에 접속했을때 부여받은 메뉴로 바로 접속되도록 처리 (1) 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-15 163
458 SQL 주입 방지 Prepared Statement 의 생활화 mysqli PDO 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-15 135
457 크로스 사이트 스크립팅(XSS) 테스트 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-12 198
456 2일전부터 오늘까지의 데이터 정보 가져오기. 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-05 253
455 text input 박스 에 휴대폰번호 입력할때 자동으로 하이픈 넣기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-18 367
454 주소 정보 입력시 다음우편번호 스크립트를 사용할때 배열처리 할 경우 오류 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-11 492
453 자바스크립트를 이용해서 버튼 클릭시 이미지로 저장하는 방법 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-30 1048
452 내부망의 자료를 외부에 연결해서 사용하게 하고 싶을때 사용하는 ngrok 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-27 1216
451 html 폴더 생성하고 html 하위 파일은 확장자 없이도 연결가능하도록 .htaccess 파일 설정하기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-21 1315
450 on off 가능한 checkbox css + jquery 조합 버튼 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-17 1238
449 비동기식으로 초성 버튼 클릭 보여주기 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-13 1368
448 그누보드 관리자화면에 iframe 으로 띄울경우 엣지브라우저에서 튕기는 현상 위토즈쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-17 2455