레이아웃 scripts[] 에만 있던 원격 스크립트 차단 게이트가 다른 주입 경로에는 없어, 저장측(SafeLayoutExpressions·NoExternalUrls)이 외부 URL 저장을 422 로 막아도 런타임 디스패치 한 번으로 임의 원격 코드가 로드됐다. 저장 검증이 통째로 무의미해지는 상태였고 오류도 경고도 남지 않았다. 판정식을 support/scriptSrcPolicy.ts 로 분리해 런타임 SSoT 를 하나로 두고, loadScript 액션 · 확장 핸들러 재로드 · 편집기 프리뷰 · 편집기 자산 매니페스트 · G7Core.asset.loadScript · PG 플러그인 SDK 주입이 모두 그것을 경유하게 했다. 사본을 두지 않은 이유는 차집합이 그대로 우회로가 되기 때문이다. - 게이트는 캐시 검사보다 앞에 둔다 (뒤에 두면 이미 로드된 미신뢰 스크립트가 캐시 히트로 통과한다) - NoExternalUrls 순회를 9키로 확대 — 번들 레이아웃 601개 사전 스캔으로 정당한 외부 URL 0건을 확인한 뒤 넓혔다 (저장 회귀 없음) - callExternal 은 생성자를 참조 동일성으로 거부하고(별칭 전역 포함), 프로토타입 경로 세그먼트를 읽기·매핑 키 양쪽에서 차단한다 - PG SDK 는 서비스 SDK 라 자체 호스팅이 불가능하므로 manifest 선언 + 주입 직전 호스트 확인이 게이트다. tosspayments SDK URL 은 확장자가 없어 정적 검사에 걸리지 않아 그 런타임 확인이 유일한 게이트다 - 함께 드러난 결함: 동시 loadScript 가 로드 전에 완료 처리되던 문제, 확장 재로드에서 script 기존재가 CSS 까지 건너뛰던 문제, loadCSS 의 in-flight 미공유
318 lines
21 KiB
JSON
318 lines
21 KiB
JSON
{
|
|
"editor": {
|
|
"data_source": {
|
|
"kginicis_cbt_reconciliation": "Cross-border Reconciliation",
|
|
"kginicis_escrow_delivery": "Escrow Delivery",
|
|
"kginicis_status": "Payment Status",
|
|
"kginicis_test_mode_status": "Test Mode Status",
|
|
"kginicis_test_map": "Test Payment Map",
|
|
"settings": "Payment Settings",
|
|
"vbank_info": "Virtual Account Info"
|
|
}
|
|
},
|
|
"messages": {
|
|
"refund": {
|
|
"missing_tid": "Cannot process refund: transaction ID is missing.",
|
|
"default_reason": "Admin cancellation"
|
|
},
|
|
"errors": {
|
|
"order_not_found": "Order not found.",
|
|
"amount_mismatch": "Payment amount does not match.",
|
|
"authorize_failed": "Payment authorization failed.",
|
|
"signature_mismatch": "Signature verification failed.",
|
|
"cbt_failed": "Japan payment (CBT) authorization failed."
|
|
},
|
|
"cbt_connectivity": {
|
|
"checked": "CBT host connectivity diagnostic completed.",
|
|
"check_failed": "Connectivity diagnostic failed."
|
|
},
|
|
"cbt_reconciliation": {
|
|
"not_retryable": "This CBT refund item is not retryable.",
|
|
"retry_success": "CBT refund retry completed.",
|
|
"retry_failed": "CBT refund retry failed."
|
|
},
|
|
"cbt_cvs": {
|
|
"not_cvs": "This order is not a CBT convenience store payment.",
|
|
"not_test_mode": "Deposit notification simulation is available only for test-mode CBT convenience store orders.",
|
|
"not_waiting_deposit": "This CBT convenience store order is not waiting for deposit.",
|
|
"not_expirable": "Only overdue CBT convenience store orders waiting for deposit can be marked as expired.",
|
|
"simulate_failed": "CBT convenience store deposit notification simulation failed.",
|
|
"simulate_success": "CBT convenience store deposit notification simulation completed.",
|
|
"expire_success": "The CBT convenience store order was marked as deposit expired.",
|
|
"recheck_success": "CBT convenience store local status was rechecked."
|
|
},
|
|
"settings_validation": {
|
|
"test_japan_sign_key_required": "The test Japan CBT hash key is required to use Japan payment (CBT).",
|
|
"live_japan_mid_required": "The live Japan MID is required to use Japan payment (CBT) in live mode.",
|
|
"live_japan_sign_key_required": "The live Japan CBT hash key is required to use Japan payment (CBT) in live mode.",
|
|
"japan_merchant_name_required": "Merchant name for the live Japan payment window is required.",
|
|
"japan_merchant_name_kana_required": "Merchant name Kana for the live Japan payment window is required.",
|
|
"japan_merchant_name_alphabet_required": "Alphabet merchant name for the live Japan payment window is required.",
|
|
"japan_merchant_name_short_required": "Short merchant name for the live Japan payment window is required.",
|
|
"japan_contact_name_required": "Contact name for the live Japan payment window is required.",
|
|
"japan_contact_email_required": "Contact email for the live Japan payment window is required.",
|
|
"japan_contact_phone_required": "Contact phone for the live Japan payment window is required.",
|
|
"japan_contact_opening_hours_required": "Contact opening hours for the live Japan payment window are required.",
|
|
"replace_sample_value": "Replace the sample Japan merchant display information with your real contract information in live mode."
|
|
}
|
|
},
|
|
"payment_error": {
|
|
"title": "Payment Error",
|
|
"message": "An error occurred while processing the payment."
|
|
},
|
|
"user": {
|
|
"test_mode_badge": "Test Payment",
|
|
"payment_type_label": "Payment Type",
|
|
"receipt_label": "Receipt",
|
|
"receipt_view": "View Receipt",
|
|
"escrow_confirm_button": "Confirm Purchase",
|
|
"tax_breakdown_title": "Tax Breakdown",
|
|
"supply_amount": "Supply Amount",
|
|
"vat_amount": "VAT",
|
|
"tax_free_amount": "Tax-Free Amount"
|
|
},
|
|
"admin": {
|
|
"test_mode_badge": "Test Payment",
|
|
"test_mode_warning_badge": "Test Payment WARNING)",
|
|
"test_mode_order_notice": "This order was processed in test mode. Real card authorization/withdrawal notifications may occur, but KG Inicis test transactions may be automatically cancelled daily between 23:00 and 23:50. DO NOT ship this order.",
|
|
"test_mode_settings_warning_plugin": "KG Inicis",
|
|
"test_mode_settings_warning_title": "Warning: KG Inicis payments are currently set to test mode.",
|
|
"test_mode_settings_warning_body": "Test payments do not create real payments. If the shop is live, switch this plugin to live payment mode before operating.",
|
|
"test_mode_settings_warning_action": "Switch to live mode",
|
|
"order_verify_title": "KG Inicis Payment Verification",
|
|
"order_verify_description": "Query real-time payment status from KG Inicis servers.",
|
|
"order_verify_button": "Query Payment",
|
|
"order_verify_error": "An error occurred while querying payment status.",
|
|
"cbt_reconciliation_title": "CBT Follow-up Check",
|
|
"cbt_reconciliation_description": "Shows local processing failures after CBT approval and automatic refund results.",
|
|
"cbt_reconciliation_manual_badge": "Admin Review Needed",
|
|
"cbt_reconciliation_refunded_badge": "Auto-refunded",
|
|
"cbt_reconciliation_manual_hint": "Automatic refund failed. Retry the refund for the TID below, or cancel it manually in the KG Inicis JP merchant console if needed.",
|
|
"cbt_reconciliation_refunded_hint": "A local processing failure was detected after CBT approval, and the payment was automatically refunded.",
|
|
"cbt_reconciliation_retry_button": "Retry Refund",
|
|
"cbt_reconciliation_retrying": "Retrying...",
|
|
"cbt_reconciliation_retry_success": "CBT refund retry completed.",
|
|
"cbt_reconciliation_retry_error": "CBT refund retry failed. Please try again later or cancel it manually in the KG Inicis merchant console.",
|
|
"cbt_reconciliation_tid": "TID",
|
|
"cbt_reconciliation_amount": "Amount",
|
|
"cbt_reconciliation_reason": "Reason",
|
|
"cbt_reconciliation_refund_error": "Refund Error",
|
|
"cbt_reconciliation_updated_at": "Updated At",
|
|
"cbt_reconciliation_retry_count": "Retry Count",
|
|
"cbt_cvs_ops_title": "CBT Convenience Store Deposit",
|
|
"cbt_cvs_ops_description": "Review Japan convenience store deposit notification (NOTI) history, pending deposit status, and test deposit handling.",
|
|
"cbt_cvs_notify_url": "NOTI URL",
|
|
"cbt_cvs_payment_status": "Payment Status",
|
|
"cbt_cvs_cvs_status": "Deposit Status",
|
|
"cbt_cvs_amount": "Expected Amount",
|
|
"cbt_cvs_due_at": "Deposit Due",
|
|
"cbt_cvs_last_notify": "Last NOTI",
|
|
"cbt_cvs_last_recheck": "Last Recheck",
|
|
"cbt_cvs_history_title": "NOTI History",
|
|
"cbt_cvs_history_empty": "No deposit notifications have been received yet.",
|
|
"cbt_cvs_recheck_button": "Recheck Status",
|
|
"cbt_cvs_rechecking": "Rechecking...",
|
|
"cbt_cvs_simulate_button": "Simulate Paid NOTI",
|
|
"cbt_cvs_simulating": "Processing...",
|
|
"cbt_cvs_expire_button": "Mark Deposit Expired",
|
|
"cbt_cvs_expiring": "Expiring...",
|
|
"cbt_cvs_recheck_success": "CBT convenience store status was rechecked.",
|
|
"cbt_cvs_simulate_success": "CBT convenience store paid simulation was processed.",
|
|
"cbt_cvs_expire_success": "The CBT convenience store order was marked as deposit expired.",
|
|
"cbt_cvs_action_error": "CBT convenience store action failed.",
|
|
"pay_status_approved": "Approved",
|
|
"pay_status_cancelled": "Cancelled",
|
|
"pay_status_unknown": "Unknown",
|
|
"escrow_badge": "Escrow",
|
|
"escrow_yes": "Escrow",
|
|
"escrow_no": "Standard",
|
|
"result_auth_code": "Auth Code",
|
|
"result_auth_date": "Auth Date",
|
|
"result_pay_method": "Pay Method",
|
|
"result_result_code": "Result Code",
|
|
"result_total_price": "Total Amount",
|
|
"result_moid": "Order No.",
|
|
"result_inquiry_at": "Inquired At",
|
|
"result_card_name": "Card Issuer",
|
|
"result_card_num": "Card Number",
|
|
"result_card_quota": "Installment",
|
|
"result_card_interest": "Interest-free",
|
|
"result_vbank_bank_name": "Bank",
|
|
"result_vbank_num": "Virtual Account",
|
|
"result_vbank_holder": "Account Holder",
|
|
"result_vbank_expire_date": "Due Date",
|
|
"result_vbank_paid_at": "Deposited At",
|
|
"result_bank_name": "Transfer Bank",
|
|
"result_bank_acnt_num": "Account No.",
|
|
"result_hpp_num": "Phone Number",
|
|
"result_hpp_corp": "Carrier",
|
|
"result_buyer_name": "Buyer",
|
|
"result_buyer_email": "Email",
|
|
"result_buyer_tel": "Phone",
|
|
"result_cancel_price": "Cancel Amount",
|
|
"result_cancel_date": "Cancelled At",
|
|
"result_cancel_msg": "Cancel Reason",
|
|
"section_card": "Card Payment Details",
|
|
"section_vbank": "Virtual Account Details",
|
|
"section_directbank": "Bank Transfer Details",
|
|
"section_hpp": "Mobile Payment Details",
|
|
"section_buyer": "Buyer Information",
|
|
"section_cancel": "Cancellation Summary",
|
|
"section_part_cancel_list": "Partial Cancellation History",
|
|
"vbank_status_paid": "Paid",
|
|
"vbank_status_unpaid": "Unpaid",
|
|
"raw_response_toggle": "Show Raw Response (JSON)",
|
|
"pay_method": {
|
|
"card": "Credit Card",
|
|
"wcard": "Overseas Card",
|
|
"vbank": "Virtual Account",
|
|
"directbank": "Bank Transfer",
|
|
"hpp": "Mobile",
|
|
"easypay": "Easy Pay",
|
|
"point": "Points",
|
|
"gift": "Gift Certificate",
|
|
"paybook": "Book Voucher",
|
|
"billing": "Recurring",
|
|
"samsungpay": "Samsung Pay",
|
|
"kakaopay": "Kakao Pay",
|
|
"lpay": "L.pay",
|
|
"payco": "Payco",
|
|
"naverpay": "Naver Pay",
|
|
"tosspay": "Toss Pay",
|
|
"ssgpay": "SSG Pay",
|
|
"paypay": "PayPay",
|
|
"cvs": "Japan Convenience Store"
|
|
},
|
|
"escrow_delivery_title": "Escrow Delivery Registration",
|
|
"escrow_delivery_description": "Register delivery information for KG Inicis escrow payment.",
|
|
"escrow_delivery_invoice_label": "Invoice No.",
|
|
"escrow_delivery_invoice_placeholder": "Enter invoice number",
|
|
"escrow_delivery_courier_label": "Courier",
|
|
"escrow_delivery_courier_placeholder": "Select courier",
|
|
"escrow_delivery_register_button": "Register",
|
|
"escrow_delivery_change_button": "Update",
|
|
"escrow_delivery_registering": "Registering...",
|
|
"escrow_delivery_success": "Delivery has been registered.",
|
|
"escrow_delivery_error": "Failed to register delivery.",
|
|
"escrow_delivery_already_registered": "Registered",
|
|
"escrow_delivery_registered_at": "Registered At",
|
|
"escrow_delivery_invoice_info": "Invoice No.",
|
|
"escrow_delivery_courier_info": "Courier",
|
|
"escrow_delivery_recv_addr": "Delivery Address",
|
|
"escrow_deny_confirm_title": "Escrow Denial Confirmation",
|
|
"escrow_deny_confirm_description": "Seller confirmation for buyer's purchase denial.",
|
|
"escrow_deny_confirm_button": "Confirm Denial",
|
|
"escrow_deny_confirming": "Processing...",
|
|
"escrow_deny_confirm_success": "Denial confirmation completed.",
|
|
"escrow_deny_confirm_error": "Failed to confirm denial.",
|
|
"escrow_deny_confirm_done": "Denial Confirmed",
|
|
"escrow_deny_confirm_done_at": "Confirmed At",
|
|
"escrow_deny_confirm_status_label": "Purchase Status",
|
|
"escrow_deny_confirm_buyer_denied": "Denied by Buyer"
|
|
},
|
|
"settings": {
|
|
"title": "KG Inicis Settings",
|
|
"description": "Manage KG Inicis payment plugin settings.",
|
|
"test_mode": "Test Mode",
|
|
"test_mode_hint": "Real card authorization/withdrawal notifications may still occur in test mode; test transactions may be automatically cancelled daily between 23:00 and 23:50.",
|
|
"live_mode_warning_title": "Live Mode Active",
|
|
"live_mode_warning_body": "Real payments will occur. Verify that your live MID and keys are configured correctly.",
|
|
"section_live_keys": "Live Credentials",
|
|
"section_live_keys_hint": "All live keys below can be found in your KG Inicis merchant console → Shop Info → Contract Info → KEY Information. Keep them secret.",
|
|
"live_mid": "Live Merchant ID (MID)",
|
|
"live_mid_hint": "Live MID issued by KG Inicis (enter without the SIR prefix)",
|
|
"live_mid_example": "e.g.: shoptest → full MID used will be SIRshoptest",
|
|
"live_sign_key": "Live Sign Key",
|
|
"live_sign_key_hint": "Used to generate the payment window signature (SignKey).",
|
|
"live_iniapi_key": "Live INIAPI Key",
|
|
"live_iniapi_key_hint": "Used to authenticate cancel / inquiry API calls.",
|
|
"live_iniapi_iv": "Live INIAPI IV",
|
|
"live_iniapi_iv_hint": "Initialization vector for cancel / inquiry API encryption.",
|
|
"live_mobile_hash_key": "Live Mobile Anti-Forgery Hash Key",
|
|
"live_mobile_hash_key_hint": "Used to generate P_CHKFAKE on the mobile payment page.",
|
|
"section_easy_pay": "Easy Pay",
|
|
"section_easy_pay_hint": "Configure KG Inicis easy pay services.",
|
|
"easy_pay_allow_with_other_pg": "Allow with Other PG",
|
|
"easy_pay_allow_with_other_pg_hint": "When enabled, KG Inicis easy pay buttons are shown on checkout even when another PG is configured as the default provider.",
|
|
"easy_pay_samsung_pay": "Enable Samsung Pay (KG Inicis)",
|
|
"easy_pay_samsung_pay_hint": "Enable only if Samsung Pay is contracted separately with KG Inicis. Enter your live KG Inicis merchant ID and web sign key before live payments.",
|
|
"easy_pay_naverpay": "Enable Naver Pay (KG Inicis)",
|
|
"easy_pay_naverpay_hint": "Enable only if Naver Pay is contracted separately with KG Inicis. Enter your live KG Inicis merchant ID and web sign key before live payments.",
|
|
"easy_pay_lpay": "Enable L.pay (KG Inicis)",
|
|
"easy_pay_lpay_hint": "Enable KG Inicis L.pay. Enter your live KG Inicis merchant ID and web sign key before live payments.",
|
|
"easy_pay_kakaopay": "Enable Kakao Pay (KG Inicis)",
|
|
"easy_pay_kakaopay_hint": "Enable KG Inicis Kakao Pay. Enter your live KG Inicis merchant ID and web sign key before live payments.",
|
|
"section_japan": "Japan Payment (CBT)",
|
|
"section_japan_hint": "Settings for Japanese Yen (JPY) payments via KG Inicis CBT (Cross Border Trade).",
|
|
"japan_enabled": "Enable Japan Payment",
|
|
"japan_enabled_hint": "Requires a separate CBT MID for Japanese Yen (JPY) payments.",
|
|
"japan_restrict_jpy_payment_methods": "Restrict JPY Payment Methods",
|
|
"japan_restrict_jpy_payment_methods_hint": "When enabled, JPY orders can proceed through CBT only with credit card, PayPay, or Japan convenience store payment. When disabled, the selected payment method is not restricted.",
|
|
"test_japan_cbt_key": "Test Japan CBT Hash Key",
|
|
"test_japan_cbt_key_hint": "Test KEY used for CBT hash data generation.",
|
|
"live_japan_mid": "Live Japan MID",
|
|
"live_japan_mid_hint": "Live MID issued by KG Inicis CBT service.",
|
|
"live_japan_cbt_key": "Live Japan CBT Hash Key",
|
|
"live_japan_cbt_key_hint": "Live KEY used for CBT hash data generation. Keep this key secret.",
|
|
"jppg_merchant_info_title": "JPPG Payment Window Merchant Info",
|
|
"jppg_merchant_info_hint": "Merchant and contact information included in the KG Inicis CBT JPPG extraData payload. Replace sample values with your live Japan payment contract information before launch.",
|
|
"japan_merchant_name": "Merchant Name",
|
|
"japan_merchant_name_kana": "Merchant Name Kana",
|
|
"japan_merchant_name_alphabet": "Merchant Name Alphabet",
|
|
"japan_merchant_name_short": "Merchant Short Name",
|
|
"japan_contact_name": "Contact Name",
|
|
"japan_contact_email": "Contact Email",
|
|
"japan_contact_phone": "Contact Phone",
|
|
"japan_contact_opening_hours": "Contact Opening Hours",
|
|
"cbt_helper_title": "CBT Test Helper",
|
|
"cbt_helper_description": "Instantly create a sample product priced in JPY (100 yen) for Japan Payment (CBT) verification. After creation, switch the site language to Japanese and select KG Inicis as the payment method to open the CBT payment window.",
|
|
"cbt_helper_create_button": "Create CBT Test Product",
|
|
"cbt_helper_products_link": "Open Products Admin",
|
|
"cbt_helper_create_success": "Test product created successfully.",
|
|
"cbt_helper_create_error": "Failed to create the test product. Please try again later.",
|
|
"cbt_helper_admin_edit_link": "Admin Product Edit",
|
|
"cbt_helper_shop_link": "Open Shop (Japanese)",
|
|
"cbt_connectivity_title": "DEVCBT Host Connectivity Diagnostic (Test)",
|
|
"cbt_connectivity_description": "The KG Inicis DEVCBT host (devcbt.inicis.com) requires the public IP that sends the payment/authentication request to be whitelisted by KG Inicis in advance. If your server or proxy connects to DEVCBT, register the Egress IP or Server Address shown below. If the user's browser is redirected directly to the DEVCBT payment page during testing, also request registration for the user's public PC IP. For example, if the current tester PC public IP is 59.10.38.149 and the server/proxy IP is 183.109.71.154, send both IPs to KG Inicis for registration. The user's public PC IP can change by tester and location, so each tester should verify their own IP. (The production host cbt.inicis.com has no whitelist restriction and is excluded from this diagnostic.)",
|
|
"cbt_connectivity_check_button": "Run Diagnostic",
|
|
"cbt_connectivity_egress_ip_label": "Egress IP (server/proxy candidate)",
|
|
"cbt_connectivity_server_ip_label": "Server Address (candidate)",
|
|
"cbt_connectivity_unknown": "Detection failed",
|
|
"cbt_connectivity_dns_label": "DNS",
|
|
"cbt_connectivity_tcp_label": "TCP 443",
|
|
"cbt_connectivity_reachable": "reachable",
|
|
"cbt_connectivity_unreachable": "unreachable",
|
|
"cbt_connectivity_env_test": "Dev (Test mode)",
|
|
"cbt_connectivity_check_error": "Connectivity diagnostic failed. Please try again later.",
|
|
"cbt_connectivity_hint_egress": "The IP KG Inicis sees when the server reaches DEVCBT through a firewall, NAT, or proxy. Register this IP when testing through a proxy.",
|
|
"cbt_connectivity_hint_whitelist": "devcbt is only reachable after KG Inicis whitelists your IP. If the browser goes directly to DEVCBT during testing, the current user's public PC IP, such as 59.10.38.149, is also a registration target.",
|
|
"cbt_callback_title": "APP_URL / CBT Callback URL Check",
|
|
"cbt_callback_app_url_label": "APP_URL",
|
|
"cbt_callback_url_label": "CBT callback URL",
|
|
"cbt_callback_https_label": "HTTPS",
|
|
"cbt_callback_public_label": "Public Domain",
|
|
"cbt_callback_host_match_label": "Domain Match",
|
|
"cbt_callback_ok": "OK",
|
|
"cbt_callback_check": "Check",
|
|
"cbt_callback_hint": "The CBT returnUrl is where the browser returns after the external KG Inicis payment window. Verify that APP_URL is an HTTPS public domain and matches the callback URL host.",
|
|
"section_escrow": "Escrow Payment",
|
|
"section_escrow_hint": "Escrow payment holds the buyer's payment until the product is received, then releases it to the seller.",
|
|
"use_escrow": "Enable Escrow Payment",
|
|
"use_escrow_hint": "When enabled, PC payments append useescrow to acceptmethod and mobile payments append useescrow=Y to P_RESERVED.",
|
|
"section_redirect": "Redirect URLs",
|
|
"redirect_success_url": "Payment Success Redirect URL",
|
|
"redirect_success_url_hint": "{shopBase} is filled in from the storefront address setting. You may also enter a full URL (https://...). {orderId} will be replaced with the actual order number.",
|
|
"redirect_fail_url": "Payment Failure Redirect URL",
|
|
"redirect_fail_url_hint": "Supports relative paths or full URLs. Error details are appended as query parameters.",
|
|
"section_vbank_notify": "Virtual Account Deposit Notification URL (PC)",
|
|
"vbank_notify_hint": "Register this URL as the PC virtual account deposit notification URL in the KG Inicis merchant admin.",
|
|
"vbank_notify_copied": "URL copied to clipboard.",
|
|
"copy": "Copy"
|
|
},
|
|
"payment": {
|
|
"error": {
|
|
"sdk_url_untrusted": "The payment module address is not valid, so the payment cannot proceed. Please contact the administrator."
|
|
}
|
|
}
|
|
}
|