php充值功能实现
数据库设计
创建用户账户表和交易记录表,存储用户余额和充值记录。
CREATE TABLE `user_account` (
`user_id` int(11) NOT NULL,
`balance` decimal(10,2) DEFAULT 0.00,
PRIMARY KEY (`user_id`)
);
CREATE TABLE `transaction` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`amount` decimal(10,2) NOT NULL,
`payment_method` varchar(50) NOT NULL,
`transaction_time` datetime DEFAULT CURRENT_TIMESTAMP,
`status` enum('pending','completed','failed') DEFAULT 'pending',
PRIMARY KEY (`id`)
);
充值页面表单
设计前端表单,提交充值金额和支付方式。

<form action="recharge_process.php" method="post">
<label>充值金额:</label>
<input type="number" name="amount" min="1" step="0.01" required>
<label>支付方式:</label>
<select name="payment_method" required>
<option value="alipay">支付宝</option>
<option value="wechat">微信支付</option>
<option value="bank">银行卡</option>
</select>
<button type="submit">确认充值</button>
</form>
处理充值请求
后端验证金额并调用支付接口,记录交易状态。
// recharge_process.php
$amount = $_POST['amount'];
$paymentMethod = $_POST['payment_method'];
$userId = $_SESSION['user_id'];
// 验证金额有效性
if ($amount <= 0) {
die("充值金额必须大于零");
}
// 记录交易
$stmt = $pdo->prepare("INSERT INTO transaction (user_id, amount, payment_method) VALUES (?, ?, ?)");
$stmt->execute([$userId, $amount, $paymentMethod]);
$transactionId = $pdo->lastInsertId();
// 调用支付接口(示例为伪代码)
$paymentResult = callPaymentAPI($paymentMethod, $amount, $transactionId);
if ($paymentResult['success']) {
// 更新交易状态
$pdo->prepare("UPDATE transaction SET status='completed' WHERE id=?")->execute([$transactionId]);
// 更新用户余额
$pdo->prepare("UPDATE user_account SET balance=balance+? WHERE user_id=?")->execute([$amount, $userId]);
header("Location: recharge_success.php");
} else {
$pdo->prepare("UPDATE transaction SET status='failed' WHERE id=?")->execute([$transactionId]);
die("支付失败:" . $paymentResult['error']);
}
支付接口集成
根据实际需求集成支付宝、微信等官方SDK。

支付宝示例(需配置公钥和私钥):
require_once('alipay-sdk/AopSdk.php');
$alipay = new AopClient();
$alipay->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$alipay->appId = 'your_app_id';
$alipay->rsaPrivateKey = 'your_private_key';
$alipay->alipayrsaPublicKey = 'alipay_public_key';
异步通知处理
配置支付平台的异步回调URL,验证通知并更新订单状态。
// notify.php
$alipayNotify = new AlipayNotify($alipayConfig);
$verifyResult = $alipayNotify->verifyNotify();
if ($verifyResult && $_POST['trade_status'] == 'TRADE_SUCCESS') {
$transactionId = $_POST['out_trade_no'];
$pdo->prepare("UPDATE transaction SET status='completed' WHERE id=?")->execute([$transactionId]);
echo "success";
} else {
echo "fail";
}
安全注意事项
- 使用HTTPS确保数据传输安全
- 验证支付回调的签名防止伪造请求
- 对金额参数进行严格类型检查
- 记录完整日志便于排查问题






