使用payPal按钮 - 用户可以在付款前更改价格

问题描述 投票:5回答:2

我在我的网站上有3件商品,我不需要购物车或类似的东西。在用户用数据填写表单后,我将他导航到一个新页面,在那里我显示他输入的所有数据和价格。现在这个PayPal按钮由hidden input field:构建

<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="[email protected]">
<input type="hidden" name="lc" value="EN">
<input type="hidden" name="item_name" value="aaa">
<input type="hidden" name="item_number" value="12345">
<input type="hidden" name="button_subtype" value="services">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="amount" value="">
<input type="hidden" name="bn" value="">
<input type="image" src="https://www.paypalobjects.com/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

使用JavaScript我将参数输入到新页面,并在PayPal按钮的金额输入(价格)中设置价格。

当您单击按钮时,您导航到payPal页面,其金额来自:

<input type="hidden" name="amount" value="199.50">

我的问题:这是正确的做法吗?任何用户,甚至黑客都可以在按下按钮之前更改金额并按下按钮...因此他将支付(可能更少)不同的价格!

我想使用直接API,但它仅适用于美国,加拿大的企业。

什么是最好的事情?

javascript html paypal
2个回答
1
投票

您应该使用加密的网站付款 - https://www.paypal.com/cgi-bin/webscr?cmd=p/xcl/rec/ewp-intro-outside。这将确保无法更改付款金额。您还可以将设置更新为仅允许通过加密按钮进行付款,以进一步保护您的帐户/付款不会被黑客攻击降低价格。


1
投票

首先 - 我强烈建议您停止使用Javascript进行任何与支付相关的工具。这是一种客户端技术,任何人都可以轻松编辑传递的值。在处理付款时,我做服务器端的每一件事......

第二 -

如果您只销售一些商品,为什么要将价格保持在隐藏价值?使用数组(简单但不总是好)或数据库(使其更容易更新)以保持所有项目信息和值不是更容易。然后简单地将其传递给贝宝?

    $orderParams    = array(
    // Sets event to sale
    'PAYMENTREQUEST_0_PAYMENTACTION'        => 'Sale',
    // Forces Shipping To Accept My Values
    'REQCONFIRMSHIPPING'                    => '0',
    'ADDROVERRIDE'                          => '1',
    // Final Cost Totals - Must match with Controller
    // Hardcoded - Only accept US Scratch
    'PAYMENTREQUEST_0_CURRENCYCODE'         => 'USD',
    // Payment Costs
    'PAYMENTREQUEST_0_AMT'                  => $total,
    'PAYMENTREQUEST_0_SHIPPINGAMT'          => $buyer['shippingTotal'],
    'PAYMENTREQUEST_0_ITEMAMT'              => $subTotal,
    // Custom Shipping Information
    'PAYMENTREQUEST_0_SHIPTONAME'           => $buyer['payName'],
    'PAYMENTREQUEST_0_SHIPTOSTREET'         => $buyer['payStreet'],
    'PAYMENTREQUEST_0_SHIPTOCITY'           => $buyer['payCity'],
    'PAYMENTREQUEST_0_SHIPTOSTATE'          => $state,
    'PAYMENTREQUEST_0_SHIPTOZIP'            => $buyer['payZip'],
    'PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'    => $country,
    'PAYMENTREQUEST_0_INVNUM'               => $buyer['quoteNumber']
    );
    /*'PAYMENTREQUEST_0_SHIPTONAME'         => $buyer['payName'],
    'PAYMENTREQUEST_0_SHIPTOSTREET'         => $buyer['payStreet'],
    'PAYMENTREQUEST_0_SHIPTOCITY'           => $buyer['payCity'],
    'PAYMENTREQUEST_0_SHIPTOSTATE'          => $buyer['payState'],
    'PAYMENTREQUEST_0_SHIPTOZIP'            => $buyer['payZip'],
    'PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'    => 'US',
    'PAYMENTREQUEST_0_INVNUM'               => $buyer['quoteNumber']
    );*/

    // Item Array for wheel
    $yoke = array(
    'L_PAYMENTREQUEST_0_NAME0'  => 'Custom Control Wheel Set',
    'L_PAYMENTREQUEST_0_DESC0'  => 'Custom Leather Choices',
    'L_PAYMENTREQUEST_0_AMT0'   => $buyer['payItem'],
    'L_PAYMENTREQUEST_0_QTY0'   => '1'
    );

这是我使用的PayPal相关代码的一小部分。使用我自己的数组填充每个项目,然后将其传递给paypal。我强烈建议不要通过Javascript传递任何信息。

为什么要将价格数据添加到视图中呢?有原因吗?

© www.soinside.com 2019 - 2024. All rights reserved.