如何在使用 IPN 时保护金额字段PayPal


How can I secure the amount field when using paypal IPN?

我创建了一个wordpress插件PayPal它创建了"立即购买"按钮并使用PayPal IPN ...这是我的表单代码

$output =   '<form name="_xclick" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_blank">
                            <input type="hidden" name="cmd" value="_xclick">
                            <input type="hidden" name="business" value="'.$paypalID.'">
                            <input type="hidden" name="return" value="'.$return_url.'">
                            <input type="hidden" name="currency_code" value="'.$currency.'">
                            <input type="hidden" name="item_name" value="'.$product_name.'">
                            <input type="hidden" name="amount" id="p'.$product_id.'" value="'.$product_price.'">
                            <input type="hidden" name="custom" value="'.$responderID.'">
                            <input name="notify_url" value="'.plugin_dir_url( __FILE__ ).'ipn_sandbox.php" type="hidden">
                            <input type="image" src="'.$upload_image.'" border="0" name="submit" alt="Make payments with PayPal - its fast, free and secure!"> 
                        </form>'; 

问题是...当向PayPal提交信息时,用户可以轻松更改产品的价格并将错误的价格发送给PayPal。例如,如果产品价值 10 美元,用户可以使用 inspect 元素并将价格更改为 1 美元或任何用户喜欢的价格并将其发送给PayPal。有没有办法防止这种情况或保护价格字段..谢谢

我找到了一个解决方案...我已经在表单下方添加了这个 javascript 代码,它可以工作......但现在的问题是,如果我在一个页面上放置多个按钮(假设一页上有两个按钮),两个按钮都会停止工作,除非两个按钮的给定相同例如

$output .= "<script>jQuery(document).ready(function(){var a=".$product_price.";jQuery('form[name=_xclick]').submit(function(c){var b=jQuery('input[id=p".$product_id."]').val();if(b==a){return}else{c.preventDefault()}})});</script>";

如果按钮 1 的价格 = $20 和按钮 2 的价格 = $20,则两个按钮都将起作用。

如果按钮 1 的价格 = $20 和按钮 2 的价格 = $21,那么这两个按钮都不起作用。

任何建议/想法??

有几种方法可以做到这一点。如果您对不变的固定产品/服务使用固定价格,您可以在PayPal的网站上创建加密的付款按钮。

或者,在接收 IPN 通知的 PHP 脚本中,您可以检查$_POST['mc_gross']中的金额是否与您预期的数量匹配。