php充值功能实现
实现PHP充值功能
数据库设计
创建一个数据库表存储充值记录,包含字段如id、user_id、amount、status、create_time等。示例SQL:

CREATE TABLE `recharge_records` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`amount` decimal(10,2) NOT NULL,
`status` tinyint(1) DEFAULT 0 COMMENT '0-未完成 1-已完成',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
前端页面
设计一个充值表单,包含金额输入框和支付方式选择。示例HTML:

<form action="recharge.php" method="post">
<input type="number" name="amount" min="1" step="0.01" required>
<select name="payment_method">
<option value="alipay">支付宝</option>
<option value="wechat">微信支付</option>
</select>
<button type="submit">充值</button>
</form>
后端处理
创建recharge.php处理充值请求,验证数据并调用支付接口:
<?php
// 验证用户登录
session_start();
if (!isset($_SESSION['user_id'])) {
die('请先登录');
}
// 获取参数
$amount = floatval($_POST['amount']);
$paymentMethod = $_POST['payment_method'];
$userId = $_SESSION['user_id'];
// 验证金额
if ($amount <= 0) {
die('充值金额必须大于0');
}
// 插入充值记录
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $db->prepare("INSERT INTO recharge_records (user_id, amount) VALUES (?, ?)");
$stmt->execute([$userId, $amount]);
$recordId = $db->lastInsertId();
// 调用支付接口
if ($paymentMethod == 'alipay') {
// 支付宝支付逻辑
header("Location: alipay_payment.php?amount=$amount&order_id=$recordId");
} else {
// 微信支付逻辑
header("Location: wechat_payment.php?amount=$amount&order_id=$recordId");
}
?>
支付回调处理
创建回调接口处理支付结果通知,示例支付宝回调处理:
<?php
// 验证回调数据
$orderId = $_POST['out_trade_no'];
$tradeStatus = $_POST['trade_status'];
if ($tradeStatus == 'TRADE_SUCCESS') {
// 更新订单状态
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $db->prepare("UPDATE recharge_records SET status = 1 WHERE id = ?");
$stmt->execute([$orderId]);
// 更新用户余额
$stmt = $db->prepare("UPDATE users SET balance = balance + (SELECT amount FROM recharge_records WHERE id = ?) WHERE id = (SELECT user_id FROM recharge_records WHERE id = ?)");
$stmt->execute([$orderId, $orderId]);
echo 'success';
} else {
echo 'fail';
}
?>
安全注意事项
- 对用户输入进行严格验证和过滤
- 使用HTTPS协议传输敏感数据
- 支付接口使用官方SDK
- 记录完整的操作日志
- 实现防重复提交机制






