PayPal Checkout 客户端:用户可以在 JavaScript 中更改订单金额吗?

PayPal Checkout client-side: Can users change the order amount in JavaScript?

我正在使用 PayPal Checkout 在客户端进行基本付款,我想问一下它是否安全,因为我不希望用户更改金额。

此代码与文档中给出的代码相同。

<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: '100'
          }
        }]
      });
    }
  }).render('#paypal-button-container');
</script>

是的,简单的仅客户端解决方案可以更改订单金额。要控制数量并验证成功捕获,您应该使用服务器端集成。

遵循 PayPal Checkout integration 指南并在您的服务器上创建 2 条路线(URL 路径),一条用于 'Create Order',一条用于 'Capture Order'。您可以使用 Checkout-lanuagename-SDK 中的一个用于路由对 PayPal 的 API 调用,或者您自己的 HTTPS 实现,首先获取访问令牌然后进行调用。这两条路线都应该 return 只有 JSON 数据(没有 HTML 或文本)。在第 2 条路线中,当捕获 API 成功时,您应该

  • 验证金额是否正确
  • 将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id,也就是支付宝 交易 ID)
  • 执行任何必要的业务逻辑(例如 发送确认电子邮件或预订产品)

.. 好吧,然后再将您的 return JSON 转发给前端调用者。如果出现错误,也会转发 JSON 详细信息,因为前端必须处理此类情况(如果错误可恢复,则重新开始检查,否则显示失败消息)

一旦您的 2 个服务器路由可用,请将它们与此前端批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server。 (如果您需要从客户端向服务器发送任何其他数据,例如项目数组或选定的选项,请将 body 参数添加到提取中,其值为 JSON 字符串或对象)