文章目录[隐藏]
WordPress文创产品柔性会员制管理插件开发教程
一、项目概述与需求分析
在文创产品电商领域,传统的会员制往往过于僵化,无法满足多样化的用户需求。柔性会员制允许用户根据自身需求选择不同的会员等级、权益组合和付费方式,为文创产品提供更灵活的商业变现模式。
本教程将指导您开发一个完整的WordPress柔性会员制管理插件,主要功能包括:
- 多级会员体系配置
- 自定义权益包管理
- 灵活的付费周期设置
- 会员专属内容保护
- 自动化会员状态管理
二、插件基础结构与数据库设计
首先创建插件基础文件结构:
<?php
/**
* Plugin Name: 文创柔性会员管理系统
* Plugin URI: https://yourwebsite.com/
* Description: 为文创产品提供柔性会员制管理解决方案
* Version: 1.0.0
* Author: 您的名称
* License: GPL v2 or later
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 定义插件常量
define('FMC_PLUGIN_PATH', plugin_dir_path(__FILE__));
define('FMC_PLUGIN_URL', plugin_dir_url(__FILE__));
define('FMC_VERSION', '1.0.0');
// 初始化插件
require_once FMC_PLUGIN_PATH . 'includes/class-core.php';
require_once FMC_PLUGIN_PATH . 'includes/class-database.php';
require_once FMC_PLUGIN_PATH . 'includes/class-membership.php';
// 激活和停用钩子
register_activation_hook(__FILE__, ['FMC_Database', 'create_tables']);
register_deactivation_hook(__FILE__, ['FMC_Core', 'deactivate']);
// 启动插件
add_action('plugins_loaded', ['FMC_Core', 'init']);
创建数据库表结构类:
<?php
// includes/class-database.php
class FMC_Database {
/**
* 创建插件所需的数据表
*/
public static function create_tables() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
// 会员等级表
$table_levels = $wpdb->prefix . 'fmc_membership_levels';
$sql_levels = "CREATE TABLE IF NOT EXISTS $table_levels (
id mediumint(9) NOT NULL AUTO_INCREMENT,
level_name varchar(100) NOT NULL,
level_description text,
price decimal(10,2) NOT NULL DEFAULT '0.00',
billing_cycle varchar(50) DEFAULT 'monthly',
trial_days int DEFAULT 0,
status tinyint(1) DEFAULT 1,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
// 会员权益表
$table_benefits = $wpdb->prefix . 'fmc_membership_benefits';
$sql_benefits = "CREATE TABLE IF NOT EXISTS $table_benefits (
id mediumint(9) NOT NULL AUTO_INCREMENT,
benefit_name varchar(100) NOT NULL,
benefit_type varchar(50) NOT NULL,
benefit_value text,
level_id mediumint(9) NOT NULL,
sort_order int DEFAULT 0,
PRIMARY KEY (id),
KEY level_id (level_id)
) $charset_collate;";
// 用户会员关系表
$table_user_memberships = $wpdb->prefix . 'fmc_user_memberships';
$sql_user_memberships = "CREATE TABLE IF NOT EXISTS $table_user_memberships (
id mediumint(9) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
level_id mediumint(9) NOT NULL,
start_date datetime NOT NULL,
end_date datetime,
status varchar(20) DEFAULT 'active',
payment_method varchar(50),
auto_renew tinyint(1) DEFAULT 0,
last_payment_date datetime,
next_payment_date datetime,
notes text,
PRIMARY KEY (id),
KEY user_id (user_id),
KEY level_id (level_id),
KEY status (status)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql_levels);
dbDelta($sql_benefits);
dbDelta($sql_user_memberships);
}
}
三、会员等级管理模块开发
创建会员等级管理类:
<?php
// includes/class-membership-levels.php
class FMC_Membership_Levels {
private $table_name;
public function __construct() {
global $wpdb;
$this->table_name = $wpdb->prefix . 'fmc_membership_levels';
}
/**
* 添加新的会员等级
* @param array $data 会员等级数据
* @return int|false 插入的ID或false
*/
public function add_level($data) {
global $wpdb;
$defaults = [
'level_name' => '',
'level_description' => '',
'price' => 0.00,
'billing_cycle' => 'monthly',
'trial_days' => 0,
'status' => 1
];
$data = wp_parse_args($data, $defaults);
// 验证必填字段
if (empty($data['level_name'])) {
return false;
}
$result = $wpdb->insert(
$this->table_name,
[
'level_name' => sanitize_text_field($data['level_name']),
'level_description' => wp_kses_post($data['level_description']),
'price' => floatval($data['price']),
'billing_cycle' => sanitize_text_field($data['billing_cycle']),
'trial_days' => intval($data['trial_days']),
'status' => intval($data['status'])
],
['%s', '%s', '%f', '%s', '%d', '%d']
);
return $result ? $wpdb->insert_id : false;
}
/**
* 获取所有会员等级
* @param bool $active_only 是否只获取激活的等级
* @return array 会员等级数组
*/
public function get_all_levels($active_only = true) {
global $wpdb;
$where = $active_only ? " WHERE status = 1" : "";
$sql = "SELECT * FROM {$this->table_name}{$where} ORDER BY price ASC";
return $wpdb->get_results($sql, ARRAY_A);
}
/**
* 根据ID获取会员等级
* @param int $level_id 等级ID
* @return array|null 等级数据或null
*/
public function get_level_by_id($level_id) {
global $wpdb;
$sql = $wpdb->prepare(
"SELECT * FROM {$this->table_name} WHERE id = %d",
$level_id
);
return $wpdb->get_row($sql, ARRAY_A);
}
/**
* 更新会员等级
* @param int $level_id 等级ID
* @param array $data 更新数据
* @return bool 是否成功
*/
public function update_level($level_id, $data) {
global $wpdb;
$level_id = intval($level_id);
if ($level_id <= 0) {
return false;
}
$update_data = [];
$format = [];
if (isset($data['level_name'])) {
$update_data['level_name'] = sanitize_text_field($data['level_name']);
$format[] = '%s';
}
if (isset($data['price'])) {
$update_data['price'] = floatval($data['price']);
$format[] = '%f';
}
if (isset($data['status'])) {
$update_data['status'] = intval($data['status']);
$format[] = '%d';
}
if (empty($update_data)) {
return false;
}
$result = $wpdb->update(
$this->table_name,
$update_data,
['id' => $level_id],
$format,
['%d']
);
return $result !== false;
}
}
四、用户会员管理模块
创建用户会员管理类:
<?php
// includes/class-user-membership.php
class FMC_User_Membership {
private $table_name;
public function __construct() {
global $wpdb;
$this->table_name = $wpdb->prefix . 'fmc_user_memberships';
}
/**
* 为用户添加会员资格
* @param int $user_id 用户ID
* @param int $level_id 会员等级ID
* @param array $options 选项数组
* @return int|false 插入的ID或false
*/
public function add_user_membership($user_id, $level_id, $options = []) {
global $wpdb;
$user_id = intval($user_id);
$level_id = intval($level_id);
if ($user_id <= 0 || $level_id <= 0) {
return false;
}
$defaults = [
'start_date' => current_time('mysql'),
'billing_cycle' => 'monthly',
'auto_renew' => 0,
'status' => 'active'
];
$options = wp_parse_args($options, $defaults);
// 计算结束日期
$end_date = $this->calculate_end_date(
$options['start_date'],
$options['billing_cycle']
);
$result = $wpdb->insert(
$this->table_name,
[
'user_id' => $user_id,
'level_id' => $level_id,
'start_date' => $options['start_date'],
'end_date' => $end_date,
'status' => $options['status'],
'auto_renew' => $options['auto_renew'],
'next_payment_date' => $end_date
],
['%d', '%d', '%s', '%s', '%s', '%d', '%s']
);
if ($result) {
// 更新用户元数据
update_user_meta($user_id, 'fmc_membership_level', $level_id);
update_user_meta($user_id, 'fmc_membership_status', $options['status']);
// 触发动作钩子
do_action('fmc_user_membership_added', $wpdb->insert_id, $user_id, $level_id);
}
return $result ? $wpdb->insert_id : false;
}
/**
* 计算会员结束日期
* @param string $start_date 开始日期
* @param string $billing_cycle 计费周期
* @return string 结束日期
*/
private function calculate_end_date($start_date, $billing_cycle) {
$start_timestamp = strtotime($start_date);
switch ($billing_cycle) {
case 'daily':
$end_timestamp = strtotime('+1 day', $start_timestamp);
break;
case 'weekly':
$end_timestamp = strtotime('+1 week', $start_timestamp);
break;
case 'yearly':
$end_timestamp = strtotime('+1 year', $start_timestamp);
break;
case 'monthly':
default:
$end_timestamp = strtotime('+1 month', $start_timestamp);
break;
}
return date('Y-m-d H:i:s', $end_timestamp);
}
/**
* 检查用户会员状态
* @param int $user_id 用户ID
* @return array 会员状态信息
*/
public function check_user_membership($user_id) {
global $wpdb;
$user_id = intval($user_id);
$sql = $wpdb->prepare(
"SELECT um.*, ml.level_name, ml.price
FROM {$this->table_name} um
LEFT JOIN {$wpdb->prefix}fmc_membership_levels ml ON um.level_id = ml.id
WHERE um.user_id = %d AND um.status = 'active'
ORDER BY um.end_date DESC LIMIT 1",
$user_id
);
$membership = $wpdb->get_row($sql, ARRAY_A);
if (!$membership) {
return [
'has_membership' => false,
'message' => '无有效会员资格'
];
}
// 检查是否过期
$current_time = current_time('mysql');
$is_expired = strtotime($membership['end_date']) < strtotime($current_time);
if ($is_expired) {
$this->expire_membership($membership['id']);
return [
'has_membership' => false,
'message' => '会员已过期'
];
}
return [
'has_membership' => true,
'data' => $membership,
'days_remaining' => $this->calculate_days_remaining($membership['end_date'])
];
}
/**
* 使会员资格过期
* @param int $membership_id 会员ID
* @return bool 是否成功
*/
public function expire_membership($membership_id) {
global $wpdb;
$result = $wpdb->update(
$this->table_name,
['status' => 'expired'],
['id' => $membership_id],
['%s'],
['%d']
);
if ($result) {
$membership = $this->get_membership_by_id($membership_id);
if ($membership) {
update_user_meta($membership['user_id'], 'fmc_membership_status', 'expired');
do_action('fmc_membership_expired', $membership_id, $membership['user_id']);
}
}
return $result !== false;
}
/**
* 计算剩余天数
* @param string $end_date 结束日期
* @return int 剩余天数
*/
private function calculate_days_remaining($end_date) {
$current_time = time();
$end_timestamp = strtotime($end_date);
$seconds_remaining = $end_timestamp - $current_time;
$days_remaining = floor($seconds_remaining / (60 * 60 * 24));
return max(0, $days_remaining);
}
}
五、内容保护与权限控制
创建内容保护类,用于限制非会员访问特定内容:
<?php
// includes/class-content-protection.php
class FMC_Content_Protection {
/**
* 初始化内容保护钩子
*/
public static function init() {
// 保护文章内容
add_filter('the_content', [__CLASS__, 'protect_post_content']);
// 保护页面
add_action('template_redirect', [__CLASS__, 'protect_page_access']);
// 短代码支持
add_shortcode('members_only', [__CLASS__, 'members_only_shortcode']);
}
/**
* 保护文章内容
* @param string $content 原始内容
* @return string 处理后的内容
*/
public static function protect_post_content($content) {
global $post;
// 如果不是文章或页面,直接返回
if (!is_singular() || !isset($post->ID)) {
return $content;
}
// 检查是否需要保护
$is_protected = get_post_meta($post->ID, '_fmc_protected', true);
$required_level = get_post_meta($post->ID, '_fmc_required_level', true);
if (!$is_protected || empty($required_level)) {
return $content;
}
// 检查用户权限
$user_id = get_current_user_id();
$has_access = self::check_user_access($user_id, $required_level);
if ($has_access) {
return $content;
}
// 显示保护信息
$message = self::get_protection_message($required_level);
return $message;
}
/**
* 检查用户访问权限
* @param int $user_id 用户ID
* @param int $required_level 所需等级ID
* @return bool 是否有权限
*/
private static function check_user_access($user_id, $required_level) {
if ($user_id <= 0) {
return false;
}
$user_membership = new FMC_User_Membership();
$membership_info = $user_membership->check_user_membership($user_id);
if (!$membership_info['has_membership']) {
return false;
}
// 获取用户当前等级
$user_level = get_user_meta($user_id, 'fmc_membership_level', true);
// 检查等级是否足够
$levels_manager = new FMC_Membership_Levels();
$user_level_data = $levels_manager->get_level_by_id($user_level);
$required_level_data = $levels_manager->get_level_by_id($required_level);
if (!$user_level_data || !$required_level_data) {
return false;
}
// 比较价格(假设价格越高,等级越高)
return floatval($user_level_data['price']) >= floatval($required_level_data['price']);
}
/**
* 获取保护信息
* @param int $required_level 所需等级ID
/**
* 获取保护信息
* @param int $required_level 所需等级ID
* @return string 保护信息HTML
*/
private static function get_protection_message($required_level) {
$levels_manager = new FMC_Membership_Levels();
$level_data = $levels_manager->get_level_by_id($required_level);
$level_name = $level_data ? $level_data['level_name'] : '特定会员';
$message = '<div class="fmc-protected-content">';
$message .= '<h3>🔒 会员专属内容</h3>';
$message .= '<p>此内容仅对 <strong>' . esc_html($level_name) . '</strong> 会员开放</p>';
if (is_user_logged_in()) {
$message .= '<p>您当前的会员等级无法访问此内容,请升级您的会员资格。</p>';
$message .= '<a href="' . esc_url(get_permalink(get_page_by_path('membership-plans'))) . '" class="fmc-upgrade-button">立即升级</a>';
} else {
$message .= '<p>请登录并订阅相应会员计划以查看此内容。</p>';
$message .= '<a href="' . esc_url(wp_login_url(get_permalink())) . '" class="fmc-login-button">登录/注册</a>';
}
$message .= '</div>';
return $message;
}
/**
* 保护页面访问
*/
public static function protect_page_access() {
if (!is_page()) {
return;
}
global $post;
$is_protected = get_post_meta($post->ID, '_fmc_protected', true);
$required_level = get_post_meta($post->ID, '_fmc_required_level', true);
if (!$is_protected || empty($required_level)) {
return;
}
$user_id = get_current_user_id();
$has_access = self::check_user_access($user_id, $required_level);
if (!$has_access) {
wp_redirect(home_url('/membership-required/'));
exit;
}
}
/**
* 会员专属短代码
* @param array $atts 短代码属性
* @param string $content 短代码内容
* @return string 处理后的内容
*/
public static function members_only_shortcode($atts, $content = null) {
$atts = shortcode_atts([
'level' => '',
'message' => '此内容仅对会员可见'
], $atts, 'members_only');
$user_id = get_current_user_id();
if (empty($atts['level'])) {
// 检查是否有任何会员资格
$user_membership = new FMC_User_Membership();
$membership_info = $user_membership->check_user_membership($user_id);
if ($membership_info['has_membership']) {
return do_shortcode($content);
}
} else {
// 检查特定等级
$has_access = self::check_user_access($user_id, intval($atts['level']));
if ($has_access) {
return do_shortcode($content);
}
}
return '<div class="fmc-members-only-message">' . esc_html($atts['message']) . '</div>';
}
}
六、管理界面开发
创建管理菜单和设置页面:
<?php
// admin/class-admin-menu.php
class FMC_Admin_Menu {
/**
* 初始化管理菜单
*/
public static function init() {
add_action('admin_menu', [__CLASS__, 'add_admin_menus']);
add_action('admin_enqueue_scripts', [__CLASS__, 'enqueue_admin_scripts']);
}
/**
* 添加管理菜单
*/
public static function add_admin_menus() {
// 主菜单
add_menu_page(
'柔性会员管理',
'文创会员',
'manage_options',
'fmc-dashboard',
[__CLASS__, 'render_dashboard_page'],
'dashicons-groups',
30
);
// 子菜单
add_submenu_page(
'fmc-dashboard',
'会员等级管理',
'会员等级',
'manage_options',
'fmc-levels',
[__CLASS__, 'render_levels_page']
);
add_submenu_page(
'fmc-dashboard',
'会员管理',
'会员管理',
'manage_options',
'fmc-members',
[__CLASS__, 'render_members_page']
);
add_submenu_page(
'fmc-dashboard',
'设置',
'设置',
'manage_options',
'fmc-settings',
[__CLASS__, 'render_settings_page']
);
}
/**
* 加载管理端脚本和样式
*/
public static function enqueue_admin_scripts($hook) {
if (strpos($hook, 'fmc-') === false) {
return;
}
wp_enqueue_style(
'fmc-admin-style',
FMC_PLUGIN_URL . 'assets/css/admin-style.css',
[],
FMC_VERSION
);
wp_enqueue_script(
'fmc-admin-script',
FMC_PLUGIN_URL . 'assets/js/admin-script.js',
['jquery', 'jquery-ui-sortable'],
FMC_VERSION,
true
);
wp_localize_script('fmc-admin-script', 'fmc_admin', [
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('fmc_admin_nonce'),
'confirm_delete' => '确定要删除此项吗?此操作不可撤销。'
]);
}
/**
* 渲染仪表盘页面
*/
public static function render_dashboard_page() {
?>
<div class="wrap fmc-dashboard">
<h1 class="wp-heading-inline">文创柔性会员管理系统</h1>
<div class="fmc-stats-container">
<div class="fmc-stat-card">
<h3>总会员数</h3>
<p class="stat-number"><?php echo self::get_total_members(); ?></p>
</div>
<div class="fmc-stat-card">
<h3>活跃会员</h3>
<p class="stat-number"><?php echo self::get_active_members(); ?></p>
</div>
<div class="fmc-stat-card">
<h3>本月收入</h3>
<p class="stat-number">¥<?php echo self::get_monthly_revenue(); ?></p>
</div>
<div class="fmc-stat-card">
<h3>会员等级</h3>
<p class="stat-number"><?php echo self::get_level_count(); ?></p>
</div>
</div>
<div class="fmc-recent-activity">
<h2>最近活动</h2>
<?php self::display_recent_activity(); ?>
</div>
</div>
<?php
}
/**
* 渲染会员等级管理页面
*/
public static function render_levels_page() {
$action = isset($_GET['action']) ? sanitize_text_field($_GET['action']) : 'list';
$level_id = isset($_GET['level_id']) ? intval($_GET['level_id']) : 0;
switch ($action) {
case 'edit':
self::render_edit_level_form($level_id);
break;
case 'add':
self::render_add_level_form();
break;
default:
self::render_levels_list();
break;
}
}
/**
* 渲染等级列表
*/
private static function render_levels_list() {
$levels_manager = new FMC_Membership_Levels();
$levels = $levels_manager->get_all_levels(false);
?>
<div class="wrap">
<h1 class="wp-heading-inline">会员等级管理</h1>
<a href="<?php echo admin_url('admin.php?page=fmc-levels&action=add'); ?>" class="page-title-action">添加新等级</a>
<table class="wp-list-table widefat fixed striped">
<thead>
<tr>
<th>ID</th>
<th>等级名称</th>
<th>价格</th>
<th>计费周期</th>
<th>试用天数</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($levels as $level): ?>
<tr>
<td><?php echo $level['id']; ?></td>
<td>
<strong><?php echo esc_html($level['level_name']); ?></strong>
<p class="description"><?php echo esc_html($level['level_description']); ?></p>
</td>
<td>¥<?php echo number_format($level['price'], 2); ?></td>
<td><?php echo self::get_billing_cycle_label($level['billing_cycle']); ?></td>
<td><?php echo $level['trial_days']; ?>天</td>
<td>
<span class="fmc-status-badge fmc-status-<?php echo $level['status'] ? 'active' : 'inactive'; ?>">
<?php echo $level['status'] ? '激活' : '停用'; ?>
</span>
</td>
<td>
<a href="<?php echo admin_url('admin.php?page=fmc-levels&action=edit&level_id=' . $level['id']); ?>" class="button button-small">编辑</a>
<button class="button button-small button-delete-level" data-level-id="<?php echo $level['id']; ?>">删除</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php
}
/**
* 渲染添加等级表单
*/
private static function render_add_level_form() {
?>
<div class="wrap">
<h1>添加会员等级</h1>
<form method="post" action="<?php echo admin_url('admin-post.php'); ?>">
<input type="hidden" name="action" value="fmc_save_level">
<?php wp_nonce_field('fmc_save_level_nonce', 'fmc_nonce'); ?>
<table class="form-table">
<tr>
<th scope="row"><label for="level_name">等级名称</label></th>
<td>
<input type="text" id="level_name" name="level_name" class="regular-text" required>
<p class="description">例如:基础会员、高级会员、尊享会员</p>
</td>
</tr>
<tr>
<th scope="row"><label for="level_description">等级描述</label></th>
<td>
<textarea id="level_description" name="level_description" rows="3" class="large-text"></textarea>
<p class="description">简要描述此等级的特权和优势</p>
</td>
</tr>
<tr>
<th scope="row"><label for="price">价格</label></th>
<td>
<input type="number" id="price" name="price" step="0.01" min="0" value="0" required>
<p class="description">设置会员价格,0表示免费</p>
</td>
</tr>
<tr>
<th scope="row"><label for="billing_cycle">计费周期</label></th>
<td>
<select id="billing_cycle" name="billing_cycle">
<option value="monthly">月付</option>
<option value="yearly">年付</option>
<option value="weekly">周付</option>
<option value="daily">日付</option>
<option value="lifetime">一次性终身</option>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="trial_days">试用天数</label></th>
<td>
<input type="number" id="trial_days" name="trial_days" min="0" value="0">
<p class="description">设置免费试用天数,0表示不提供试用</p>
</td>
</tr>
<tr>
<th scope="row"><label for="status">状态</label></th>
<td>
<select id="status" name="status">
<option value="1">激活</option>
<option value="0">停用</option>
</select>
</td>
</tr>
</table>
<p class="submit">
<button type="submit" class="button button-primary">保存等级</button>
<a href="<?php echo admin_url('admin.php?page=fmc-levels'); ?>" class="button">取消</a>
</p>
</form>
</div>
<?php
}
/**
* 获取计费周期标签
*/
private static function get_billing_cycle_label($cycle) {
$labels = [
'daily' => '日付',
'weekly' => '周付',
'monthly' => '月付',
'yearly' => '年付',
'lifetime' => '终身'
];
return isset($labels[$cycle]) ? $labels[$cycle] : $cycle;
}
}
七、支付集成与Webhook处理
创建支付处理类(以支付宝为例):
<?php
// includes/class-payment-processor.php
class FMC_Payment_Processor {
/**
* 初始化支付处理器
*/
public static function init() {
add_action('init', [__CLASS__, 'register_payment_endpoints']);
add_action('fmc_process_payment', [__CLASS__, 'process_payment'], 10, 3);
}
/**
* 注册支付回调端点
*/
public static function register_payment_endpoints() {
add_rewrite_rule(
'^fmc-payment/alipay-callback/?$',
'index.php?fmc_payment_callback=alipay',
'top'
);
add_rewrite_rule(
'^fmc-payment/wechat-callback/?$',
'index.php?fmc_payment_callback=wechat',
'top'
);
add_filter('query_vars', function($vars) {
$vars[] = 'fmc_payment_callback';
return $vars;
});
add_action('template_redirect', [__CLASS__, 'handle_payment_callback']);
}
/**
* 处理支付回调
*/
public static function handle_payment_callback() {
$callback_type = get_query_var('fmc_payment_callback');
if (empty($callback_type)) {
return;
}
switch ($callback_type) {
case 'alipay':
self::handle_alipay_callback();
break;
case 'wechat':
self::handle_wechat_callback();
break;
}
exit;
}
/**
* 处理支付宝回调
*/
private static function handle_alipay_callback() {
// 验证签名
if (!self::verify_alipay_signature($_POST)) {
wp_die('签名验证失败', '支付错误', ['response' => 400]);
}
$order_id = sanitize_text_field($_POST['out_trade_no']);
$trade_status = sanitize_text_field($_POST['trade_status']);
// 更新订单状态
self::update_order_status($order_id, $trade_status);
// 返回成功响应
echo 'success';
}
/**
* 创建支付订单
* @param int $user_id 用户ID
* @param int $level_id 会员等级ID
* @param string $payment_method 支付方式
* @return array 支付信息
*/
public static function create_payment_order($user_id, $level_id, $payment_method = 'alipay') {
$levels_manager = new FMC_Membership_Levels();
$level = $levels_manager->get_level_by_id($level_id);
if (!$level) {
return [
'success' => false,
'message' => '无效的会员等级'
];
}
// 生成订单号
$order_id = 'FMC' . date('YmdHis') . mt_rand(1000, 9999);
// 保存订单到数据库
global $wpdb;
$wpdb->insert(
$wpdb->prefix . 'fmc_orders',
[
'order_id' => $order_id,
'user_id' => $user_id,
'level_id' => $level_id,
'amount' => $level['price'],
'payment_method' => $payment_method,
'status' => 'pending',
'created_at' => current_time('mysql')
],
['%s', '%d', '%d', '%f', '%s', '%s', '%s']
);
// 根据支付方式生成支付参数
switch ($payment_method) {
case 'alipay':
$payment_data = self::generate_alipay_params($order_id, $level);
break;
case 'wechat':
$payment_data = self::generate_wechat_params($order_id, $level);
break;
default:
return [
'success' => false,
'message' => '不支持的支付方式'
];
}
return [
'success' => true,
'order_id' => $order_id,
'payment_data' => $payment_data
];
