我有一个PHP脚本,处理条带付款,并在成功的交易后增加捐赠者数量。但是,脚本递增的是两个,有时是三个而不是一个。条带化事务工作。我最好的理解是页面不知何故运行了两次。
施主号码保存在.txt文件中。页面上没有html。
灯堆。
<?php
ini_set('session.gc_maxlifetime',5);
session_set_cookie_params(5);
session_start();
$unsuccessful = false;
$paid = isset($_SESSION['number']);
//composer requirement for stripe sdk
require_once('vendor/autoload.php');
\Stripe\Stripe::setApiKey("XXXXX");
// Get the payment token ID submitted by the form:
$amount = $_POST['amountInCents'];
$token = $_POST['stripeToken'];
try {
$charge = \Stripe\Charge::create([
"amount" => $amount,
"currency" => "usd",
"card" => $token,
"description" => "Business Name"
]);
} catch(Stripe_CardError $e) {
$unsuccessful = true;
// The card has been declined
}
if($unsuccessful == false){
#store current donor number in sessioncount.txt
$file = 'sessioncount.txt';
$current = (int)file_get_contents($file);
$new = $current;
if($paid === false){
$new = $current + 1;
}
$_SESSION['number'] = $new;
file_put_contents($file, $new);
header("Location:https://example.com/nextpage.php");
}
发布于 2018-09-18 06:58:39
在不了解更多有关问题的情况下,不可能知道可能导致双重执行的原因。这个脚本是如何调用的?有人在按提交按钮吗?如果是这样,您是否会在用户第一次单击提交按钮时禁用该按钮,以便在用户“双击”的情况下只提交一次请求?对于这样的脚本,这可能是导致双重处理的最常见原因。让我了解更多关于用例的信息,我可以提供更多的帮助。
编辑:由于您现在已经尝试禁用双重提交,因此可以尝试此方法来帮助您进行调试。它可能不能完全解决问题,但如果有多个请求并行命中脚本,它将帮助您缩小范围:
<?php
ini_set('session.gc_maxlifetime',5);
session_set_cookie_params(5);
session_start();
$unsuccessful = false;
$paid = isset($_SESSION['number']);
//composer requirement for stripe sdk
require_once('vendor/autoload.php');
\Stripe\Stripe::setApiKey("XXXXX");
// Get the payment token ID submitted by the form:
$amount = $_POST['amountInCents'];
$token = $_POST['stripeToken'];
if(!isset($_SESSION['processed'])) {
try {
$charge = \Stripe\Charge::create([
"amount" => $amount,
"currency" => "usd",
"card" => $token,
"description" => "Business Name"
]);
} catch(Stripe_CardError $e) {
$unsuccessful = true;
// The card has been declined
}
if($unsuccessful == false){
#store current donor number in sessioncount.txt
$file = 'sessioncount.txt';
$current = (int)file_get_contents($file);
$new = $current;
if($paid === false){
$new = $current + 1;
}
$_SESSION['number'] = $new;
file_put_contents($file, $new);
header("Location:https://example.com/nextpage.php");
$_SESSION['processed'] = true;
}
} else {
//Put some code here to help you troubleshoot, such as echoing an alert. If this code is executed, it means that something has externally triggered the execution of this script more than once.
}
如果这不起作用,这意味着对该文件的请求是并行进行的,并且脚本外部的某些东西导致该文件被多次执行。
https://stackoverflow.com/questions/52376652
复制相似问题