[FEAT] 金流配置與機台系統設定整合進 B014,補完機台端設定下發
1. 金流配置表單語意分組與多語系:綠界發票/玉山掃碼/Line官方支付/Tappay 四區 label 改用無歧義 key 並補齊 en/ja/zh_TW,發票區新增「發票通知 Email」欄位。 2. B014 密鑰讀取對齊金流配置巢狀結構(esun_scan/tappay/ecpay_invoice),發票改讀 payment_configs(不再讀 companies 表),統一以 data_get 安全取值。 3. B014 機台系統設定全面改以機台端 *Set + PascalCase 風格下發:DevSet/CashSet/FunctionSet/ShoppingMode/OperationSet(運作參數)/HardwareSet(硬體與貨道),移除原始 key 雜燴的 MachineSettings 物件。 4. 釐清 LINE Pay 兩條路線:DevLinePay 對應「Line官方支付」官方直連(scan_pay_linepay_enabled)、TapPay30 對應 TapPay 底下 LINE Pay(tappay_linepay)。 5. 機台系統設定 modal 新增「Line官方支付」開關(置於掃碼支付下方),並納入支付方式全選;機台清單「啟用功能」同步顯示。 6. 移除卡片支付子項(悠遊卡/一卡通/icash),卡片支付開啟即視為全支援。 7. 編輯機台頁移除「會員與外部系統」區塊與「發票開立狀態」欄位(會員/來店禮改由機台系統設定管理)。 8. 同步更新 API 文件(api-technical-specs SKILL.md 與 config/api-docs.php),逐項標註回應參數對應來源與機台既有/新定義結構。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
722993a078
commit
ed79a6ab32
@ -168,20 +168,38 @@ description: 本技能規範定義了 Star Cloud 系統中所有機台 (IoT) 與
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| machine | String | 是 | 機台編號 (serial_no) | M-001 |
|
||||
|
||||
- **資料來源**: 所有金流密鑰與電子發票設定,均取自機台關聯的「金流配置 (`payment_configs.settings`)」巢狀結構;機台須先在後台關聯一組金流配置 (`machines.payment_config_id`),未設值欄位回傳空字串 `""`。
|
||||
- **Response Body (Success 200 - Object):**
|
||||
|
||||
| 欄位 (Key) | 說明 | 備註 |
|
||||
| 欄位 (Key) | 說明 | 來源 (payment_configs.settings) |
|
||||
| :--- | :--- | :--- |
|
||||
| **t050v01** | 機台序號 | 即 machine_id |
|
||||
| **api_token** | **機台正式 Token** | 初始化後應存於本地,後續 API 認證用 |
|
||||
| **t050v41** | 玉山特店編號 | ESUN Merchant ID |
|
||||
| **t050v42** | 玉山終端編號 | ESUN Terminal ID |
|
||||
| **t050v43** | 玉山 Hash Key | ESUN Hash |
|
||||
| **t050v34** | 發票特店 ID | Invoice Merchant ID |
|
||||
| **t050v35** | 發票 Hash Key | Invoice Key |
|
||||
| **t050v36** | 發票 Hash IV | Invoice IV |
|
||||
| **TP_APP_ID** | 趨勢支付 AppID | TrendPay ID |
|
||||
| **TP_APP_KEY** | 趨勢支付 Key | TrendPay Key |
|
||||
| **t050v01** | 機台序號 | machines.serial_no |
|
||||
| **api_token** | **機台正式 Token** | machines.api_token(初始化後存本地,後續認證用)|
|
||||
| **t050v41** | 玉山特店編號 | `esun_scan.store_id` |
|
||||
| **t050v42** | 玉山終端編號 | `esun_scan.term_id` |
|
||||
| **t050v43** | 玉山 Hash Key | `esun_scan.key` |
|
||||
| **t050v34** | 發票特店 ID | `ecpay_invoice.store_id` |
|
||||
| **t050v35** | 發票 Hash Key | `ecpay_invoice.hash_key` |
|
||||
| **t050v36** | 發票 Hash IV | `ecpay_invoice.hash_iv` |
|
||||
| **t050v38** | 發票通知 Email | `ecpay_invoice.email` |
|
||||
| **TP_APP_ID** | 趨勢/TapPay AppID | `tappay.app_id` |
|
||||
| **TP_APP_KEY** | 趨勢/TapPay Key | `tappay.app_key` |
|
||||
| **TP_PARTNER_KEY** | TapPay Partner Key | `tappay.partner_key` |
|
||||
| **TP_LINE_MERCHANT_ID** | LINE Pay 特店 ID | `tappay.line_merchant_id` |
|
||||
| **TP_JKO_MERCHANT_ID** | 街口支付 特店 ID | `tappay.jko_merchant_id` |
|
||||
| **TP_PI_MERCHANT_ID** | Pi 拍錢包 特店 ID | `tappay.pi_merchant_id` |
|
||||
| **TP_PS_MERCHANT_ID** | 全盈+Pay 特店 ID | `tappay.ps_merchant_id` |
|
||||
| **TP_EASY_MERCHANT_ID** | 悠遊付 特店 ID | `tappay.easy_merchant_id` |
|
||||
| **DevSet** | 支付旗標物件(命名沿用機台 `DevSetStructure`)| 機台既有:`ShoppingCar`(shopping_cart_enabled)/`Invoice`(tax_invoice_enabled)/`DevNFCPay`(card_terminal_enabled)/`DevEsunPay`(scan_pay_esun_enabled)/`DevTapPay`(scan_pay_tappay_enabled)/`DevCash`(cash_module_enabled)/`DevLinePay`(scan_pay_linepay_enabled LINE Pay 官方直連)/`TapPay30`(tappay_linepay TapPay 底下 LINE Pay)/`TapPay31`(tappay_jkopay 街口)/`TapPay32`(tappay_easywallet 悠遊付)/`TapPay33`(tappay_pipay)/`TapPay34`(tappay_pluspay 全盈+)。**新定義**(機台待新增欄位):`DevCreditCard`(credit_card_enabled)/`DevMobilePay`(mobile_pay_enabled)/`DevCardPay`(card_pay_enabled)/`DevScanPay`(scan_pay_enabled)。`VMC`/`Electic` 雲端不下發。註:LINE Pay 有兩條路線 —— `DevLinePay`=官方直連、`TapPay30`=經 TapPay,兩者來源不同|
|
||||
| **CashSet** | 現金面額旗標物件(對齊 `CashSetStructure`)| machines.settings → `BillF1000`/`BillE500`/`BillD100`/`CoinF50`/`CoinE10`/`CoinD5`/`CoinC1` |
|
||||
| **FunctionSet** | 非支付功能模組旗標物件(**新定義**,機台待實作)| machines.settings → `PickupModule`(pickup_module_enabled)/`PickupCode`(pickup_code_enabled)/`PassCode`(pass_code_enabled)/`WelcomeGift`(welcome_gift_enabled)/`MemberSystem`(member_system_enabled)/`AmbientTemp`(ambient_temp_monitoring_enabled) |
|
||||
| **ShoppingMode** | 購物方式(字串,**新定義**)| machines.settings.shopping_mode:`basic` / `employee_card` / `pickup_sheet` |
|
||||
| **OperationSet** | 運作參數(**新定義**,來源 machines 實體欄位)| `CardReaderSeconds`(card_reader_seconds 整數)/`PaymentBufferSeconds`(payment_buffer_seconds 整數)/`CheckoutTime1`(card_reader_checkout_time_1 時間字串)/`CheckoutTime2`(card_reader_checkout_time_2)/`HeatingStartTime`(heating_start_time)/`HeatingEndTime`(heating_end_time) |
|
||||
| **HardwareSet** | 硬體與貨道(**新定義**,來源 machines 實體欄位)| `CardReaderNo`(card_reader_no 字串)/`SpringSlot1_10`~`SpringSlot51_60`(is_spring_slot_* 布林,true=彈簧 / false=履帶) |
|
||||
|
||||
> 註:
|
||||
> - 金流密鑰/發票來源已由「公司設定 (companies.settings)」改為「金流配置 (payment_configs.settings)」,並新增 `t050v38` 發票通知 Email。
|
||||
> - 機台系統設定全部以機台端 `*Set` + PascalCase 風格下發(`DevSet`/`CashSet`/`FunctionSet`/`ShoppingMode`/`OperationSet`/`HardwareSet`),不再有原始 key 雜燴物件。`DevSet`/`CashSet` 對齊機台既有結構;其餘(含 `DevCreditCard/DevMobilePay/DevCardPay/DevScanPay`、`FunctionSet`、`ShoppingMode`、`OperationSet`、`HardwareSet`)為新定義,機台 App 端需另案新增對應結構與消費邏輯。旗標/設定來源為 `machines.settings`,運作參數與硬體貨道來源為 machines 實體欄位。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -212,15 +212,12 @@ class MachineSettingController extends AdminController
|
||||
'heating_end_time' => 'nullable|string',
|
||||
'card_reader_no' => 'nullable|string|max:255',
|
||||
'key_no' => 'nullable|string|max:255',
|
||||
'invoice_status' => 'required|integer|in:0,1,2',
|
||||
'welcome_gift_enabled' => 'boolean',
|
||||
'is_spring_slot_1_10' => 'boolean',
|
||||
'is_spring_slot_11_20' => 'boolean',
|
||||
'is_spring_slot_21_30' => 'boolean',
|
||||
'is_spring_slot_31_40' => 'boolean',
|
||||
'is_spring_slot_41_50' => 'boolean',
|
||||
'is_spring_slot_51_60' => 'boolean',
|
||||
'member_system_enabled' => 'boolean',
|
||||
'tax_invoice_enabled' => 'boolean',
|
||||
'card_terminal_enabled' => 'boolean',
|
||||
'scan_pay_esun_enabled' => 'boolean',
|
||||
@ -374,9 +371,6 @@ class MachineSettingController extends AdminController
|
||||
$jsonSettings['credit_card_enabled'] = false;
|
||||
$jsonSettings['mobile_pay_enabled'] = false;
|
||||
$jsonSettings['card_pay_enabled'] = false;
|
||||
$jsonSettings['card_pay_easycard'] = false;
|
||||
$jsonSettings['card_pay_ipass'] = false;
|
||||
$jsonSettings['card_pay_icash'] = false;
|
||||
|
||||
$jsonSettings['scan_pay_enabled'] = false;
|
||||
$jsonSettings['scan_pay_tappay_enabled'] = false;
|
||||
@ -400,9 +394,6 @@ class MachineSettingController extends AdminController
|
||||
$jsonSettings['credit_card_enabled'] = isset($settings['credit_card_enabled']) ? (bool)$settings['credit_card_enabled'] : false;
|
||||
$jsonSettings['mobile_pay_enabled'] = isset($settings['mobile_pay_enabled']) ? (bool)$settings['mobile_pay_enabled'] : false;
|
||||
$jsonSettings['card_pay_enabled'] = isset($settings['card_pay_enabled']) ? (bool)$settings['card_pay_enabled'] : false;
|
||||
$jsonSettings['card_pay_easycard'] = isset($settings['card_pay_easycard']) ? (bool)$settings['card_pay_easycard'] : false;
|
||||
$jsonSettings['card_pay_ipass'] = isset($settings['card_pay_ipass']) ? (bool)$settings['card_pay_ipass'] : false;
|
||||
$jsonSettings['card_pay_icash'] = isset($settings['card_pay_icash']) ? (bool)$settings['card_pay_icash'] : false;
|
||||
|
||||
$jsonSettings['scan_pay_enabled'] = isset($settings['scan_pay_enabled']) ? (bool)$settings['scan_pay_enabled'] : false;
|
||||
$jsonSettings['scan_pay_tappay_enabled'] = isset($settings['scan_pay_tappay_enabled']) ? (bool)$settings['scan_pay_tappay_enabled'] : false;
|
||||
|
||||
@ -423,37 +423,108 @@ class MachineController extends Controller
|
||||
], 404);
|
||||
}
|
||||
|
||||
// 2. 獲取關聯設定 (依據使用者要求,跳過權限校驗,只要有序號即可獲取)
|
||||
// 2. 獲取金流配置 (依據使用者要求,跳過權限校驗,只要有序號即可獲取)
|
||||
// 來源統一為 payment_configs.settings 的巢狀結構 (對齊「編輯金流配置」表單)
|
||||
$paymentSettings = $machine->paymentConfig->settings ?? [];
|
||||
$companySettings = $machine->company->settings ?? [];
|
||||
|
||||
// 4. 映射 App 預期欄位 (嚴格遵守 HttpAPI.java 結構)
|
||||
// 4. 映射 App 預期欄位 (輸出鍵維持 HttpAPI.java 結構,僅改值來源為巢狀)
|
||||
$data = [
|
||||
't050v01' => $machine->serial_no,
|
||||
'api_token' => $machine->api_token, // 向 App 核發正式通訊 Token
|
||||
|
||||
// 玉山支付
|
||||
't050v41' => $paymentSettings['esun_store_id'] ?? '',
|
||||
't050v42' => $paymentSettings['esun_term_id'] ?? '',
|
||||
't050v43' => $paymentSettings['esun_hash'] ?? '',
|
||||
// 玉山掃碼 (esun_scan)
|
||||
't050v41' => data_get($paymentSettings, 'esun_scan.store_id') ?? '',
|
||||
't050v42' => data_get($paymentSettings, 'esun_scan.term_id') ?? '',
|
||||
't050v43' => data_get($paymentSettings, 'esun_scan.key') ?? '',
|
||||
|
||||
// 電子發票 (綠界)
|
||||
't050v34' => $companySettings['invoice_merchant_id'] ?? '',
|
||||
't050v35' => $companySettings['invoice_hash_key'] ?? '',
|
||||
't050v36' => $companySettings['invoice_hash_iv'] ?? '',
|
||||
't050v38' => $companySettings['invoice_email'] ?? '',
|
||||
// 綠界電子發票 (ecpay_invoice) — 改讀金流配置,不再讀 company.settings
|
||||
't050v34' => data_get($paymentSettings, 'ecpay_invoice.store_id') ?? '',
|
||||
't050v35' => data_get($paymentSettings, 'ecpay_invoice.hash_key') ?? '',
|
||||
't050v36' => data_get($paymentSettings, 'ecpay_invoice.hash_iv') ?? '',
|
||||
't050v38' => data_get($paymentSettings, 'ecpay_invoice.email') ?? '',
|
||||
|
||||
// 趨勢支付 (TrendPay/Greenpay)
|
||||
'TP_APP_ID' => $paymentSettings['tp_app_id'] ?? '',
|
||||
'TP_APP_KEY' => $paymentSettings['tp_app_key'] ?? '',
|
||||
'TP_PARTNER_KEY' => $paymentSettings['tp_partner_key'] ?? '',
|
||||
// TapPay / 趨勢支付 (tappay)
|
||||
'TP_APP_ID' => data_get($paymentSettings, 'tappay.app_id') ?? '',
|
||||
'TP_APP_KEY' => data_get($paymentSettings, 'tappay.app_key') ?? '',
|
||||
'TP_PARTNER_KEY' => data_get($paymentSettings, 'tappay.partner_key') ?? '',
|
||||
|
||||
// 各類行動支付特店 ID
|
||||
'TP_LINE_MERCHANT_ID' => $paymentSettings['tp_line_merchant_id'] ?? '',
|
||||
'TP_PS_MERCHANT_ID' => $paymentSettings['tp_ps_merchant_id'] ?? '',
|
||||
'TP_EASY_MERCHANT_ID' => $paymentSettings['tp_easy_merchant_id'] ?? '',
|
||||
'TP_PI_MERCHANT_ID' => $paymentSettings['tp_pi_merchant_id'] ?? '',
|
||||
'TP_JKO_MERCHANT_ID' => $paymentSettings['tp_jko_merchant_id'] ?? '',
|
||||
// 各類行動支付特店 ID (tappay.*_merchant_id)
|
||||
'TP_LINE_MERCHANT_ID' => data_get($paymentSettings, 'tappay.line_merchant_id') ?? '',
|
||||
'TP_PS_MERCHANT_ID' => data_get($paymentSettings, 'tappay.ps_merchant_id') ?? '',
|
||||
'TP_EASY_MERCHANT_ID' => data_get($paymentSettings, 'tappay.easy_merchant_id') ?? '',
|
||||
'TP_PI_MERCHANT_ID' => data_get($paymentSettings, 'tappay.pi_merchant_id') ?? '',
|
||||
'TP_JKO_MERCHANT_ID' => data_get($paymentSettings, 'tappay.jko_merchant_id') ?? '',
|
||||
];
|
||||
|
||||
// 5. 機台系統設定 (machines.settings) → 全部以機台端 *Set + PascalCase 風格下發。
|
||||
// 註:機台 App 端目前讀本地設定,需另案修改 App 才會實際消費此處下發值。
|
||||
$s = $machine->settings ?? [];
|
||||
|
||||
// 5-1 DevSet:支付旗標(命名沿用機台 DevSetStructure;DevCreditCard/DevMobilePay/
|
||||
// DevCardPay/DevScanPay 為我方新定義,機台端需比照新增欄位)
|
||||
$data['DevSet'] = [
|
||||
'ShoppingCar' => (bool) ($s['shopping_cart_enabled'] ?? false), // 購物車
|
||||
'Invoice' => (bool) ($s['tax_invoice_enabled'] ?? false), // 電子發票
|
||||
'DevNFCPay' => (bool) ($s['card_terminal_enabled'] ?? false), // 刷卡機(總開關)
|
||||
'DevCreditCard' => (bool) ($s['credit_card_enabled'] ?? false), // 信用卡支付(新定義)
|
||||
'DevMobilePay' => (bool) ($s['mobile_pay_enabled'] ?? false), // 手機支付(新定義)
|
||||
'DevCardPay' => (bool) ($s['card_pay_enabled'] ?? false), // 卡片支付(新定義)
|
||||
'DevScanPay' => (bool) ($s['scan_pay_enabled'] ?? false), // 掃碼(總開關,新定義)
|
||||
'DevEsunPay' => (bool) ($s['scan_pay_esun_enabled'] ?? false), // 玉山掃碼
|
||||
'DevTapPay' => (bool) ($s['scan_pay_tappay_enabled'] ?? false), // TapPay 掃碼
|
||||
'DevCash' => (bool) ($s['cash_module_enabled'] ?? false), // 現金
|
||||
'DevLinePay' => (bool) ($s['scan_pay_linepay_enabled'] ?? false), // LINE Pay 官方直連(Line官方支付,與 TapPay30 不同)
|
||||
'TapPay30' => (bool) ($s['tappay_linepay'] ?? false), // TapPay 底下的 LINE Pay
|
||||
'TapPay31' => (bool) ($s['tappay_jkopay'] ?? false), // TapPay-街口支付
|
||||
'TapPay32' => (bool) ($s['tappay_easywallet'] ?? false), // TapPay-悠遊付
|
||||
'TapPay33' => (bool) ($s['tappay_pipay'] ?? false), // TapPay-Pi 支付
|
||||
'TapPay34' => (bool) ($s['tappay_pluspay'] ?? false), // TapPay-全盈+支付
|
||||
// 註:VMC/Electic 為機台硬體類型,雲端無來源,由機台本地保留
|
||||
];
|
||||
|
||||
// 5-2 CashSet:現金面額(對齊機台 CashSetStructure)
|
||||
$data['CashSet'] = [
|
||||
'BillF1000' => (bool) ($s['cash_bill_1000'] ?? false),
|
||||
'BillE500' => (bool) ($s['cash_bill_500'] ?? false),
|
||||
'BillD100' => (bool) ($s['cash_bill_100'] ?? false),
|
||||
'CoinF50' => (bool) ($s['cash_coin_50'] ?? false),
|
||||
'CoinE10' => (bool) ($s['cash_coin_10'] ?? false),
|
||||
'CoinD5' => (bool) ($s['cash_coin_5'] ?? false),
|
||||
'CoinC1' => (bool) ($s['cash_coin_1'] ?? false),
|
||||
];
|
||||
|
||||
// 5-3 FunctionSet:非支付功能模組旗標(我方新定義,機台端待實作對應結構)
|
||||
$data['FunctionSet'] = [
|
||||
'PickupModule' => (bool) ($s['pickup_module_enabled'] ?? false), // 取貨模組
|
||||
'PickupCode' => (bool) ($s['pickup_code_enabled'] ?? false), // 取貨碼
|
||||
'PassCode' => (bool) ($s['pass_code_enabled'] ?? false), // 通行碼
|
||||
'WelcomeGift' => (bool) ($s['welcome_gift_enabled'] ?? false), // 來店禮
|
||||
'MemberSystem' => (bool) ($s['member_system_enabled'] ?? false), // 會員系統
|
||||
'AmbientTemp' => (bool) ($s['ambient_temp_monitoring_enabled'] ?? false), // 環境溫度監控
|
||||
];
|
||||
|
||||
// 5-4 ShoppingMode:購物方式(頂層字串)
|
||||
$data['ShoppingMode'] = (string) ($s['shopping_mode'] ?? 'basic'); // basic / employee_card / pickup_sheet
|
||||
|
||||
// 5-5 OperationSet:運作參數(machines 實體欄位)
|
||||
$data['OperationSet'] = [
|
||||
'CardReaderSeconds' => (int) ($machine->card_reader_seconds ?? 0), // 刷卡機秒數
|
||||
'PaymentBufferSeconds' => (int) ($machine->payment_buffer_seconds ?? 0), // 金流緩衝秒數
|
||||
'CheckoutTime1' => (string) ($machine->card_reader_checkout_time_1 ?? ''), // 結帳時間 1
|
||||
'CheckoutTime2' => (string) ($machine->card_reader_checkout_time_2 ?? ''), // 結帳時間 2
|
||||
'HeatingStartTime' => (string) ($machine->heating_start_time ?? ''), // 加熱開始時間
|
||||
'HeatingEndTime' => (string) ($machine->heating_end_time ?? ''), // 加熱結束時間
|
||||
];
|
||||
|
||||
// 5-6 HardwareSet:硬體與貨道(machines 實體欄位;SpringSlot* true=彈簧 / false=履帶)
|
||||
$data['HardwareSet'] = [
|
||||
'CardReaderNo' => (string) ($machine->card_reader_no ?? ''), // 刷卡機編號
|
||||
'SpringSlot1_10' => (bool) $machine->is_spring_slot_1_10,
|
||||
'SpringSlot11_20' => (bool) $machine->is_spring_slot_11_20,
|
||||
'SpringSlot21_30' => (bool) $machine->is_spring_slot_21_30,
|
||||
'SpringSlot31_40' => (bool) $machine->is_spring_slot_31_40,
|
||||
'SpringSlot41_50' => (bool) $machine->is_spring_slot_41_50,
|
||||
'SpringSlot51_60' => (bool) $machine->is_spring_slot_51_60,
|
||||
];
|
||||
|
||||
return response()->json([
|
||||
|
||||
@ -78,7 +78,7 @@ return [
|
||||
'slug' => 'b014-config-download',
|
||||
'method' => 'GET',
|
||||
'path' => '/api/v1/app/machine/setting/B014',
|
||||
'description' => '透過此介面下載金流金鑰、電子發票設定與機台專屬通訊 Token。',
|
||||
'description' => '透過此介面下載金流金鑰、電子發票設定與機台專屬通訊 Token。金流密鑰與發票設定均取自機台關聯的「金流配置 (payment_configs.settings)」,未設值欄位回傳空字串。',
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
],
|
||||
@ -94,18 +94,102 @@ return [
|
||||
'success' => [
|
||||
'type' => 'boolean',
|
||||
'description' => '是否成功',
|
||||
'example' => true
|
||||
],
|
||||
'data' => [
|
||||
'type' => 'object',
|
||||
'description' => '配置物件。包含:t050v01 (序號), api_token (通訊 Token), t050v41~43 (玉山設定), t050v34~38 (發票設定), TP_... (趨勢/手機支付設定)',
|
||||
'example' => [
|
||||
't050v01' => 'SN202604130001',
|
||||
'api_token' => 'mac_token_...',
|
||||
't050v41' => '80812345',
|
||||
't050v34' => '2000132',
|
||||
'TP_APP_ID' => 'GP_001'
|
||||
]
|
||||
'description' => '配置物件,下列各欄位皆位於 data 之下。金鑰/發票來源為機台關聯的「金流配置 (payment_configs.settings)」;DevSet / CashSet / FunctionSet / ShoppingMode 來源為「機台系統設定 (machines.settings)」,OperationSet / HardwareSet 來源為 machines 實體欄位,皆採機台端 *Set + PascalCase 風格。',
|
||||
],
|
||||
'data.t050v01' => [
|
||||
'type' => 'string',
|
||||
'description' => '機台序號 ← machines.serial_no',
|
||||
],
|
||||
'data.api_token' => [
|
||||
'type' => 'string',
|
||||
'description' => '機台正式通訊 Token ← machines.api_token(初始化後存本地,後續 API 認證用)',
|
||||
],
|
||||
'data.t050v41' => [
|
||||
'type' => 'string',
|
||||
'description' => '玉山掃碼 StoreID ← 金流配置 esun_scan.store_id',
|
||||
],
|
||||
'data.t050v42' => [
|
||||
'type' => 'string',
|
||||
'description' => '玉山掃碼 TermID ← 金流配置 esun_scan.term_id',
|
||||
],
|
||||
'data.t050v43' => [
|
||||
'type' => 'string',
|
||||
'description' => '玉山掃碼 Key ← 金流配置 esun_scan.key',
|
||||
],
|
||||
'data.t050v34' => [
|
||||
'type' => 'string',
|
||||
'description' => '綠界發票 商店代號 ← 金流配置 ecpay_invoice.store_id',
|
||||
],
|
||||
'data.t050v35' => [
|
||||
'type' => 'string',
|
||||
'description' => '綠界發票 HashKey ← 金流配置 ecpay_invoice.hash_key',
|
||||
],
|
||||
'data.t050v36' => [
|
||||
'type' => 'string',
|
||||
'description' => '綠界發票 HashIV ← 金流配置 ecpay_invoice.hash_iv',
|
||||
],
|
||||
'data.t050v38' => [
|
||||
'type' => 'string',
|
||||
'description' => '綠界發票 通知 Email ← 金流配置 ecpay_invoice.email',
|
||||
],
|
||||
'data.TP_APP_ID' => [
|
||||
'type' => 'string',
|
||||
'description' => 'TapPay App ID ← 金流配置 tappay.app_id',
|
||||
],
|
||||
'data.TP_APP_KEY' => [
|
||||
'type' => 'string',
|
||||
'description' => 'TapPay App Key ← 金流配置 tappay.app_key',
|
||||
],
|
||||
'data.TP_PARTNER_KEY' => [
|
||||
'type' => 'string',
|
||||
'description' => 'TapPay Partner Key ← 金流配置 tappay.partner_key',
|
||||
],
|
||||
'data.TP_LINE_MERCHANT_ID' => [
|
||||
'type' => 'string',
|
||||
'description' => 'LINE Pay 特店 ID ← 金流配置 tappay.line_merchant_id',
|
||||
],
|
||||
'data.TP_JKO_MERCHANT_ID' => [
|
||||
'type' => 'string',
|
||||
'description' => '街口支付 特店 ID ← 金流配置 tappay.jko_merchant_id',
|
||||
],
|
||||
'data.TP_PI_MERCHANT_ID' => [
|
||||
'type' => 'string',
|
||||
'description' => 'Pi 拍錢包 特店 ID ← 金流配置 tappay.pi_merchant_id',
|
||||
],
|
||||
'data.TP_PS_MERCHANT_ID' => [
|
||||
'type' => 'string',
|
||||
'description' => '全盈+Pay 特店 ID ← 金流配置 tappay.ps_merchant_id',
|
||||
],
|
||||
'data.TP_EASY_MERCHANT_ID' => [
|
||||
'type' => 'string',
|
||||
'description' => '悠遊付 特店 ID ← 金流配置 tappay.easy_merchant_id',
|
||||
],
|
||||
'data.DevSet' => [
|
||||
'type' => 'object',
|
||||
'description' => "支付旗標(命名沿用機台 DevSetStructure;布林)。機台既有欄位:\n• ShoppingCar ← shopping_cart_enabled(購物車)\n• Invoice ← tax_invoice_enabled(電子發票)\n• DevNFCPay ← card_terminal_enabled(刷卡機總開關)\n• DevEsunPay ← scan_pay_esun_enabled(玉山掃碼)\n• DevTapPay ← scan_pay_tappay_enabled(TapPay 掃碼)\n• DevCash ← cash_module_enabled(現金)\n• DevLinePay ← scan_pay_linepay_enabled(LINE Pay 官方直連)\n• TapPay30 ← tappay_linepay(TapPay 底下的 LINE Pay)\n• TapPay31 ← tappay_jkopay(街口支付)\n• TapPay32 ← tappay_easywallet(悠遊付)\n• TapPay33 ← tappay_pipay(Pi 支付)\n• TapPay34 ← tappay_pluspay(全盈+支付)\n新定義(機台端待新增欄位):\n• DevCreditCard ← credit_card_enabled(信用卡)\n• DevMobilePay ← mobile_pay_enabled(手機支付)\n• DevCardPay ← card_pay_enabled(卡片支付)\n• DevScanPay ← scan_pay_enabled(掃碼總開關)\n(VMC/Electic 為機台硬體類型,雲端不下發)",
|
||||
],
|
||||
'data.CashSet' => [
|
||||
'type' => 'object',
|
||||
'description' => "現金面額旗標(命名對齊機台端 CashSetStructure;布林):\n• BillF1000 / BillE500 / BillD100 ← cash_bill_1000 / 500 / 100\n• CoinF50 / CoinE10 / CoinD5 / CoinC1 ← cash_coin_50 / 10 / 5 / 1",
|
||||
],
|
||||
'data.FunctionSet' => [
|
||||
'type' => 'object',
|
||||
'description' => "非支付功能模組旗標(新定義,機台端待實作對應結構;布林):\n• PickupModule ← pickup_module_enabled(取貨模組)\n• PickupCode ← pickup_code_enabled(取貨碼)\n• PassCode ← pass_code_enabled(通行碼)\n• WelcomeGift ← welcome_gift_enabled(來店禮)\n• MemberSystem ← member_system_enabled(會員系統)\n• AmbientTemp ← ambient_temp_monitoring_enabled(環境溫度監控)",
|
||||
],
|
||||
'data.ShoppingMode' => [
|
||||
'type' => 'string',
|
||||
'description' => '購物方式(新定義)← machines.settings.shopping_mode:basic / employee_card / pickup_sheet',
|
||||
],
|
||||
'data.OperationSet' => [
|
||||
'type' => 'object',
|
||||
'description' => "運作參數(新定義;來源 machines 實體欄位):\n• CardReaderSeconds ← card_reader_seconds(整數,刷卡機秒數)\n• PaymentBufferSeconds ← payment_buffer_seconds(整數,金流緩衝秒數)\n• CheckoutTime1 ← card_reader_checkout_time_1(時間字串)\n• CheckoutTime2 ← card_reader_checkout_time_2\n• HeatingStartTime ← heating_start_time(加熱開始)\n• HeatingEndTime ← heating_end_time(加熱結束)",
|
||||
],
|
||||
'data.HardwareSet' => [
|
||||
'type' => 'object',
|
||||
'description' => "硬體與貨道(新定義;來源 machines 實體欄位):\n• CardReaderNo ← card_reader_no(字串,刷卡機編號)\n• SpringSlot1_10 / 11_20 / 21_30 / 31_40 / 41_50 / 51_60 ← is_spring_slot_*(布林,true=彈簧 / false=履帶)",
|
||||
],
|
||||
],
|
||||
'request' => [],
|
||||
@ -119,10 +203,73 @@ return [
|
||||
't050v42' => '9001',
|
||||
't050v43' => 'hash_key',
|
||||
't050v34' => '2000132',
|
||||
'TP_APP_ID' => 'GP_001'
|
||||
't050v35' => 'invoice_hash_key',
|
||||
't050v36' => 'invoice_hash_iv',
|
||||
't050v38' => 'invoice@example.com',
|
||||
'TP_APP_ID' => 'GP_001',
|
||||
'TP_APP_KEY' => 'app_key_...',
|
||||
'TP_PARTNER_KEY' => 'partner_key_...',
|
||||
'TP_LINE_MERCHANT_ID' => 'LINE_M_001',
|
||||
'TP_JKO_MERCHANT_ID' => 'JKO_M_001',
|
||||
'TP_PI_MERCHANT_ID' => 'PI_M_001',
|
||||
'TP_PS_MERCHANT_ID' => 'PS_M_001',
|
||||
'TP_EASY_MERCHANT_ID' => 'EASY_M_001',
|
||||
'DevSet' => [
|
||||
'ShoppingCar' => true,
|
||||
'Invoice' => true,
|
||||
'DevNFCPay' => true,
|
||||
'DevCreditCard' => true,
|
||||
'DevMobilePay' => true,
|
||||
'DevCardPay' => false,
|
||||
'DevScanPay' => true,
|
||||
'DevEsunPay' => true,
|
||||
'DevTapPay' => false,
|
||||
'DevCash' => true,
|
||||
'DevLinePay' => true,
|
||||
'TapPay30' => false,
|
||||
'TapPay31' => true,
|
||||
'TapPay32' => false,
|
||||
'TapPay33' => false,
|
||||
'TapPay34' => false,
|
||||
],
|
||||
'CashSet' => [
|
||||
'BillF1000' => true,
|
||||
'BillE500' => true,
|
||||
'BillD100' => true,
|
||||
'CoinF50' => true,
|
||||
'CoinE10' => true,
|
||||
'CoinD5' => true,
|
||||
'CoinC1' => true,
|
||||
],
|
||||
'FunctionSet' => [
|
||||
'PickupModule' => false,
|
||||
'PickupCode' => false,
|
||||
'PassCode' => false,
|
||||
'WelcomeGift' => false,
|
||||
'MemberSystem' => false,
|
||||
'AmbientTemp' => false,
|
||||
],
|
||||
'ShoppingMode' => 'basic',
|
||||
'OperationSet' => [
|
||||
'CardReaderSeconds' => 30,
|
||||
'PaymentBufferSeconds' => 5,
|
||||
'CheckoutTime1' => '22:30:00',
|
||||
'CheckoutTime2' => '23:45:00',
|
||||
'HeatingStartTime' => '00:00:00',
|
||||
'HeatingEndTime' => '00:00:00',
|
||||
],
|
||||
'HardwareSet' => [
|
||||
'CardReaderNo' => 'CR-001',
|
||||
'SpringSlot1_10' => true,
|
||||
'SpringSlot11_20' => false,
|
||||
'SpringSlot21_30' => false,
|
||||
'SpringSlot31_40' => false,
|
||||
'SpringSlot41_50' => false,
|
||||
'SpringSlot51_60' => false,
|
||||
],
|
||||
]
|
||||
],
|
||||
'notes' => '此 API 為機台初始化引導用,目前不強制驗證 User Token。'
|
||||
'notes' => '此 API 為機台初始化引導用,目前不強制驗證 User Token。金流密鑰與發票設定來源為機台關聯的金流配置 (payment_configs);DevSet / CashSet / FunctionSet / ShoppingMode 來源為 machines.settings、OperationSet / HardwareSet 來源為 machines 實體欄位,全部採機台端 *Set + PascalCase 風格(DevSet/CashSet 對齊機台既有結構,其餘為新定義,機台 App 端需另案實作)。'
|
||||
],
|
||||
[
|
||||
'name' => 'B005: 廣告清單同步 (Ad Sync)',
|
||||
|
||||
21
lang/en.json
21
lang/en.json
@ -601,7 +601,7 @@
|
||||
"E.SUN QR Pay": "E.SUN QR Pay",
|
||||
"E.SUN QR Scan": "E.SUN QR Scan",
|
||||
"E.SUN QR Scan Settings Description": "E.SUN QR Scan Settings Description",
|
||||
"EASY_MERCHANT_ID": "EASY_MERCHANT_ID",
|
||||
"EASY_MERCHANT_ID": "EASY_MERCHANT_ID (EasyWallet)",
|
||||
"ECPay Invoice": "ECPay Invoice",
|
||||
"ECPay Invoice Settings Description": "ECPay Invoice Settings Description",
|
||||
"ESUN": "ESUN",
|
||||
@ -934,17 +934,21 @@
|
||||
"Inventory Stable": "Inventory Stable",
|
||||
"Inventory synced with machine": "Inventory synced with machine",
|
||||
"Invoice Date": "Invoice Date",
|
||||
"Invoice HashIV": "Invoice HashIV",
|
||||
"Invoice HashKey": "Invoice HashKey",
|
||||
"Invoice Information": "Invoice Information",
|
||||
"Invoice Notification Email": "Invoice Notification Email",
|
||||
"Invoice Number": "Invoice Number",
|
||||
"Invoice Number / Flow ID": "Invoice Number / Flow ID",
|
||||
"Invoice Number / Time": "Invoice Number / Time",
|
||||
"Invoice Status": "Invoice Status",
|
||||
"Invoice Store ID": "Invoice Store ID",
|
||||
"Issued At": "Issued At",
|
||||
"Item List": "Item List",
|
||||
"Items": "Items",
|
||||
"JKO Pay": "JKO Pay",
|
||||
"JKOPAY": "JKOPAY",
|
||||
"JKO_MERCHANT_ID": "JKO_MERCHANT_ID",
|
||||
"JKO_MERCHANT_ID": "JKO_MERCHANT_ID (JKOPAY)",
|
||||
"Japanese": "Japanese",
|
||||
"Joined": "Joined",
|
||||
"Just now": "Just now",
|
||||
@ -954,6 +958,9 @@
|
||||
"LINE Pay": "LINE Pay",
|
||||
"LINE Pay Direct": "LINE Pay Direct",
|
||||
"LINE Pay Direct Settings Description": "LINE Pay Direct Settings Description",
|
||||
"LINE-ChannelId": "LINE-ChannelId",
|
||||
"LINE-ChannelSecret": "LINE-ChannelSecret",
|
||||
"LINE_MERCHANT_ID": "LINE_MERCHANT_ID (LINE Pay)",
|
||||
"LINE_PAY_CHANNEL_ID": "LINE_PAY_CHANNEL_ID",
|
||||
"LIVE": "LIVE",
|
||||
"Last 7 Days": "Last 7 Days",
|
||||
@ -1411,12 +1418,12 @@
|
||||
"Overall Capacity": "Overall Capacity",
|
||||
"Owner": "Owner",
|
||||
"PARTNER_KEY": "PARTNER_KEY",
|
||||
"PI_MERCHANT_ID": "PI_MERCHANT_ID",
|
||||
"PI_MERCHANT_ID": "PI_MERCHANT_ID (Pi Wallet)",
|
||||
"PNG, JPG up to 2MB": "PNG, JPG up to 2MB",
|
||||
"PNG, JPG, WEBP up to 10MB": "PNG, JPG, WEBP up to 10MB",
|
||||
"POS Reboot": "POS Reboot",
|
||||
"PS_LEVEL": "PS_LEVEL",
|
||||
"PS_MERCHANT_ID": "PS_MERCHANT_ID",
|
||||
"PS_MERCHANT_ID": "PS_MERCHANT_ID (PlusPay)",
|
||||
"Page 0": "Page 0",
|
||||
"Page 1": "Page 1",
|
||||
"Page 2": "Page 2",
|
||||
@ -1743,9 +1750,12 @@
|
||||
"Saved.": "Saved.",
|
||||
"Saving...": "Saving...",
|
||||
"Scale level and access control": "Scale level and access control",
|
||||
"Scan Key": "Scan Key",
|
||||
"Scan Pay": "Scan Pay",
|
||||
"Scan Payment": "Scan Payment",
|
||||
"Scan QR Code": "Scan QR Code",
|
||||
"Scan Store ID": "Scan Store ID",
|
||||
"Scan Term ID": "Scan Term ID",
|
||||
"Scan this code at the machine or share the link with the customer.": "Scan this code at the machine or share the link with the customer.",
|
||||
"Scan this code at the machine to authorize testing or maintenance.": "Scan this code at the machine to authorize testing or maintenance.",
|
||||
"Scan this code to quickly access the maintenance form for this device.": "Scan this code to quickly access the maintenance form for this device.",
|
||||
@ -2503,5 +2513,6 @@
|
||||
"video": "Video",
|
||||
"visit_gift": "Visit Gift",
|
||||
"vs Yesterday": "vs Yesterday",
|
||||
"warning": "warning"
|
||||
"warning": "warning",
|
||||
"LINE Official Pay": "LINE Official Pay"
|
||||
}
|
||||
|
||||
23
lang/ja.json
23
lang/ja.json
@ -599,9 +599,9 @@
|
||||
"E.SUN Bank Scan": "玉山銀行スキャン",
|
||||
"E.SUN Pay": "玉山ペイ",
|
||||
"E.SUN QR Pay": "玉山銀行QR決済",
|
||||
"E.SUN QR Scan": "玉山銀行ラベル決済",
|
||||
"E.SUN QR Scan": "玉山スキャン",
|
||||
"E.SUN QR Scan Settings Description": "玉山銀行スキャン決済設定",
|
||||
"EASY_MERCHANT_ID": "Easy Wallet 加盟店ID",
|
||||
"EASY_MERCHANT_ID": "EASY_MERCHANT_ID (悠遊付)",
|
||||
"ECPay Invoice": "ECPay 電子領収書",
|
||||
"ECPay Invoice Settings Description": "ECPay 電子領収書設定",
|
||||
"ESUN": "玉山銀行",
|
||||
@ -934,17 +934,21 @@
|
||||
"Inventory Stable": "在庫安定",
|
||||
"Inventory synced with machine": "在庫を機器と同期しました",
|
||||
"Invoice Date": "発行日",
|
||||
"Invoice HashIV": "請求書HashIV",
|
||||
"Invoice HashKey": "請求書HashKey",
|
||||
"Invoice Information": "領収書情報",
|
||||
"Invoice Notification Email": "請求書通知メール",
|
||||
"Invoice Number": "領収書番号",
|
||||
"Invoice Number / Flow ID": "領収書番号 / フローID",
|
||||
"Invoice Number / Time": "領収書番号 / 時間",
|
||||
"Invoice Status": "発行ステータス",
|
||||
"Invoice Store ID": "請求書ストアID",
|
||||
"Issued At": "発行日時",
|
||||
"Item List": "商品リスト",
|
||||
"Items": "件",
|
||||
"JKO Pay": "街口支付 (JKO Pay)",
|
||||
"JKOPAY": "JKOPAY",
|
||||
"JKO_MERCHANT_ID": "街口支付 (JKO Pay) 加盟店ID",
|
||||
"JKO_MERCHANT_ID": "JKO_MERCHANT_ID (街口支付)",
|
||||
"Japanese": "日本語",
|
||||
"Joined": "加入日",
|
||||
"Just now": "たった今",
|
||||
@ -954,6 +958,9 @@
|
||||
"LINE Pay": "LINE Pay",
|
||||
"LINE Pay Direct": "LINE Pay 直結",
|
||||
"LINE Pay Direct Settings Description": "LINE Pay 直結設定",
|
||||
"LINE-ChannelId": "LINE-ChannelId",
|
||||
"LINE-ChannelSecret": "LINE-ChannelSecret",
|
||||
"LINE_MERCHANT_ID": "LINE_MERCHANT_ID (LINE Pay)",
|
||||
"LINE_PAY_CHANNEL_ID": "LINE Pay チャンネルID",
|
||||
"LIVE": "ライブ",
|
||||
"Last 7 Days": "過去7日間",
|
||||
@ -1411,12 +1418,12 @@
|
||||
"Overall Capacity": "総在庫容量",
|
||||
"Owner": "所有者",
|
||||
"PARTNER_KEY": "PARTNER_KEY",
|
||||
"PI_MERCHANT_ID": "Pi 拍錢包 加盟店ID",
|
||||
"PI_MERCHANT_ID": "PI_MERCHANT_ID (Pi 拍錢包)",
|
||||
"PNG, JPG up to 2MB": "PNG, JPG 最大 2MB",
|
||||
"PNG, JPG, WEBP up to 10MB": "PNG, JPG, WEBP 最大 10MB",
|
||||
"POS Reboot": "POS再起動",
|
||||
"PS_LEVEL": "PS_LEVEL",
|
||||
"PS_MERCHANT_ID": "全盈+Pay 加盟店ID",
|
||||
"PS_MERCHANT_ID": "PS_MERCHANT_ID (全盈+Pay)",
|
||||
"Page 0": "ページ 0 (オフライン)",
|
||||
"Page 1": "ページ 1 (ホームページ)",
|
||||
"Page 2": "ページ 2 (販売ページ)",
|
||||
@ -1743,9 +1750,12 @@
|
||||
"Saved.": "保存しました。",
|
||||
"Saving...": "保存中...",
|
||||
"Scale level and access control": "スケールレベルとアクセス制御",
|
||||
"Scan Key": "スキャンKey",
|
||||
"Scan Pay": "スキャン決済",
|
||||
"Scan Payment": "QRコード決済",
|
||||
"Scan QR Code": "QRコードをスキャン",
|
||||
"Scan Store ID": "スキャンStoreID",
|
||||
"Scan Term ID": "スキャンTermID",
|
||||
"Scan this code at the machine or share the link with the customer.": "機器でこのコードをスキャンするか、リンクを顧客と共有してください。",
|
||||
"Scan this code at the machine to authorize testing or maintenance.": "機器でこのコードをスキャンして、テストまたはメンテナンスを承認します。",
|
||||
"Scan this code to quickly access the maintenance form for this device.": "このQRコードをスキャンすると、このデバイスのメンテナンスフォームに素早くアクセスできます。",
|
||||
@ -2503,5 +2513,6 @@
|
||||
"video": "動画",
|
||||
"visit_gift": "来店ギフト",
|
||||
"vs Yesterday": "昨日比",
|
||||
"warning": "警告"
|
||||
"warning": "警告",
|
||||
"LINE Official Pay": "LINE 公式決済"
|
||||
}
|
||||
|
||||
@ -599,9 +599,9 @@
|
||||
"E.SUN Bank Scan": "玉山銀行掃碼",
|
||||
"E.SUN Pay": "玉山支付",
|
||||
"E.SUN QR Pay": "玉山銀行掃碼",
|
||||
"E.SUN QR Scan": "玉山銀行標籤支付",
|
||||
"E.SUN QR Scan": "玉山掃碼",
|
||||
"E.SUN QR Scan Settings Description": "玉山銀行掃碼支付設定",
|
||||
"EASY_MERCHANT_ID": "悠遊付 商店代號",
|
||||
"EASY_MERCHANT_ID": "EASY_MERCHANT_ID (悠遊付)",
|
||||
"ECPay Invoice": "綠界電子發票",
|
||||
"ECPay Invoice Settings Description": "綠界科技電子發票設定",
|
||||
"ESUN": "玉山銀行",
|
||||
@ -934,17 +934,21 @@
|
||||
"Inventory Stable": "庫存穩定",
|
||||
"Inventory synced with machine": "庫存已與機台同步",
|
||||
"Invoice Date": "開立日期",
|
||||
"Invoice HashIV": "發票HashIV",
|
||||
"Invoice HashKey": "發票HashKey",
|
||||
"Invoice Information": "發票資訊",
|
||||
"Invoice Notification Email": "發票通知 Email",
|
||||
"Invoice Number": "發票號碼",
|
||||
"Invoice Number / Flow ID": "發票號碼 / 流水號",
|
||||
"Invoice Number / Time": "發票號碼 / 時間",
|
||||
"Invoice Status": "發票開立狀態",
|
||||
"Invoice Store ID": "發票商店代號",
|
||||
"Issued At": "開立時間",
|
||||
"Item List": "商品清單",
|
||||
"Items": "筆",
|
||||
"JKO Pay": "街口支付",
|
||||
"JKOPAY": "接口支付",
|
||||
"JKO_MERCHANT_ID": "街口支付 商店代號",
|
||||
"JKO_MERCHANT_ID": "JKO_MERCHANT_ID (街口支付)",
|
||||
"Japanese": "日文",
|
||||
"Joined": "加入日期",
|
||||
"Just now": "剛剛",
|
||||
@ -954,6 +958,9 @@
|
||||
"LINE Pay": "LINE Pay",
|
||||
"LINE Pay Direct": "LINE Pay 官方直連",
|
||||
"LINE Pay Direct Settings Description": "LINE Pay 官方直連設定",
|
||||
"LINE-ChannelId": "LINE-ChannelId",
|
||||
"LINE-ChannelSecret": "LINE-ChannelSecret",
|
||||
"LINE_MERCHANT_ID": "LINE_MERCHANT_ID (LINE Pay)",
|
||||
"LINE_PAY_CHANNEL_ID": "LINE Pay 頻道 ID",
|
||||
"LIVE": "實時",
|
||||
"Last 7 Days": "近 7 日",
|
||||
@ -1411,12 +1418,12 @@
|
||||
"Overall Capacity": "總庫存量",
|
||||
"Owner": "公司名稱",
|
||||
"PARTNER_KEY": "PARTNER_KEY",
|
||||
"PI_MERCHANT_ID": "Pi 拍錢包 商店代號",
|
||||
"PI_MERCHANT_ID": "PI_MERCHANT_ID (Pi 拍錢包)",
|
||||
"PNG, JPG up to 2MB": "支援 PNG, JPG (最大 2MB)",
|
||||
"PNG, JPG, WEBP up to 10MB": "支援 PNG, JPG, WEBP 格式,且不超過 10MB",
|
||||
"POS Reboot": "刷卡重啟",
|
||||
"PS_LEVEL": "PS_LEVEL",
|
||||
"PS_MERCHANT_ID": "全盈+Pay 商店代號",
|
||||
"PS_MERCHANT_ID": "PS_MERCHANT_ID (全盈+Pay)",
|
||||
"Page 0": "離線",
|
||||
"Page 1": "主頁面",
|
||||
"Page 2": "販賣頁",
|
||||
@ -1743,9 +1750,12 @@
|
||||
"Saved.": "已儲存",
|
||||
"Saving...": "儲存中...",
|
||||
"Scale level and access control": "層級與存取控制",
|
||||
"Scan Key": "掃碼Key",
|
||||
"Scan Pay": "掃碼支付功能",
|
||||
"Scan Payment": "掃碼支付",
|
||||
"Scan QR Code": "掃描 QR Code",
|
||||
"Scan Store ID": "掃碼StoreID",
|
||||
"Scan Term ID": "掃碼TermID",
|
||||
"Scan this code at the machine or share the link with the customer.": "請在機台掃描此碼,或將連結分享給客戶。",
|
||||
"Scan this code at the machine to authorize testing or maintenance.": "請在機台上掃描此 QR Code 以進行測試或維護授權。",
|
||||
"Scan this code to quickly access the maintenance form for this device.": "掃描此 QR Code 即可快速進入此設備的維修單填寫頁面。",
|
||||
@ -2503,5 +2513,6 @@
|
||||
"video": "影片",
|
||||
"visit_gift": "來店禮",
|
||||
"vs Yesterday": "較昨日",
|
||||
"warning": "警告"
|
||||
"warning": "警告",
|
||||
"LINE Official Pay": "Line官方支付"
|
||||
}
|
||||
|
||||
@ -363,56 +363,6 @@
|
||||
@endforeach
|
||||
</x-searchable-select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-xs font-bold text-slate-400 uppercase tracking-[0.15em] mb-2">{{ __('Invoice Status') }}</label>
|
||||
<x-searchable-select
|
||||
name="invoice_status"
|
||||
:selected="old('invoice_status', $machine->invoice_status)"
|
||||
:hasSearch="false"
|
||||
>
|
||||
<option value="0" {{ $machine->invoice_status == 0 ? 'selected' : '' }}>{{ __('No Invoice') }}</option>
|
||||
<option value="1" {{ $machine->invoice_status == 1 ? 'selected' : '' }}>{{ __('Default Donate') }}</option>
|
||||
<option value="2" {{ $machine->invoice_status == 2 ? 'selected' : '' }}>{{ __('Default Not Donate') }}</option>
|
||||
</x-searchable-select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="luxury-card rounded-3xl p-8 animate-luxury-in relative z-10" style="animation-delay: 300ms">
|
||||
<div class="flex items-center gap-3 mb-8">
|
||||
<div class="w-10 h-10 rounded-xl bg-indigo-500/10 flex items-center justify-center text-indigo-500">
|
||||
<svg class="w-5 h-5 stroke-[2.5]" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 class="text-lg font-black text-slate-800 dark:text-white tracking-tight">{{ __('Member & External') }}</h3>
|
||||
</div>
|
||||
|
||||
<div class="space-y-6">
|
||||
<label class="flex items-center justify-between p-4 rounded-2xl border border-slate-100 dark:border-slate-800 bg-slate-50/30 dark:bg-slate-900/30 cursor-pointer group">
|
||||
<div>
|
||||
<span class="block text-sm font-black text-slate-700 dark:text-slate-200 group-hover:text-indigo-500 transition-colors">{{ __('Welcome Gift') }}</span>
|
||||
<span class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">{{ __('Enabled/Disabled') }}</span>
|
||||
</div>
|
||||
<div class="relative inline-flex items-center cursor-pointer">
|
||||
<input type="hidden" name="welcome_gift_enabled" value="0">
|
||||
<input type="checkbox" name="welcome_gift_enabled" value="1" {{ $machine->welcome_gift_enabled ? 'checked' : '' }} class="sr-only peer">
|
||||
<div class="w-11 h-6 bg-slate-200 dark:bg-slate-700 rounded-full peer peer-focus:ring-4 peer-focus:ring-indigo-500/20 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-indigo-500 transition-colors"></div>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<label class="flex items-center justify-between p-4 rounded-2xl border border-slate-100 dark:border-slate-800 bg-slate-50/30 dark:bg-slate-900/30 cursor-pointer group">
|
||||
<div>
|
||||
<span class="block text-sm font-black text-slate-700 dark:text-slate-200 group-hover:text-indigo-500 transition-colors">{{ __('Member System') }}</span>
|
||||
<span class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">{{ __('Enabled/Disabled') }}</span>
|
||||
</div>
|
||||
<div class="relative inline-flex items-center cursor-pointer">
|
||||
<input type="hidden" name="member_system_enabled" value="0">
|
||||
<input type="checkbox" name="member_system_enabled" value="1" {{ $machine->member_system_enabled ? 'checked' : '' }} class="sr-only peer">
|
||||
<div class="w-11 h-6 bg-slate-200 dark:bg-slate-700 rounded-full peer peer-focus:ring-4 peer-focus:ring-indigo-500/20 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-indigo-500 transition-colors"></div>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -109,9 +109,6 @@
|
||||
credit_card_enabled: settings.credit_card_enabled === true || settings.credit_card_enabled === 1 || settings.credit_card_enabled === '1',
|
||||
mobile_pay_enabled: settings.mobile_pay_enabled === true || settings.mobile_pay_enabled === 1 || settings.mobile_pay_enabled === '1',
|
||||
card_pay_enabled: settings.card_pay_enabled === true || settings.card_pay_enabled === 1 || settings.card_pay_enabled === '1',
|
||||
card_pay_easycard: settings.card_pay_easycard === true || settings.card_pay_easycard === 1 || settings.card_pay_easycard === '1',
|
||||
card_pay_ipass: settings.card_pay_ipass === true || settings.card_pay_ipass === 1 || settings.card_pay_ipass === '1',
|
||||
card_pay_icash: settings.card_pay_icash === true || settings.card_pay_icash === 1 || settings.card_pay_icash === '1',
|
||||
|
||||
// 掃碼支付
|
||||
scan_pay_enabled: settings.scan_pay_enabled === true || settings.scan_pay_enabled === 1 || settings.scan_pay_enabled === '1',
|
||||
@ -123,6 +120,9 @@
|
||||
tappay_pluspay: settings.tappay_pluspay === true || settings.tappay_pluspay === 1 || settings.tappay_pluspay === '1',
|
||||
tappay_easywallet: settings.tappay_easywallet === true || settings.tappay_easywallet === 1 || settings.tappay_easywallet === '1',
|
||||
|
||||
// Line 官方支付 (LINE Pay 官方直連)
|
||||
scan_pay_linepay_enabled: settings.scan_pay_linepay_enabled === true || settings.scan_pay_linepay_enabled === 1 || settings.scan_pay_linepay_enabled === '1',
|
||||
|
||||
// 現金支付 (預設皆可收,若 JSON 中特別記錄 false 才是 false)
|
||||
cash_module_enabled: machine.cash_module_enabled === true || machine.cash_module_enabled === 1 || machine.cash_module_enabled === '1',
|
||||
cash_bill_1000: settings.cash_bill_1000 !== false && settings.cash_bill_1000 !== 0 && settings.cash_bill_1000 !== '0',
|
||||
@ -151,7 +151,7 @@
|
||||
this.showMachineSettingsModal = true;
|
||||
},
|
||||
toggleAllCardTerminal() {
|
||||
const keys = ['credit_card_enabled', 'mobile_pay_enabled', 'card_pay_enabled', 'card_pay_easycard', 'card_pay_ipass', 'card_pay_icash'];
|
||||
const keys = ['credit_card_enabled', 'mobile_pay_enabled', 'card_pay_enabled'];
|
||||
const allChecked = keys.every(k => this.machineSettings[k]);
|
||||
keys.forEach(k => {
|
||||
this.machineSettings[k] = !allChecked;
|
||||
@ -179,9 +179,9 @@
|
||||
});
|
||||
},
|
||||
toggleAllPayments() {
|
||||
const mainKeys = ['card_terminal_enabled', 'scan_pay_enabled', 'cash_module_enabled', 'pickup_module_enabled'];
|
||||
const mainKeys = ['card_terminal_enabled', 'scan_pay_enabled', 'scan_pay_linepay_enabled', 'cash_module_enabled', 'pickup_module_enabled'];
|
||||
const subKeys = [
|
||||
'credit_card_enabled', 'mobile_pay_enabled', 'card_pay_enabled', 'card_pay_easycard', 'card_pay_ipass', 'card_pay_icash',
|
||||
'credit_card_enabled', 'mobile_pay_enabled', 'card_pay_enabled',
|
||||
'scan_pay_esun_enabled', 'scan_pay_tappay_enabled', 'tappay_linepay', 'tappay_jkopay', 'tappay_pipay', 'tappay_pluspay', 'tappay_easywallet',
|
||||
'cash_bill_1000', 'cash_bill_500', 'cash_bill_100', 'cash_coin_50', 'cash_coin_10', 'cash_coin_5', 'cash_coin_1',
|
||||
'pickup_code_enabled', 'pass_code_enabled'
|
||||
@ -596,24 +596,6 @@
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- 卡片支付孫項目 (悠遊卡/一卡通/icash) -->
|
||||
<div x-show="machineSettings.card_pay_enabled && machineSettings.card_terminal_enabled" x-transition class="pl-4 border-l border-dashed border-slate-200 dark:border-slate-700 flex flex-wrap gap-x-6 gap-y-2">
|
||||
<label class="flex items-center gap-2 cursor-pointer">
|
||||
<input type="hidden" name="settings[card_pay_easycard]" value="0">
|
||||
<input type="checkbox" name="settings[card_pay_easycard]" value="1" x-model="machineSettings.card_pay_easycard" class="w-4 h-4 text-cyan-500 rounded border-slate-300 focus:ring-cyan-500 dark:bg-slate-800 dark:border-slate-700 dark:checked:bg-cyan-500 dark:checked:border-cyan-500 dark:focus:border-cyan-500">
|
||||
<span class="text-xs font-bold text-slate-600 dark:text-slate-300">{{ __('EasyCard') }}</span>
|
||||
</label>
|
||||
<label class="flex items-center gap-2 cursor-pointer">
|
||||
<input type="hidden" name="settings[card_pay_ipass]" value="0">
|
||||
<input type="checkbox" name="settings[card_pay_ipass]" value="1" x-model="machineSettings.card_pay_ipass" class="w-4 h-4 text-cyan-500 rounded border-slate-300 focus:ring-cyan-500 dark:bg-slate-800 dark:border-slate-700 dark:checked:bg-cyan-500 dark:checked:border-cyan-500 dark:focus:border-cyan-500">
|
||||
<span class="text-xs font-bold text-slate-600 dark:text-slate-300">{{ __('iPASS') }}</span>
|
||||
</label>
|
||||
<label class="flex items-center gap-2 cursor-pointer">
|
||||
<input type="hidden" name="settings[card_pay_icash]" value="0">
|
||||
<input type="checkbox" name="settings[card_pay_icash]" value="1" x-model="machineSettings.card_pay_icash" class="w-4 h-4 text-cyan-500 rounded border-slate-300 focus:ring-cyan-500 dark:bg-slate-800 dark:border-slate-700 dark:checked:bg-cyan-500 dark:checked:border-cyan-500 dark:focus:border-cyan-500">
|
||||
<span class="text-xs font-bold text-slate-600 dark:text-slate-300">{{ __('icash') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -680,6 +662,19 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Line 官方支付 (LINE Pay 官方直連) -->
|
||||
<div class="p-4 rounded-xl bg-slate-50/50 dark:bg-slate-800/50 border border-slate-100 dark:border-slate-700/50 hover:bg-slate-50 dark:hover:bg-slate-800 transition-colors">
|
||||
<div class="flex items-center justify-between">
|
||||
<h4 class="text-sm font-black text-slate-700 dark:text-slate-200">{{ __('LINE Official Pay') }}</h4>
|
||||
<label class="relative inline-flex items-center cursor-pointer">
|
||||
<input type="hidden" name="settings[scan_pay_linepay_enabled]" value="0">
|
||||
<input type="checkbox" name="settings[scan_pay_linepay_enabled]" value="1"
|
||||
x-model="machineSettings.scan_pay_linepay_enabled" class="peer sr-only">
|
||||
<div class="w-9 h-5 bg-slate-200 peer-focus:outline-none rounded-full peer dark:bg-slate-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all dark:border-gray-600 peer-checked:bg-cyan-500"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 現金支付 -->
|
||||
<div class="p-4 rounded-xl bg-slate-50/50 dark:bg-slate-800/50 border border-slate-100 dark:border-slate-700/50 hover:bg-slate-50 dark:hover:bg-slate-800 transition-colors space-y-4">
|
||||
<div class="flex items-center justify-between">
|
||||
|
||||
@ -103,16 +103,8 @@
|
||||
$terminals[] = __('Mobile Payment');
|
||||
}
|
||||
if ($machine->settings['card_pay_enabled'] ?? false) {
|
||||
$cards = [];
|
||||
if ($machine->settings['card_pay_easycard'] ?? false) $cards[] = __('EasyCard');
|
||||
if ($machine->settings['card_pay_ipass'] ?? false) $cards[] = __('iPASS');
|
||||
if ($machine->settings['card_pay_icash'] ?? false) $cards[] = __('icash');
|
||||
if (!empty($cards)) {
|
||||
$terminals[] = __('Card Payment') . ' (' . implode('/', $cards) . ')';
|
||||
} else {
|
||||
$terminals[] = __('Card Payment');
|
||||
}
|
||||
}
|
||||
if (!empty($terminals)) {
|
||||
$activeFeatures[] = __('Includes Credit Card/Mobile Pay') . ' (' . implode(', ', $terminals) . ')';
|
||||
} else {
|
||||
@ -137,6 +129,9 @@
|
||||
$activeFeatures[] = __('Scan Payment') . ' (' . implode(', ', $scans) . ')';
|
||||
}
|
||||
}
|
||||
if ($machine->settings['scan_pay_linepay_enabled'] ?? false) {
|
||||
$activeFeatures[] = __('LINE Official Pay');
|
||||
}
|
||||
if ($machine->cash_module_enabled) {
|
||||
$bills = [];
|
||||
if (($machine->settings['cash_bill_1000'] ?? true) !== false) $bills[] = '1000';
|
||||
@ -240,16 +235,8 @@
|
||||
$terminals[] = __('Mobile Payment');
|
||||
}
|
||||
if ($machine->settings['card_pay_enabled'] ?? false) {
|
||||
$cards = [];
|
||||
if ($machine->settings['card_pay_easycard'] ?? false) $cards[] = __('EasyCard');
|
||||
if ($machine->settings['card_pay_ipass'] ?? false) $cards[] = __('iPASS');
|
||||
if ($machine->settings['card_pay_icash'] ?? false) $cards[] = __('icash');
|
||||
if (!empty($cards)) {
|
||||
$terminals[] = __('Card Payment') . ' (' . implode('/', $cards) . ')';
|
||||
} else {
|
||||
$terminals[] = __('Card Payment');
|
||||
}
|
||||
}
|
||||
if (!empty($terminals)) {
|
||||
$activeFeatures[] = __('Includes Credit Card/Mobile Pay') . ' (' . implode(', ', $terminals) . ')';
|
||||
} else {
|
||||
@ -274,6 +261,9 @@
|
||||
$activeFeatures[] = __('Scan Payment') . ' (' . implode(', ', $scans) . ')';
|
||||
}
|
||||
}
|
||||
if ($machine->settings['scan_pay_linepay_enabled'] ?? false) {
|
||||
$activeFeatures[] = __('LINE Official Pay');
|
||||
}
|
||||
if ($machine->cash_module_enabled) {
|
||||
$bills = [];
|
||||
if (($machine->settings['cash_bill_1000'] ?? true) !== false) $bills[] = '1000';
|
||||
|
||||
@ -100,17 +100,21 @@
|
||||
|
||||
<div class="space-y-6">
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Store ID') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice Store ID') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][store_id]" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('HashKey') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice HashKey') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][hash_key]" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('HashIV') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice HashIV') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][hash_iv]" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice Notification Email') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][email]" class="luxury-input w-full">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -127,15 +131,15 @@
|
||||
|
||||
<div class="space-y-6">
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('StoreID') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Scan Store ID') }}</label>
|
||||
<input type="text" name="settings[esun_scan][store_id]" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('TermID') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Scan Term ID') }}</label>
|
||||
<input type="text" name="settings[esun_scan][term_id]" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Key') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Scan Key') }}</label>
|
||||
<input type="text" name="settings[esun_scan][key]" class="luxury-input w-full">
|
||||
</div>
|
||||
</div>
|
||||
@ -148,17 +152,17 @@
|
||||
<svg class="w-5 h-5 stroke-[2.5]" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m24.408 0a8.959 8.959 0 0 1 .284-2.253m0 2.253C20.46 17.1 16.485 19.5 12 19.5S3.538 17.1 2.284 14.253"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="text-lg font-black text-slate-800 dark:text-white tracking-tight font-display uppercase">{{ __('LINE Pay Direct') }}</h3>
|
||||
<h3 class="text-lg font-black text-slate-800 dark:text-white tracking-tight font-display uppercase">{{ __('LINE Official Pay') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="space-y-6">
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('ChannelId') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('LINE-ChannelId') }}</label>
|
||||
<input type="text" name="settings[line_pay][channel_id]" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('ChannelSecret') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('LINE-ChannelSecret') }}</label>
|
||||
<input type="text" name="settings[line_pay][channel_secret]" class="luxury-input w-full">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -104,17 +104,21 @@
|
||||
|
||||
<div class="space-y-6">
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Store ID') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice Store ID') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][store_id]" value="{{ $settings['ecpay_invoice']['store_id'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('HashKey') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice HashKey') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][hash_key]" value="{{ $settings['ecpay_invoice']['hash_key'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('HashIV') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice HashIV') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][hash_iv]" value="{{ $settings['ecpay_invoice']['hash_iv'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Invoice Notification Email') }}</label>
|
||||
<input type="text" name="settings[ecpay_invoice][email]" value="{{ $settings['ecpay_invoice']['email'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -131,15 +135,15 @@
|
||||
|
||||
<div class="space-y-6">
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('StoreID') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Scan Store ID') }}</label>
|
||||
<input type="text" name="settings[esun_scan][store_id]" value="{{ $settings['esun_scan']['store_id'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('TermID') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Scan Term ID') }}</label>
|
||||
<input type="text" name="settings[esun_scan][term_id]" value="{{ $settings['esun_scan']['term_id'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Key') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('Scan Key') }}</label>
|
||||
<input type="text" name="settings[esun_scan][key]" value="{{ $settings['esun_scan']['key'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
</div>
|
||||
@ -152,17 +156,17 @@
|
||||
<svg class="w-5 h-5 stroke-[2.5]" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m24.408 0a8.959 8.959 0 0 1 .284-2.253m0 2.253C20.46 17.1 16.485 19.5 12 19.5S3.538 17.1 2.284 14.253"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="text-lg font-black text-slate-800 dark:text-white tracking-tight font-display uppercase">{{ __('LINE Pay Direct') }}</h3>
|
||||
<h3 class="text-lg font-black text-slate-800 dark:text-white tracking-tight font-display uppercase">{{ __('LINE Official Pay') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="space-y-6">
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('ChannelId') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('LINE-ChannelId') }}</label>
|
||||
<input type="text" name="settings[line_pay][channel_id]" value="{{ $settings['line_pay']['channel_id'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('ChannelSecret') }}</label>
|
||||
<label class="block text-[11px] font-black text-slate-400 uppercase tracking-[0.2em] mb-2">{{ __('LINE-ChannelSecret') }}</label>
|
||||
<input type="text" name="settings[line_pay][channel_secret]" value="{{ $settings['line_pay']['channel_secret'] ?? '' }}" class="luxury-input w-full">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user