PayPal Webhook URL 中的 HTTP 基本身份验证
Posted
技术标签:
【中文标题】PayPal Webhook URL 中的 HTTP 基本身份验证【英文标题】:HTTP Basic Authentication in PayPal Webhook URLs 【发布时间】:2017-11-29 13:41:24 【问题描述】:(补充:对于这个问题,假设 PayPal API 上的操作正在运行并经过身份验证。)
PayPal Webhook 是否支持带有 HTTP 基本身份验证凭据的 URL,因此以下将创建一个使用给定凭据 foo:secret
的有效 Webhook?
webhook_attrs =
# NOTE the URL has HTTP Basic credentials of
# user is 'foo' and password is 'secret':
url: 'https://foo:secret@example.com/paypal_events',
event_types: [
name: 'PAYMENT.AUTHORIZATION.CREATED' ,
name: 'PAYMENT.AUTHORIZATION.VOIDED'
]
webhook = PayPal::SDK::REST::Webhook.new(webhook_attrs)
if webhook.create && webhook.error.nil?
p "Created webhook:", webhook
else
p "Failed to create webhook:", webhook.error, webhook
end
【问题讨论】:
您可能应该阅读文档developer.paypal.com/docs/integration/direct/… 关于如何拨打第一个电话。您需要访问令牌才能将 URL 作为参数或标头传递。在您的情况下,您可以将其放在 URL 中,但您必须先完成所有步骤..获取 clientid 和 clientsecret 并将它们交换为访问令牌,就像文档中的示例一样。之后您可以使用访问令牌发出任何请求 感谢 Rada,并为不清楚的问题道歉。 API 身份验证工作正常。这个问题是关于 API 的不同方面的。我已对问题进行了澄清,并将很快添加答案。 【参考方案1】:PayPal Webhook 不支持 HTTP 基本身份验证(在撰写本文时)。
尝试使用包含 HTTP Basic 凭据的 URL 创建 Webhook 将失败,并出现以下错误:
"name" => "VALIDATION_ERROR",
"details" => [ "field" => "url", "issue" => "Not a valid webhook URL" ],
"message" => "Invalid data provided",
"information_link" => "https://developer.paypal.com/docs/api/webhooks/#errors"
对于希望这样做的开发者,有几点建议:
-
请 PayPal 支持这一点(可能值得一提的是 Stripe Webhooks 支持 HTTP 基本身份验证)
作为一种解决方法,请考虑在 URL 查询字符串中包含一个长而随机的秘密令牌,而不是作为身份验证检查。为此,URL 必须是 HTTPS。当心检查令牌的代码中的时间和长度攻击,简单的
==
相等检查容易受到时间攻击。有关时间和长度攻击的更多信息,请参阅 https://github.com/rails/rails/blob/d66e7835bea9505f7003e5038aa19b6ea95ceea1/activesupport/lib/active_support/security_utils.rb#L22。
【讨论】:
【参考方案2】:我们知道 PayPal Webhooks 不支持 HTTP Basic 身份验证, 但是对于这类问题,我们有一个解决方案。 我们需要一台实时服务器 [没有 HTTP 基本身份验证],因此我们可以在 paypal 应用程序中为 webhook URL 设置 php 文件。
在实时服务器上创建一个名为 paypalWebhook.php
的 PHP 文件。
下面是这个文件的代码。
$body = @file_get_contents('php://input');
$url = 'https://foo:secret@example.com/paypal_events';
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $body);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
现在可以像这样设置 Webhook URL:https://live-server/paypalWebhook.php
现在您可以通过实时服务器获取所有发布值给您 devlopment[HTTP Basic authentication server]。
【讨论】:
以上是关于PayPal Webhook URL 中的 HTTP 基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Paypal REST API - 尝试使用其 HATEOS 自身 url 获取 webhook 事件时得到 404
关于无法从开发者沙箱触发 Paypal REST API webhook 事件
PayPal Sandbox 订阅 webhook 响应未收到