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

<?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来伪造回调请求并盗取游戏金币。

声明
1:本站内容如若侵犯到您的权益,请联系我们,我们会第一时间删除!联系QQ:502428990。
2:使用本站资源需要您有一定的技术基础,否则将无法使用,如果你没有相关技术知识,请勿下载,虚拟物品,概不退换。
3:本站游戏资源不保证代码的完整性,不保证游戏无BUG,要求完美者请勿下载。
4:本站所有资源标价皆是资源本身的价格,不包含任何技术服务!要包技术服务的价格肯定是不一样的。
5:本站资源旨在为全网技术爱好者或游戏开发人员提供游戏素材,方便您作为技术研究或开发学习等用途,请勿商用。
6:本站资源非您个人定制,所以里面的游戏玩法,游戏画面以及游戏设定,装备掉落,金币等游戏初始值可能都不是您预期的效果,您需要自行研究修改完善,或找专业人员按您的想法定制。