$pg, 'de_easy_pay_services' => $services,
'de_easy_pay_use' => $use, 'de_card_test' => 1, 'de_kcp_mid' => '', 'de_kcp_site_key' => '', 'de_inicis_pro_use' => 1));
}
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)';
foreach (array('toss', 'nicepay') as $pg) {
$default = settings($pg, $pg.'_naverpay,global_nhnkcp_naverpay');
foreach (array(false, true) as $mobile) {
$buttons = shop_easypay_buttons($mobile);
check(isset($buttons[$pg.'_naverpay']) && !isset($buttons['nhnkcp_naverpay']), '기본 PG 네이버페이 우선');
check(!is_use_easypay('global_nhnkcp'), '병용 요청 경로 차단');
}
$default = settings($pg, 'toss_configured,global_nhnkcp_naverpay');
check(isset(shop_easypay_buttons()['nhnkcp_naverpay']), '기본 PG 네이버페이 비활성 시 병용');
$default['de_card_test'] = 0;
check(!is_use_easypay('global_nhnkcp'), '실결제 인증정보 필수');
$default['de_kcp_mid'] = 'merchant'; $default['de_kcp_site_key'] = 'key';
check(is_use_easypay('global_nhnkcp'), '병용 인증정보 설정');
}
foreach (array('kcp', 'inicis', 'toss', 'nicepay') as $pg) {
$default = settings($pg, implode(',', array_keys(shop_easypay_catalog($pg))));
foreach (array(false, true) as $mobile) {
$buttons = shop_easypay_buttons($mobile);
foreach ($buttons as $key => $html) {
check(isset(shop_easypay_catalog($pg)[$key]), '다른 PG 설정 혼입 금지');
check((strpos($html, '
') === 0) === $mobile, 'PC/모바일 마크업');
check(strpos($html, 'data-pay="'.shop_easypay_catalog($pg)[$key][1].'"') !== false, '요청 provider');
}
check(strpos(implode('', $buttons), 'KPAY') === false, '범용 KPAY 중복 제거');
}
$default['de_easy_pay_use'] = 0;
check(!shop_easypay_buttons(), '간편결제 전체 비활성');
}
$default = settings('kcp', 'global_nhnkcp_naverpay');
check(!shop_easypay_buttons(), '병용 설정이 KCP 기본 네이버페이로 오인되지 않음');
$default = settings('lg', 'global_nhnkcp_naverpay,used_nhnkcp_naverpay_point', 0);
check(count(shop_easypay_buttons(true)) === 2, '병용 카드/머니 독립 노출');
$default = settings('inicis', 'inicis_samsungpay');
$default['de_inicis_pro_use'] = 0;
check(!shop_easypay_buttons(false) && count(shop_easypay_buttons(true)) === 1, '구 INIpay 삼성페이 모바일 제한');
$default = settings('toss', 'toss_configured,toss_applepay');
check(!shop_easypay_buttons(false) && count(shop_easypay_buttons(true)) === 1, '애플페이 iOS 모바일');
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Linux; Android 14)';
check(!shop_easypay_buttons(true), 'Android 애플페이 숨김');
$old = array('de_pg_service' => 'inicis', 'de_easy_pay_use' => 0, 'de_inicis_lpay_use' => 1);
$new = shop_easypay_normalize($old);
check($new['de_easy_pay_use'] && strpos($new['de_easy_pay_services'], 'inicis_lpay') !== false, '기존 이니시스 설정 승계');
$old['de_easy_pay_services'] = 'inicis_configured';
check(!shop_easypay_normalize($old)['de_inicis_lpay_use'], '명시적 선택 해제 유지');
$default = settings('toss', '');
check(isset(shop_easypay_buttons()['toss_payco']), '기존 토스 PAYCO 승계');
$default = settings('toss', 'toss_configured');
check(!shop_easypay_buttons(), '토스 전체 선택 해제 유지');
// 실제 승인 성공 처리 블록에 카드 없는 머니 결제와 복합결제 응답을 투입한다.
$source = file_get_contents(dirname(__DIR__).'/shop/toss/toss_result.php');
$start = strpos($source, ' // 공통 DB처리 변수 설정');
$end = strpos($source, "\n } else {", $start);
$code = substr($source, $start, $end - $start);
foreach (array(false, true) as $with_card) {
$method = '간편결제';
$toss = (object) array('easyPayCode' => array('NAVERPAY' => '네이버페이'), 'responseData' => array(
'paymentKey' => 'fixture-key', 'totalAmount' => 10000, 'useEscrow' => false, 'approvedAt' => '2026-09-09T12:00:00+09:00',
'easyPay' => array('provider' => 'NAVERPAY', 'amount' => 4000, 'discountAmount' => 1000),
'cashReceipt' => array('type' => '소득공제', 'receiptKey' => 'receipt', 'issueNumber' => '123', 'receiptUrl' => 'https://example.test/receipt')));
if ($with_card) $toss->responseData['card'] = array('approveNo' => '456', 'amount' => 5000);
$pg_receipt_infos = array();
eval($code);
check($amount === 10000 && $card_name === '네이버페이', '총 승인금액과 provider 유지');
check($app_no === ($with_card ? '456' : ''), '전액 머니/복합결제 승인번호');
check($pg_receipt_infos['od_cash'] === 1 && $pg_receipt_infos['od_cash_no'] === '123', '간편결제 현금영수증 보존');
}
echo "PG 간편결제 회귀 테스트 통과\n";