diff --git a/assets/admin/src/schema/sections/payment/affiliate.js b/assets/admin/src/schema/sections/payment/affiliate.js index 90112a04..dcf3e9c9 100644 --- a/assets/admin/src/schema/sections/payment/affiliate.js +++ b/assets/admin/src/schema/sections/payment/affiliate.js @@ -4,23 +4,23 @@ export const affiliateSchema = { icon: 'fas fa-share-alt', description: '配置返佣比例、归因窗口和结算说明。', defaults: { - payment_affiliate_enabled: false, - payment_affiliate_ratio: 10, + pay_rebate_s: false, + pay_rebate_ratio: 10, payment_affiliate_window_days: 30, payment_affiliate_require_paid_order: true, - payment_affiliate_self_s: true, - payment_affiliate_show_users: true, + pay_rebate_self_s: true, + pay_rebate_show_users: true, payment_affiliate_user_ratio: 10, - payment_affiliate_vip1_ratio: 0, - payment_affiliate_vip2_ratio: 0, - payment_affiliate_poster_s: true, - payment_affiliate_poster_img: '', - payment_affiliate_poster_title: '', - payment_affiliate_poster_desc: '', - payment_affiliate_text_desc: '', - payment_affiliate_text_details_title: '', - payment_affiliate_text_details: '', - payment_affiliate_text_discount: '', + pay_rebate_ratio_vip_1: 0, + pay_rebate_ratio_vip_2: 0, + pay_rebate_poster_s: true, + pay_rebate_poster_img: '', + pay_rebate_poster_title: '', + pay_rebate_poster_desc: '', + pay_rebate_text_desc: '', + pay_rebate_text_details_title: '', + pay_rebate_text_details: '', + pay_rebate_text_discount: '', payment_affiliate_note: '返佣链路复用邀请体系,订单归因和结算自动衔接当前策略字段。', }, groups: [ @@ -29,12 +29,12 @@ export const affiliateSchema = { title: '返佣策略', icon: 'fas fa-project-diagram', fields: [ - { key: 'payment_affiliate_enabled', label: '启用推广返佣结构', type: 'switch', default: false }, - { key: 'payment_affiliate_ratio', label: '返佣比例(%)', type: 'number', default: 10, min: 0, max: 100, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_window_days', label: '归因窗口(天)', type: 'number', default: 30, min: 1, max: 365, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_require_paid_order', label: '仅对已支付订单返佣', type: 'switch', default: true, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_self_s', label: '自购返佣', type: 'switch', default: true, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_show_users', label: '显示推广用户', type: 'switch', default: true, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, + { key: 'pay_rebate_s', label: '启用推广返佣结构', type: 'switch', default: false }, + { key: 'pay_rebate_ratio', label: '返佣比例(%)', type: 'number', default: 10, min: 0, max: 100, dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'payment_affiliate_window_days', label: '归因窗口(天)', type: 'number', default: 30, min: 1, max: 365, dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'payment_affiliate_require_paid_order', label: '仅对已支付订单返佣', type: 'switch', default: true, dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_self_s', label: '自购返佣', type: 'switch', default: true, dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_show_users', label: '显示推广用户', type: 'switch', default: true, dependsOn: { key: 'pay_rebate_s', value: true } }, ], }, { @@ -42,9 +42,9 @@ export const affiliateSchema = { title: '用户返佣比例', icon: 'fas fa-users-cog', fields: [ - { key: 'payment_affiliate_user_ratio', label: '普通用户比例(%)', type: 'number', default: 10, min: 0, max: 100, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_vip1_ratio', label: 'VIP1比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_vip2_ratio', label: 'VIP2比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, + { key: 'payment_affiliate_user_ratio', label: '普通用户比例(%)', type: 'number', default: 10, min: 0, max: 100, dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_ratio_vip_1', label: 'VIP1比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_ratio_vip_2', label: 'VIP2比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'pay_rebate_s', value: true } }, ], }, { @@ -52,10 +52,10 @@ export const affiliateSchema = { title: '推广海报', icon: 'fas fa-image', fields: [ - { key: 'payment_affiliate_poster_s', label: '启用推广海报', type: 'switch', default: true, dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_poster_img', label: '海报背景图', type: 'media', default: '', dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_poster_title', label: '海报标题', type: 'input', default: '', dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_poster_desc', label: '海报描述', type: 'input', default: '', dependsOn: { key: 'payment_affiliate_enabled', value: true } }, + { key: 'pay_rebate_poster_s', label: '启用推广海报', type: 'switch', default: true, dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_poster_img', label: '海报背景图', type: 'media', default: '', dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_poster_title', label: '海报标题', type: 'input', default: '', dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_poster_desc', label: '海报描述', type: 'input', default: '', dependsOn: { key: 'pay_rebate_s', value: true } }, ], }, { @@ -63,10 +63,10 @@ export const affiliateSchema = { title: '文案设置', icon: 'fas fa-pen-fancy', fields: [ - { key: 'payment_affiliate_text_desc', label: '返佣说明', type: 'textarea', default: '', dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_text_details_title', label: '明细标题', type: 'input', default: '', dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_text_details', label: '明细说明', type: 'textarea', default: '', dependsOn: { key: 'payment_affiliate_enabled', value: true } }, - { key: 'payment_affiliate_text_discount', label: '折扣文案', type: 'input', default: '', dependsOn: { key: 'payment_affiliate_enabled', value: true } }, + { key: 'pay_rebate_text_desc', label: '返佣说明', type: 'textarea', default: '', dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_text_details_title', label: '明细标题', type: 'input', default: '', dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_text_details', label: '明细说明', type: 'textarea', default: '', dependsOn: { key: 'pay_rebate_s', value: true } }, + { key: 'pay_rebate_text_discount', label: '折扣文案', type: 'input', default: '', dependsOn: { key: 'pay_rebate_s', value: true } }, ], }, ], diff --git a/assets/admin/src/schema/sections/payment/order.js b/assets/admin/src/schema/sections/payment/order.js index b4d78894..3991f482 100644 --- a/assets/admin/src/schema/sections/payment/order.js +++ b/assets/admin/src/schema/sections/payment/order.js @@ -6,16 +6,16 @@ export const orderSchema = { defaults: { payment_order_prefix: 'AKSRT', payment_order_expiry: 30, - payment_show_user: true, - payment_show_paycount: true, - payment_no_logged_in: true, - payment_cookie_day: 15, - payment_no_logged_remind: '您当前未登录!建议登陆后购买,可保存购买订单', - payment_wait_float_s: true, + pay_show_user: true, + pay_show_paycount: true, + pay_no_logged_in: true, + pay_cookie_day: 15, + pay_no_logged_remind: '您当前未登录!建议登陆后购买,可保存购买订单', + pay_wait_float_s: true, payment_order_max_minutes: 30, - payment_mark: '付费', - payment_box_position: 'content', - payment_free_logged_show: false, + pay_mark: '付费', + pay_box_position: 'top', + pay_free_logged_show: false, payment_show_ip: false, payment_show_device: false, payment_show_order_no: true, @@ -28,11 +28,11 @@ export const orderSchema = { payment_order_status_refunded: '已退款', payment_order_status_refunding: '退款中', payment_order_status_processing: '处理中', - payment_service: '', - payment_service_icon: '', - payment_service_value: '', - payment_service_qq: '', - payment_service_wechat: '', + pay_service: '', + pay_service_icon: '', + pay_service_value: '', + pay_service_qq: '', + pay_service_wechat: '', }, groups: [ { @@ -42,12 +42,12 @@ export const orderSchema = { fields: [ { key: 'payment_order_prefix', label: '订单前缀', type: 'input', default: 'AKSRT' }, { key: 'payment_order_expiry', label: '订单有效期(分钟)', type: 'number', default: 30, min: 5, max: 1440 }, - { key: 'payment_show_user', label: '显示用户信息', type: 'switch', default: true }, - { key: 'payment_show_paycount', label: '显示购买次数', type: 'switch', default: true }, - { key: 'payment_no_logged_in', label: '未登录提示', type: 'switch', default: true }, - { key: 'payment_cookie_day', label: 'Cookie有效期(天)', type: 'number', default: 15, min: 1, max: 31, help: '未登录购买 Cookie 有效时间,1-31 天' }, - { key: 'payment_no_logged_remind', label: '未登录提醒文案', type: 'textarea', default: '您当前未登录!建议登陆后购买,可保存购买订单', help: '未登录用户查看付费内容时的提醒文案' }, - { key: 'payment_wait_float_s', label: '订单等待浮动', type: 'switch', default: true }, + { key: 'pay_show_user', label: '显示用户信息', type: 'switch', default: true }, + { key: 'pay_show_paycount', label: '显示购买次数', type: 'switch', default: true }, + { key: 'pay_no_logged_in', label: '未登录提示', type: 'switch', default: true }, + { key: 'pay_cookie_day', label: 'Cookie有效期(天)', type: 'number', default: 15, min: 1, max: 31, help: '未登录购买 Cookie 有效时间,1-31 天' }, + { key: 'pay_no_logged_remind', label: '未登录提醒文案', type: 'textarea', default: '您当前未登录!建议登陆后购买,可保存购买订单', help: '未登录用户查看付费内容时的提醒文案' }, + { key: 'pay_wait_float_s', label: '订单等待浮动', type: 'switch', default: true }, { key: 'payment_order_max_minutes', label: '订单最大支付时间(分钟)', type: 'number', default: 30, min: 5, max: 1440 }, ], }, @@ -56,9 +56,9 @@ export const orderSchema = { title: '展示设置', icon: 'fas fa-eye', fields: [ - { key: 'payment_mark', label: '付费标记', type: 'input', default: '付费' }, - { key: 'payment_box_position', label: '付费框位置', type: 'radio', default: 'top', options: [{ label: '内容顶部(正文前)', value: 'top' }, { label: '内容底部(正文后)', value: 'bottom' }] }, - { key: 'payment_free_logged_show', label: '登录用户显示免费', type: 'switch', default: false }, + { key: 'pay_mark', label: '付费标记', type: 'input', default: '付费' }, + { key: 'pay_box_position', label: '付费框位置', type: 'radio', default: 'top', options: [{ label: '内容顶部(正文前)', value: 'top' }, { label: '内容底部(正文后)', value: 'bottom' }] }, + { key: 'pay_free_logged_show', label: '登录用户显示免费', type: 'switch', default: false }, { key: 'payment_show_ip', label: '显示用户IP', type: 'switch', default: false }, { key: 'payment_show_device', label: '显示设备信息', type: 'switch', default: false }, { key: 'payment_show_order_no', label: '显示订单号', type: 'switch', default: true }, @@ -85,11 +85,11 @@ export const orderSchema = { title: '服务设置', icon: 'fas fa-headset', fields: [ - { key: 'payment_service', label: '客服设置', type: 'textarea', default: '' }, - { key: 'payment_service_icon', label: '客服图标', type: 'icon', default: '' }, - { key: 'payment_service_value', label: '客服内容', type: 'input', default: '' }, - { key: 'payment_service_qq', label: 'QQ客服', type: 'input', default: '' }, - { key: 'payment_service_wechat', label: '微信客服', type: 'media', default: '' }, + { key: 'pay_service', label: '客服设置', type: 'textarea', default: '' }, + { key: 'pay_service_icon', label: '客服图标', type: 'icon', default: '' }, + { key: 'pay_service_value', label: '客服内容', type: 'input', default: '' }, + { key: 'pay_service_qq', label: 'QQ客服', type: 'input', default: '' }, + { key: 'pay_service_wechat', label: '微信客服', type: 'media', default: '' }, ], }, ], diff --git a/assets/admin/src/schema/sections/payment/paid.js b/assets/admin/src/schema/sections/payment/paid.js index e701805c..75978605 100644 --- a/assets/admin/src/schema/sections/payment/paid.js +++ b/assets/admin/src/schema/sections/payment/paid.js @@ -9,11 +9,11 @@ export const paidSchema = { payment_vip_exempt_roles: '', payment_paid_catalog_note: '', payment_manual_delivery_note: '付费或人工确认内容请在订单备注中记录交付方式。', - payment_paid_mark: '付费', + pay_mark: '付费', payment_currency_symbol: '¥', - payment_paid_show_user: true, - payment_paid_show_paycount: true, - payment_paid_box_position: 'top', + pay_show_user: true, + pay_show_paycount: true, + pay_box_position: 'top', payment_download_enable: false, payment_download_remote_s: true, payment_download_verify_nonce: true, @@ -47,11 +47,11 @@ export const paidSchema = { title: '展示设置', icon: 'fas fa-eye', fields: [ - { key: 'payment_paid_mark', label: '付费标记', type: 'input', default: '付费' }, + { key: 'pay_mark', label: '付费标记', type: 'input', default: '付费' }, { key: 'payment_currency_symbol', label: '货币符号', type: 'input', default: '¥', help: '商品价格前缀,如 ¥、$、¥' }, - { key: 'payment_paid_show_user', label: '显示购买用户', type: 'switch', default: true }, - { key: 'payment_paid_show_paycount', label: '显示购买次数', type: 'switch', default: true }, - { key: 'payment_paid_box_position', label: '付费框位置', type: 'radio', default: 'top', options: [{ label: '内容顶部(正文前)', value: 'top' }, { label: '内容底部(正文后)', value: 'bottom' }] }, + { key: 'pay_show_user', label: '显示购买用户', type: 'switch', default: true }, + { key: 'pay_show_paycount', label: '显示购买次数', type: 'switch', default: true }, + { key: 'pay_box_position', label: '付费框位置', type: 'radio', default: 'top', options: [{ label: '内容顶部(正文前)', value: 'top' }, { label: '内容底部(正文后)', value: 'bottom' }] }, ], }, { diff --git a/assets/admin/src/schema/sections/payment/recharge.js b/assets/admin/src/schema/sections/payment/recharge.js index a59e65ec..3d4a8d66 100644 --- a/assets/admin/src/schema/sections/payment/recharge.js +++ b/assets/admin/src/schema/sections/payment/recharge.js @@ -4,27 +4,25 @@ export const rechargeSchema = { icon: 'fas fa-charging-station', description: '配置测试充值、手动确认和充值套餐结构。', defaults: { - payment_recharge_enabled: true, - payment_recharge_mode: 'manual_review', - payment_recharge_desc: '', - payment_recharge_auto_to_balance: true, - payment_recharge_packages: '30|30|入门包\n98|108|推荐包', - payment_recharge_help: '当前支持人工确认与测试联调;接入真实网关时复用同一组字段。', - payment_recharge_product: '', - payment_recharge_price: 0, - payment_recharge_tag: '元', - payment_recharge_tag_class: '', - payment_recharge_custom_s: true, - payment_recharge_custom_limit: 9999, - payment_balance_transfer_s: false, - payment_balance_transfer_service_charge: 0, - payment_balance_transfer_desc: '', - payment_recharge_pass_charge_s: false, - payment_recharge_pass_charge_desc: '', - payment_recharge_pass_charge_only_password: false, - payment_recharge_exchange_s: false, - payment_recharge_exchange_rate: 100, - payment_recharge_exchange_desc: '', + pay_balance_s: true, + pay_balance_desc: '', + pay_auto_to_balance: true, + pay_balance_product: '30|30|入门包\n98|108|推荐包', + pay_balance_product_name: '', + pay_balance_price: 0, + pay_balance_tag: '元', + pay_balance_tag_class: '', + pay_balance_product_custom_s: true, + pay_balance_product_custom_limit: 9999, + pay_balance_transfer_s: false, + pay_balance_transfer_service_charge: 0, + pay_balance_transfer_desc: '', + pay_balance_pass_charge_s: false, + pay_balance_pass_charge_desc: '', + pay_balance_pass_charge_only_password: false, + pay_balance_exchange_s: false, + pay_balance_exchange_rate: 100, + pay_balance_exchange_desc: '', }, groups: [ { @@ -32,10 +30,10 @@ export const rechargeSchema = { title: '充值开关', icon: 'fas fa-wallet', fields: [ - { key: 'payment_recharge_enabled', label: '启用余额充值结构', type: 'switch', default: true }, - { key: 'payment_recharge_mode', label: '充值模式', type: 'radio', default: 'manual_review', options: [{ label: '人工确认', value: 'manual_review' }, { label: '测试网关', value: 'test_gateway' }], dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_desc', label: '充值说明', type: 'textarea', default: '', dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_auto_to_balance', label: '自动到账到余额', type: 'switch', default: true, dependsOn: { key: 'payment_recharge_enabled', value: true } }, + { key: 'pay_balance_s', label: '启用余额功能', type: 'switch', default: true }, + { key: 'payment_recharge_mode', label: '充值模式', type: 'radio', default: 'manual_review', options: [{ label: '人工确认', value: 'manual_review' }, { label: '测试网关', value: 'test_gateway' }], dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'pay_balance_desc', label: '充值说明', type: 'textarea', default: '', dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'pay_auto_to_balance', label: '自动到账到余额', type: 'switch', default: true, dependsOn: { key: 'pay_balance_s', value: true } }, ], }, { @@ -43,8 +41,8 @@ export const rechargeSchema = { title: '充值套餐', icon: 'fas fa-box-open', fields: [ - { key: 'payment_recharge_packages', label: '套餐列表', type: 'textarea', default: '30|30|入门包\n98|108|推荐包', help: '每行一个套餐:支付金额|到账金额|标题', dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_help', label: '帮助文案', type: 'textarea', default: '当前支持人工确认与测试联调;接入真实网关时复用同一组字段。', dependsOn: { key: 'payment_recharge_enabled', value: true } }, + { key: 'pay_balance_product', label: '套餐列表', type: 'textarea', default: '30|30|入门包\n98|108|推荐包', help: '每行一个套餐:支付金额|到账金额|标题', dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'payment_recharge_help', label: '帮助文案', type: 'textarea', default: '当前支持人工确认与测试联调;接入真实网关时复用同一组字段。', dependsOn: { key: 'pay_balance_s', value: true } }, ], }, { @@ -52,12 +50,12 @@ export const rechargeSchema = { title: '充值产品', icon: 'fas fa-box', fields: [ - { key: 'payment_recharge_product', label: '充值产品', type: 'input', default: '', dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_price', label: '充值价格', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_tag', label: '价格标签', type: 'input', default: '元', dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_tag_class', label: '标签样式', type: 'input', default: '', dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_custom_s', label: '自定义金额', type: 'switch', default: true, dependsOn: { key: 'payment_recharge_enabled', value: true } }, - { key: 'payment_recharge_custom_limit', label: '自定义金额限制', type: 'number', default: 9999, min: 1, max: 99999, dependsOn: { key: 'payment_recharge_enabled', value: true } }, + { key: 'pay_balance_product_name', label: '充值产品', type: 'input', default: '', dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'pay_balance_price', label: '充值价格', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'pay_balance_tag', label: '价格标签', type: 'input', default: '元', dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'pay_balance_tag_class', label: '标签样式', type: 'input', default: '', dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'pay_balance_product_custom_s', label: '自定义金额', type: 'switch', default: true, dependsOn: { key: 'pay_balance_s', value: true } }, + { key: 'pay_balance_product_custom_limit', label: '自定义金额限制', type: 'number', default: 9999, min: 1, max: 99999, dependsOn: { key: 'pay_balance_s', value: true } }, ], }, { @@ -65,9 +63,9 @@ export const rechargeSchema = { title: '余额转账', icon: 'fas fa-exchange-alt', fields: [ - { key: 'payment_balance_transfer_s', label: '启用余额转账', type: 'switch', default: false }, - { key: 'payment_balance_transfer_service_charge', label: '转账手续费(%)', type: 'number', default: 0, min: 0, max: 50, dependsOn: { key: 'payment_balance_transfer_s', value: true } }, - { key: 'payment_balance_transfer_desc', label: '转账说明', type: 'textarea', default: '', dependsOn: { key: 'payment_balance_transfer_s', value: true } }, + { key: 'pay_balance_transfer_s', label: '启用余额转账', type: 'switch', default: false }, + { key: 'pay_balance_transfer_service_charge', label: '转账手续费(%)', type: 'number', default: 0, min: 0, max: 50, dependsOn: { key: 'pay_balance_transfer_s', value: true } }, + { key: 'pay_balance_transfer_desc', label: '转账说明', type: 'textarea', default: '', dependsOn: { key: 'pay_balance_transfer_s', value: true } }, ], }, { @@ -75,9 +73,9 @@ export const rechargeSchema = { title: '充值卡免扣', icon: 'fas fa-ticket-alt', fields: [ - { key: 'payment_recharge_pass_charge_s', label: '启用充值卡免扣', type: 'switch', default: false }, - { key: 'payment_recharge_pass_charge_desc', label: '免扣说明', type: 'textarea', default: '', dependsOn: { key: 'payment_recharge_pass_charge_s', value: true } }, - { key: 'payment_recharge_pass_charge_only_password', label: '仅密码免扣', type: 'switch', default: false, dependsOn: { key: 'payment_recharge_pass_charge_s', value: true } }, + { key: 'pay_balance_pass_charge_s', label: '启用充值卡免扣', type: 'switch', default: false }, + { key: 'pay_balance_pass_charge_desc', label: '免扣说明', type: 'textarea', default: '', dependsOn: { key: 'pay_balance_pass_charge_s', value: true } }, + { key: 'pay_balance_pass_charge_only_password', label: '仅密码免扣', type: 'switch', default: false, dependsOn: { key: 'pay_balance_pass_charge_s', value: true } }, ], }, { @@ -85,9 +83,9 @@ export const rechargeSchema = { title: '积分兑换', icon: 'fas fa-coins', fields: [ - { key: 'payment_recharge_exchange_s', label: '启用积分兑换', type: 'switch', default: false }, - { key: 'payment_recharge_exchange_rate', label: '兑换比例', type: 'number', default: 100, min: 1, max: 10000, help: 'N 积分 = 1 元', dependsOn: { key: 'payment_recharge_exchange_s', value: true } }, - { key: 'payment_recharge_exchange_desc', label: '兑换说明', type: 'textarea', default: '', dependsOn: { key: 'payment_recharge_exchange_s', value: true } }, + { key: 'pay_balance_exchange_s', label: '启用积分兑换', type: 'switch', default: false }, + { key: 'pay_balance_exchange_rate', label: '兑换比例', type: 'number', default: 100, min: 1, max: 10000, help: 'N 积分 = 1 元', dependsOn: { key: 'pay_balance_exchange_s', value: true } }, + { key: 'pay_balance_exchange_desc', label: '兑换说明', type: 'textarea', default: '', dependsOn: { key: 'pay_balance_exchange_s', value: true } }, ], }, ], diff --git a/assets/admin/src/schema/sections/payment/revenue.js b/assets/admin/src/schema/sections/payment/revenue.js index 50c969aa..fb43c3d1 100644 --- a/assets/admin/src/schema/sections/payment/revenue.js +++ b/assets/admin/src/schema/sections/payment/revenue.js @@ -4,16 +4,16 @@ export const revenueSchema = { icon: 'fas fa-chart-line', description: '配置作者分成比例、结算门槛和结算周期。', defaults: { - payment_revenue_enabled: false, + pay_income_s: false, payment_revenue_share_ratio: 70, - payment_revenue_ratio_vip1: 0, - payment_revenue_ratio_vip2: 0, + ratio_vip_1: 0, + ratio_vip_2: 0, payment_revenue_settlement_threshold: 100, payment_revenue_cycle_days: 30, payment_revenue_points_rule: '', payment_revenue_note: '分成规则已就绪,订单入账后自动按比例结算。', - payment_revenue_desc_details: '', - payment_revenue_desc_page: '', + pay_income_desc_details: '', + pay_income_desc_page: '', }, groups: [ { @@ -21,14 +21,14 @@ export const revenueSchema = { title: '分成策略', icon: 'fas fa-percentage', fields: [ - { key: 'payment_revenue_enabled', label: '启用创作分成结构', type: 'switch', default: false }, - { key: 'payment_revenue_share_ratio', label: '作者分成比例(%)', type: 'number', default: 70, min: 0, max: 100, dependsOn: { key: 'payment_revenue_enabled', value: true } }, - { key: 'payment_revenue_ratio_vip1', label: 'VIP1分成比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'payment_revenue_enabled', value: true } }, - { key: 'payment_revenue_ratio_vip2', label: 'VIP2分成比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'payment_revenue_enabled', value: true } }, - { key: 'payment_revenue_settlement_threshold', label: '最小结算金额', type: 'number', default: 100, min: 0, max: 100000, dependsOn: { key: 'payment_revenue_enabled', value: true } }, - { key: 'payment_revenue_cycle_days', label: '结算周期(天)', type: 'number', default: 30, min: 1, max: 365, dependsOn: { key: 'payment_revenue_enabled', value: true } }, - { key: 'payment_revenue_points_rule', label: '积分规则', type: 'textarea', default: '', dependsOn: { key: 'payment_revenue_enabled', value: true } }, - { key: 'payment_revenue_note', label: '结算备注', type: 'textarea', default: '分成策略和台账结构已就绪,订单入账后自动按比例结算。', dependsOn: { key: 'payment_revenue_enabled', value: true } }, + { key: 'pay_income_s', label: '启用创作分成结构', type: 'switch', default: false }, + { key: 'payment_revenue_share_ratio', label: '作者分成比例(%)', type: 'number', default: 70, min: 0, max: 100, dependsOn: { key: 'pay_income_s', value: true } }, + { key: 'ratio_vip_1', label: 'VIP1分成比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'pay_income_s', value: true } }, + { key: 'ratio_vip_2', label: 'VIP2分成比例(%)', type: 'number', default: 0, min: 0, max: 100, dependsOn: { key: 'pay_income_s', value: true } }, + { key: 'payment_revenue_settlement_threshold', label: '最小结算金额', type: 'number', default: 100, min: 0, max: 100000, dependsOn: { key: 'pay_income_s', value: true } }, + { key: 'payment_revenue_cycle_days', label: '结算周期(天)', type: 'number', default: 30, min: 1, max: 365, dependsOn: { key: 'pay_income_s', value: true } }, + { key: 'payment_revenue_points_rule', label: '积分规则', type: 'textarea', default: '', dependsOn: { key: 'pay_income_s', value: true } }, + { key: 'payment_revenue_note', label: '结算备注', type: 'textarea', default: '分成策略和台账结构已就绪,订单入账后自动按比例结算。', dependsOn: { key: 'pay_income_s', value: true } }, ], }, { @@ -36,8 +36,8 @@ export const revenueSchema = { title: '展示设置', icon: 'fas fa-file-alt', fields: [ - { key: 'payment_revenue_desc_details', label: '收益明细文案', type: 'textarea', default: '', dependsOn: { key: 'payment_revenue_enabled', value: true } }, - { key: 'payment_revenue_desc_page', label: '收益说明页', type: 'input', default: '', dependsOn: { key: 'payment_revenue_enabled', value: true } }, + { key: 'pay_income_desc_details', label: '收益明细文案', type: 'textarea', default: '', dependsOn: { key: 'pay_income_s', value: true } }, + { key: 'pay_income_desc_page', label: '收益说明页', type: 'input', default: '', dependsOn: { key: 'pay_income_s', value: true } }, ], }, ], diff --git a/assets/admin/src/schema/sections/payment/vip.js b/assets/admin/src/schema/sections/payment/vip.js index e7a97c8d..ca4b7907 100644 --- a/assets/admin/src/schema/sections/payment/vip.js +++ b/assets/admin/src/schema/sections/payment/vip.js @@ -2,44 +2,42 @@ export const vipSchema = { key: 'payment.vip', title: 'VIP会员', icon: 'fas fa-crown', - description: '配置会员名称、套餐和付费权益说明。', + description: '对齐 Zibll 双级会员:pay_user_vip_1 / pay_user_vip_2 与下载权益。', defaults: { - payment_vip_enabled: false, - payment_vip_name: 'VIP会员', - payment_vip_badge_text: 'VIP', - payment_vip_desc: '', + pay_user_vip_1_s: true, + pay_user_vip_1_name: '一级会员', + pay_user_vip_2_s: true, + pay_user_vip_2_name: '二级会员', + pay_user_vip_desc: '', payment_vip_packages: '30|30|月卡\n365|365|年卡', - payment_vip_help: '会员权益以免扣下载和身份展示为主,开通后立即生效。', - payment_vip_download_limit: 0, - payment_vip_download_speed: 0, - payment_vip_discount: 100, - payment_vip_pass_charge: false, - payment_vip_pass_charge_desc: '', - payment_vip_renew: true, - payment_vip_renew_desc: '', - payment_vip_renew_price_type: 'discount', - payment_vip_renew_discount: 8, - payment_vip_renew_reduce: 20, - payment_vip_upgrade: true, - payment_vip_upgrade_desc: '', - payment_vip_upgrade_product: '', - payment_vip_month_price: 0, - payment_vip_year_price: 0, - payment_vip_permanent_price: 0, - payment_vip_unit_price: 0, - payment_vip_unit_tag: '元', - payment_vip_jump_price: 0, + pay_download_limit: 0, + pay_download_speed: 0, + pay_download_limit_vip_1: 0, + pay_download_speed_vip_1: 0, + pay_download_limit_vip_2: 0, + pay_download_speed_vip_2: 0, + pay_vip_pass_charge_s: false, + pay_vip_pass_charge_desc: '', + vip_renew: true, + vip_renew_desc: '', + vip_renew_price_type: 'discount', + vip_renew_discount: 8, + vip_renew_reduce: 20, + vip_upgrade: true, + vip_upgrade_desc: '', + vip_upgrade_product: '', }, groups: [ { key: 'basic', - title: '会员基础', + title: '会员等级', icon: 'fas fa-user-shield', fields: [ - { key: 'payment_vip_enabled', label: '启用会员结构', type: 'switch', default: false }, - { key: 'payment_vip_name', label: '会员名称', type: 'input', default: 'VIP会员', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_badge_text', label: '会员徽标文案', type: 'input', default: 'VIP', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_desc', label: '会员说明', type: 'textarea', default: '', dependsOn: { key: 'payment_vip_enabled', value: true } }, + { key: 'pay_user_vip_1_s', label: '启用一级会员', type: 'switch', default: true }, + { key: 'pay_user_vip_1_name', label: '一级会员名称', type: 'input', default: '一级会员', dependsOn: { key: 'pay_user_vip_1_s', value: true } }, + { key: 'pay_user_vip_2_s', label: '启用二级会员', type: 'switch', default: true }, + { key: 'pay_user_vip_2_name', label: '二级会员名称', type: 'input', default: '二级会员', dependsOn: { key: 'pay_user_vip_2_s', value: true } }, + { key: 'pay_user_vip_desc', label: '会员说明', type: 'textarea', default: '' }, ], }, { @@ -47,20 +45,22 @@ export const vipSchema = { title: '会员套餐', icon: 'fas fa-gem', fields: [ - { key: 'payment_vip_packages', label: '套餐列表', type: 'textarea', default: '30|30|月卡\n365|365|年卡', help: '每行一个套餐:价格|时长(天)|标题', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_help', label: '权益说明', type: 'textarea', default: '会员权益以免扣下载和身份展示为主,开通后立即生效。', dependsOn: { key: 'payment_vip_enabled', value: true } }, + { key: 'payment_vip_packages', label: '套餐列表', type: 'textarea', default: '30|30|月卡\n365|365|年卡', help: '每行一个套餐:价格|时长(天)|标题' }, ], }, { key: 'benefit', - title: '会员权益', + title: '下载权益', icon: 'fas fa-gift', fields: [ - { key: 'payment_vip_download_limit', label: '下载限制', type: 'number', default: 0, min: 0, max: 9999, help: '0为不限制', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_download_speed', label: '下载速度(KB/s)', type: 'number', default: 0, min: 0, max: 99999, help: '0为不限制', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_discount', label: '折扣(%)', type: 'number', default: 100, min: 1, max: 100, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_pass_charge', label: '积分充值免扣', type: 'switch', default: false, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_pass_charge_desc', label: '积分充值说明', type: 'textarea', default: '', dependsOn: { key: 'payment_vip_enabled', value: true } }, + { key: 'pay_download_limit', label: '普通用户下载限制', type: 'number', default: 0, min: 0, max: 9999, help: '0为不限制' }, + { key: 'pay_download_speed', label: '普通用户下载速度(KB/s)', type: 'number', default: 0, min: 0, max: 99999, help: '0为不限制' }, + { key: 'pay_download_limit_vip_1', label: '一级会员下载限制', type: 'number', default: 0, min: 0, max: 9999, dependsOn: { key: 'pay_user_vip_1_s', value: true } }, + { key: 'pay_download_speed_vip_1', label: '一级会员下载速度(KB/s)', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'pay_user_vip_1_s', value: true } }, + { key: 'pay_download_limit_vip_2', label: '二级会员下载限制', type: 'number', default: 0, min: 0, max: 9999, dependsOn: { key: 'pay_user_vip_2_s', value: true } }, + { key: 'pay_download_speed_vip_2', label: '二级会员下载速度(KB/s)', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'pay_user_vip_2_s', value: true } }, + { key: 'pay_vip_pass_charge_s', label: '会员卡密兑换', type: 'switch', default: false }, + { key: 'pay_vip_pass_charge_desc', label: '卡密兑换说明', type: 'textarea', default: '', dependsOn: { key: 'pay_vip_pass_charge_s', value: true } }, ], }, { @@ -68,11 +68,11 @@ export const vipSchema = { title: '续费设置', icon: 'fas fa-sync-alt', fields: [ - { key: 'payment_vip_renew', label: '允许续费', type: 'switch', default: true, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_renew_desc', label: '续费说明', type: 'textarea', default: '', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_renew_price_type', label: '续费价格类型', type: 'radio', default: 'discount', options: [{ label: '相同价格', value: 'same' }, { label: '折扣价格', value: 'discount' }, { label: '优惠立减', value: 'reduce' }], dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_renew_discount', label: '续费折扣(%)', type: 'number', default: 8, min: 1, max: 100, dependsOn: { key: 'payment_vip_renew_price_type', value: 'discount' } }, - { key: 'payment_vip_renew_reduce', label: '续费减免金额', type: 'number', default: 20, min: 0, max: 9999, dependsOn: { key: 'payment_vip_renew_price_type', value: 'reduce' } }, + { key: 'vip_renew', label: '允许续费', type: 'switch', default: true }, + { key: 'vip_renew_desc', label: '续费说明', type: 'textarea', default: '', dependsOn: { key: 'vip_renew', value: true } }, + { key: 'vip_renew_price_type', label: '续费价格类型', type: 'radio', default: 'discount', options: [{ label: '相同价格', value: 'same' }, { label: '折扣价格', value: 'discount' }, { label: '优惠立减', value: 'reduce' }], dependsOn: { key: 'vip_renew', value: true } }, + { key: 'vip_renew_discount', label: '续费折扣(%)', type: 'number', default: 8, min: 1, max: 100, dependsOn: { key: 'vip_renew_price_type', value: 'discount' } }, + { key: 'vip_renew_reduce', label: '续费减免金额', type: 'number', default: 20, min: 0, max: 9999, dependsOn: { key: 'vip_renew_price_type', value: 'reduce' } }, ], }, { @@ -80,22 +80,9 @@ export const vipSchema = { title: '升级设置', icon: 'fas fa-arrow-up', fields: [ - { key: 'payment_vip_upgrade', label: '允许升级', type: 'switch', default: true, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_upgrade_desc', label: '升级说明', type: 'textarea', default: '', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_upgrade_product', label: '升级产品', type: 'input', default: '', dependsOn: { key: 'payment_vip_enabled', value: true } }, - ], - }, - { - key: 'price', - title: '价格设置', - icon: 'fas fa-yen-sign', - fields: [ - { key: 'payment_vip_month_price', label: '月卡价格', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_year_price', label: '年卡价格', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_permanent_price', label: '永久价格', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_unit_price', label: '单位价格', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_unit_tag', label: '单位标签', type: 'input', default: '元', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_jump_price', label: '跳转价格', type: 'number', default: 0, min: 0, max: 99999, dependsOn: { key: 'payment_vip_enabled', value: true } }, + { key: 'vip_upgrade', label: '允许升级', type: 'switch', default: true }, + { key: 'vip_upgrade_desc', label: '升级说明', type: 'textarea', default: '', dependsOn: { key: 'vip_upgrade', value: true } }, + { key: 'vip_upgrade_product', label: '升级产品', type: 'input', default: '', dependsOn: { key: 'vip_upgrade', value: true } }, ], }, ], diff --git a/inc/bootstrap.php b/inc/bootstrap.php index b8c1a6ec..64e5ec91 100644 --- a/inc/bootstrap.php +++ b/inc/bootstrap.php @@ -71,6 +71,7 @@ require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-mail.php'; require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-theme-search.php'; require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-post-display.php'; require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-home-cms.php'; +require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-payment-runtime.php'; require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-display-runtime.php'; require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-category-runtime.php'; require_once AKSRT_DIR . '/inc/classes/settings/class-aksrt-settings-user-runtime.php'; diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php b/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php index 6a6c11c4..505b6bfb 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php @@ -30,11 +30,11 @@ class AKSRT_Admin_Schema_Payment { ['key' => 'payment_manual_delivery_note', 'label' => '人工交付备注', 'type' => 'textarea', 'default' => ''], ]], ['key' => 'display', 'title' => '展示设置', 'fields' => [ - ['key' => 'payment_paid_mark', 'label' => '付费标记', 'type' => 'input', 'default' => '付费'], + ['key' => 'pay_mark', 'label' => '付费标记', 'type' => 'input', 'default' => '付费'], ['key' => 'payment_currency_symbol', 'label' => '货币符号', 'type' => 'input', 'default' => '¥'], - ['key' => 'payment_paid_show_user', 'label' => '显示购买用户', 'type' => 'switch', 'default' => true], - ['key' => 'payment_paid_show_paycount', 'label' => '显示购买次数', 'type' => 'switch', 'default' => true], - ['key' => 'payment_paid_box_position', 'label' => '付费框位置', 'type' => 'radio', 'default' => 'top', 'options' => [ + ['key' => 'pay_show_user', 'label' => '显示购买用户', 'type' => 'switch', 'default' => true], + ['key' => 'pay_show_paycount', 'label' => '显示购买次数', 'type' => 'switch', 'default' => true], + ['key' => 'pay_box_position', 'label' => '付费框位置', 'type' => 'radio', 'default' => 'top', 'options' => [ ['label' => '内容顶部(正文前)', 'value' => 'top'], ['label' => '内容底部(正文后)', 'value' => 'bottom'], ]], @@ -57,35 +57,35 @@ class AKSRT_Admin_Schema_Payment { 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'basic', 'title' => '充值开关', 'fields' => [ - ['key' => 'payment_recharge_enabled', 'label' => '启用余额充值', 'type' => 'switch', 'default' => true], - ['key' => 'payment_recharge_mode', 'label' => '充值模式', 'type' => 'select', 'default' => 'manual_review', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true], 'options' => [ + ['key' => 'pay_balance_s', 'label' => '启用余额充值', 'type' => 'switch', 'default' => true], + ['key' => 'payment_recharge_mode', 'label' => '充值模式', 'type' => 'select', 'default' => 'manual_review', 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true], 'options' => [ ['label' => '人工审核', 'value' => 'manual_review'], ['label' => '自动到账', 'value' => 'auto'], ]], - ['key' => 'payment_recharge_desc', 'label' => '充值说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], - ['key' => 'payment_recharge_auto_to_balance', 'label' => '自动到账到余额', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'pay_balance_desc', 'label' => '充值说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], + ['key' => 'pay_auto_to_balance', 'label' => '自动到账到余额', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], ]], ['key' => 'packages', 'title' => '充值套餐', 'fields' => [ - ['key' => 'payment_recharge_packages', 'label' => '套餐列表', 'type' => 'textarea', 'default' => "30|30|入门包\n98|108|推荐包", 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], - ['key' => 'payment_recharge_help', 'label' => '帮助文案', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'pay_balance_product', 'label' => '套餐列表', 'type' => 'textarea', 'default' => "30|30|入门包\n98|108|推荐包", 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], + ['key' => 'payment_recharge_help', 'label' => '帮助文案', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], ]], ['key' => 'product', 'title' => '充值产品', 'fields' => [ - ['key' => 'payment_recharge_product', 'label' => '充值产品', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], - ['key' => 'payment_recharge_price', 'label' => '充值价格', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], - ['key' => 'payment_recharge_tag', 'label' => '价格标签', 'type' => 'input', 'default' => '元', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], - ['key' => 'payment_recharge_tag_class', 'label' => '标签样式', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], - ['key' => 'payment_recharge_custom_s', 'label' => '自定义金额', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], - ['key' => 'payment_recharge_custom_limit', 'label' => '自定义金额限制', 'type' => 'number', 'default' => 9999, 'min' => 1, 'max' => 99999, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_product', 'label' => '充值产品', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], + ['key' => 'payment_recharge_price', 'label' => '充值价格', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999, 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], + ['key' => 'payment_recharge_tag', 'label' => '价格标签', 'type' => 'input', 'default' => '元', 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], + ['key' => 'payment_recharge_tag_class', 'label' => '标签样式', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], + ['key' => 'pay_balance_product_custom_s', 'label' => '自定义金额', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], + ['key' => 'pay_balance_product_custom_limit', 'label' => '自定义金额限制', 'type' => 'number', 'default' => 9999, 'min' => 1, 'max' => 99999, 'dependsOn' => ['key' => 'pay_balance_s', 'value' => true]], ]], ['key' => 'transfer', 'title' => '余额转账', 'fields' => [ - ['key' => 'payment_balance_transfer_s', 'label' => '启用余额转账', 'type' => 'switch', 'default' => false], - ['key' => 'payment_balance_transfer_service_charge', 'label' => '转账手续费(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 50, 'dependsOn' => ['key' => 'payment_balance_transfer_s', 'value' => true]], - ['key' => 'payment_balance_transfer_desc', 'label' => '转账说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_balance_transfer_s', 'value' => true]], + ['key' => 'pay_balance_transfer_s', 'label' => '启用余额转账', 'type' => 'switch', 'default' => false], + ['key' => 'pay_balance_transfer_service_charge', 'label' => '转账手续费(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 50, 'dependsOn' => ['key' => 'pay_balance_transfer_s', 'value' => true]], + ['key' => 'pay_balance_transfer_desc', 'label' => '转账说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'pay_balance_transfer_s', 'value' => true]], ]], ['key' => 'pass-charge', 'title' => '充值卡免扣', 'fields' => [ - ['key' => 'payment_recharge_pass_charge_s', 'label' => '启用充值卡免扣', 'type' => 'switch', 'default' => false], - ['key' => 'payment_recharge_pass_charge_desc', 'label' => '免扣说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_pass_charge_s', 'value' => true]], - ['key' => 'payment_recharge_pass_charge_only_password', 'label' => '仅密码免扣', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'payment_recharge_pass_charge_s', 'value' => true]], + ['key' => 'pay_balance_pass_charge_s', 'label' => '启用充值卡免扣', 'type' => 'switch', 'default' => false], + ['key' => 'pay_balance_pass_charge_desc', 'label' => '免扣说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'pay_balance_pass_charge_s', 'value' => true]], + ['key' => 'pay_balance_pass_charge_only_password', 'label' => '仅密码免扣', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'pay_balance_pass_charge_s', 'value' => true]], ]], ['key' => 'exchange', 'title' => '积分兑换', 'fields' => [ ['key' => 'payment_recharge_exchange_s', 'label' => '启用积分兑换', 'type' => 'switch', 'default' => false], @@ -101,37 +101,38 @@ class AKSRT_Admin_Schema_Payment { 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'basic', 'title' => '会员基础', 'fields' => [ - ['key' => 'payment_vip_enabled', 'label' => '启用会员结构', 'type' => 'switch', 'default' => false], - ['key' => 'payment_vip_name', 'label' => '会员名称', 'type' => 'input', 'default' => 'VIP会员'], - ['key' => 'payment_vip_badge_text', 'label' => '会员徽标文案', 'type' => 'input', 'default' => 'VIP'], - ['key' => 'payment_vip_desc', 'label' => '会员说明', 'type' => 'textarea', 'default' => ''], + ['key' => 'pay_user_vip_1_s', 'label' => '启用一级会员', 'type' => 'switch', 'default' => true], + ['key' => 'pay_user_vip_1_name', 'label' => '一级会员名称', 'type' => 'input', 'default' => '一级会员', 'dependsOn' => ['key' => 'pay_user_vip_1_s', 'value' => true]], + ['key' => 'pay_user_vip_2_s', 'label' => '启用二级会员', 'type' => 'switch', 'default' => true], + ['key' => 'pay_user_vip_2_name', 'label' => '二级会员名称', 'type' => 'input', 'default' => '二级会员', 'dependsOn' => ['key' => 'pay_user_vip_2_s', 'value' => true]], + ['key' => 'pay_user_vip_desc', 'label' => '会员说明', 'type' => 'textarea', 'default' => ''], ]], ['key' => 'packages', 'title' => '会员套餐', 'fields' => [ ['key' => 'payment_vip_packages', 'label' => '套餐列表', 'type' => 'textarea', 'default' => "30|30|月卡\n365|365|年卡"], ['key' => 'payment_vip_help', 'label' => '权益说明', 'type' => 'textarea', 'default' => ''], ]], ['key' => 'benefit', 'title' => '会员权益', 'fields' => [ - ['key' => 'payment_vip_download_limit', 'label' => '下载限制', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 9999], - ['key' => 'payment_vip_download_speed', 'label' => '下载速度(KB/s)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999], + ['key' => 'pay_download_limit', 'label' => '下载限制', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 9999], + ['key' => 'pay_download_speed', 'label' => '下载速度(KB/s)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999], ['key' => 'payment_vip_discount', 'label' => '折扣(%)', 'type' => 'number', 'default' => 100, 'min' => 1, 'max' => 100], - ['key' => 'payment_vip_pass_charge', 'label' => '积分充值免扣', 'type' => 'switch', 'default' => false], - ['key' => 'payment_vip_pass_charge_desc', 'label' => '积分充值说明', 'type' => 'textarea', 'default' => ''], + ['key' => 'pay_vip_pass_charge_s', 'label' => '积分充值免扣', 'type' => 'switch', 'default' => false], + ['key' => 'pay_vip_pass_charge_desc', 'label' => '积分充值说明', 'type' => 'textarea', 'default' => ''], ]], ['key' => 'renew', 'title' => '续费设置', 'fields' => [ - ['key' => 'payment_vip_renew', 'label' => '允许续费', 'type' => 'switch', 'default' => true], - ['key' => 'payment_vip_renew_desc', 'label' => '续费说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_vip_renew', 'value' => true]], - ['key' => 'payment_vip_renew_price_type', 'label' => '续费价格类型', 'type' => 'radio', 'default' => 'discount', 'dependsOn' => ['key' => 'payment_vip_renew', 'value' => true], 'options' => [ + ['key' => 'vip_renew', 'label' => '允许续费', 'type' => 'switch', 'default' => true], + ['key' => 'vip_renew_desc', 'label' => '续费说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'vip_renew', 'value' => true]], + ['key' => 'vip_renew_price_type', 'label' => '续费价格类型', 'type' => 'radio', 'default' => 'discount', 'dependsOn' => ['key' => 'vip_renew', 'value' => true], 'options' => [ ['label' => '相同价格', 'value' => 'same'], ['label' => '折扣价格', 'value' => 'discount'], ['label' => '优惠立减', 'value' => 'reduce'], ]], - ['key' => 'payment_vip_renew_discount', 'label' => '续费折扣(%)', 'type' => 'number', 'default' => 8, 'min' => 1, 'max' => 100, 'dependsOn' => ['key' => 'payment_vip_renew_price_type', 'value' => 'discount']], - ['key' => 'payment_vip_renew_reduce', 'label' => '续费减免金额', 'type' => 'number', 'default' => 20, 'min' => 0, 'max' => 9999, 'dependsOn' => ['key' => 'payment_vip_renew_price_type', 'value' => 'reduce']], + ['key' => 'vip_renew_discount', 'label' => '续费折扣(%)', 'type' => 'number', 'default' => 8, 'min' => 1, 'max' => 100, 'dependsOn' => ['key' => 'vip_renew_price_type', 'value' => 'discount']], + ['key' => 'vip_renew_reduce', 'label' => '续费减免金额', 'type' => 'number', 'default' => 20, 'min' => 0, 'max' => 9999, 'dependsOn' => ['key' => 'vip_renew_price_type', 'value' => 'reduce']], ]], ['key' => 'upgrade', 'title' => '升级设置', 'fields' => [ - ['key' => 'payment_vip_upgrade', 'label' => '允许升级', 'type' => 'switch', 'default' => true], - ['key' => 'payment_vip_upgrade_desc', 'label' => '升级说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_vip_upgrade', 'value' => true]], - ['key' => 'payment_vip_upgrade_product', 'label' => '升级产品', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_vip_upgrade', 'value' => true]], + ['key' => 'vip_upgrade', 'label' => '允许升级', 'type' => 'switch', 'default' => true], + ['key' => 'vip_upgrade_desc', 'label' => '升级说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'vip_upgrade', 'value' => true]], + ['key' => 'vip_upgrade_product', 'label' => '升级产品', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'vip_upgrade', 'value' => true]], ]], ['key' => 'price', 'title' => '价格设置', 'fields' => [ ['key' => 'payment_vip_month_price', 'label' => '月卡价格', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999], @@ -150,18 +151,18 @@ class AKSRT_Admin_Schema_Payment { 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'policy', 'title' => '分成策略', 'fields' => [ - ['key' => 'payment_revenue_enabled', 'label' => '启用创作分成', 'type' => 'switch', 'default' => false], + ['key' => 'pay_income_s', 'label' => '启用创作分成', 'type' => 'switch', 'default' => false], ['key' => 'payment_revenue_share_ratio', 'label' => '作者分成比例(%)', 'type' => 'number', 'default' => 70, 'min' => 1, 'max' => 100], - ['key' => 'payment_revenue_ratio_vip1', 'label' => 'VIP1分成比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], - ['key' => 'payment_revenue_ratio_vip2', 'label' => 'VIP2分成比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], + ['key' => 'ratio_vip_1', 'label' => 'VIP1分成比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], + ['key' => 'ratio_vip_2', 'label' => 'VIP2分成比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], ['key' => 'payment_revenue_settlement_threshold', 'label' => '最小结算金额', 'type' => 'number', 'default' => 100, 'min' => 1, 'max' => 99999], ['key' => 'payment_revenue_cycle_days', 'label' => '结算周期(天)', 'type' => 'number', 'default' => 30, 'min' => 1, 'max' => 365], ['key' => 'payment_revenue_points_rule', 'label' => '积分规则', 'type' => 'textarea', 'default' => ''], ['key' => 'payment_revenue_note', 'label' => '结算备注', 'type' => 'textarea', 'default' => ''], ]], ['key' => 'display', 'title' => '展示设置', 'fields' => [ - ['key' => 'payment_revenue_desc_details', 'label' => '收益明细文案', 'type' => 'textarea', 'default' => ''], - ['key' => 'payment_revenue_desc_page', 'label' => '收益说明页', 'type' => 'input', 'default' => ''], + ['key' => 'pay_income_desc_details', 'label' => '收益明细文案', 'type' => 'textarea', 'default' => ''], + ['key' => 'pay_income_desc_page', 'label' => '收益说明页', 'type' => 'input', 'default' => ''], ]], ], ], @@ -172,29 +173,29 @@ class AKSRT_Admin_Schema_Payment { 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'policy', 'title' => '返佣策略', 'fields' => [ - ['key' => 'payment_affiliate_enabled', 'label' => '启用推广返佣', 'type' => 'switch', 'default' => false], - ['key' => 'payment_affiliate_ratio', 'label' => '返佣比例(%)', 'type' => 'number', 'default' => 10, 'min' => 1, 'max' => 100], + ['key' => 'pay_rebate_s', 'label' => '启用推广返佣', 'type' => 'switch', 'default' => false], + ['key' => 'pay_rebate_ratio', 'label' => '返佣比例(%)', 'type' => 'number', 'default' => 10, 'min' => 1, 'max' => 100], ['key' => 'payment_affiliate_window_days', 'label' => '归因窗口(天)', 'type' => 'number', 'default' => 30, 'min' => 1, 'max' => 365], ['key' => 'payment_affiliate_require_paid_order', 'label' => '仅对已支付订单返佣', 'type' => 'switch', 'default' => true], - ['key' => 'payment_affiliate_self_s', 'label' => '自购返佣', 'type' => 'switch', 'default' => true], - ['key' => 'payment_affiliate_show_users', 'label' => '显示推广用户', 'type' => 'switch', 'default' => true], + ['key' => 'pay_rebate_self_s', 'label' => '自购返佣', 'type' => 'switch', 'default' => true], + ['key' => 'pay_rebate_show_users', 'label' => '显示推广用户', 'type' => 'switch', 'default' => true], ]], ['key' => 'user-ratio', 'title' => '用户返佣比例', 'fields' => [ ['key' => 'payment_affiliate_user_ratio', 'label' => '普通用户比例(%)', 'type' => 'number', 'default' => 10, 'min' => 0, 'max' => 100], - ['key' => 'payment_affiliate_vip1_ratio', 'label' => 'VIP1比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], - ['key' => 'payment_affiliate_vip2_ratio', 'label' => 'VIP2比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], + ['key' => 'pay_rebate_ratio_vip_1', 'label' => 'VIP1比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], + ['key' => 'pay_rebate_ratio_vip_2', 'label' => 'VIP2比例(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 100], ]], ['key' => 'poster', 'title' => '推广海报', 'fields' => [ - ['key' => 'payment_affiliate_poster_s', 'label' => '启用推广海报', 'type' => 'switch', 'default' => true], - ['key' => 'payment_affiliate_poster_img', 'label' => '海报背景图', 'type' => 'media', 'default' => ''], - ['key' => 'payment_affiliate_poster_title', 'label' => '海报标题', 'type' => 'input', 'default' => ''], - ['key' => 'payment_affiliate_poster_desc', 'label' => '海报描述', 'type' => 'input', 'default' => ''], + ['key' => 'pay_rebate_poster_s', 'label' => '启用推广海报', 'type' => 'switch', 'default' => true], + ['key' => 'pay_rebate_poster_img', 'label' => '海报背景图', 'type' => 'media', 'default' => ''], + ['key' => 'pay_rebate_poster_title', 'label' => '海报标题', 'type' => 'input', 'default' => ''], + ['key' => 'pay_rebate_poster_desc', 'label' => '海报描述', 'type' => 'input', 'default' => ''], ]], ['key' => 'text', 'title' => '文案设置', 'fields' => [ - ['key' => 'payment_affiliate_text_desc', 'label' => '返佣说明', 'type' => 'textarea', 'default' => ''], - ['key' => 'payment_affiliate_text_details_title', 'label' => '明细标题', 'type' => 'input', 'default' => ''], - ['key' => 'payment_affiliate_text_details', 'label' => '明细说明', 'type' => 'textarea', 'default' => ''], - ['key' => 'payment_affiliate_text_discount', 'label' => '折扣文案', 'type' => 'input', 'default' => ''], + ['key' => 'pay_rebate_text_desc', 'label' => '返佣说明', 'type' => 'textarea', 'default' => ''], + ['key' => 'pay_rebate_text_details_title', 'label' => '明细标题', 'type' => 'input', 'default' => ''], + ['key' => 'pay_rebate_text_details', 'label' => '明细说明', 'type' => 'textarea', 'default' => ''], + ['key' => 'pay_rebate_text_discount', 'label' => '折扣文案', 'type' => 'input', 'default' => ''], ]], ], ], @@ -281,21 +282,21 @@ class AKSRT_Admin_Schema_Payment { ['key' => 'basic', 'title' => '订单基础', 'fields' => [ ['key' => 'payment_order_prefix', 'label' => '订单前缀', 'type' => 'input', 'default' => 'AKSRT'], ['key' => 'payment_order_expiry', 'label' => '订单有效期(分钟)', 'type' => 'number', 'default' => 30, 'min' => 5, 'max' => 1440], - ['key' => 'payment_show_user', 'label' => '显示用户信息', 'type' => 'switch', 'default' => true], - ['key' => 'payment_show_paycount', 'label' => '显示购买次数', 'type' => 'switch', 'default' => true], - ['key' => 'payment_no_logged_in', 'label' => '未登录提示', 'type' => 'switch', 'default' => true], - ['key' => 'payment_cookie_day', 'label' => 'Cookie有效期(天)', 'type' => 'number', 'default' => 15, 'min' => 1, 'max' => 31], - ['key' => 'payment_no_logged_remind', 'label' => '未登录提醒文案', 'type' => 'textarea', 'default' => '您当前未登录!建议登陆后购买,可保存购买订单'], - ['key' => 'payment_wait_float_s', 'label' => '订单等待浮动', 'type' => 'switch', 'default' => true], + ['key' => 'pay_show_user', 'label' => '显示用户信息', 'type' => 'switch', 'default' => true], + ['key' => 'pay_show_paycount', 'label' => '显示购买次数', 'type' => 'switch', 'default' => true], + ['key' => 'pay_no_logged_in', 'label' => '未登录提示', 'type' => 'switch', 'default' => true], + ['key' => 'pay_cookie_day', 'label' => 'Cookie有效期(天)', 'type' => 'number', 'default' => 15, 'min' => 1, 'max' => 31], + ['key' => 'pay_no_logged_remind', 'label' => '未登录提醒文案', 'type' => 'textarea', 'default' => '您当前未登录!建议登陆后购买,可保存购买订单'], + ['key' => 'pay_wait_float_s', 'label' => '订单等待浮动', 'type' => 'switch', 'default' => true], ['key' => 'payment_order_max_minutes', 'label' => '订单最大支付时间(分钟)', 'type' => 'number', 'default' => 30, 'min' => 5, 'max' => 1440], ]], ['key' => 'display', 'title' => '展示设置', 'fields' => [ - ['key' => 'payment_mark', 'label' => '付费标记', 'type' => 'input', 'default' => '付费'], - ['key' => 'payment_box_position', 'label' => '付费框位置', 'type' => 'radio', 'default' => 'top', 'options' => [ + ['key' => 'pay_mark', 'label' => '付费标记', 'type' => 'input', 'default' => '付费'], + ['key' => 'pay_box_position', 'label' => '付费框位置', 'type' => 'radio', 'default' => 'top', 'options' => [ ['label' => '内容顶部(正文前)', 'value' => 'top'], ['label' => '内容底部(正文后)', 'value' => 'bottom'], ]], - ['key' => 'payment_free_logged_show', 'label' => '登录用户显示免费', 'type' => 'switch', 'default' => false], + ['key' => 'pay_free_logged_show', 'label' => '登录用户显示免费', 'type' => 'switch', 'default' => false], ['key' => 'payment_show_ip', 'label' => '显示用户IP', 'type' => 'switch', 'default' => false], ['key' => 'payment_show_device', 'label' => '显示设备信息', 'type' => 'switch', 'default' => false], ['key' => 'payment_show_order_no', 'label' => '显示订单号', 'type' => 'switch', 'default' => true], @@ -312,7 +313,7 @@ class AKSRT_Admin_Schema_Payment { ['key' => 'payment_order_status_processing', 'label' => '处理中状态文案', 'type' => 'input', 'default' => '处理中'], ]], ['key' => 'service', 'title' => '服务设置', 'fields' => [ - ['key' => 'payment_service', 'label' => '客服设置', 'type' => 'textarea', 'default' => ''], + ['key' => 'pay_service', 'label' => '客服设置', 'type' => 'textarea', 'default' => ''], ['key' => 'payment_service_icon', 'label' => '客服图标', 'type' => 'icon', 'default' => ''], ['key' => 'payment_service_value', 'label' => '客服内容', 'type' => 'input', 'default' => ''], ['key' => 'payment_service_qq', 'label' => 'QQ客服', 'type' => 'input', 'default' => ''], diff --git a/inc/classes/settings/class-aksrt-settings-credits-payment-groups.php b/inc/classes/settings/class-aksrt-settings-credits-payment-groups.php index d1945df1..06ff7f4a 100644 --- a/inc/classes/settings/class-aksrt-settings-credits-payment-groups.php +++ b/inc/classes/settings/class-aksrt-settings-credits-payment-groups.php @@ -133,42 +133,42 @@ trait AKSRT_Settings_Credits_Payment_Groups { * } */ public static function get_paid_content_settings(): array { - return AKSRT_Settings_Home_Cms::get_paid_content_settings(); + return AKSRT_Settings_Payment_Runtime::get_paid_content_settings(); } /** * @return array{enabled:bool,mode:string,packages_raw:string,package_count:int,help_text:string} */ public static function get_payment_recharge_settings(): array { - return AKSRT_Settings_Home_Cms::get_payment_recharge_settings(); + return AKSRT_Settings_Payment_Runtime::get_payment_recharge_settings(); } /** * @return array{enabled:bool,name:string,badge_text:string,packages_raw:string,package_count:int,help_text:string} */ public static function get_payment_vip_settings(): array { - return AKSRT_Settings_Home_Cms::get_payment_vip_settings(); + return AKSRT_Settings_Payment_Runtime::get_payment_vip_settings(); } /** * @return array{enabled:bool,share_ratio:int,settlement_threshold:int,cycle_days:int,note:string} */ public static function get_payment_revenue_settings(): array { - return AKSRT_Settings_Home_Cms::get_payment_revenue_settings(); + return AKSRT_Settings_Payment_Runtime::get_payment_revenue_settings(); } /** * @return array{enabled:bool,ratio:int,window_days:int,require_paid_order:bool,note:string} */ public static function get_payment_affiliate_settings(): array { - return AKSRT_Settings_Home_Cms::get_payment_affiliate_settings(); + return AKSRT_Settings_Payment_Runtime::get_payment_affiliate_settings(); } /** * @return array{mode:string,test_enabled:bool,manual_review:bool,callback_secret:string,help_text:string} */ public static function get_payment_gateway_settings(): array { - return AKSRT_Settings_Home_Cms::get_payment_gateway_settings(); + return AKSRT_Settings_Payment_Runtime::get_payment_gateway_settings(); } /** @@ -177,7 +177,7 @@ trait AKSRT_Settings_Credits_Payment_Groups { * @return array{prefix:string,expiry:int,show_user:bool,show_paycount:bool,no_logged_in:bool,cookie_day:int,no_logged_remind:bool,wait_float:bool,order_max_minutes:int,mark:string,box_position:string,free_logged_show:bool,show_ip:bool,show_device:bool,show_order_no:bool,show_create_time:bool,show_pay_time:bool,status_texts:array,service:array} */ public static function get_order_settings(): array { - return AKSRT_Settings_Home_Cms::get_order_settings(); + return AKSRT_Settings_Payment_Runtime::get_order_settings(); } /** @@ -186,7 +186,7 @@ trait AKSRT_Settings_Credits_Payment_Groups { * @return array{enabled:bool,desc:string,type:string,prefix:string,length:int,batch_size:int,max_redeem:int,expiry_days:int,amount:int,vip_days:int,credits:int,redeem_page:string,success_msg:string,fail_msg:string} */ public static function get_card_pass_settings(): array { - return AKSRT_Settings_Home_Cms::get_card_pass_settings(); + return AKSRT_Settings_Payment_Runtime::get_card_pass_settings(); } /** @@ -195,6 +195,6 @@ trait AKSRT_Settings_Credits_Payment_Groups { * @return array{min_amount:int,service_charge_rate:int,text:string} */ public static function get_withdrawal_settings(): array { - return AKSRT_Settings_Home_Cms::get_withdrawal_settings(); + return AKSRT_Settings_Payment_Runtime::get_withdrawal_settings(); } } diff --git a/inc/classes/settings/class-aksrt-settings-home-cms.php b/inc/classes/settings/class-aksrt-settings-home-cms.php index dd608569..3ae6ad9e 100644 --- a/inc/classes/settings/class-aksrt-settings-home-cms.php +++ b/inc/classes/settings/class-aksrt-settings-home-cms.php @@ -360,324 +360,39 @@ class AKSRT_Settings_Home_Cms { } public static function get_paid_content_settings(): array { - $settings = AKSRT_Settings::get_all(); - $features = self::get_cms_features(); - $catalog_note = trim((string) ($settings['payment_paid_catalog_note'] ?? '')); - $manual_note = trim((string) ($settings['payment_manual_delivery_note'] ?? '')); - - $box_position = sanitize_key((string) ($settings['payment_paid_box_position'] ?? 'top')); - if (!in_array($box_position, ['top', 'bottom'], true)) { - $box_position = 'top'; - } - - return [ - 'download_login' => !empty($features['download_login']), - 'download_credit' => !empty($features['download_credit']) && AKSRT_Settings::credits_enabled(), - 'download_captcha' => !empty($features['download_captcha']), - 'default_cost' => AKSRT_Settings::download_default_cost(), - 'paid_post_types' => self::parse_slug_list((string) ($settings['payment_paid_post_types'] ?? 'post'), ['post']), - 'vip_free_download' => !empty($settings['payment_vip_free_download']), - 'vip_exempt_roles' => self::parse_slug_list((string) ($settings['payment_vip_exempt_roles'] ?? '')), - 'catalog_note' => $catalog_note, - 'manual_delivery_note' => $manual_note !== '' ? $manual_note : __('付费或人工确认内容请在订单备注中记录交付方式。', 'aksrt'), - 'no_logged_in' => !isset($settings['payment_no_logged_in']) || !empty($settings['payment_no_logged_in']), - 'display' => [ - 'mark' => sanitize_text_field((string) ($settings['payment_paid_mark'] ?? '付费')), - 'currency_symbol' => sanitize_text_field((string) ($settings['payment_currency_symbol'] ?? '¥')), - 'show_user' => !isset($settings['payment_paid_show_user']) || !empty($settings['payment_paid_show_user']), - 'show_paycount' => !isset($settings['payment_paid_show_paycount']) || !empty($settings['payment_paid_show_paycount']), - 'box_position' => $box_position, - ], - 'download' => [ - 'enabled' => !empty($settings['payment_download_enable']), - 'remote' => !isset($settings['payment_download_remote_s']) || !empty($settings['payment_download_remote_s']), - 'verify_nonce' => !isset($settings['payment_download_verify_nonce']) || !empty($settings['payment_download_verify_nonce']), - 'user_log' => max(0, min(9999, (int) ($settings['payment_download_user_log'] ?? 50))), - 'post_log' => max(0, min(9999, (int) ($settings['payment_download_post_log'] ?? 50))), - 'remote_size' => max(1, (int) ($settings['payment_download_remote_size'] ?? 2048)), - 'remote_ext' => sanitize_text_field((string) ($settings['payment_download_remote_ext'] ?? 'zip,rar,7z')), - ], - ]; + return AKSRT_Settings_Payment_Runtime::get_paid_content_settings(); } public static function get_payment_recharge_settings(): array { - $settings = AKSRT_Settings::get_all(); - $mode = sanitize_key((string) ($settings['payment_recharge_mode'] ?? 'manual_review')); - if (!in_array($mode, ['manual_review', 'test_gateway'], true)) { - $mode = 'manual_review'; - } - - $packages = (string) ($settings['payment_recharge_packages'] ?? "30|30|入门包\n98|108|推荐包"); - $help_text = trim((string) ($settings['payment_recharge_help'] ?? '')); - - return [ - 'enabled' => !empty($settings['payment_recharge_enabled']), - 'mode' => $mode, - 'desc' => sanitize_textarea_field((string) ($settings['payment_recharge_desc'] ?? '')), - 'auto_to_balance' => !isset($settings['payment_recharge_auto_to_balance']) || !empty($settings['payment_recharge_auto_to_balance']), - 'packages_raw' => $packages, - 'package_count' => self::count_structured_lines($packages), - 'help_text' => $help_text !== '' ? $help_text : __('当前支持人工确认与测试联调;接入真实网关时复用同一组字段。', 'aksrt'), - 'product' => [ - 'name' => sanitize_text_field((string) ($settings['payment_recharge_product'] ?? '')), - 'price' => max(0, min(99999, (int) ($settings['payment_recharge_price'] ?? 0))), - 'tag' => sanitize_text_field((string) ($settings['payment_recharge_tag'] ?? '元')), - 'tag_class' => sanitize_text_field((string) ($settings['payment_recharge_tag_class'] ?? '')), - 'custom_s' => !isset($settings['payment_recharge_custom_s']) || !empty($settings['payment_recharge_custom_s']), - 'custom_limit' => max(1, min(99999, (int) ($settings['payment_recharge_custom_limit'] ?? 9999))), - ], - 'transfer' => [ - 'enabled' => !empty($settings['payment_balance_transfer_s']), - 'service_charge' => max(0, min(50, (int) ($settings['payment_balance_transfer_service_charge'] ?? 0))), - 'desc' => sanitize_textarea_field((string) ($settings['payment_balance_transfer_desc'] ?? '')), - ], - 'pass_charge' => [ - 'enabled' => !empty($settings['payment_recharge_pass_charge_s']), - 'desc' => sanitize_textarea_field((string) ($settings['payment_recharge_pass_charge_desc'] ?? '')), - 'only_password' => !empty($settings['payment_recharge_pass_charge_only_password']), - ], - 'exchange' => [ - 'enabled' => !empty($settings['payment_recharge_exchange_s']), - 'rate' => max(1, min(10000, (int) ($settings['payment_recharge_exchange_rate'] ?? 100))), - 'desc' => sanitize_textarea_field((string) ($settings['payment_recharge_exchange_desc'] ?? '')), - ], - ]; + return AKSRT_Settings_Payment_Runtime::get_payment_recharge_settings(); } public static function get_payment_vip_settings(): array { - $settings = AKSRT_Settings::get_all(); - $packages = (string) ($settings['payment_vip_packages'] ?? "30|30|月卡\n365|365|年卡"); - $help_text = trim((string) ($settings['payment_vip_help'] ?? '')); - $name = trim((string) ($settings['payment_vip_name'] ?? '')); - $badge = trim((string) ($settings['payment_vip_badge_text'] ?? '')); - - $renew_price_type = sanitize_key((string) ($settings['payment_vip_renew_price_type'] ?? 'same')); - if (!in_array($renew_price_type, ['same', 'discount'], true)) { - $renew_price_type = 'same'; - } - - return [ - 'enabled' => !empty($settings['payment_vip_enabled']), - 'name' => $name !== '' ? $name : __('VIP会员', 'aksrt'), - 'badge_text' => $badge !== '' ? $badge : __('VIP', 'aksrt'), - 'desc' => sanitize_textarea_field((string) ($settings['payment_vip_desc'] ?? '')), - 'packages_raw' => $packages, - 'package_count' => self::count_structured_lines($packages), - 'help_text' => $help_text !== '' ? $help_text : __('会员权益以免扣下载和身份展示为主,开通后立即生效。', 'aksrt'), - 'benefit' => [ - 'download_limit' => max(0, min(9999, (int) ($settings['payment_vip_download_limit'] ?? 0))), - 'download_speed' => max(0, min(99999, (int) ($settings['payment_vip_download_speed'] ?? 0))), - 'discount' => max(1, min(100, (int) ($settings['payment_vip_discount'] ?? 100))), - 'pass_charge' => !empty($settings['payment_vip_pass_charge']), - 'pass_charge_desc' => sanitize_textarea_field((string) ($settings['payment_vip_pass_charge_desc'] ?? '')), - ], - 'renew' => [ - 'enabled' => !isset($settings['payment_vip_renew']) || !empty($settings['payment_vip_renew']), - 'desc' => sanitize_textarea_field((string) ($settings['payment_vip_renew_desc'] ?? '')), - 'price_type' => $renew_price_type, - 'discount' => max(1, min(100, (int) ($settings['payment_vip_renew_discount'] ?? 100))), - 'reduce' => max(0, min(9999, (int) ($settings['payment_vip_renew_reduce'] ?? 0))), - ], - 'upgrade' => [ - 'enabled' => !isset($settings['payment_vip_upgrade']) || !empty($settings['payment_vip_upgrade']), - 'desc' => sanitize_textarea_field((string) ($settings['payment_vip_upgrade_desc'] ?? '')), - 'product' => sanitize_text_field((string) ($settings['payment_vip_upgrade_product'] ?? '')), - ], - 'price' => [ - 'month' => max(0, min(99999, (int) ($settings['payment_vip_month_price'] ?? 0))), - 'year' => max(0, min(99999, (int) ($settings['payment_vip_year_price'] ?? 0))), - 'permanent' => max(0, min(99999, (int) ($settings['payment_vip_permanent_price'] ?? 0))), - 'unit' => max(0, min(99999, (int) ($settings['payment_vip_unit_price'] ?? 0))), - 'unit_tag' => sanitize_text_field((string) ($settings['payment_vip_unit_tag'] ?? '元')), - 'jump' => max(0, min(99999, (int) ($settings['payment_vip_jump_price'] ?? 0))), - ], - ]; + return AKSRT_Settings_Payment_Runtime::get_payment_vip_settings(); } public static function get_payment_revenue_settings(): array { - $settings = AKSRT_Settings::get_all(); - $note = trim((string) ($settings['payment_revenue_note'] ?? '')); - - return [ - 'enabled' => !empty($settings['payment_revenue_enabled']), - 'share_ratio' => max(0, min(100, (int) ($settings['payment_revenue_share_ratio'] ?? 70))), - 'ratio_vip1' => max(0, min(100, (int) ($settings['payment_revenue_ratio_vip1'] ?? 0))), - 'ratio_vip2' => max(0, min(100, (int) ($settings['payment_revenue_ratio_vip2'] ?? 0))), - 'settlement_threshold' => max(0, (int) ($settings['payment_revenue_settlement_threshold'] ?? 100)), - 'cycle_days' => max(1, min(365, (int) ($settings['payment_revenue_cycle_days'] ?? 30))), - 'points_rule' => sanitize_textarea_field((string) ($settings['payment_revenue_points_rule'] ?? '')), - 'note' => $note !== '' ? $note : __('分成策略和台账结构已就绪,订单入账后自动按比例结算。', 'aksrt'), - 'display' => [ - 'desc_details' => sanitize_textarea_field((string) ($settings['payment_revenue_desc_details'] ?? '')), - 'desc_page' => esc_url_raw((string) ($settings['payment_revenue_desc_page'] ?? '')), - ], - ]; + return AKSRT_Settings_Payment_Runtime::get_payment_revenue_settings(); } public static function get_payment_affiliate_settings(): array { - $settings = AKSRT_Settings::get_all(); - $note = trim((string) ($settings['payment_affiliate_note'] ?? '')); - - return [ - 'enabled' => !empty($settings['payment_affiliate_enabled']), - 'ratio' => max(0, min(100, (int) ($settings['payment_affiliate_ratio'] ?? 10))), - 'window_days' => max(1, min(365, (int) ($settings['payment_affiliate_window_days'] ?? 30))), - 'require_paid_order' => !isset($settings['payment_affiliate_require_paid_order']) || !empty($settings['payment_affiliate_require_paid_order']), - 'self_s' => !isset($settings['payment_affiliate_self_s']) || !empty($settings['payment_affiliate_self_s']), - 'show_users' => !isset($settings['payment_affiliate_show_users']) || !empty($settings['payment_affiliate_show_users']), - 'note' => $note !== '' ? $note : __('返佣链路复用邀请体系,订单归因和结算自动衔接当前策略字段。', 'aksrt'), - 'user_ratio' => [ - 'user' => max(0, min(100, (int) ($settings['payment_affiliate_user_ratio'] ?? 10))), - 'vip1' => max(0, min(100, (int) ($settings['payment_affiliate_vip1_ratio'] ?? 0))), - 'vip2' => max(0, min(100, (int) ($settings['payment_affiliate_vip2_ratio'] ?? 0))), - ], - 'poster' => [ - 'enabled' => !isset($settings['payment_affiliate_poster_s']) || !empty($settings['payment_affiliate_poster_s']), - 'img' => esc_url_raw((string) ($settings['payment_affiliate_poster_img'] ?? '')), - 'title' => sanitize_text_field((string) ($settings['payment_affiliate_poster_title'] ?? '')), - 'desc' => sanitize_text_field((string) ($settings['payment_affiliate_poster_desc'] ?? '')), - ], - 'text' => [ - 'desc' => sanitize_textarea_field((string) ($settings['payment_affiliate_text_desc'] ?? '')), - 'details_title' => sanitize_text_field((string) ($settings['payment_affiliate_text_details_title'] ?? '')), - 'details' => sanitize_textarea_field((string) ($settings['payment_affiliate_text_details'] ?? '')), - 'discount' => sanitize_text_field((string) ($settings['payment_affiliate_text_discount'] ?? '')), - ], - ]; + return AKSRT_Settings_Payment_Runtime::get_payment_affiliate_settings(); } public static function get_payment_gateway_settings(): array { - $settings = AKSRT_Settings::get_all(); - $mode = sanitize_key((string) ($settings['payment_gateway_mode'] ?? 'manual_review')); - if (!in_array($mode, ['manual_review', 'test_gateway', 'adapter_ready'], true)) { - $mode = 'manual_review'; - } - - $help_text = trim((string) ($settings['payment_gateway_help'] ?? '')); - $gateway_keys = ['wechat', 'alipay', 'paypal', 'stripe', 'balance', 'card_pass', 'xunhupay', 'xhpay', 'payjs', 'epay', 'vmq', 'codepay']; - $gateways = []; - foreach ($gateway_keys as $gw) { - $gateways[$gw] = !empty($settings["payment_{$gw}_enabled"]); - } - - return [ - 'mode' => $mode, - 'test_enabled' => !isset($settings['payment_gateway_test_enabled']) || !empty($settings['payment_gateway_test_enabled']), - 'manual_review' => !isset($settings['payment_gateway_manual_review']) || !empty($settings['payment_gateway_manual_review']), - 'callback_secret' => sanitize_text_field((string) ($settings['payment_gateway_callback_secret'] ?? '')), - 'help_text' => $help_text !== '' ? $help_text : __('未接真实支付网关时,建议使用测试网关或人工确认模式完成联调。', 'aksrt'), - 'gateways' => $gateways, - 'xunhupay' => [ - 'appid' => sanitize_text_field((string) ($settings['xunhupay_appid'] ?? '')), - 'appsecret' => sanitize_text_field((string) ($settings['xunhupay_appsecret'] ?? '')), - ], - 'xhpay' => [ - 'mchid' => sanitize_text_field((string) ($settings['xhpay_mchid'] ?? '')), - 'alipay_v2' => sanitize_text_field((string) ($settings['xhpay_alipay_v2'] ?? '')), - 'wx_h5' => sanitize_text_field((string) ($settings['xhpay_wx_h5'] ?? '')), - ], - 'payjs' => [ - 'mchid' => sanitize_text_field((string) ($settings['payjs_mchid'] ?? '')), - 'key' => sanitize_text_field((string) ($settings['payjs_key'] ?? '')), - ], - 'epay' => [ - 'apiurl' => esc_url_raw((string) ($settings['epay_apiurl'] ?? '')), - 'pid' => sanitize_text_field((string) ($settings['epay_pid'] ?? '')), - 'key' => sanitize_text_field((string) ($settings['epay_key'] ?? '')), - ], - 'alipay_extra' => [ - 'return_url' => esc_url_raw((string) ($settings['alipay_return_url'] ?? '')), - 'notify_url' => esc_url_raw((string) ($settings['alipay_notify_url'] ?? '')), - ], - ]; + return AKSRT_Settings_Payment_Runtime::get_payment_gateway_settings(); } public static function get_order_settings(): array { - $s = AKSRT_Settings::get_all(); - - $expiry = max(5, min(1440, (int) ($s['payment_order_expiry'] ?? 30))); - $cookie_day = max(1, min(31, (int) ($s['payment_cookie_day'] ?? 15))); - $max_minutes = max(5, min(1440, (int) ($s['payment_order_max_minutes'] ?? 30))); - - $box_position = sanitize_key((string) ($s['payment_box_position'] ?? 'top')); - if (!in_array($box_position, ['top', 'bottom'], true)) { - $box_position = 'top'; - } - - $status_keys = ['pending', 'paid', 'completed', 'cancelled', 'refunded', 'refunding', 'processing']; - $status_defaults = ['待支付', '已支付', '已完成', '已取消', '已退款', '退款中', '处理中']; - $status_texts = []; - foreach ($status_keys as $i => $key) { - $val = trim((string) ($s["payment_order_status_{$key}"] ?? '')); - $status_texts[$key] = $val !== '' ? $val : $status_defaults[$i]; - } - - return [ - 'prefix' => sanitize_text_field((string) ($s['payment_order_prefix'] ?? 'AKSRT')), - 'expiry' => $expiry, - 'show_user' => !isset($s['payment_show_user']) || !empty($s['payment_show_user']), - 'show_paycount' => !isset($s['payment_show_paycount']) || !empty($s['payment_show_paycount']), - 'no_logged_in' => !isset($s['payment_no_logged_in']) || !empty($s['payment_no_logged_in']), - 'cookie_day' => $cookie_day, - 'no_logged_remind' => sanitize_textarea_field((string) ($s['payment_no_logged_remind'] ?? '')), - 'wait_float' => !isset($s['payment_wait_float_s']) || !empty($s['payment_wait_float_s']), - 'order_max_minutes' => $max_minutes, - 'mark' => sanitize_text_field((string) ($s['payment_mark'] ?? '付费')), - 'box_position' => $box_position, - 'free_logged_show' => !empty($s['payment_free_logged_show']), - 'show_ip' => !empty($s['payment_show_ip']), - 'show_device' => !empty($s['payment_show_device']), - 'show_order_no' => !isset($s['payment_show_order_no']) || !empty($s['payment_show_order_no']), - 'show_create_time' => !isset($s['payment_show_create_time']) || !empty($s['payment_show_create_time']), - 'show_pay_time' => !isset($s['payment_show_pay_time']) || !empty($s['payment_show_pay_time']), - 'status_texts' => $status_texts, - 'service' => [ - 'text' => sanitize_textarea_field((string) ($s['payment_service'] ?? '')), - 'icon' => sanitize_text_field((string) ($s['payment_service_icon'] ?? '')), - 'value' => sanitize_text_field((string) ($s['payment_service_value'] ?? '')), - 'qq' => sanitize_text_field((string) ($s['payment_service_qq'] ?? '')), - 'wechat' => esc_url_raw((string) ($s['payment_service_wechat'] ?? '')), - ], - ]; + return AKSRT_Settings_Payment_Runtime::get_order_settings(); } public static function get_card_pass_settings(): array { - $s = AKSRT_Settings::get_all(); - - $type = sanitize_key((string) ($s['card_pass_type'] ?? 'balance')); - if (!in_array($type, ['balance', 'vip', 'credits'], true)) { - $type = 'balance'; - } - - $success_msg = trim((string) ($s['card_pass_success_msg'] ?? '')); - $fail_msg = trim((string) ($s['card_pass_fail_msg'] ?? '')); - - return [ - 'enabled' => !empty($s['card_pass_enabled']), - 'desc' => sanitize_textarea_field((string) ($s['card_pass_desc'] ?? '')), - 'type' => $type, - 'prefix' => sanitize_text_field((string) ($s['card_pass_prefix'] ?? 'AK')), - 'length' => max(8, min(32, (int) ($s['card_pass_length'] ?? 16))), - 'batch_size' => max(1, min(500, (int) ($s['card_pass_batch_size'] ?? 50))), - 'max_redeem' => max(1, min(100, (int) ($s['card_pass_max_redeem'] ?? 1))), - 'expiry_days' => max(0, (int) ($s['card_pass_expiry'] ?? 0)), - 'amount' => max(1, min(9999, (int) ($s['card_pass_amount'] ?? 10))), - 'vip_days' => max(1, min(3650, (int) ($s['card_pass_vip_days'] ?? 30))), - 'credits' => max(0, min(99999, (int) ($s['card_pass_credits'] ?? 0))), - 'redeem_page' => esc_url_raw((string) ($s['card_pass_redeem_page'] ?? '')), - 'success_msg' => $success_msg !== '' ? $success_msg : __('兑换成功!', 'aksrt'), - 'fail_msg' => $fail_msg !== '' ? $fail_msg : __('卡号无效或已过期', 'aksrt'), - ]; + return AKSRT_Settings_Payment_Runtime::get_card_pass_settings(); } public static function get_withdrawal_settings(): array { - $s = AKSRT_Settings::get_all(); - - return [ - 'min_amount' => max(1, min(99999, (int) ($s['pay_rebate_withdraw_lowest_money'] ?? 50))), - 'service_charge_rate' => max(0, min(50, (int) ($s['withdraw_service_charge'] ?? 0))), - 'text' => sanitize_textarea_field((string) ($s['pay_rebate_withdraw_text_details'] ?? '')), - ]; + return AKSRT_Settings_Payment_Runtime::get_withdrawal_settings(); } private static function normalize_sort_options(array $raw): array { diff --git a/inc/classes/settings/class-aksrt-settings-payment-runtime.php b/inc/classes/settings/class-aksrt-settings-payment-runtime.php new file mode 100644 index 00000000..822bfd16 --- /dev/null +++ b/inc/classes/settings/class-aksrt-settings-payment-runtime.php @@ -0,0 +1,447 @@ + + */ + public static function get_paid_content_settings(): array { + $settings = AKSRT_Settings::get_all(); + $features = AKSRT_Settings_Home_Cms::get_cms_features(); + $catalog_note = trim((string) ($settings['payment_paid_catalog_note'] ?? '')); + $manual_note = trim((string) ($settings['payment_manual_delivery_note'] ?? '')); + + $box_position = sanitize_key((string) ($settings['pay_box_position'] ?? 'top')); + if (!in_array($box_position, ['top', 'bottom'], true)) { + $box_position = 'top'; + } + + return [ + 'download_login' => !empty($features['download_login']), + 'download_credit' => !empty($features['download_credit']) && AKSRT_Settings::credits_enabled(), + 'download_captcha' => !empty($features['download_captcha']), + 'default_cost' => AKSRT_Settings::download_default_cost(), + 'paid_post_types' => self::parse_slug_list((string) ($settings['payment_paid_post_types'] ?? 'post'), ['post']), + 'vip_free_download' => !empty($settings['payment_vip_free_download']), + 'vip_exempt_roles' => self::parse_slug_list((string) ($settings['payment_vip_exempt_roles'] ?? '')), + 'catalog_note' => $catalog_note, + 'manual_delivery_note' => $manual_note !== '' ? $manual_note : __('付费或人工确认内容请在订单备注中记录交付方式。', 'aksrt'), + 'no_logged_in' => !isset($settings['pay_no_logged_in']) || !empty($settings['pay_no_logged_in']), + 'display' => [ + 'mark' => sanitize_text_field((string) ($settings['pay_mark'] ?? '付费')), + 'currency_symbol' => sanitize_text_field((string) ($settings['payment_currency_symbol'] ?? '¥')), + 'show_user' => !isset($settings['pay_show_user']) || !empty($settings['pay_show_user']), + 'show_paycount' => !isset($settings['pay_show_paycount']) || !empty($settings['pay_show_paycount']), + 'box_position' => $box_position, + ], + 'download' => [ + 'enabled' => !empty($settings['payment_download_enable']), + 'remote' => !isset($settings['payment_download_remote_s']) || !empty($settings['payment_download_remote_s']), + 'verify_nonce' => !isset($settings['payment_download_verify_nonce']) || !empty($settings['payment_download_verify_nonce']), + 'user_log' => max(0, min(9999, (int) ($settings['payment_download_user_log'] ?? 50))), + 'post_log' => max(0, min(9999, (int) ($settings['payment_download_post_log'] ?? 50))), + 'remote_size' => max(1, (int) ($settings['payment_download_remote_size'] ?? 2048)), + 'remote_ext' => sanitize_text_field((string) ($settings['payment_download_remote_ext'] ?? 'zip,rar,7z')), + ], + ]; + } + + /** + * Balance recharge settings (Zibll pay_balance_* contract). + * + * @return array + */ + public static function get_payment_recharge_settings(): array { + $settings = AKSRT_Settings::get_all(); + + $packages = (string) ($settings['pay_balance_product'] ?? $settings['payment_recharge_packages'] ?? "30|30|入门包\n98|108|推荐包"); + if (is_array($settings['pay_balance_product'] ?? null)) { + $packages = self::format_product_lines((array) $settings['pay_balance_product']); + } + $help_text = trim((string) ($settings['pay_balance_desc'] ?? $settings['payment_recharge_help'] ?? '')); + + return [ + 'enabled' => !empty($settings['pay_balance_s']), + 'mode' => 'manual_review', + 'desc' => sanitize_textarea_field((string) ($settings['pay_balance_desc'] ?? '')), + 'auto_to_balance' => !isset($settings['pay_auto_to_balance']) || !empty($settings['pay_auto_to_balance']), + 'packages_raw' => $packages, + 'package_count' => self::count_structured_lines($packages), + 'help_text' => $help_text !== '' ? $help_text : __('当前支持人工确认与测试联调;接入真实网关时复用同一组字段。', 'aksrt'), + 'product' => [ + 'name' => '', + 'price' => 0, + 'tag' => '元', + 'tag_class' => '', + 'custom_s' => !isset($settings['pay_balance_product_custom_s']) || !empty($settings['pay_balance_product_custom_s']), + 'custom_limit' => max(1, min(99999, (int) ($settings['pay_balance_product_custom_limit'] ?? 9999))), + ], + 'transfer' => [ + 'enabled' => !empty($settings['pay_balance_transfer_s']), + 'service_charge' => max(0, min(50, (int) ($settings['pay_balance_transfer_service_charge'] ?? 0))), + 'desc' => sanitize_textarea_field((string) ($settings['pay_balance_transfer_desc'] ?? '')), + ], + 'pass_charge' => [ + 'enabled' => !empty($settings['pay_balance_pass_charge_s']), + 'desc' => sanitize_textarea_field((string) ($settings['pay_balance_pass_charge_desc'] ?? '')), + 'only_password' => !empty($settings['pay_balance_pass_charge_only_password']), + ], + 'exchange' => [ + 'enabled' => false, + 'rate' => 100, + 'desc' => '', + ], + ]; + } + + /** + * Dual-level VIP settings (Zibll pay_user_vip_1 / pay_user_vip_2). + * + * @return array + */ + public static function get_payment_vip_settings(): array { + $settings = AKSRT_Settings::get_all(); + + $vip1_enabled = !empty($settings['pay_user_vip_1_s']); + $vip2_enabled = !empty($settings['pay_user_vip_2_s']); + $enabled = $vip1_enabled || $vip2_enabled; + + $name1 = trim((string) ($settings['pay_user_vip_1_name'] ?? '')); + $name2 = trim((string) ($settings['pay_user_vip_2_name'] ?? '')); + if ($name1 === '') { + $name1 = __('一级会员', 'aksrt'); + } + if ($name2 === '') { + $name2 = __('二级会员', 'aksrt'); + } + + $badge = $vip2_enabled ? $name2 : ($vip1_enabled ? $name1 : __('VIP', 'aksrt')); + + $renew_price_type = sanitize_key((string) ($settings['vip_renew_price_type'] ?? 'discount')); + if (!in_array($renew_price_type, ['same', 'discount', 'reduce'], true)) { + $renew_price_type = 'discount'; + } + + $packages = (string) ($settings['payment_vip_packages'] ?? "30|30|月卡\n365|365|年卡"); + $help_text = trim((string) ($settings['pay_user_vip_desc'] ?? $settings['payment_vip_help'] ?? '')); + + return [ + 'enabled' => $enabled, + 'name' => $vip1_enabled ? $name1 : $badge, + 'badge_text' => $badge, + 'desc' => sanitize_textarea_field((string) ($settings['pay_user_vip_desc'] ?? '')), + 'packages_raw' => $packages, + 'package_count' => self::count_structured_lines($packages), + 'help_text' => $help_text !== '' ? $help_text : __('会员权益以免扣下载和身份展示为主,开通后立即生效。', 'aksrt'), + 'levels' => [ + 1 => [ + 'enabled' => $vip1_enabled, + 'name' => $name1, + 'download_limit' => max(0, min(9999, (int) ($settings['pay_download_limit_vip_1'] ?? $settings['pay_download_limit'] ?? 0))), + 'download_speed' => max(0, min(99999, (int) ($settings['pay_download_speed_vip_1'] ?? $settings['pay_download_speed'] ?? 0))), + ], + 2 => [ + 'enabled' => $vip2_enabled, + 'name' => $name2, + 'download_limit' => max(0, min(9999, (int) ($settings['pay_download_limit_vip_2'] ?? 0))), + 'download_speed' => max(0, min(99999, (int) ($settings['pay_download_speed_vip_2'] ?? 0))), + ], + ], + 'benefit' => [ + 'download_limit' => max(0, min(9999, (int) ($settings['pay_download_limit'] ?? 0))), + 'download_speed' => max(0, min(99999, (int) ($settings['pay_download_speed'] ?? 0))), + 'discount' => 100, + 'pass_charge' => !empty($settings['pay_vip_pass_charge_s']), + 'pass_charge_desc' => sanitize_textarea_field((string) ($settings['pay_vip_pass_charge_desc'] ?? '')), + ], + 'renew' => [ + 'enabled' => !isset($settings['vip_renew']) || !empty($settings['vip_renew']), + 'desc' => sanitize_textarea_field((string) ($settings['vip_renew_desc'] ?? '')), + 'price_type' => $renew_price_type, + 'discount' => max(1, min(100, (int) ($settings['vip_renew_discount'] ?? 8))), + 'reduce' => max(0, min(9999, (int) ($settings['vip_renew_reduce'] ?? 20))), + ], + 'upgrade' => [ + 'enabled' => !isset($settings['vip_upgrade']) || !empty($settings['vip_upgrade']), + 'desc' => sanitize_textarea_field((string) ($settings['vip_upgrade_desc'] ?? '')), + 'product' => sanitize_text_field((string) ($settings['vip_upgrade_product'] ?? '')), + ], + 'price' => [ + 'month' => 0, + 'year' => 0, + 'permanent' => 0, + 'unit' => 0, + 'unit_tag' => '元', + 'jump' => 0, + ], + ]; + } + + /** + * @return array + */ + public static function get_payment_revenue_settings(): array { + $settings = AKSRT_Settings::get_all(); + $note = trim((string) ($settings['pay_income_desc_details'] ?? $settings['payment_revenue_note'] ?? '')); + + return [ + 'enabled' => !empty($settings['pay_income_s']), + 'share_ratio' => max(0, min(100, (int) ($settings['payment_revenue_share_ratio'] ?? 70))), + 'ratio_vip1' => max(0, min(100, (int) ($settings['ratio_vip_1'] ?? $settings['payment_revenue_ratio_vip1'] ?? 0))), + 'ratio_vip2' => max(0, min(100, (int) ($settings['ratio_vip_2'] ?? $settings['payment_revenue_ratio_vip2'] ?? 0))), + 'settlement_threshold' => max(0, (int) ($settings['payment_revenue_settlement_threshold'] ?? 100)), + 'cycle_days' => max(1, min(365, (int) ($settings['payment_revenue_cycle_days'] ?? 30))), + 'points_rule' => sanitize_textarea_field((string) ($settings['payment_revenue_points_rule'] ?? '')), + 'note' => $note !== '' ? $note : __('分成策略和台账结构已就绪,订单入账后自动按比例结算。', 'aksrt'), + 'display' => [ + 'desc_details' => sanitize_textarea_field((string) ($settings['pay_income_desc_details'] ?? '')), + 'desc_page' => esc_url_raw((string) ($settings['pay_income_desc_page'] ?? '')), + ], + ]; + } + + /** + * @return array + */ + public static function get_payment_affiliate_settings(): array { + $settings = AKSRT_Settings::get_all(); + $note = trim((string) ($settings['pay_rebate_text_desc'] ?? $settings['payment_affiliate_note'] ?? '')); + + return [ + 'enabled' => !empty($settings['pay_rebate_s']), + 'ratio' => max(0, min(100, (int) ($settings['pay_rebate_ratio'] ?? $settings['payment_affiliate_ratio'] ?? 10))), + 'window_days' => max(1, min(365, (int) ($settings['payment_affiliate_window_days'] ?? 30))), + 'require_paid_order' => true, + 'self_s' => !isset($settings['pay_rebate_self_s']) || !empty($settings['pay_rebate_self_s']), + 'show_users' => !isset($settings['pay_rebate_show_users']) || !empty($settings['pay_rebate_show_users']), + 'note' => $note !== '' ? $note : __('返佣链路复用邀请体系,订单归因和结算自动衔接当前策略字段。', 'aksrt'), + 'user_ratio' => [ + 'user' => max(0, min(100, (int) ($settings['pay_rebate_ratio'] ?? 10))), + 'vip1' => max(0, min(100, (int) ($settings['pay_rebate_ratio_vip_1'] ?? 0))), + 'vip2' => max(0, min(100, (int) ($settings['pay_rebate_ratio_vip_2'] ?? 0))), + ], + 'poster' => [ + 'enabled' => !isset($settings['pay_rebate_poster_s']) || !empty($settings['pay_rebate_poster_s']), + 'img' => esc_url_raw((string) ($settings['pay_rebate_poster_img'] ?? '')), + 'title' => sanitize_text_field((string) ($settings['pay_rebate_poster_title'] ?? '')), + 'desc' => sanitize_text_field((string) ($settings['pay_rebate_poster_desc'] ?? '')), + ], + 'text' => [ + 'desc' => sanitize_textarea_field((string) ($settings['pay_rebate_text_desc'] ?? '')), + 'details_title' => sanitize_text_field((string) ($settings['pay_rebate_text_details_title'] ?? '')), + 'details' => sanitize_textarea_field((string) ($settings['pay_rebate_text_details'] ?? '')), + 'discount' => sanitize_text_field((string) ($settings['pay_rebate_text_discount'] ?? '')), + ], + ]; + } + + /** + * @return array + */ + public static function get_payment_gateway_settings(): array { + $settings = AKSRT_Settings::get_all(); + $mode = sanitize_key((string) ($settings['payment_gateway_mode'] ?? 'manual_review')); + if (!in_array($mode, ['manual_review', 'test_gateway', 'adapter_ready'], true)) { + $mode = 'manual_review'; + } + + $help_text = trim((string) ($settings['payment_gateway_help'] ?? '')); + $gateway_keys = ['wechat', 'alipay', 'paypal', 'stripe', 'balance', 'card_pass', 'xunhupay', 'xhpay', 'payjs', 'epay', 'vmq', 'codepay']; + $gateways = []; + foreach ($gateway_keys as $gw) { + $gateways[$gw] = !empty($settings["payment_{$gw}_enabled"]); + } + + return [ + 'mode' => $mode, + 'test_enabled' => !isset($settings['payment_gateway_test_enabled']) || !empty($settings['payment_gateway_test_enabled']), + 'manual_review' => !isset($settings['payment_gateway_manual_review']) || !empty($settings['payment_gateway_manual_review']), + 'callback_secret' => sanitize_text_field((string) ($settings['payment_gateway_callback_secret'] ?? '')), + 'help_text' => $help_text !== '' ? $help_text : __('未接真实支付网关时,建议使用测试网关或人工确认模式完成联调。', 'aksrt'), + 'gateways' => $gateways, + 'xunhupay' => [ + 'appid' => sanitize_text_field((string) ($settings['xunhupay_appid'] ?? '')), + 'appsecret' => sanitize_text_field((string) ($settings['xunhupay_appsecret'] ?? '')), + ], + 'xhpay' => [ + 'mchid' => sanitize_text_field((string) ($settings['xhpay_mchid'] ?? '')), + 'alipay_v2' => sanitize_text_field((string) ($settings['xhpay_alipay_v2'] ?? '')), + 'wx_h5' => sanitize_text_field((string) ($settings['xhpay_wx_h5'] ?? '')), + ], + 'payjs' => [ + 'mchid' => sanitize_text_field((string) ($settings['payjs_mchid'] ?? '')), + 'key' => sanitize_text_field((string) ($settings['payjs_key'] ?? '')), + ], + 'epay' => [ + 'apiurl' => esc_url_raw((string) ($settings['epay_apiurl'] ?? '')), + 'pid' => sanitize_text_field((string) ($settings['epay_pid'] ?? '')), + 'key' => sanitize_text_field((string) ($settings['epay_key'] ?? '')), + ], + 'alipay_extra' => [ + 'return_url' => esc_url_raw((string) ($settings['alipay_return_url'] ?? '')), + 'notify_url' => esc_url_raw((string) ($settings['alipay_notify_url'] ?? '')), + ], + ]; + } + + /** + * Order display / checkout policy (Zibll pay_* contract). + * + * @return array + */ + public static function get_order_settings(): array { + $s = AKSRT_Settings::get_all(); + + $expiry = max(5, min(1440, (int) ($s['payment_order_expiry'] ?? 30))); + $cookie_day = max(1, min(31, (int) ($s['pay_cookie_day'] ?? 15))); + $max_minutes = max(5, min(1440, (int) ($s['payment_order_max_minutes'] ?? 30))); + + $box_position = sanitize_key((string) ($s['pay_box_position'] ?? 'top')); + if (!in_array($box_position, ['top', 'bottom'], true)) { + $box_position = 'top'; + } + + $status_keys = ['pending', 'paid', 'completed', 'cancelled', 'refunded', 'refunding', 'processing']; + $status_defaults = ['待支付', '已支付', '已完成', '已取消', '已退款', '退款中', '处理中']; + $status_texts = []; + foreach ($status_keys as $i => $key) { + $val = trim((string) ($s["payment_order_status_{$key}"] ?? '')); + $status_texts[$key] = $val !== '' ? $val : $status_defaults[$i]; + } + + return [ + 'prefix' => sanitize_text_field((string) ($s['payment_order_prefix'] ?? 'AKSRT')), + 'expiry' => $expiry, + 'show_user' => !isset($s['pay_show_user']) || !empty($s['pay_show_user']), + 'show_paycount' => !isset($s['pay_show_paycount']) || !empty($s['pay_show_paycount']), + 'no_logged_in' => !isset($s['pay_no_logged_in']) || !empty($s['pay_no_logged_in']), + 'cookie_day' => $cookie_day, + 'no_logged_remind' => sanitize_textarea_field((string) ($s['pay_no_logged_remind'] ?? '')), + 'wait_float' => !isset($s['pay_wait_float_s']) || !empty($s['pay_wait_float_s']), + 'order_max_minutes' => $max_minutes, + 'mark' => sanitize_text_field((string) ($s['pay_mark'] ?? '付费')), + 'box_position' => $box_position, + 'free_logged_show' => !empty($s['pay_free_logged_show']), + 'show_ip' => !empty($s['payment_show_ip']), + 'show_device' => !empty($s['payment_show_device']), + 'show_order_no' => !isset($s['payment_show_order_no']) || !empty($s['payment_show_order_no']), + 'show_create_time' => !isset($s['payment_show_create_time']) || !empty($s['payment_show_create_time']), + 'show_pay_time' => !isset($s['payment_show_pay_time']) || !empty($s['payment_show_pay_time']), + 'status_texts' => $status_texts, + 'service' => [ + 'text' => sanitize_textarea_field((string) ($s['pay_service'] ?? $s['payment_service'] ?? '')), + 'icon' => sanitize_text_field((string) ($s['payment_service_icon'] ?? '')), + 'value' => sanitize_text_field((string) ($s['payment_service_value'] ?? '')), + 'qq' => sanitize_text_field((string) ($s['payment_service_qq'] ?? '')), + 'wechat' => esc_url_raw((string) ($s['payment_service_wechat'] ?? '')), + ], + ]; + } + + /** + * @return array + */ + public static function get_card_pass_settings(): array { + $s = AKSRT_Settings::get_all(); + + $type = sanitize_key((string) ($s['card_pass_type'] ?? 'balance')); + if (!in_array($type, ['balance', 'vip', 'credits'], true)) { + $type = 'balance'; + } + + $success_msg = trim((string) ($s['card_pass_success_msg'] ?? '')); + $fail_msg = trim((string) ($s['card_pass_fail_msg'] ?? '')); + + return [ + 'enabled' => !empty($s['card_pass_enabled']), + 'desc' => sanitize_textarea_field((string) ($s['card_pass_desc'] ?? '')), + 'type' => $type, + 'prefix' => sanitize_text_field((string) ($s['card_pass_prefix'] ?? 'AK')), + 'length' => max(8, min(32, (int) ($s['card_pass_length'] ?? 16))), + 'batch_size' => max(1, min(500, (int) ($s['card_pass_batch_size'] ?? 50))), + 'max_redeem' => max(1, min(100, (int) ($s['card_pass_max_redeem'] ?? 1))), + 'expiry_days' => max(0, (int) ($s['card_pass_expiry'] ?? 0)), + 'amount' => max(1, min(9999, (int) ($s['card_pass_amount'] ?? 10))), + 'vip_days' => max(1, min(3650, (int) ($s['card_pass_vip_days'] ?? 30))), + 'credits' => max(0, min(99999, (int) ($s['card_pass_credits'] ?? 0))), + 'redeem_page' => esc_url_raw((string) ($s['card_pass_redeem_page'] ?? '')), + 'success_msg' => $success_msg !== '' ? $success_msg : __('兑换成功!', 'aksrt'), + 'fail_msg' => $fail_msg !== '' ? $fail_msg : __('卡号无效或已过期', 'aksrt'), + ]; + } + + /** + * @return array{min_amount:int,service_charge_rate:int,text:string} + */ + public static function get_withdrawal_settings(): array { + $s = AKSRT_Settings::get_all(); + + return [ + 'min_amount' => max(1, min(99999, (int) ($s['pay_rebate_withdraw_lowest_money'] ?? 50))), + 'service_charge_rate' => max(0, min(50, (int) ($s['withdraw_service_charge'] ?? 0))), + 'text' => sanitize_textarea_field((string) ($s['pay_rebate_withdraw_text_details'] ?? '')), + ]; + } + + /** + * @param string[] $fallback + * @return string[] + */ + private static function parse_slug_list(string $raw, array $fallback = []): array { + $items = preg_split('/[\s,]+/', $raw, -1, PREG_SPLIT_NO_EMPTY); + $normalized = []; + foreach ((array) $items as $item) { + $slug = sanitize_key((string) $item); + if ($slug !== '' && !in_array($slug, $normalized, true)) { + $normalized[] = $slug; + } + } + return !empty($normalized) ? $normalized : $fallback; + } + + private static function count_structured_lines(string $raw): int { + $lines = preg_split('/[\r\n]+/', $raw, -1, PREG_SPLIT_NO_EMPTY); + $count = 0; + foreach ((array) $lines as $line) { + if (trim((string) $line) !== '') { + $count++; + } + } + return $count; + } + + /** + * @param array $products + */ + private static function format_product_lines(array $products): string { + $lines = []; + foreach ($products as $row) { + if (!is_array($row)) { + continue; + } + $price = $row['pay_price'] ?? $row['price'] ?? ''; + $value = $row['value'] ?? $row['balance'] ?? $price; + $title = $row['title'] ?? $row['name'] ?? ''; + $lines[] = $price . '|' . $value . '|' . $title; + } + return implode("\n", $lines); + } +} diff --git a/templates/parts/user-home/sidebar.php b/templates/parts/user-home/sidebar.php index 5d91cf44..bbbcc004 100644 --- a/templates/parts/user-home/sidebar.php +++ b/templates/parts/user-home/sidebar.php @@ -55,7 +55,7 @@ extract($args, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_ext