Я работаю над проверкой данных веб-крючка Paypal, но столкнулся с проблемой, при которой всегда возвращается НЕИСПРАВНОСТЬ для статуса проверки. Мне интересно, потому что все это происходит в среде с песочницей, а Paypal не позволяет проверять события веб-крюков с песочницей? Я следовал этому API до c для реализации вызова: https://developer.paypal.com/docs/api/webhooks/v1/#verify -webhook-signature
Соответствующий код (из отдельных модулей эликсира):
def call(conn, _opts) do
conn
|> extract_webhook_signature(conn.params)
|> webhook_signature_valid?()
|> # handle the result
end
defp extract_webhook_signature(conn, params) do
%{
auth_algo: get_req_header(conn, "paypal-auth-algo") |> Enum.at(0, ""),
cert_url: get_req_header(conn, "paypal-cert-url") |> Enum.at(0, ""),
transmission_id: get_req_header(conn, "paypal-transmission-id") |> Enum.at(0, ""),
transmission_sig: get_req_header(conn, "paypal-transmission-sig") |> Enum.at(0, ""),
transmission_time: get_req_header(conn, "paypal-transmission-time") |> Enum.at(0, ""),
webhook_id: get_webhook_id(),
webhook_event: params
}
end
def webhook_signature_valid?(signature) do
body = Jason.encode!(signature)
case Request.post("/v1/notifications/verify-webhook-signature", body) do
{:ok, %{verification_status: "SUCCESS"}} -> true
_ -> false
end
end
Я получаю 200 от Paypal, что означает, что Paypal получил мой запрос и смог правильно его проанализировать и запустить, несмотря на проверку, но он всегда возвращает FAILURE для статуса проверки, что означает, что подлинность запроса не может быть проверенным. Я посмотрел на данные, которые я отправлял в их конечную точку, и все выглядит правильно, но по какой-то причине они не проверяются. Я поместил JSON, который я отправил в API (из extract_webhook_signature
) в Pastebin, потому что он довольно большой: https://pastebin.com/SYBT7muv
Если кто-то имеет опыт работы с этим и знает почему это может потерпеть неудачу, я хотел бы услышать.