适用于客户端-服务器方案的最佳 PayPal Web 应用程序工作流程是什么?
What is the best PayPal web app workflow for client-server scenario?
PayPal 文档绝对令人震惊 – 请帮忙。我正在构建一个带有 SPA 客户端和服务器的 Web 应用程序,我想为该应用程序实施一个强大的 PayPal 支付工作流程。这最初将只是一次性付款实施,但稍后我将需要添加订阅。不管怎样,现在我只是想找出一种可靠、安全地一次性付款的方法。在无数小时阅读文档后,我认为我的工作流程应该是这样的:
- 用户点击支付按钮。
- 客户端应用程序向服务器发出请求,要求创建订单。
- 服务器调用 PayPal 的 REST API(创建订单)并接收订单详细信息。服务器还将订单详细信息保存在数据库中。
- 服务器将订单详细信息发送回客户端。在这些细节中,我发现了一个指向 PayPal 结帐的重定向 URL。
- 客户端重定向到 URL。
- 用户在PayPal网站上进行订单授权。
- PayPal 重定向回客户端,在 URL.
中返回一个令牌
- 客户端提取令牌(这是一种 order/payment ID?)并将 ID 发送到服务器,要求捕获付款。
- 服务器使用 ID 在数据库中查找订单详细信息并调用 PayPal 的 REST API(捕获订单),并在其数据库中将订单标记为已付款。
- 服务器向客户端发送成功确认。
- 客户端显示确认消息。
这个工作流程看起来很安全(客户端在任何时候都没有任何支付信息,所有敏感通信都严格在服务器和 PayPal 之间进行)并且可靠(资金是在最后一刻从用户那里拿走的,在服务器上,通过 REST 调用——工作流程中的任何故障都不会导致虚假或未记录的资金转账)。
我也尝试了 webhooks 方法。流程要简单得多,但在 webhook 到达服务器之前似乎有延迟(大约一分钟左右);这并不理想,因为我想立即显示付款确认。
所以我的问题是:
这个工作流程正确吗?我错过了什么吗?它是过于简单还是过于复杂?你会用其他东西代替一些步骤吗?
我还没有完成关于订阅的研究。此工作流程是否适合创建 PayPal 订阅?
对于工作流程中的第 3 点,我应该使用哪种 PayPal 请求:创建订单、创建订单授权或授权订单?
对于工作流程中的第 9 点,我应该使用哪种 PayPal 请求:获取订单、授权订单或获取订单授权?
还有最后一个问题。有什么地方可以让我学习如何为 PayPal 开发吗?通过阅读文档,我发现只有示例是有用的。他们没有提供一般性的 guidance/tutorials,也没有解释应该使用什么方法以及为什么。有没有比 PayPal 文档更好的学习 PayPal 开发的地方?
该应用程序是 Blazor WebAssembly 客户端(对于那些不知道 Blazor 工作原理的人——这类似于浏览器中的 JavaScript SPA 应用程序 运行,但使用 C#/.NET ) 和 .NET Core 服务器,也在 C# 中。
重定向是一个遗留流程。
现代用户体验是不使用任何重定向。完全没有。
您需要两条路线,一条用于 'Set Up Transaction'(创建订单),一条用于 'Capture Transaction'(捕获订单),documented here.
将你的两条路线与此 UI 配对以获得批准:https://developer.paypal.com/demo/checkout/#/pattern/server
订阅增加了它们自己的复杂性,并且没有关于如何将客户端批准与上述服务器集成配对的文档,但是当您知道 create/activate API 调用以使用时,它相当简单和额外的 user_action
参数设置为空:
PayPal 文档绝对令人震惊 – 请帮忙。我正在构建一个带有 SPA 客户端和服务器的 Web 应用程序,我想为该应用程序实施一个强大的 PayPal 支付工作流程。这最初将只是一次性付款实施,但稍后我将需要添加订阅。不管怎样,现在我只是想找出一种可靠、安全地一次性付款的方法。在无数小时阅读文档后,我认为我的工作流程应该是这样的:
- 用户点击支付按钮。
- 客户端应用程序向服务器发出请求,要求创建订单。
- 服务器调用 PayPal 的 REST API(创建订单)并接收订单详细信息。服务器还将订单详细信息保存在数据库中。
- 服务器将订单详细信息发送回客户端。在这些细节中,我发现了一个指向 PayPal 结帐的重定向 URL。
- 客户端重定向到 URL。
- 用户在PayPal网站上进行订单授权。
- PayPal 重定向回客户端,在 URL. 中返回一个令牌
- 客户端提取令牌(这是一种 order/payment ID?)并将 ID 发送到服务器,要求捕获付款。
- 服务器使用 ID 在数据库中查找订单详细信息并调用 PayPal 的 REST API(捕获订单),并在其数据库中将订单标记为已付款。
- 服务器向客户端发送成功确认。
- 客户端显示确认消息。
这个工作流程看起来很安全(客户端在任何时候都没有任何支付信息,所有敏感通信都严格在服务器和 PayPal 之间进行)并且可靠(资金是在最后一刻从用户那里拿走的,在服务器上,通过 REST 调用——工作流程中的任何故障都不会导致虚假或未记录的资金转账)。
我也尝试了 webhooks 方法。流程要简单得多,但在 webhook 到达服务器之前似乎有延迟(大约一分钟左右);这并不理想,因为我想立即显示付款确认。
所以我的问题是:
这个工作流程正确吗?我错过了什么吗?它是过于简单还是过于复杂?你会用其他东西代替一些步骤吗?
我还没有完成关于订阅的研究。此工作流程是否适合创建 PayPal 订阅?
对于工作流程中的第 3 点,我应该使用哪种 PayPal 请求:创建订单、创建订单授权或授权订单?
对于工作流程中的第 9 点,我应该使用哪种 PayPal 请求:获取订单、授权订单或获取订单授权?
还有最后一个问题。有什么地方可以让我学习如何为 PayPal 开发吗?通过阅读文档,我发现只有示例是有用的。他们没有提供一般性的 guidance/tutorials,也没有解释应该使用什么方法以及为什么。有没有比 PayPal 文档更好的学习 PayPal 开发的地方?
该应用程序是 Blazor WebAssembly 客户端(对于那些不知道 Blazor 工作原理的人——这类似于浏览器中的 JavaScript SPA 应用程序 运行,但使用 C#/.NET ) 和 .NET Core 服务器,也在 C# 中。
重定向是一个遗留流程。
现代用户体验是不使用任何重定向。完全没有。
您需要两条路线,一条用于 'Set Up Transaction'(创建订单),一条用于 'Capture Transaction'(捕获订单),documented here.
将你的两条路线与此 UI 配对以获得批准:https://developer.paypal.com/demo/checkout/#/pattern/server
订阅增加了它们自己的复杂性,并且没有关于如何将客户端批准与上述服务器集成配对的文档,但是当您知道 create/activate API 调用以使用时,它相当简单和额外的 user_action
参数设置为空: