【问题标题】:Handle PayPal Smart Checkout Buttons with Laravel & ReactJS Frontend使用 Laravel 和 ReactJS 前端处理 PayPal 智能结帐按钮
【发布时间】:2020-07-01 20:39:41
【问题描述】:

我在以正确的方式思考这一点时遇到了一些麻烦。 我将 Laravel 作为 ReactJS 前端的后端运行 - 单独运行。

这将是一个小型在线商店,只有 PayPal 作为支付网关(使用 PayPal 智能结账按钮),无需用户注册。

React 将在支付启动时调用 Laravel API,这将准备在服务器端对 PayPal 的实际调用 (从数据库中获取价格,以防用户篡改它,我只获取产品 ID 并获取来自数据库的真实产品数据)。响应将返回给 React。 您可能知道 PayPal 是这样工作的:在第一个 API 调用中创建订单,然后在第二个 API 调用中捕获订单(“创建订单”和“捕获订单”调用)

调用的 Laravel 端点:“/create-paypal-transaction”和“/capture-paypal-transaction”。

目前(这个项目的旧版本是一个单体的 laravel 解决方案,没有单独的前端)我存储了 “捕获顺序”的响应 我的数据库中的 API 调用作为最终订单/作为已完成的交易。 “创建订单” 调用的结果不存储在数据库中。我确实将 “create order” 调用的结果及其所有信息(产品、价格、id、paypal_id 等)存储在会话中。然后,在捕获后,我从会话中加载以将最终订单创建为数据库条目。

我的问题是:如何使用单独的前端安全地实现这一点,并将数据从我的第一个 API 调用传递到我的第二个 API 调用?

我现在只看到两个选项,也许你们能启发我:

  1. 将来自 PayPal 的 “创建订单”-调用 的响应保存到我的数据库 通过 laravel,然后,在 "capture 的批准和响应之后 订单”-调用,只需从某事更新存储的订单状态 比如“创建”到“捕获”。
  2. 使用来自 React 中第一个 API 调用的响应数据,并将其传递给第二个 API 调用以点击 Laravel 并在 PayPal 返回成功时存储订单。

我不喜欢这两种方法的问题: 目前没有实现身份验证方法(没有 JWT 或 Passport 或任何)。我打算使用 Laravel 默认 API 身份验证,因为我没有用户 - 因此 Passport 和 JWT 似乎并不完美。人们结帐无需任何注册。所以: 如果我选择 1. 解决方案,人们很容易弄乱数据库并创建大量订单(“创建订单”调用)

而 2. 解决方案并不是真正的解决方案。我不会信任客户端数据。

所以,如果您知道如何以聪明的方式做到这一点,请告诉我。也许我现在只是看不到明显的东西,但这是漫长的一天,所有关于安全沟通的正确方式的想法都让我感到疲倦......

提前致谢!

【问题讨论】:

    标签: php reactjs laravel paypal


    【解决方案1】:

    (1) 和 (2) 都过于复杂。当客户调用create-paypal-transaction 时,它所需要的所有响应(除了您想为自己的目的提供的任何东西)就是命令id。就是这样,这就是客户想要和需要跟踪的所有内容。

    它会在调用capture-paypal-transaction 时使用id,并且您的网络服务器可以在尝试捕获之前检查它是否合适且有效(在会话中)。在成功捕获之前,不需要数据库存储,尽管欢迎您存储进行中的 orderID 以用于调试目的。它们没有记账价值,也没有会话之外的安全价值。

    【讨论】:

    • 我得到了一些信息(选择的产品、用户输入),可以从前端访问我的数据库。否则你会怎么做?
    • 会话,以及订单id。在付款之前,数据库中不需要任何东西。
    • 你怎么知道它真的是同一个“用户”,而不是其他人?会议。
    猜你喜欢
    • 2020-10-06
    • 2015-01-06
    • 2021-04-06
    • 2020-10-04
    • 2020-03-19
    • 2020-10-06
    • 2020-10-19
    • 2020-06-28
    • 2020-10-21
    相关资源
    最近更新 更多