javascript - Paypal 结帐 : Is it safe to receive a payment with only client-side code?

标签 javascript paypal payment paypal-rest-sdk

我正在使用 PayPal API 将付款选项放到我的网站上。 In the tutorial they have ,他们正在使用 JavaScript 完全在客户端呈现按钮并设置事务。这是示例代码:

<script>
  paypal.Buttons({
    createOrder: function(data, actions) {
      // This function sets up the details of the transaction, including the amount and line item details.
      return actions.order.create({
        purchase_units: [{
          amount: {
            value: '0.01'
          }
        }]
      });
    },
    onApprove: function(data, actions) {
      // This function captures the funds from the transaction.
      return actions.order.capture().then(function(details) {
        // This function shows a transaction success message to your buyer.
        alert('Transaction completed by ' + details.payer.name.given_name);
      });
    }
  }).render('#paypal-button-container');
  //This function displays Smart Payment Buttons on your web page.
</script>
这安全吗?
用户只需在自己的代码中更改支付金额并减少支付。即使我设置客户端代码以在交易成功后发送交易 ID(即在 onApprove 发出 POST 请求),以便我可以让服务器端代码检查发送的金额是否正确,客户端仍然可以更改他这边的代码以发送虚假的交易ID。
在交付产品之前,我基本上需要一种机制来检查我是否确实收到了正确的金额。我显然需要在服务器端进行此检查,但我无法找到一种安全的方法来做到这一点,因为我需要从客户端获取一些可能是假的信息。如何防止用户通过发送过去的交易 ID 来假装已付款?

最佳答案

您是正确的,用户始终可以更改客户端代码中的金额,并以较低的金额发送付款。这就是客户端支付的工作方式。
跟踪哪些支付是真实的以及正确金额的任何逻辑都必须在您的服务器上。
对于 PayPal Checkout,您应该使用以下前端 UI:https://developer.paypal.com/demo/checkout/#/pattern/server
您的服务器上需要两条对应的路由,一条用于“创建订单”,一条用于“捕获订单”。您可以使用 Checkout-lanuagename-SDK 之一's for the routes' API 调用 PayPal,或您自己的 HTTPS 实现,首先获取访问 token ,然后进行调用。这两个路由都应该只返回 JSON 数据(没有 HTML 或文本)。在第二条 route ,当捕获 API 成功时,您应该验证金额是否正确并将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送在将您的返回 JSON 转发给前端调用者之前立即发送确认电子邮件或预订产品)。如果发生错误,也转发它的 JSON 详细信息,因为前端必须处理这种情况。

关于javascript - Paypal 结帐 : Is it safe to receive a payment with only client-side code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63018822/

相关文章:

javascript - 如何通过了解身份验证状态访问 protected 路由/禁用 Auth Guard

javascript - 无法使用 CSSTransition Group 创建平滑滚动

javascript - 如何通过 PayPal 确保我的支付系统的安全性?

paypal - 如何判断我的账户是否激活了 Paypal Web Payments Pro?

php - Paypal IPN 安全性已验证

PHP Paypal 集成与即时反馈

javascript - 如何从 CSS 文本中解析属性/值对

javascript - 如何限制 Highcharts 中 x 或 y 值的范围?

php - Paypal 订阅按钮

android - magento 网站的 android 应用程序的支付网关集成