这是我的代码:
<form action="" method="post">
<input class="payment_input" type="text" name="name" placeholder="Name">
<input class="payment_input" type="text" name="address" placeholder="Address">
<input class="payment_input" type="text" name="email" placeholder="E-mail"><br>
<input class="payment_input" type="submit" name="submit_paypal" value="Go to PayPal">
</form>
<?php
$order_token = md5(uniqid($_POST['name'], true));
if (isset($_POST["submit_paypal"])) {
$statement = $pdo->prepare("INSERT INTO customers (name, address, email, order_token) VALUES (:name, :address, :email, :order_token)");
$statement->execute(array(':name' => $_POST['name'], ':address' => $_POST['address'], ':email' => $_POST['email'], ':order_token' => $order_token));
echo "
<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">
<input type=\"hidden\" name=\"cmd\" value=\"_xclick\">
<input type=\"hidden\" name=\"business\" value=\"test@icloud.com\">
<input type=\"hidden\" name=\"item_name\" value=\"eBook\">
<input type=\"hidden\" name=\"amount\" value=\"10\">
<input type=\"hidden\" name=\"return\" value=\"http://www.example.com/book.php?payment=success&orderToken=".$order_token."\">
<input type=\"hidden\" name=\"cancel_return\" value=\"http://example.com/book.php?payment=canceled\">
<input type=\"submit\">
</form>
";
}
?>
如下所示:用户获取表格以插入其数据(姓名,地址,电子邮件)。当用户提交表单时,应该发生两件事:用户数据以随机order_token存储在我的数据库中。付款完成后,需要此order_token来识别用户数据。 (当order_token例如是“5dcb567fb34805d45d55218995df12f5”时,PayPal返回链接(如果付款成功)是“http://www.example.com/book.php?payment=success&orderToken=5dcb567fb34805d45d55218995df12f5”。
但我有两个问题:
如果用户在我的网站上提交订单表格时如何提交PayPal表格而无需另外提交用户必须点击的提交按钮?
如何防止用户操作PayPal表单?目前,用户可以简单地从例如10比1。
我希望有人有能力帮助我,因为我已经开始研究它了。
答案 0 :(得分:0)
借助一些JavaScript,PayPal表格可以自动提交。
代码:
<script type="text/javascript">
document.myform.submit();
</script>
要使用它,您需要将name="myform"
添加到您的PayPal表单。
此外,您没有显示任何PayPal IPN系统,我建议您调查以确保正确设置支付网关。
除了阻止用户更改PayPal表单代码之外,使用IPN还会阻止此操作。收到付款后,PayPal将联系您的PHP脚本(IPN),您将能够验证该项目的名称,已支付的金额等。
答案 1 :(得分:0)
最好反转您的PHP和HTML代码 - 因为您不想在提交时再次显示该表单。
(1)一种方法是使用查询字符串将数据发送到Paypal。
<?php
$order_token = md5(uniqid($_POST['name'], true));
if (isset($_POST["submit_paypal"])) {
$statement = $pdo->prepare("INSERT INTO customers (name, address, email, order_token) VALUES (?, ?, ?, ?)");
$statement->execute(array($_POST['name'], $_POST['address'], $_POST['email'], $order_token));
if ($statement->rowCount()) {
$query = array();
$query['cmd'] = '_xclick';
$query['business'] = 'test@icloud.com';
$query['item_name'] = 'eBook';
$query['amount'] = 10;
$query['return'] = 'http://www.example.com/book.php?payment=success&orderToken=' . $order_token;
$query['cancel_return'] = 'http://example.com/book.php?payment=canceled';
header('Location: https://www.paypal.com/cgi-bin/webscr?' . http_build_query($query));
exit(0);
}
}
?>
<form action="" method="post">
<input class="payment_input" type="text" name="name" placeholder="Name">
<input class="payment_input" type="text" name="address" placeholder="Address">
<input class="payment_input" type="text" name="email" placeholder="E-mail"><br>
<input class="payment_input" type="submit" name="submit_paypal" value="Go to PayPal">
</form>
(2)使用这种方法,我认为没有办法阻止某人更改信息。您可以做的最好的事情是在提交之前添加验证。您还可以使用Paypal IPN在付款时通知您。您将创建一个脚本,该脚本将在完成购买时接收有关购买的信息。在那里你可以添加进一步的验证。