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

Lot*_*tfi 6 javascript paypal paypal-sandbox

我正在使用 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>
Run Code Online (Sandbox Code Playgroud)

Pre*_*der 7

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

按照PayPal Checkout 集成指南,在您的服务器上创建 2 条路由(URL 路径),一条用于“创建订单”,一条用于“捕获订单”。您可以使用 Checkout-lanuagename-SDK 之一(编辑:这些现已弃用)来进行对 PayPal 的路由 API 调用,或者您自己的 HTTPS 实现,首先获取 access_token,然后进行调用。这两个路由都应仅返回 JSON 数据(无 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该

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

.. 好吧,然后将返回的 JSON 转发给前端调用者。如果发生错误,也会转发其 JSON 详细信息,因为前端必须处理此类情况(如果错误可恢复,则重新启动结账,如果无法恢复,则显示失败消息)

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