2025年2月13日 星期四 甲辰(龙)年 腊月十三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > PHP

支付接口中一次性令牌使用,防止游戏盗刷金币

时间:01-31来源:作者:点击数:43

支付接口中一次性令牌使用,防止游戏盗刷金币

  • <?php
  • session_start();
  • // 用户提交订单后,获取订单相关信息
  • $pid = $_POST['product_id']; // 假设这是用户购买的产品ID
  • $trade_no = date("YmdHis") . mt_rand(10000, 99999); // 生成交易编号
  • $out_trade_no = $trade_no; // 假设外部交易编号与交易编号相同
  • $type = 'wxpay'; // 假设这是微信支付
  • $name = '游戏商品名称'; // 假设这是用户购买的商品名称
  • $money = $_POST['amount']; // 假设这是用户支付的金额
  • // 生成一次性令牌(可以是随机字符串或者哈希值)
  • $one_time_token = bin2hex(random_bytes(16));
  • // 将一次性令牌保存到session中
  • $_SESSION['one_time_token'] = $one_time_token;
  • // 构造支付请求URL,包含一次性令牌参数
  • $payment_url = "https://my-payment-gateway.com/pay?pid={$pid}&trade_no={$trade_no}&out_trade_no={$out_trade_no}&type={$type}&name={$name}&money={$money}&one_time_token={$one_time_token}";
  • ?>

我们首先获取了用户提交的订单信息,然后生成了一次性令牌并将其保存在session中。接着,我们构造了一个支付请求URL,其中包含了所有必要的参数以及一次性令牌。

然后,在你的支付网关回调处理页面(例如notify.php)中,你可以验证接收到的一次性令牌是否有效:

  • <?php
  • session_start();
  • // 获取请求中的一次性令牌
  • $received_one_time_token = isset($_GET['one_time_token']) ? $_GET['one_time_token'] : '';
  • // 检查一次性令牌是否存在于session中且未过期
  • if (isset($_SESSION['one_time_token']) && $_SESSION['one_time_token'] === $received_one_time_token) {
  • // 验证通过,执行正常的回调处理逻辑
  • // 清除session中的一次性令牌,防止重复使用
  • unset($_SESSION['one_time_token']);
  • } else {
  • // 验证失败,可能是恶意请求或令牌已过期
  • die('Invalid one-time token');
  • }
  • ?>

当用户提交订单后,我们会生成一个包含一次性令牌的支付请求URL,并将用户重定向到这个URL进行支付。在支付完成后,支付网关会发送回调请求到你的notify.php,此时你需要验证接收到的一次性令牌是否有效。如果有效,则执行正常的回调处理逻辑;否则,拒绝处理请求。这样可以防止恶意用户通过修改URL来伪造回调请求并盗取游戏金币。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门