WordPress支付金币代码实现指南

来自:素雅营销研究院

头像 方知笔记
2025年05月01日 08:40

在WordPress网站中实现金币支付功能是许多内容付费、游戏化学习或虚拟商品交易平台的核心需求。本文将详细介绍如何在WordPress中实现支付金币的代码方案。

一、准备工作

  1. 安装必要插件
  • WooCommerce(电子商务功能)
  • myCred(虚拟货币管理)
  • Paid Memberships Pro(会员订阅管理,可选)
  1. 创建金币系统: 在myCred插件中设置您的虚拟货币名称(如”金币”)、兑换比率和初始分配规则。

二、基础支付代码实现

1. 短代码方式

function gold_coin_payment_shortcode($atts) {
$atts = shortcode_atts(array(
'amount' => 100,
'price' => 10,
'product_id' => ''
), $atts);

ob_start();
?>
<div class="gold-payment-box">
<h3>购买金币</h3>
<p>购买数量: <?php echo $atts['amount']; ?> 金币</p>
<p>价格: ¥<?php echo $atts['price']; ?></p>
<button class="buy-gold-btn"
data-amount="<?php echo $atts['amount']; ?>"
data-price="<?php echo $atts['price']; ?>"
data-product="<?php echo $atts['product_id']; ?>">
立即购买
</button>
</div>
<?php
return ob_get_clean();
}
add_shortcode('gold_payment', 'gold_coin_payment_shortcode');

2. AJAX处理支付

// 前端AJAX调用
add_action('wp_footer', 'gold_payment_scripts');
function gold_payment_scripts() {
?>
<script>
jQuery(document).ready(function($) {
$('.buy-gold-btn').click(function() {
var amount = $(this).data('amount');
var price = $(this).data('price');
var product = $(this).data('product');

$.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'process_gold_payment',
amount: amount,
price: price,
product_id: product,
security: '<?php echo wp_create_nonce("gold-payment-nonce"); ?>'
},
success: function(response) {
if(response.success) {
alert('购买成功!您已获得' + amount + '金币');
// 更新用户金币显示
} else {
alert('购买失败: ' + response.data);
}
}
});
});
});
</script>
<?php
}

// 后端处理
add_action('wp_ajax_process_gold_payment', 'handle_gold_payment');
add_action('wp_ajax_nopriv_process_gold_payment', 'handle_gold_payment');
function handle_gold_payment() {
check_ajax_referer('gold-payment-nonce', 'security');

$user_id = get_current_user_id();
if(!$user_id) {
wp_send_json_error('请先登录');
}

$amount = intval($_POST['amount']);
$price = floatval($_POST['price']);
$product_id = intval($_POST['product_id']);

// 创建WooCommerce订单
$order = wc_create_order();
$order->add_product(wc_get_product($product_id), 1);
$order->set_customer_id($user_id);
$order->calculate_totals();
$order->update_status('pending', '等待支付', true);

// 返回支付链接
wp_send_json_success(array(
'payment_url' => $order->get_checkout_payment_url()
));
}

三、与myCred集成

支付成功后,需要将金币添加到用户账户:

// 支付成功钩子
add_action('woocommerce_payment_complete', 'add_gold_coins_after_payment');
function add_gold_coins_after_payment($order_id) {
$order = wc_get_order($order_id);
$user_id = $order->get_customer_id();

// 获取订单中的金币数量(需要存储在订单元数据中)
$gold_amount = get_post_meta($order_id, '_gold_amount', true);

if($gold_amount && $user_id) {
// 使用myCred添加金币
mycred_add('gold_purchase', $user_id, $gold_amount, '购买金币 #' . $order_id);

// 可选的邮件通知
wp_mail(
$order->get_billing_email(),
'金币购买成功',
'您已成功购买' . $gold_amount . '金币。当前余额: ' . mycred_get_users_balance($user_id)
);
}
}

四、进阶功能实现

1. 金币消费功能

function spend_gold_coins($user_id, $amount, $reason = '') {
if(mycred_get_users_balance($user_id) < $amount) {
return new WP_Error('insufficient_funds', '金币不足');
}

$result = mycred_subtract('gold_spending', $user_id, $amount, $reason);

if($result) {
do_action('gold_coins_spent', $user_id, $amount, $reason);
return true;
}

return false;
}

2. 金币兑换优惠券

add_shortcode('gold_to_coupon', 'gold_to_coupon_shortcode');
function gold_to_coupon_shortcode() {
ob_start();
?>
<div class="gold-exchange">
<select id="gold-amount">
<option value="100">100金币兑换¥10优惠券</option>
<option value="200">200金币兑换¥25优惠券</option>
</select>
<button id="exchange-gold">兑换</button>
</div>

<script>
jQuery(document).ready(function($) {
$('#exchange-gold').click(function() {
var amount = $('#gold-amount').val();

$.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'exchange_gold_to_coupon',
amount: amount,
security: '<?php echo wp_create_nonce("gold-exchange-nonce"); ?>'
},
success: function(response) {
if(response.success) {
alert('兑换成功!优惠码: ' + response.data.coupon_code);
} else {
alert('兑换失败: ' + response.data);
}
}
});
});
});
</script>
<?php
return ob_get_clean();
}

五、安全注意事项

  1. 始终使用nonce验证防止CSRF攻击
  2. 所有金额数据在存储前进行验证和清理
  3. 关键操作记录日志
  4. 考虑添加每日购买限额
  5. 定期备份金币交易记录

六、性能优化建议

  1. 对频繁查询的金币余额使用缓存
  2. 批量处理大量金币交易时使用事务
  3. 考虑使用自定义数据库表存储交易记录
  4. 实现金币变化的WebSocket实时通知

通过上述代码实现,您可以在WordPress中构建一个完整的金币支付系统,满足内容付费、虚拟商品交易等多种应用场景的需求。根据您的具体业务需求,可以进一步扩展或修改这些代码。