(补充:对于这个问题,假设 PayPal API 上的操作正常运行并经过身份验证。)
PayPal Webhooks 是否支持带有 HTTP Basic 身份验证凭据的 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
最佳答案
PayPal Webhooks 不支持 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 支持(可能值得一提的是 Stripe Webhooks 支持 HTTP 基本身份验证)
- 作为解决方法,请考虑在 URL 查询字符串中包含一个长而随机的 secret token ,而不是作为身份验证检查。为此,URL 必须是 HTTPS。当心检查 token 的代码中的时间和长度攻击,一个简单的
==
相等性检查很容易受到时间攻击。参见 https://github.com/rails/rails/blob/d66e7835bea9505f7003e5038aa19b6ea95ceea1/activesupport/lib/active_support/security_utils.rb#L22有关时间和长度攻击的更多信息。
关于ruby - PayPal Webhook URL 中的 HTTP 基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44764407/