feat: upgrade widgets and affiliate commission flow
This commit is contained in:
@@ -282,35 +282,38 @@ class PaymentRuntime {
|
||||
*/
|
||||
public static function get_payment_affiliate_settings(): array {
|
||||
$settings = Settings::get_all();
|
||||
$note = trim((string) ($settings['pay_rebate_text_desc'] ?? ''));
|
||||
|
||||
$ratio = max(0, min(100, (float) ($settings['affiliate_ratio'] ?? 5)));
|
||||
$fee = max(0, min(100, (float) ($settings['affiliate_withdrawal_fee'] ?? 5)));
|
||||
$types = (array) ($settings['affiliate_order_types'] ?? ['membership', 'content']);
|
||||
$types = array_values(array_intersect(['membership', 'content'], array_map('sanitize_key', $types)));
|
||||
if (!$types) { $types = ['membership', 'content']; }
|
||||
$channels = array_values(array_intersect(['alipay', 'wechat'], array_map('sanitize_key', (array) ($settings['affiliate_payout_channels'] ?? ['alipay', 'wechat']))));
|
||||
if (!$channels) { $channels = ['alipay', 'wechat']; }
|
||||
return [
|
||||
'enabled' => !empty($settings['pay_rebate_s']),
|
||||
'ratio' => max(0, min(100, (int) ($settings['pay_rebate_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['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['payment_affiliate_user_ratio'] ?? $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' => sanitize_textarea_field((string) ($settings['pay_rebate_text_details'] ?? '')),
|
||||
'discount' => sanitize_text_field((string) ($settings['pay_rebate_text_discount'] ?? '')),
|
||||
],
|
||||
'enabled' => !empty($settings['affiliate_enabled']),
|
||||
'ratio' => $ratio,
|
||||
'order_types' => $types,
|
||||
'window_days' => max(1, min(365, (int) ($settings['affiliate_touch_window_days'] ?? 30))),
|
||||
'settlement_days' => max(0, min(90, (int) ($settings['affiliate_settlement_days'] ?? 7))),
|
||||
'min_withdrawal' => max(0, min(999999, (float) ($settings['affiliate_min_withdrawal'] ?? 50))),
|
||||
'withdrawal_fee' => $fee,
|
||||
'payout_channels' => $channels,
|
||||
'allow_self_purchase' => !empty($settings['affiliate_allow_self_purchase']),
|
||||
'show_stats' => !isset($settings['affiliate_show_stats']) || !empty($settings['affiliate_show_stats']),
|
||||
'promotion_text' => sanitize_textarea_field((string) ($settings['affiliate_promotion_text'] ?? '')),
|
||||
'earnings_text' => sanitize_textarea_field((string) ($settings['affiliate_earnings_text'] ?? '')),
|
||||
'withdrawal_agreement' => sanitize_textarea_field((string) ($settings['affiliate_withdrawal_agreement'] ?? '')),
|
||||
];
|
||||
}
|
||||
|
||||
public static function affiliate_enabled(): bool { return !empty(self::get_payment_affiliate_settings()['enabled']); }
|
||||
public static function affiliate_ratio(): float { return (float) self::get_payment_affiliate_settings()['ratio']; }
|
||||
public static function get_affiliate_settings(): array { return self::get_payment_affiliate_settings(); }
|
||||
public static function get_settlement_settings(): array {
|
||||
$s = self::get_payment_affiliate_settings();
|
||||
return ['observation_days' => (int) $s['settlement_days'], 'retry_limit' => 100];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string,mixed>
|
||||
*/
|
||||
@@ -438,14 +441,14 @@ class PaymentRuntime {
|
||||
/** @return array{min_amount:float,service_charge_rate:int,daily_count:int,daily_limit:float,reset_time:string} */
|
||||
public static function get_withdrawal_settings(): array {
|
||||
$s = Settings::get_all();
|
||||
|
||||
$affiliate = self::get_payment_affiliate_settings();
|
||||
return [
|
||||
'min_amount' => max(0, min(99999, (float) ($s['pay_rebate_withdraw_lowest_money'] ?? 50))),
|
||||
'service_charge_rate' => max(0, min(50, (int) ($s['withdraw_service_charge'] ?? 5))),
|
||||
'daily_count' => max(0, min(99999, (int) ($s['withdraw_daily_count'] ?? 3))),
|
||||
'daily_limit' => max(0, min(999999, (float) ($s['withdraw_daily_limit'] ?? 50))),
|
||||
'reset_time' => preg_match('/^(?:[01]\\d|2[0-3]):[0-5]\\d$/', (string) ($s['withdraw_reset_time'] ?? '00:00'))
|
||||
? (string) $s['withdraw_reset_time']
|
||||
'min_amount' => (float) $affiliate['min_withdrawal'],
|
||||
'service_charge_rate' => (int) round((float) $affiliate['withdrawal_fee']),
|
||||
'daily_count' => max(0, min(99999, (int) ($s['affiliate_daily_withdrawal_count'] ?? 3))),
|
||||
'daily_limit' => max(0, min(999999, (float) ($s['affiliate_daily_withdrawal_limit'] ?? 500))),
|
||||
'reset_time' => preg_match('/^(?:[01]\\d|2[0-3]):[0-5]\\d$/', (string) ($s['affiliate_withdrawal_reset_time'] ?? '00:00'))
|
||||
? (string) $s['affiliate_withdrawal_reset_time']
|
||||
: '00:00',
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user