在WordPress網(wǎng)站中實現(xiàn)金幣支付功能是許多內(nèi)容付費、游戲化學(xué)習(xí)或虛擬商品交易平臺的核心需求。本文將詳細(xì)介紹如何在WordPress中實現(xiàn)支付金幣的代碼方案。
一、準(zhǔn)備工作
- 安裝必要插件:
- WooCommerce(電子商務(wù)功能)
- myCred(虛擬貨幣管理)
- Paid Memberships Pro(會員訂閱管理,可選)
- 創(chuàng)建金幣系統(tǒng): 在myCred插件中設(shè)置您的虛擬貨幣名稱(如”金幣”)、兌換比率和初始分配規(guī)則。
二、基礎(chǔ)支付代碼實現(xiàn)
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>購買數(shù)量: <?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調(diào)用
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']);
// 創(chuàng)建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();
// 獲取訂單中的金幣數(shù)量(需要存儲在訂單元數(shù)據(jù)中)
$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 . '金幣。當(dāng)前余額: ' . mycred_get_users_balance($user_id)
);
}
}
四、進階功能實現(xiàn)
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. 金幣兌換優(yōu)惠券
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優(yōu)惠券</option>
<option value="200">200金幣兌換¥25優(yōu)惠券</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('兌換成功!優(yōu)惠碼: ' + response.data.coupon_code);
} else {
alert('兌換失敗: ' + response.data);
}
}
});
});
});
</script>
<?php
return ob_get_clean();
}
五、安全注意事項
- 始終使用nonce驗證防止CSRF攻擊
- 所有金額數(shù)據(jù)在存儲前進行驗證和清理
- 關(guān)鍵操作記錄日志
- 考慮添加每日購買限額
- 定期備份金幣交易記錄
六、性能優(yōu)化建議
- 對頻繁查詢的金幣余額使用緩存
- 批量處理大量金幣交易時使用事務(wù)
- 考慮使用自定義數(shù)據(jù)庫表存儲交易記錄
- 實現(xiàn)金幣變化的WebSocket實時通知
通過上述代碼實現(xiàn),您可以在WordPress中構(gòu)建一個完整的金幣支付系統(tǒng),滿足內(nèi)容付費、虛擬商品交易等多種應(yīng)用場景的需求。根據(jù)您的具體業(yè)務(wù)需求,可以進一步擴展或修改這些代碼。