php实现付费阅读
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>
安全注意事项
- 所有支付相关操作必须使用HTTPS协议
- 支付金额等重要参数应从服务器获取,不可信任前端传递
- 实现CSRF防护机制
- 定期检查未支付订单状态
- 支付回调验证签名防止伪造请求
扩展功能建议
- 添加优惠券/折扣码系统
- 实现按章节付费功能
- 开发会员订阅模式
- 添加阅读进度同步
- 实现跨设备访问控制
以上实现需要根据具体业务需求调整,支付接口需参考官方最新文档实现。测试阶段建议使用沙箱环境,上线前完成全面的支付流程测试。







