diff --git a/apps/admin/.env.template b/apps/admin/.env.template index c138462..0a9f427 100644 --- a/apps/admin/.env.template +++ b/apps/admin/.env.template @@ -7,7 +7,7 @@ NEXT_PUBLIC_API_URL=https://api.ppanel.dev # Default Login User NEXT_PUBLIC_DEFAULT_USER_EMAIL=admin@ppanel.dev -NEXT_PUBLIC_DEFAULT_USER_PASSWORD=admin-password +NEXT_PUBLIC_DEFAULT_USER_PASSWORD=password # Please put in the .env file, otherwise the i18n command will not work # OpenAI API key and proxy URL required for i18n command (optional) diff --git a/apps/admin/app/dashboard/payment/alipayf2f.tsx b/apps/admin/app/dashboard/payment/alipayf2f.tsx index be1508a..26a07d8 100644 --- a/apps/admin/app/dashboard/payment/alipayf2f.tsx +++ b/apps/admin/app/dashboard/payment/alipayf2f.tsx @@ -37,7 +37,7 @@ export default function AlipayF2F() { await updateAlipayF2FPaymentConfig({ ...data, [key]: value, - } as API.PaymentConfig); + } as API.UpdateAlipayF2fRequest); toast.success(t('saveSuccess')); refetch(); } catch (error) { @@ -62,6 +62,23 @@ export default function AlipayF2F() { /> + + + {t('alipayf2f.sandbox')} + {t('alipayf2f.sandboxDescription')} + + + { + updateConfig('config', { + ...data?.config, + sandbox: checked, + }); + }} + /> + + {t('showName')} diff --git a/apps/admin/locales/en-US/payment.json b/apps/admin/locales/en-US/payment.json index 2444246..b141714 100644 --- a/apps/admin/locales/en-US/payment.json +++ b/apps/admin/locales/en-US/payment.json @@ -5,7 +5,9 @@ "invoiceName": "Custom Product Name", "invoiceNameDescription": "Will be displayed on Alipay bill", "privateKey": "Alipay Private Key", - "publicKey": "Alipay Public Key" + "publicKey": "Alipay Public Key", + "sandbox": "Sandbox Mode", + "sandboxDescription": "Enable sandbox mode to test payments" }, "enable": "Enable", "enableDescription": "Enable this payment method", diff --git a/apps/admin/locales/zh-CN/payment.json b/apps/admin/locales/zh-CN/payment.json index 2087c7d..c6d1eb8 100644 --- a/apps/admin/locales/zh-CN/payment.json +++ b/apps/admin/locales/zh-CN/payment.json @@ -5,7 +5,9 @@ "invoiceName": "自定义产品名称", "invoiceNameDescription": "将显示在支付宝账单中", "privateKey": "支付宝私钥", - "publicKey": "支付宝公钥" + "publicKey": "支付宝公钥", + "sandbox": "沙箱模式", + "sandboxDescription": "启用沙箱模式以测试支付" }, "enable": "启用", "enableDescription": "启用此支付方式", diff --git a/apps/admin/services/admin/payment.ts b/apps/admin/services/admin/payment.ts index c0544b0..c5b6ba2 100644 --- a/apps/admin/services/admin/payment.ts +++ b/apps/admin/services/admin/payment.ts @@ -12,7 +12,7 @@ export async function getAlipayF2FPaymentConfig(options?: { [key: string]: any } /** Update alipay f2f payment config PUT /v1/admin/payment/alipay_f2f */ export async function updateAlipayF2FPaymentConfig( - body: API.PaymentConfig, + body: API.UpdateAlipayF2fRequest, options?: { [key: string]: any }, ) { return request('/v1/admin/payment/alipay_f2f', { @@ -46,7 +46,7 @@ export async function getEpayPaymentConfig(options?: { [key: string]: any }) { /** Update epay payment config PUT /v1/admin/payment/epay */ export async function updateEpayPaymentConfig( - body: API.PaymentConfig, + body: API.UpdateEpayRequest, options?: { [key: string]: any }, ) { return request('/v1/admin/payment/epay', { @@ -69,7 +69,7 @@ export async function getStripeAlipayPaymentConfig(options?: { [key: string]: an /** Update stripe alipay payment config PUT /v1/admin/payment/stripe_alipay */ export async function updateStripeAlipayPaymentConfig( - body: API.PaymentConfig, + body: API.UpdateStripeRequest, options?: { [key: string]: any }, ) { return request('/v1/admin/payment/stripe_alipay', { @@ -95,7 +95,7 @@ export async function getStripeWeChatPayPaymentConfig(options?: { [key: string]: /** Update stripe wechat pay payment config PUT /v1/admin/payment/stripe_wechat_pay */ export async function updateStripeWeChatPayPaymentConfig( - body: API.PaymentConfig, + body: API.UpdateStripeRequest, options?: { [key: string]: any }, ) { return request('/v1/admin/payment/stripe_wechat_pay', { diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts index 09264b5..839ea5c 100644 --- a/apps/admin/services/admin/typings.d.ts +++ b/apps/admin/services/admin/typings.d.ts @@ -1,4 +1,12 @@ declare namespace API { + type AlipayF2FConfig = { + app_id: string; + private_key: string; + public_key: string; + invoice_name: string; + sandbox: boolean; + }; + type Announcement = { id: number; title: string; @@ -183,7 +191,6 @@ declare namespace API { type CurrencyConfig = { currency_unit: string; currency_symbol: string; - access_key: string; }; type DeleteAnnouncementRequest = { @@ -244,6 +251,12 @@ declare namespace API { expiration_email_template: string; }; + type EpayConfig = { + pid: string; + url: string; + key: string; + }; + type Follow = { id: number; ticket_id: number; @@ -576,6 +589,8 @@ declare namespace API { sni: string; allow_insecure: boolean; fingerprint: string; + reality_server_addr: string; + reality_server_port: number; reality_private_key: string; reality_public_key: string; reality_short_id: string; @@ -627,6 +642,13 @@ declare namespace API { site_logo: string; }; + type StripeConfig = { + public_key: string; + secret_key: string; + webhook_secret: string; + payment: string; + }; + type Subscribe = { id: number; name: string; @@ -716,6 +738,19 @@ declare namespace API { security_config: SecurityConfig; }; + type UpdateAlipayF2fRequest = { + id: number; + name: string; + mark: string; + icon?: string; + domain?: string; + config: AlipayF2FConfig; + fee_mode: number; + fee_percent?: number; + fee_amount?: number; + enable: boolean; + }; + type UpdateAnnouncementEnableRequest = { id: number; enable: boolean; @@ -759,6 +794,19 @@ declare namespace API { show: boolean; }; + type UpdateEpayRequest = { + id: number; + name: string; + mark: string; + icon?: string; + domain?: string; + config: EpayConfig; + fee_mode: number; + fee_percent?: number; + fee_amount?: number; + enable: boolean; + }; + type UpdateNodeGroupRequest = { id: number; name: string; @@ -787,6 +835,19 @@ declare namespace API { trade_no?: string; }; + type UpdateStripeRequest = { + id: number; + name: string; + mark: string; + icon?: string; + domain?: string; + config: StripeConfig; + fee_mode: number; + fee_percent?: number; + fee_amount?: number; + enable: boolean; + }; + type UpdateSubscribeGroupRequest = { id: number; name: string; diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts index 36b7442..be5713f 100644 --- a/apps/admin/services/common/typings.d.ts +++ b/apps/admin/services/common/typings.d.ts @@ -57,7 +57,6 @@ declare namespace API { type CurrencyConfig = { currency_unit: string; currency_symbol: string; - access_key: string; }; type Document = { @@ -235,6 +234,8 @@ declare namespace API { sni: string; allow_insecure: boolean; fingerprint: string; + reality_server_addr: string; + reality_server_port: number; reality_private_key: string; reality_public_key: string; reality_short_id: string; diff --git a/apps/admin/utils/request.ts b/apps/admin/utils/request.ts index 33d32e3..f1ab4d1 100644 --- a/apps/admin/utils/request.ts +++ b/apps/admin/utils/request.ts @@ -7,10 +7,9 @@ import { getAuthorization, Logout } from './common'; async function handleError(response: any) { const code = response.data?.code; + if ([40002, 40003, 40004].includes(code)) return Logout(); if (response?.config?.skipErrorHandler) return; if (!isBrowser()) return; - if ([40002, 40003, 40004].includes(code)) return Logout(); - const t = await getTranslations('common'); const message = t(`request.${code}`) !== `request.${code}` diff --git a/apps/user/.env.template b/apps/user/.env.template index bfe619d..6e8328a 100644 --- a/apps/user/.env.template +++ b/apps/user/.env.template @@ -18,7 +18,7 @@ NEXT_PUBLIC_GITHUB_LINK=https://github.com/perfect-panel/ppanel-user-web # Default Login User NEXT_PUBLIC_DEFAULT_USER_EMAIL=admin@ppanel.dev -NEXT_PUBLIC_DEFAULT_USER_PASSWORD=admin-password +NEXT_PUBLIC_DEFAULT_USER_PASSWORD=password # Please put in the .env file, otherwise the i18n command will not work # OpenAI API key and proxy URL required for i18n command (optional) diff --git a/apps/user/services/common/typings.d.ts b/apps/user/services/common/typings.d.ts index 36b7442..be5713f 100644 --- a/apps/user/services/common/typings.d.ts +++ b/apps/user/services/common/typings.d.ts @@ -57,7 +57,6 @@ declare namespace API { type CurrencyConfig = { currency_unit: string; currency_symbol: string; - access_key: string; }; type Document = { @@ -235,6 +234,8 @@ declare namespace API { sni: string; allow_insecure: boolean; fingerprint: string; + reality_server_addr: string; + reality_server_port: number; reality_private_key: string; reality_public_key: string; reality_short_id: string; diff --git a/apps/user/services/user/typings.d.ts b/apps/user/services/user/typings.d.ts index a7361f9..80759b3 100644 --- a/apps/user/services/user/typings.d.ts +++ b/apps/user/services/user/typings.d.ts @@ -71,7 +71,6 @@ declare namespace API { type CurrencyConfig = { currency_unit: string; currency_symbol: string; - access_key: string; }; type Document = { @@ -377,6 +376,8 @@ declare namespace API { sni: string; allow_insecure: boolean; fingerprint: string; + reality_server_addr: string; + reality_server_port: number; reality_private_key: string; reality_public_key: string; reality_short_id: string; diff --git a/apps/user/utils/request.ts b/apps/user/utils/request.ts index 1f05383..77f7b5f 100644 --- a/apps/user/utils/request.ts +++ b/apps/user/utils/request.ts @@ -7,9 +7,9 @@ import { getAuthorization, Logout } from './common'; async function handleError(response: any) { const code = response.data?.code; + if ([40002, 40003, 40004].includes(code)) return Logout(); if (response?.config?.skipErrorHandler) return; if (!isBrowser()) return; - if ([40002, 40003, 40004].includes(code)) return Logout(); const t = await getTranslations('common'); const message =
{t('alipayf2f.sandboxDescription')}