PHP和Paypal。单击提交后,将数据保存到数据库并重定向到paypal
我有下面的表单,我想知道是否有一种方法,当用户单击提交按钮时,将数据保存到数据库中,比如$shipping\u price、$invoice\u id,然后将用户重定向到paypal进行支付PHP和Paypal。单击提交后,将数据保存到数据库并重定向到paypal,php,paypal,Php,Paypal,我有下面的表单,我想知道是否有一种方法,当用户单击提交按钮时,将数据保存到数据库中,比如$shipping\u price、$invoice\u id,然后将用户重定向到paypal进行支付 <form action="https://secure.paypal.com/uk/cgi-bin/webscr" method="post" name="paypal" id="paypal"> <!-- Prepopulate the PayPal checkout
<form action="https://secure.paypal.com/uk/cgi-bin/webscr" method="post" name="paypal" id="paypal">
<!-- Prepopulate the PayPal checkout page with customer details, -->
<input type="hidden" name="first_name" value="<?php echo Firstname?>">
<input type="hidden" name="last_name" value="<?php echo Lastname?>">
<input type="hidden" name="email" value="<?php echo Email?>">
<input type="hidden" name="address1" value="<?php echo Address?>">
<input type="hidden" name="address2" value="<?php echo Address2?>">
<input type="hidden" name="city" value="<?php echo City?>">
<input type="hidden" name="zip" value="<?php echo Postcode?>">
<input type="hidden" name="day_phone_a" value="">
<input type="hidden" name="day_phone_b" value="<?php echo Mobile?>">
<!-- We don't need to use _ext-enter anymore to prepopulate pages -->
<!-- cmd = _xclick will automatically pre populate pages -->
<!-- More information: https://www.x.com/docs/DOC-1332 -->
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="business" value="paypal@email.com" />
<input type="hidden" name="cbt" value="Return to Your Business Name" />
<input type="hidden" name="currency_code" value="GBP" />
<!-- Allow the customer to enter the desired quantity -->
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="item_name" value="Name of Item" />
<!-- Custom value you want to send and process back in the IPN -->
<input type="hidden" name="custom" value="<?php echo session_id().?>" />
<input type="hidden" name="shipping" value="<?php echo $shipping_price; ?>" />
<input type="hidden" name="invoice" value="<?php echo $invoice_id ?>" />
<input type="hidden" name="amount" value="<?php echo $total_order_price; ?>" />
<input type="hidden" name="return" value="http://<?php echo $_SERVER['SERVER_NAME']?>/shop/paypal/thankyou"/>
<input type="hidden" name="cancel_return" value="http://<?php echo $_SERVER['SERVER_NAME']?>/shop/paypal/cancelled" />
<!-- Where to send the PayPal IPN to. -->
<input type="hidden" name="notify_url" value="http://<?php echo $_SERVER['SERVER_NAME']?>/shop/paypal/process" />
</form>
实现这一点有两种方法。第一个(更简单的)版本是在将用户重定向到PayPal之前,通过AJAX将表单提交到服务器。这个解决方案的问题是,如果客户由于某种原因没有完成购买,您的数据库中就会有错误的数据,您需要找到一种回滚的方法
为了实现这一点,您可以执行以下操作:
$(document).ready(function() {
$('#submit').click(function(e) {
if ($(this).hasClass('sent')) {
e.preventDefault();
$(this).removeClass('sent');
$.post("saveToDB.php", {
data: $("#paypal").serialize()
}, function(success) {
if (success) {
$('#submit').click();
return true;
}
});
} else {
$('#paypal').submit();
$(this).addClass('sent');
}
});
})
然后将类“sent”添加到提交按钮
第二种方法是异步处理整个流程,然后仅在流程成功时记录结果。请参阅以下摘自的示例:
HTML:
事务完成后,用户将返回return.htm,这是将事务记录到数据库的地方。无论是通过AJAX还是仅仅使用PHP(并将return.htm重命名为return.PHP)您都可以这样做,它只是以编程方式提交表单
<script>
function sendtopapal()
{
document.getElementById("paypal").submit();
}
sendtopapal();
</script>
函数sendtopapal()
{
document.getElementById(“paypal”).submit();
}
sendtopapal();
根据建议,您可以先通过AJAX将数据发布到自己的脚本中,然后让表单按预期完成
<script>
$("#submit").click(function() {
$.ajax({
type: "POST",
url: "savedata.php",
data: $("paypal").serialize()
});
return true;
});
</script>
$(“#提交”)。单击(函数(){
$.ajax({
类型:“POST”,
url:“savedata.php”,
数据:$(“贝宝”).serialize()
});
返回true;
});
这应该允许您捕获正在提交的数据,并将数据一次性发布到PayPal(以及指导用户)。签出cURL
。这是可以做到的。基本上,将数据发布到您自己的页面,在数据库中输入详细信息,然后使用curl将数据发布到PayPal。到目前为止,您的问题太模糊,无法提供完整答案。为什么所有输入字段都隐藏?@gidim,因为我只想向付款人显示按钮,而不是整个表单。@Twisty我将检查Curl out谢谢您也可以在客户端处理此问题。使用AJAX将表单提交到paypal,然后再次提交到您的服务器。我是否可以使用该表单将我的客户转移到paypal站点,然后使用AJAX将数据保存到savedata.php上的数据库?提交表单时,我认为您应该首先通过AJAX将数据提交到savedata.php,然后按照预期完成表单提交。@Twisty-如果由于某种原因调用失败,数据仍将记录到DB@gidim我不知道那会发生什么。AJAX出现故障时,done()
将不会执行。@Twisty-yes。我已经添加了另一种解决这两个问题的方法。有没有解释为什么以及你的答案如何适用于OP?
<script>
function sendtopapal()
{
document.getElementById("paypal").submit();
}
sendtopapal();
</script>
<script>
$("#submit").click(function() {
$.ajax({
type: "POST",
url: "savedata.php",
data: $("paypal").serialize()
});
return true;
});
</script>