使用 payPal 按钮 - 用户可以在付款前更改价格
Posted
技术标签:
【中文标题】使用 payPal 按钮 - 用户可以在付款前更改价格【英文标题】:Using payPal button - user can change the price before paying 【发布时间】:2013-06-14 21:12:27 【问题描述】:我有 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="test12344@gmail.com">
<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" >
<img border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" >
</form>
用javascript
我在新页面输入参数,并在PayPal按钮的金额输入(价格)中设置价格。
当您点击按钮时,您会导航到一个支付宝页面,金额来自:
<input type="hidden" name="amount" value="199.50">
我的问题:这样做是否正确?任何用户,甚至黑客都不能简单地在按下按钮之前更改金额并按下 按钮...因此他将支付(可能更少)不同的价格!
我想使用直接 API,但它仅适用于美国、加拿大的企业。
最好的办法是什么?
【问题讨论】:
为什么要向视图传递任何值?我对您在这里尝试做的事情感到困惑......我试图在下面回答您 - 但如果您详细说明为什么要使用隐藏值,它可能会有所帮助。 【参考方案1】:您应该使用加密的网站付款 - https://www.paypal.com/cgi-bin/webscr?cmd=p/xcl/rec/ewp-intro-outside。这将确保付款金额无法更改。您还可以更新您的设置以仅允许通过加密按钮进行付款,以进一步保护您的帐户/付款不被黑客入侵以降低价格。
【讨论】:
【参考方案2】:首先 - 我强烈建议您停止将 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 相关代码。使用我自己的数组来填充每个项目,然后再将其传递给贝宝。我强烈建议不要通过 Javascript 传递任何信息。
为什么还要向视图添加价格数据?有什么原因吗?
【讨论】:
感谢@Aaron 的回答。我真的很困惑。我使用 PayPal 使用信用卡付款 - 非 PayPal 用户!当您在 PayPal 网站上创建自定义按钮时,您需要设置价格,我使用一个按钮来处理不同的项目,所以我自己设置它,无法理解如何让它变得更好......你写的是使用API,我说的是自定义按钮——你必须像我写的那样设置价格,否则它将不起作用。 @oleg - 那个按钮听起来绝对是个糟糕的主意。如果您收到用户的最终决定,经过审查,然后将其传递给贝宝怎么办?有没有办法寻找主要的踢球?如果 $price 这就是他们提供的......但基本上你可以在 JavaScript 中更改值,你也可以在将它们发送到 php 页面之前更改 JavaScript 中的值?如果用户可以在单击结帐按钮之前一秒钟通过 JavaScript 更改它们,则逻辑在哪里以上是关于使用 payPal 按钮 - 用户可以在付款前更改价格的主要内容,如果未能解决你的问题,请参考以下文章