【发布时间】:2021-02-25 20:01:41
【问题描述】:
PayPal 文档绝对令人震惊——请帮忙。我正在构建一个带有 SPA 客户端和服务器的 Web 应用程序,并且我想为该应用程序实现一个强大的 PayPal 支付工作流程。这最初只是一次性付款实施,但稍后我将需要添加订阅。无论如何,现在我只是想找出一种可靠且安全地进行一次性付款的方法。在阅读了无数小时的文档之后,我认为我的工作流程应该是这样的:
- 用户点击支付按钮。
- 客户端应用程序向服务器发出请求,要求创建订单。
- 服务器调用 PayPal 的 REST API(创建订单)并接收订单详细信息。服务器还将订单详细信息保存在数据库中。
- 服务器将订单详细信息发送回客户端。在这些详细信息中,我发现了一个指向 PayPal 结帐的重定向 URL。
- 客户端重定向到 URL。
- 用户在 PayPal 的网站上执行订单授权。
- PayPal 重定向回客户端,在 URL 中返回一个令牌。
- 客户端提取令牌(这是一种订单/付款 ID?)并将 ID 发送到服务器,要求捕获付款。
- 服务器使用 ID 在数据库中查找订单详细信息并调用 PayPal 的 REST API(捕获订单),并在其数据库中将订单标记为已付款。
- 服务器将成功确认发送回客户端。
- 客户端显示确认消息。
这个工作流程看起来很安全(在任何时候客户端都没有任何付款信息,所有敏感的通信都严格在服务器和 PayPal 之间进行)并且可靠(资金是在绝对最后时刻从用户那里取出的,在服务器上,通过REST 调用 – 工作流程中的任何故障都不会导致虚假或未记录的资金转移)。
我也尝试了 webhook 方法。流程要简单得多,但在 webhook 访问服务器之前似乎有延迟(大约一分钟左右);这并不理想,因为我想立即显示付款确认。
所以我的问题是:
这个工作流程正确吗?我错过了什么吗?它是过于简单还是过于复杂?你会用别的东西代替一些步骤吗?
我还没有完成关于订阅的研究。此工作流程是否适合 PayPal 订阅创建?
对于工作流程中的第 3 点,我应该使用哪个 PayPal 请求:创建订单、创建订单授权或授权订单?
对于工作流程中的第 9 点,我应该使用哪个 PayPal 请求:获取订单、授权订单或获取订单授权?
最后一个问题。有没有什么地方可以学习如何为 PayPal 开发?通过阅读文档,我发现只有示例有用。它们不提供一般指导/教程,也不解释应该使用什么方法以及为什么。有没有比 PayPal 文档更好的学习 PayPal 开发的地方?
该应用程序是 Blazor WebAssembly 客户端(适用于那些不知道 Blazor 工作原理的人 - 这类似于在浏览器中运行的 JavaScript SPA 应用程序,但使用 C#/.NET)和 .NET Core 服务器,也使用 C# .
【问题讨论】: