При проверке подписи webhook API PayPal Rest всегда возвращается valid_status как FAILURE

У меня есть приложение для интеграции PayPal, которое получает уведомление от веб-крючка от PayPal, и я хочу проверить подпись в соответствии с документами:

Проверить подпись остальные api ссылку

Вот код, который я написал:

public async Task<ActionResult> Index()
    {
        var stream = this.Request.InputStream;

        var requestheaders = HttpContext.Request.Headers;
        var reader = new StreamReader(stream);
        var jsonReader = new JsonTextReader(reader);
        var serializer = new JsonSerializer();
        var webhook = serializer.Deserialize<Models.Event>(jsonReader); 

        var webhookSignature = new WebhookSignature();
        webhookSignature.TransmissionId = requestheaders["PAYPAL-TRANSMISSION-ID"];
        webhookSignature.TransmissionTime = requestheaders["PAYPAL-TRANSMISSION-TIME"];
        webhookSignature.TransmissionSig = requestheaders["PAYPAL-TRANSMISSION-SIG"];
        webhookSignature.WebhookId = "My actual webhookid from paypal account";
        webhookSignature.CertUrl = requestheaders["PAYPAL-CERT-URL"];
        webhookSignature.AuthAlgo = requestheaders["PAYPAL-AUTH-ALGO"];
        webhookSignature.WebhookEvent = webhook;
        var jsonStr2 = JsonConvert.SerializeObject(webhookSignature);
        var result = await _webhookService.VerifyWebhookSignatureAsync(webhookSignature);
        var jsonStr3 = JsonConvert.SerializeObject(result);

        return Content(jsonStr3, "application/json");
    }


  public async Task<Models.SignatureResponse> VerifyWebhookSignatureAsync(Models.WebhookSignature webhook, CancellationToken cancellationToken = default(CancellationToken))
    {
        var accessTokenDetails = await this.CreateAccessTokenAsync();
        _httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessTokenDetails.AccessToken);
        try
        {
            string jsonStr = JsonConvert.SerializeObject(webhook);
            var content = new StringContent(jsonStr, Encoding.UTF8, "application/json");
            string url = $"{_baseUrl}notifications/verify-webhook-signature";
            var response = await _httpClient.PostAsync(url, content);
            if (!response.IsSuccessStatusCode)
            {
                var error = await response.Content.ReadAsStringAsync();
                throw new Exception(error);
            }
            string jsonContent = response.Content.ReadAsStringAsync().Result;
            return JsonConvert.DeserializeObject<Models.SignatureResponse>(jsonContent);
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException("Request to Create payment Service failed.", ex);
        }

    }

Ответ проверки подписи Webhook:

{ "Verification_status":"FAILURE"}

Я получаю 200K в порядке ответа от API, но статус проверки в ответ всегда FAILURE. Я пробовал много разных запросов.

Я не уверен, что что-то не так с моей просьбой. Ищу помощь.

0 ответов

Другие вопросы по тегам