PHP和Paypal。单击提交后,将数据保存到数据库并重定向到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

我有下面的表单,我想知道是否有一种方法,当用户单击提交按钮时,将数据保存到数据库中,比如$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 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>