我有一个网站(内置Laravel),允许拥有PayPal帐户的商家出售他们的商品,这类似于没有购物车功能的eBay . 但是,我在将PayPal集成到我的网站时遇到了问题,因为我不知道确保数据正确的最佳方法是什么 . 我已经想到了实现的跟随方法,但似乎没有一个对我有好处 .

  • Using JavaScript button
<script src="/js/paypal-button.min.js?merchant=MERCHANT_EMAIL"
        data-button="buynow"
        data-name="My product"
        data-amount="1.00"
        async
></script>

这是不安全的,因为任何用户都可以篡改订单的详细信息,例如价格,并且无法阻止这种情况 .

  • Using HTML form
<form method="post" action="https://www.paypal.com/cgi-bin/webscr" class="paypal-button" target="_top">
    <div class="hide" id="errorBox"></div>
    <input type="hidden" name="button" value="buynow">
    <input type="hidden" name="item_name" value="My product">
    <input type="hidden" name="amount" value="1.00">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="MERCHANT_EMAIL">               
    <input type="hidden" name="env" value="www">
    <button type="submit" class="paypal-button large">Buy Now</button>            
</form>

此方法也与方法1具有相同的问题,因为用户可以在提交订单之前更改表单中的值 .

  • Using PayPal Hosted Button

到目前为止,我认为这是将PayPal Pay按钮集成到我的网站的安全方式之一 . 但由于按钮托管在PayPal中,我无法动态更改我的网站上的项目详细信息和价格 .

  • Using PayPal IPN

PayPal IPN用于在用户完成付款后验证付款细节 . 由于每个商家都有不同的PayPal帐户,我无法为其每个帐户配置IPN网址 . 因此,在提交付款表单时传递 notify_url 变量是必要的,以确保所有付款细节都已发送并返回到我的专用IPN网址 .

我在网上搜索,发现大多数人都使用这种方法来验证欺诈付款,但我认为这只适用于只支付一个PayPal帐户而不是动态商家的PayPal帐户 . 如果我以HTML格式传递 notify_url 变量,用户仍然可以篡改导致验证付款明细失败的值,因为IPN网址无效或被篡改,最后结果将是 Payment PendingPayment not received 因为我无法验证付款细节 .

我的问题有一个很好的解决方案或建议吗?