- 정보공유
[그누보드팁] 크롬에서 결제만 되고 정상적으로 처리가 되지 않는 경우
크롬에서 결제 후 승인만 되고 다음화면으로 넘어가지 않는경우
크롬에서 결제도 되고 데이터도 등록되었는데 다음화면으로 넘어가지 않는경우
크롬에서 결제 후 세션처리에 문제가 있는 경우
아래와 같이 처리해보세요.
그누보드 기준 입니다. 영카트는 아래 코드가 존재하므로 pg_checks_pages 배열에 PG 결제사의 리턴페이지 목록 만 추가해주면 됩니다.
파일경로 : /common.php
---------------------------------------------------------
ini_set("session.cookie_domain", G5_COOKIE_DOMAIN);
[이곳에 아래 코드 적용]
$config = get_config();
---------------------------------------------------------
-----------------------------------------------------------------------------------------------
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 버전부터 아래 이슈 대응
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();
}
-----------------------------------------------------------------------------------------------
첨부파일
- code.txt (4.6K) 35회 다운로드 | DATE : 2020-12-22 10:44:27