Ruby PayPal Webhook URL中的HTTP基本身份验证
(补充:对于这个问题,假设PayPal API上的操作正在运行并经过验证。) PayPal webhook是否支持带有HTTP基本身份验证凭据的URL,因此下面将创建一个使用给定凭据的有效webhookRuby PayPal Webhook URL中的HTTP基本身份验证,ruby,paypal,paypal-rest-sdk,basic-authentication,Ruby,Paypal,Paypal Rest Sdk,Basic Authentication,(补充:对于这个问题,假设PayPal API上的操作正在运行并经过验证。) PayPal webhook是否支持带有HTTP基本身份验证凭据的URL,因此下面将创建一个使用给定凭据的有效webhookfoo:secret webhook_attrs = { # NOTE the URL has HTTP Basic credentials of # user is 'foo' and password is 'secret': url: 'https://foo:secret@ex
foo:secret
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
PayPal Webhook不支持HTTP基本身份验证(在撰写本文时) 尝试使用包含HTTP基本凭据的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 Webhook不支持HTTP基本身份验证, 但对于这类问题,我们有一个解决方案。 我们需要一个实时服务器[没有HTTP基本身份验证],这样我们就可以在PHP文件上设置paypal应用程序中的webhook URL
paypalWebhook.PHP
的PHP文件。
下面是这个文件的代码
https://{live server}/paypalWebhook.php
现在,您可以通过live server向您的开发者[HTTP Basic authentication server]获取所有post值。您可能应该阅读有关如何进行第一次呼叫的文档。您需要一个访问令牌作为参数或标头传入URL。在你的情况下,你可以把它放在URL中,但是你必须先完成所有的步骤。获取一个clientid和一个clientsecret,并将它们交换为访问令牌,就像文档中的示例一样。在此之后,您可以使用访问令牌发出任何请求,感谢Rada,并为问题不明确表示歉意。API身份验证工作正常。这个问题与API的另一个方面有关。我已经对这个问题进行了澄清,并将很快给出答案。
$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);