PayPal - 用户可以在结账前更改价格

时间:2015-03-22 16:26:48

标签: javascript php paypal

我的网站上遇到了一个小问题。我想在用户检查之前做到这一点,他们可以根据自己的喜好改变一些选项,从而编辑最终价格。我有这个工作,但用户可以轻松检查元素并更改PayPal按钮支付的金额。这是我现在的HTML按钮:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
  <input type="hidden" name="cmd" value="_xclick">
  <input type="hidden" name="business" value="agservers7@gmail.com">
  <input type="hidden" name="lc" value="US">
  <input type="hidden" name="item_name" value="VPS">
  <input type="hidden" id='priceValue' name="amount" value="0.99">
  <input type="hidden" name="currency_code" value="USD">
  <input type="hidden" name="button_subtype" value="services">
  <input type="hidden" name="no_note" value="0">
  <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
  <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
  <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

因此,对于价格更新,我在JavaScript中执行此操作。当用户更改他们拥有的选项时,将调用updateFinalPrice()函数:

  function updateFinalPrice(){
    var mainPrice = 24.99
    var finalPriceElement = $("#finalPrice")
    var finalPrice = addedRAM + mainPrice
    finalPrice = (finalPrice).toFixed(2)
    finalPriceElement.text("$" + finalPrice)

    $('#priceValue').attr("value", finalPrice) // Changes amount value of paypal button
}

所以这总体上有效,但是一旦用户设置了所有选项,他们就可以将输入金额的值更改为他们想要支付的金额,这显然是一个问题。

我知道我可以在服务器上执行此操作,但是当项目的价格根据用户设置选项的内容而改变时,我不明白该怎么做。

可以找到我正在寻找的一个很好的例子here。但是我想在用户根据自己的喜好设置选项后立即点击Paypal按钮,而无法更改价格。任何帮助都是值得赞赏的。

5 个答案:

答案 0 :(得分:1)

这是您在提交订单后使用IPN API验证订单的地方。基本上,IPN API允许您拦截订单并对其进行验证,以及处理任何其他与订单相关的任务,如库存管理或发送通知。

当客户在您的网站上下订单时,他们会被重定向到PayPal以完成付款。该订单首先发送到PayPal服务器,该服务器将消息发送到您配置的IPN侦听器脚本。

IPN侦听器脚本应在允许其继续之前验证订单,包括所有定价。监听器脚本将发回一条回复消息,说明订单是否应该继续。

所有这些都超出了stackoverflow答案的范围,你真的需要从PayPal读取IPN文档并正确实现你的监听器。

好的开始:

答案 1 :(得分:1)

让您的结帐表单自行提交,然后通过重定向将数据发送到PayPal:

if (isset($_POST['submit'])) {
    $params = array(
        'amount' => '0.99',
        'business' => 'agservers7@gmail.com',
        'cmd' => '_xclick',
        'currency_code' => 'USD',
        'item_name' => 'VPS',
    );
    header('Location: https://www.paypal.com/cgi-bin/webscr?'.http_build_query($params));
}

如前所述,您还应该有一个验证IPN请求的回调。

答案 2 :(得分:1)

我认为您实际上可以使用产品表中的ID来检查哪个产品请求进入服务器,并为表中的每个产品创建一些预定义的价格值,然后从数据库中将金额值设置为该价格,而不是从克林特的侧面形式取材

答案 3 :(得分:0)

使用最终价格执行结帐的最佳和最佳方式是,您将所有商品ID传递到服务器端脚本,并在将用户发送到Paypal之前计算最终价格。

注意:必须有服务器端脚本,它应该计算并向任何付款流程发送价格。

答案 4 :(得分:0)

一种阻止它的方法是制作一个单独的页面(称为paynow.php之类),然后将您的按钮链接到该页面(当然还有一些发布数据)。

所以,paynow.php应该看起来像

<form method="POST" action="http://paypal url here.com" id="paynow">
    <input name="your paypal inputs here"/>
</form>
<script id="payscript">
    document.getElementById('paynow').submit();
    document.getElementById('paynow').remove();
    document.getElementById('payscript').remove();
</script>

上面的代码应该做到这一点,以便在用户检查和更改元素时,表单已经提交并自毁了自己的代码。但是,您不能依靠它,人们可以轻松禁用javascript,并且一定要在付款后进行服务器端价格检查。这是一个简单的PHP IF语句,您可以在IPN页面中使用它来证明这一点。

if($_POST['mc_gross'] === "3.99") {
    // payment success! your processes here.
    // (NOTE: this code is not the complete IPN script!)
    // Use this code when paypal returns VERIFIED from IPNPB
}