feat(pay): enable points card-pass redeem in user center

Wire zibll-style points_pass_exchange settings, open credits redeem options, and add 卡密兑换积分 UI on the credits panel.
This commit is contained in:
2026-07-14 21:50:05 +08:00
parent 6bad39a7ba
commit dc28fafcc3
4 changed files with 64 additions and 12 deletions
@@ -437,6 +437,11 @@ class AKSRT_Admin_Schema_Users {
['key' => 'points_deduction_rate', 'label' => '抵扣比例(%)', 'type' => 'number', 'default' => 100, 'min' => 1, 'max' => 100],
['key' => 'points_deduction_max', 'label' => '最大抵扣比例(%)', 'type' => 'number', 'default' => 50, 'min' => 1, 'max' => 100],
]],
['key' => 'card_pass', 'title' => '积分卡密兑换', 'fields' => [
['key' => 'points_pass_exchange_s', 'label' => '启用积分卡密兑换', 'type' => 'switch', 'default' => false],
['key' => 'points_pass_exchange_desc', 'label' => '兑换说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'points_pass_exchange_s', 'value' => true]],
['key' => 'points_pass_exchange_only_password', 'label' => '仅密码兑换', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'points_pass_exchange_s', 'value' => true]],
]],
['key' => 'display', 'title' => '展示设置', 'fields' => [
['key' => 'points_show_balance', 'label' => '导航栏显示余额', 'type' => 'switch', 'default' => true],
['key' => 'points_show_log', 'label' => '显示积分记录', 'type' => 'switch', 'default' => true],
+24 -12
View File
@@ -138,22 +138,34 @@ class AKSRT_Charge_Card {
}
}
// Points card-pass: zibll points_pass_exchange_* (stored in aksrt_settings).
$credits = ['enabled' => false, 'desc' => '', 'only_password' => true];
$all = class_exists('AKSRT_Settings') && method_exists('AKSRT_Settings', 'get_all')
? AKSRT_Settings::get_all()
: (array) get_option('aksrt_settings', []);
if (!empty($all['points_pass_exchange_s'])) {
// Require credits system on when available.
$credits_on = !class_exists('AKSRT_Settings') || !method_exists('AKSRT_Settings', 'credits_enabled') || AKSRT_Settings::credits_enabled();
$credits = [
'enabled' => $credits_on,
'desc' => sanitize_textarea_field((string) ($all['points_pass_exchange_desc'] ?? '')),
'only_password' => !isset($all['points_pass_exchange_only_password']) || !empty($all['points_pass_exchange_only_password']),
];
}
return [
'balance' => $balance,
'vip' => $vip,
'credits' => [
'enabled' => false,
'desc' => '',
'only_password' => true,
],
'credits' => $credits,
'labels' => [
'title' => __('卡密兑换', 'aksrt'),
'password' => __('卡密', 'aksrt'),
'card' => __('卡号', 'aksrt'),
'submit_balance' => __('兑换余额', 'aksrt'),
'submit_vip' => __('兑换会员', 'aksrt'),
'placeholder_pw' => __('请输入卡密', 'aksrt'),
'placeholder_card'=> __('请输入卡号', 'aksrt'),
'title' => __('卡密兑换', 'aksrt'),
'password' => __('卡密', 'aksrt'),
'card' => __('卡号', 'aksrt'),
'submit_balance' => __('兑换余额', 'aksrt'),
'submit_vip' => __('兑换会员', 'aksrt'),
'submit_credits' => __('兑换积分', 'aksrt'),
'placeholder_pw' => __('请输入卡密', 'aksrt'),
'placeholder_card' => __('请输入卡号', 'aksrt'),
],
];
}
@@ -13,9 +13,11 @@ $balance = (float) ($credit_balance ?? 0.0);
$credits_enabled = !empty($credits_enabled);
$card_pass_balance = ['enabled' => false, 'desc' => '', 'only_password' => true];
$card_pass_credits = ['enabled' => false, 'desc' => '', 'only_password' => true];
if (class_exists('AKSRT_Charge_Card')) {
$opts = AKSRT_Charge_Card::get_instance()->get_public_options();
$card_pass_balance = is_array($opts['balance'] ?? null) ? $opts['balance'] : $card_pass_balance;
$card_pass_credits = is_array($opts['credits'] ?? null) ? $opts['credits'] : $card_pass_credits;
} elseif (class_exists('AKSRT_Settings') && method_exists('AKSRT_Settings', 'get_payment_recharge_settings')) {
$recharge = AKSRT_Settings::get_payment_recharge_settings();
$pc = is_array($recharge['pass_charge'] ?? null) ? $recharge['pass_charge'] : [];
@@ -68,3 +70,23 @@ if (class_exists('AKSRT_Charge_Card')) {
<p class="uc-card-pass__tip" data-aksrt-card-tip></p>
</div>
<?php endif; ?>
<?php if (!empty($card_pass_credits['enabled'])) : ?>
<div class="uc-card-pass" data-aksrt-card-pass="credits">
<div class="uc-card-pass__title">
<i class="fas fa-ticket-alt" aria-hidden="true"></i>
<span><?php esc_html_e('卡密兑换积分', 'aksrt'); ?></span>
</div>
<?php if (!empty($card_pass_credits['desc'])) : ?>
<p class="uc-card-pass__desc"><?php echo esc_html((string) $card_pass_credits['desc']); ?></p>
<?php endif; ?>
<?php if (empty($card_pass_credits['only_password'])) : ?>
<input type="text" class="uc-card-pass__input" name="aksrt_card_no" data-aksrt-card-no autocomplete="off" placeholder="<?php esc_attr_e('请输入卡号', 'aksrt'); ?>">
<?php endif; ?>
<input type="text" class="uc-card-pass__input" name="aksrt_card_password" data-aksrt-card-password autocomplete="off" placeholder="<?php esc_attr_e('请输入卡密', 'aksrt'); ?>">
<button type="button" class="uc-card-pass__btn" data-aksrt-card-redeem data-type="credits">
<?php esc_html_e('兑换积分', 'aksrt'); ?>
</button>
<p class="uc-card-pass__tip" data-aksrt-card-tip></p>
</div>
<?php endif; ?>