Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PayPal webhook:如何识别与webhook事件相关的事务_Php_Paypal_Webhooks - Fatal编程技术网

Php PayPal webhook:如何识别与webhook事件相关的事务

Php PayPal webhook:如何识别与webhook事件相关的事务,php,paypal,webhooks,Php,Paypal,Webhooks,我在市场中集成了智能按钮结账功能,任何人都可以从任何人那里出售/购买物品 我还成功安装了一个webhook侦听器,如果支付退款已经发出,它会收到通知 但在收到的退款事件主体中,我未能找到已退款的付款/交易的信息 通过阅读事件 file_get_contents('php://input'); 我将获得JSON编码的事件详细信息,如下所示: { "id":"WH-3WS24689NP236083V-89P84301TC0576916", &

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

我还成功安装了一个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(来自捕获订单)匹配,我可以在DB中查找这些信息

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

如果我需要先验证请求,然后再请求获取更多数据,我将非常感谢PHP中的完整示例(或示例链接),因为我无法理解Webhook上的Paypal文档

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


我只能对贝宝让事情难以实现的方式摇头。你怎么能在退款信息中没有一个带有原始交易id的专用字段呢?

欢迎来到作为应用程序状态引擎的精彩超媒体世界(HATEOAS[强调添加…])

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

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

虽然直接从
href
中提取捕获ID很有诱惑力,但实际上遵循该链接可能更安全。您将收到一条信息,您可以从中获取捕获
id
,或者继续按照
up
链接访问


您可以在上找到关于PayPal的HATEOAS实现的更多信息。标准化的
rel
类型记录在。例如,
rel=“up”
的描述是“引用文档层次结构中的父文档”。

至少在接收webhook的脚本上显示您的代码。@GetSet:我添加了这个,但我不认为这是重点:我在读取事件时没有问题。我只是不知道如何处理这些信息/我找不到所需的信息。请查看此链接。。。。一旦到达,请在页面
中“查找”要重新发送的webhook事件通知的ID。
。。。。。无法确定,但看起来您的webhook应该重新发送您收到的json中的“id”字段(在顶部),以获取退款的完整详细信息。但是现在您已经发布了完整的json,这可能是您需要的:
“id”:“3TF6899507696873K”,
?(位于“状态”之前)不,该ID是退款的交易ID,而不是原始付款的交易ID。看起来,订单捕获的ID隐藏在事件提供的一个api端点链接中。我不知道为什么这么重要的信息没有专门的领域。谢谢你,尼尔斯。目前,我将继续使用我的方法,因为我需要先进行授权,以便能够跟踪该链接,我对Paypal将最简单的任务变得如此复杂的可怕方式感到有点厌倦……:)然后,因为我需要验证任何事件消息(为此,我非常确定我也必须进行授权),我将不得不在某个时候对此进行调查。你能推荐什么好的例子吗?如果你使用一个库来解析传入的事件并执行后续的请求,你的生活可能会变得最简单。我会先试试。看起来一旦你有了一个webhook事件,你就可以从那里开始了。我查看了SDK,发现它非常庞大,满足了我的需要。现在我自己编写了一个webhook的10行验证代码,这为我实现了这个技巧。我把它贴在这里: