当前位置:首页 > PHP

php充值功能实现

2026-02-13 23:41:12PHP

数据库设计

创建用户账户表和交易记录表,存储用户余额和充值记录。

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,验证通知并更新订单状态。

php充值功能实现

// 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确保数据传输安全
  • 验证支付回调的签名防止伪造请求
  • 对金额参数进行严格类型检查
  • 记录完整日志便于排查问题

标签: 充值功能
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isset…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

vue实现注册功能

vue实现注册功能

前端实现注册功能 在Vue中实现注册功能通常需要结合表单验证、HTTP请求和状态管理。以下是一个基于Vue 3和Element Plus的完整实现方案: 模板部分 <template>…

vue实现app功能

vue实现app功能

Vue 实现 App 功能的常见方法 使用 Capacitor 或 Cordova 进行混合开发 Vue 结合 Capacitor 或 Cordova 可以将 Web 应用打包成原生 App。Capa…

h5实现手机摇一摇功能

h5实现手机摇一摇功能

实现原理 手机摇一摇功能基于设备加速度传感器(DeviceMotionEvent),通过监听设备的加速度变化来判断用户是否进行了摇晃动作。HTML5提供了相关API获取设备传感器数据。 基本…