【发布时间】: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 调用?
我现在只看到两个选项,也许你们能启发我:
- 将来自 PayPal 的 “创建订单”-调用 的响应保存到我的数据库 通过 laravel,然后,在 "capture 的批准和响应之后 订单”-调用,只需从某事更新存储的订单状态 比如“创建”到“捕获”。
- 使用来自 React 中第一个 API 调用的响应数据,并将其传递给第二个 API 调用以点击 Laravel 并在 PayPal 返回成功时存储订单。
我不喜欢这两种方法的问题: 目前没有实现身份验证方法(没有 JWT 或 Passport 或任何)。我打算使用 Laravel 默认 API 身份验证,因为我没有用户 - 因此 Passport 和 JWT 似乎并不完美。人们结帐无需任何注册。所以: 如果我选择 1. 解决方案,人们很容易弄乱数据库并创建大量订单(“创建订单”调用)
而 2. 解决方案并不是真正的解决方案。我不会信任客户端数据。
所以,如果您知道如何以聪明的方式做到这一点,请告诉我。也许我现在只是看不到明显的东西,但这是漫长的一天,所有关于安全沟通的正确方式的想法都让我感到疲倦......
提前致谢!
【问题讨论】:
标签: php reactjs laravel paypal