PayPal REST API 订单工作流程:付款 -> 销售 -> Webhook?

2024-01-06

我正在尝试将 PayPal REST API 集成到我的 Symfony 2 Web 应用程序中,但我发现很难理解完整的工作流程到底是什么样子的:

The 贝宝文档 https://developer.paypal.com/docs/integration/web/accept-paypal-payment/描述接受付款的以下步骤。一个可以使用贝宝游乐场 https://devtools-paypal.com/guide/pay_paypal/php模拟这些步骤:

  1. 获取访问令牌
  2. Create a Payment通过API查询对象
  3. 将用户重定向到approval url收到于Payment回复
  4. 用户在 PayPal 页面上批准付款后,他会使用 中定义的成功链接重定向回我的页面Payment目的。使用收到的信息execute付款。
  5. 付款已完成并显示状态approved

来自文档: https://developer.paypal.com/docs/integration/web/accept-paypal-payment/ Once a payment完成后,它被称为sale。然后您可以查看销售情况并退款。

到目前为止,一切都很好。但:在此工作流程中,Webhooks 在哪里使用/触发?我在 PayPal 开发人员仪表板中定义了一个通配符 Webhook(接受所有可能的事件)。

我的观察是,我的系统收到 Webhook 事件1-2 分钟(!) after用户被重定向回成功链接并且付款执行后(第4步).

除了执行付款和接收 Webhook 之间的长时间延迟之外,此工作流程意味着我只收到 WebhookAFTER处理成功链接。这意味着,处理成功链接对于完成付款是绝对必要的。它是否正确?

我需要使用 Webhooks 吗?

我已经问过了这个问题 https://stackoverflow.com/questions/36221146/几天前,nifr 的回答非常合理:不能相信用户会遵循任何重定向 URL,而应该仅依赖 Webhook 事件。

然而,这与我之前描述的观察结果相冲突,因为如果不处理重定向 URL,我将永远不会收到 Webhook...

所以,处理PAYMENT.SALE.COMPLETEDwebhook 事件没有多大意义,因为这应该在处理重定向 URL 时已经完成。Correct?

但是,要处理待付款的更新、处理退款或撤销付款等,只能通过侦听这些事件来实现。

所以答案是:仅使用 Webhook 来获取之前付款的更新。正确的?

所以,主要问题是:

  1. 接受付款的 5 步流程并未提及任何有关使用 Webhooks 的信息。这似乎没有多大意义,因为如果没有 Webhooks,人们就会错过更新事件等?那么,是否真的可以在没有Webhooks的情况下实现完整的支付流程呢?
  2. If yes, 在这种情况下如何处理更新(退款、待处理等)?
  3. If no, 由于需要相当长的时间才能完全接收和处理 Webhook,因此履行订单的正确策略/时间是什么?

我仍然是 PayPal 世界的新手,但几天前我在网上商店中集成了 PayPal Plus REST API,根据我的理解,我可以看出工作流程如下所示:

  1. 创建付款
  2. 重定向至 PayPal
  3. 付款人可以使用PayPal账户付款OR(使用银行直接借记卡或信用卡付款,无需 PayPal 账户)
  4. 在 PayPal 端完成该过程后,PayPal 将用户重定向回您的成功 URL。
  5. 到目前为止,用户仍然没有被收费(你没有钱)。当您(在您的成功 URL 中)执行此操作时$payment->execute($paymentExecution,$api);,您要求 Paypal 向用户收取费用。但在此之后,你就没有钱了。 Paypal 首先处理收费,然后通过 Webhook 事件通知您。

当用户通过直接借记卡或信用卡等方式付款时,Webhook 通知(具有令人讨厌的延迟)尤其重要。处理此类付款需要几秒钟/几分钟。

该redirectUrl 对于收费/执行付款是绝对必要的。 这里执行成功,只是告诉用户,他完成了他的工作,您可以在这里保存/捕获 PaymentID/Transaction id 以便以后通过 WebhookEvent Listener 使用/更新。

所以我建议您仅在通过 Webhook 事件监听器收到通知后更新数据库(付款已完成),而不是在成功的 RedirectUrl 中更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PayPal REST API 订单工作流程:付款 -> 销售 -> Webhook? 的相关文章

  • 使用 PHP 中的 GD 库在图像上绘图

    我创建了一个代码来生成随机图案图像 它创建一个具有给定宽度和高度的图像 并用 40x40 像素的小矩形填充它 这是我的代码
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带
  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • Smarty 如果 URL 包含

    使用 Smarty 标签我想确定 URL 是否包含单词 例如 if smarty get page contains product php 我知道 contains 不存在 但是我怎样才能轻松地编写类似的东西来实现上述代码呢 所有 PHP
  • laravel - 使用请求类或输入类

    在宁静的控制器中 我应该使用哪个类来获取传递的变量 member gt email Input get email or member gt email Request get email 两种选择都适合我 但有什么区别 Input get
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 如何防止在 PHP 中使用超出“使用”范围的特征方法

    我想知道是否有任何方法可以防止在 PHP 的任何类上下文之外使用特征方法 让我用一个简短的例子来解释我想要什么 这是我当前的代码 File MyFunctions php trait MyFunctions function hello w
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐