当前位置:首页 > PHP

php实现付费阅读

2026-02-16 18:33:01PHP

PHP 实现付费阅读功能

要实现付费阅读功能,通常需要结合会员系统、支付接口和内容权限控制。以下是核心实现步骤:

数据库设计

创建必要的数据库表结构:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE,
    password VARCHAR(255),
    balance DECIMAL(10,2) DEFAULT 0,
    vip_expire DATETIME
);

CREATE TABLE articles (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100),
    content TEXT,
    price DECIMAL(10,2),
    free_preview TEXT
);

CREATE TABLE purchases (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    article_id INT,
    purchase_time DATETIME,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (article_id) REFERENCES articles(id)
);

用户认证系统

实现基础的登录注册功能:

// 用户登录验证
session_start();
function login($username, $password) {
    $user = queryDB("SELECT * FROM users WHERE username = ?", [$username]);
    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        return true;
    }
    return false;
}

内容访问控制

检查用户权限并显示相应内容:

function canViewArticle($userId, $articleId) {
    // 检查是否已购买或VIP未过期
    $purchased = queryDB(
        "SELECT 1 FROM purchases WHERE user_id = ? AND article_id = ?",
        [$userId, $articleId]
    );

    $vipValid = queryDB(
        "SELECT 1 FROM users WHERE id = ? AND vip_expire > NOW()",
        [$userId]
    );

    return $purchased || $vipValid;
}

function getArticleContent($articleId, $userId) {
    $article = queryDB("SELECT * FROM articles WHERE id = ?", [$articleId]);

    if (canViewArticle($userId, $articleId)) {
        return $article['content'];
    } else {
        return $article['free_preview'] . 
               '<div class="paywall">完整内容需支付'.$article['price'].'元</div>';
    }
}

支付集成

集成支付宝/微信支付接口示例:

// 支付宝支付请求示例
function createAlipayOrder($userId, $articleId, $price) {
    $orderId = uniqid();
    $params = [
        'app_id' => 'your_app_id',
        'method' => 'alipay.trade.page.pay',
        'notify_url' => 'https://yoursite.com/notify',
        'return_url' => 'https://yoursite.com/return',
        'biz_content' => json_encode([
            'out_trade_no' => $orderId,
            'total_amount' => $price,
            'subject' => '文章购买',
            'product_code' => 'FAST_INSTANT_TRADE_PAY'
        ])
    ];

    // 保存订单到数据库
    saveOrderToDB($userId, $articleId, $orderId, $price);

    return buildPaymentForm($params);
}

支付回调处理

验证支付结果并解锁内容:

// 支付宝异步通知处理
function handleAlipayNotify() {
    $verified = verifyAlipaySignature($_POST);
    if ($verified && $_POST['trade_status'] == 'TRADE_SUCCESS') {
        $orderId = $_POST['out_trade_no'];

        // 更新订单状态
        updateOrderStatus($orderId, 'paid');

        // 解锁文章权限
        $order = getOrderInfo($orderId);
        recordPurchase($order['user_id'], $order['article_id']);

        echo 'success';
    } else {
        echo 'fail';
    }
}

前端交互实现

支付按钮和内容展示的HTML示例:

<div class="article">
    <h2><?= htmlspecialchars($article['title']) ?></h2>
    <div class="content">
        <?= nl2br(getArticleContent($article['id'], $_SESSION['user_id'] ?? 0)) ?>
    </div>

    <?php if (!canViewArticle($_SESSION['user_id'] ?? 0, $article['id'])): ?>
    <button class="pay-button" 
            data-article-id="<?= $article['id'] ?>"
            data-price="<?= $article['price'] ?>">
        立即支付 <?= $article['price'] ?> 元
    </button>
    <?php endif; ?>
</div>

<script>
// AJAX支付请求
$('.pay-button').click(function() {
    $.post('/create_payment', {
        article_id: $(this).data('article-id')
    }, function(response) {
        window.location.href = response.payment_url;
    });
});
</script>

安全注意事项

  1. 所有支付相关操作必须使用HTTPS协议
  2. 支付金额等重要参数应从服务器获取,不可信任前端传递
  3. 实现CSRF防护机制
  4. 定期检查未支付订单状态
  5. 支付回调验证签名防止伪造请求

扩展功能建议

  1. 添加优惠券/折扣码系统
  2. 实现按章节付费功能
  3. 开发会员订阅模式
  4. 添加阅读进度同步
  5. 实现跨设备访问控制

以上实现需要根据具体业务需求调整,支付接口需参考官方最新文档实现。测试阶段建议使用沙箱环境,上线前完成全面的支付流程测试。

php实现付费阅读

标签: php
分享给朋友:

相关文章

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebS…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT A…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart…