Paypal REST API - 尝试使用其 HATEOS 自身 url 获取 webhook 事件时得到 404

Posted

技术标签:

【中文标题】Paypal REST API - 尝试使用其 HATEOS 自身 url 获取 webhook 事件时得到 404【英文标题】:Paypal REST API - getting 404 when trying to get webhook event with its HATEOS self url 【发布时间】:2015-03-30 22:36:03 【问题描述】:

我在尝试使用 Paypal REST API 时被 webhook 的问题惊呆了。 我尝试使用以下策略来验证事件数据 - 确保 HATEOAS 链接与 rel == "self" 如https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-6L177801XL962315K-5B870910V53268712 存在,并确保此链接以预期的 API 端点(在 web.config 中设置)开始并重新加载事件数据使用它,并将其用作 trusted 事件数据。 但是这种策略失败了,它会导致 404 而不是获取 webhook 数据。

还有谁使用过 Paypal REST API 网络钩子?您如何验证事件是否来自受信任的事件源?

更新

能够获得有关收到消息的更多详细信息。响应正文:

数据 [\r\n \"name\": \"INVALID_RESOURCE_ID\",\r\n \"details\": [],\r\n \"message\": \"资源 id 是无效\"\r\n]

标头作为 JSON 对象:[\r\n \"PROXY_SERVER_INFO\": [\r\n \"host=slcsbplatformapiserv3002.slc.paypal.com;threadId=370534\"\r\n ],\r \n \"Paypal-Debug-Id\": [\r\n \"e33a2f285d46f\"\r\n ],\r\n \"SERVER_INFO\": [\r\n \"webhooksplatformserv:ppaas_1_2.v1 .notifications.webhooks-events.id.GET&CalThreadId=184&TopLevelTxnStartTime=14b4099eb05&Host=slcsbwebhooksplatformserv3002.slc.paypal.com&pid=29135\"\r\n ],\r\n \"日期\": [\r\n \"星期六, 2015 年 1 月 31 日 15:26:44 GMT\"\r\n ],\r\n \"服务器\": [\r\n \"Apache-Coyote/1.1\"\r\n ]\r\ n]

【问题讨论】:

【参考方案1】:

hateoas 链接应返回与原始 webhook 事件相同的有效负载。所以那里似乎有一些问题。

但是,如果您的目的是验证事件是否来自 PayPal,那么正确的方法是验证 webhook 标头中包含的签名。此链接包含有关 webhook 安全方面的更多详细信息。

https://developer.paypal.com/webapps/developer/docs/integration/direct/rest-webhooks-overview/#event-security

【讨论】:

签名验证过程对我来说有点不清楚。 签名验证过程对我来说有点不清楚(WebhookId 参数 - 它是什么?我在 REST API 网站上注册的 webhook 的标识符?因为这部分对我来说不清楚,我无法构建一个验证代码(.net helper 类/方法)以“正确的方式检查签名。所以我决定重新加载事件有效负载,但它因 404 错误而失败。现在我只检查源 IP 地址(使用 web.config 中的域名列表和 Dns.GetHostEntry 在每次启动 Web 应用时刷新 IP 白名单)... 是的,当您使用 REST API 注册您的 url 时,webhook id 就是资源 id。这不包含在事件有效负载中。由于您首先注册了 webhook,因此您应该可以通过 API 调用访问它。此外,我们正在努力以各种编程语言发布 SDK。

以上是关于Paypal REST API - 尝试使用其 HATEOS 自身 url 获取 webhook 事件时得到 404的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP PayPal REST API 退款?

通过 PayPal REST API 示例打折?

使用 REST api 执行 PayPal 付款

PayPal REST API“列出付款”不返回任何条目

使用 PayPal REST API 进行定期付款

通过 PayPal REST API 进行银行支付