【问题标题】:PayPal webhook: How to indentify the transaction related to webhook eventPayPal webhook:如何识别与 webhook 事件相关的交易
【发布时间】:2020-10-31 21:35:55
【问题描述】:

我在市场中集成了智能按钮结账功能,任何人都可以从任何人那里出售/购买商品。

我还成功安装了一个 webhook 监听器,如果退款已发出,它会收到通知。

但在收到的退款事件正文中,我无法找到已退款的付款/交易的信息。

通过阅读事件

file_get_contents('php://input');

我会得到这样的 JSON 编码的事件细节:

{
    "id":"WH-3WS24689NP236083V-89P84301TC0576916",
    "event_version":"1.0",
    "create_time":"2020-07-10T15:36:33.720Z",
    "resource_type":"refund",
    "resource_version":"2.0",
    "event_type":"PAYMENT.CAPTURE.REFUNDED",
    "summary":"A EUR 7.89 EUR capture payment was refunded",
    "resource":{
        "seller_payable_breakdown":{
            "total_refunded_amount":{
                "value":"7.89",
                "currency_code":"EUR"},
            "paypal_fee":{
                "value":"0.15",
                "currency_code":"EUR"
            },
            "gross_amount":{
                "value":"7.89",
                "currency_code":"EUR"},
            "net_amount": {
                "value":"7.74",
                "currency_code":"EUR"
            }
        },
        "amount":{
            "value":"7.89",
            "currency_code":"EUR"
        },
        "update_time":"2020-07-10T08:36:00-07:00",
        "create_time":"2020-07-10T08:36:00-07:00",
        "links":[
            {"method":"GET","rel":"self","href":"https://api.sandbox.paypal.com/v2/payments/refunds/3TF6899507696873K"},
            {"method":"GET","rel":"up","href":"https://api.sandbox.paypal.com/v2/payments/captures/5U107751JJ334642K"}
        ],
        "id":"3TF6899507696873K",
        "status":"COMPLETED"
    },
    "links":[{
        "href":"https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-3WS24689NP236083V-89P84301TC0576916",
        "rel":"self",
        "method":"GET"},{
        "href":"https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-3WS24689NP236083V-89P84301TC0576916/resend",
        "rel":"resend",
        "method":"POST"}
    ]
}

所以我得到了数据。但在数据中,我找不到任何信息,如“交易 id”、“订单 id”或类似信息,如果它与前一个订单的捕获 id(来自捕获订单)匹配,我可以用来在数据库中查找。

我需要做什么才能获得所需的信息?还是我在错误的地方/错误的领域寻找?

如果我需要先验证请求并发出另一个请求以获取更多数据,我将非常感谢 PHP 中的完整示例(或示例链接),因为我无法理解 Paypal 文档网络挂钩。

编辑:似乎在其中一个链接中(在上述事件中),捕获 ID(与 transaction id txn 相同)原始付款被“隐藏”在提供端点的链接之一中。在这种情况下:5U107751JJ334642K

我只能对 Paypal 让事情变得难以实现的方式摇摇头。退款消息中如何没有包含原始交易 ID 的专用字段?

【问题讨论】:

  • 至少在接收 webhook 的脚本上显示你的代码。
  • @GetSet:我添加了这个,虽然我不认为这是重点:我没有阅读事件的麻烦。我只是不知道如何处理这些信息/我找不到所需的信息。
  • 看看这个链接developer.paypal.com/docs/api/webhooks/v1/#definition-webhook .... 在那里,“找到”页面The ID of the webhook event notification to resend. ..... 不能肯定地说,但它看起来像你的webhook 应该重新发送您收到的 json 中的“id”字段(在顶部)以获取退款的完整详细信息。
  • 不,该ID是退款的交易ID,而不是原始付款的交易。看起来,订单捕获的 ID 隐藏在事件提供的 api-endpoint 链接之一中。我不知道为什么这么重要的信息没有专门的字段。
  • @dsgdfg 我不知道这应该是什么意思,抱歉。你能详细说明一下吗?

标签: php paypal webhooks


【解决方案1】:

欢迎来到超媒体作为应用程序状态引擎的精彩世界讨厌OAS [强调...])!

其目的是为您的应用程序提供动态发现和导航到/执行相关资源/操作所需的信息。为此,每个 API 响应或 webhook 有效负载都包含一个 links 列表。

正如您已经发现的那样,在本例中,这些链接通过up 关系返回到父资源,即已退款的捕获。

虽然直接从href 中提取捕获 ID 可能很诱人,但实际上遵循该链接可能更安全。您将收到the original capture response,您可以从中获取捕获id 或继续关注up 链接以访问the authorization

您可以在https://developer.paypal.com/docs/api/reference/api-responses/#hateoas-links 上找到有关 PayPal 的 HATEOAS 实施的更多信息。那些标准化的rel 类型记录在https://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1 上。例如rel="up"的描述是“引用文档层次结构中的父文档”。

【讨论】:

  • 谢谢你,尼尔斯。目前,我将继续使用我的方法,因为我需要先授权才能访问该链接,而且我有点厌倦了 Paypal 让最简单的任务变得如此复杂的可怕方式…… :) 然后再说一次,因为我需要验证任何事件消息(为此我很确定我也必须授权),所以我将不得不在某个时候进行调查。有什么好的例子可以推荐吗?
  • 如果您使用库来解析传入事件并执行后续请求,您的生活可能会最轻松。 PayPal provides an official PHP SDK 我会先尝试。看起来一旦你有一个 webhook 事件,你就可以get the refund 并从那里get the parent payment ID
  • 我查看了 SDK,发现它对于我需要的东西来说非常庞大。我现在自己编写了一个 10 行的 webhook 验证代码,这对我有用。我把它贴在这里:stackoverflow.com/questions/62870568/…
猜你喜欢
  • 2016-02-13
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 2016-03-06
相关资源
最近更新 更多