Merge pull request 'feat(payment): align VIP/balance/order schema keys with Zibll' (#54) from worktree-payment-zibll-contract into main

Reviewed-on: CYL/wordpress-theme-aksrt#54
This commit is contained in:
2026-07-11 17:16:06 +08:00
12 changed files with 703 additions and 554 deletions
@@ -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 } },
],
},
],
@@ -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: '' },
],
},
],
@@ -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' }] },
],
},
{
@@ -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 } },
],
},
],
@@ -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 } },
],
},
],
+46 -59
View File
@@ -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 } },
],
},
],
+1
View File
@@ -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';
@@ -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' => ''],
@@ -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();
}
}
@@ -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 {
@@ -0,0 +1,447 @@
<?php
/**
* Payment settings runtime — Zibll-aligned option keys.
*
* Canonical keys (aligned with Zibll option IDs where applicable):
* - Order/display: pay_no_logged_in, pay_cookie_day, pay_no_logged_remind,
* pay_box_position, pay_mark, pay_show_user, pay_show_paycount,
* pay_free_logged_show, pay_wait_float_s
* - Balance: pay_balance_s, pay_auto_to_balance, pay_balance_transfer_*
* - VIP: pay_user_vip_1_s / pay_user_vip_2_s (+ names, download limits)
*
* Stored in aksrt_settings. No dual-read of legacy payment_* keys.
*
* @package AKSRT
*/
defined('ABSPATH') || exit;
class AKSRT_Settings_Payment_Runtime {
/**
* Paid content / download policy.
*
* @return array<string,mixed>
*/
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<string,mixed>
*/
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<string,mixed>
*/
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<string,mixed>
*/
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<string,mixed>
*/
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<string,mixed>
*/
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<string,mixed>
*/
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<string,mixed>
*/
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<int,mixed> $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);
}
}
+1 -1
View File
@@ -55,7 +55,7 @@ extract($args, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_ext
<?php if ($is_own_profile) : ?>
<?php
$orders_url = function_exists('aksrt_get_orders_page_url') ? aksrt_get_orders_page_url() : '';
$show_vip = class_exists('AKSRT_Settings') && !empty(AKSRT_Settings::get_all()['payment_vip_enabled']);
$show_vip = class_exists('AKSRT_Settings') && !empty(AKSRT_Settings::get_payment_vip_settings()['enabled']);
$credits_enabled_side = class_exists('AKSRT_Settings') && AKSRT_Settings::credits_enabled();
?>
<?php if ($orders_url || $show_vip || $credits_enabled_side) : ?>