Есть ли образец для PayPal IPN?

У меня есть проект Asp.Net WEB API 2, и я хотел бы реализовать контроллер прослушивателя Instant Payment Notification (IPN).

Я не могу найти ни одного примера и пакета Nuget. Все, что мне нужно, это признать, что пользователь заплатил с помощью стандартной кнопки HTML на Paypal. Это довольно просто.

Все пакеты nuget предназначены для создания счета или пользовательской кнопки. Это не то что мне нужно

Примеры на PayPal для классического asp.net, а не для MVC или WEB API MVC

Я уверен, что кто-то уже делал это, и когда я начал кодировать, у меня было чувство, что я заново изобретаю колесо.

Есть ли пример контроллера прослушивателя IPN?

Как минимум, PaypalIPNBindingModel для привязки запроса Paypal.

    [Route("IPN")]
    [HttpPost]
    public IHttpActionResult IPN(PaypalIPNBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest();
        }

        return Ok();
    }

РЕДАКТИРОВАТЬ

Пока у меня есть следующий код

        [Route("IPN")]
        [HttpPost]
        public void IPN(PaypalIPNBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                // if you want to use the PayPal sandbox change this from false to true
                string response = GetPayPalResponse(model, true);

                if (response == "VERIFIED")
                {

                }
            }
        }

        string GetPayPalResponse(PaypalIPNBindingModel model, bool useSandbox)
        {
            string responseState = "INVALID";

            // Parse the variables
            // Choose whether to use sandbox or live environment
            string paypalUrl = useSandbox ? "https://www.sandbox.paypal.com/"
            : "https://www.paypal.com/";

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(paypalUrl);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                //STEP 2 in the paypal protocol
                //Send HTTP CODE 200
                HttpResponseMessage response = client.PostAsJsonAsync("cgi-bin/webscr", "").Result;

                if (response.IsSuccessStatusCode)
                {
                    //STEP 3
                    //Send the paypal request back with _notify-validate
                    model.cmd = "_notify-validate";
                    response = client.PostAsync("cgi-bin/webscr", THE RAW PAYPAL REQUEST in THE SAME ORDER ).Result;

                    if(response.IsSuccessStatusCode)
                    {
                        responseState = response.Content.ReadAsStringAsync().Result;
                    }
                }
            }

            return responseState;
        }

но на шаге 3 я попытался опубликовать свою модель как json, но paypal возвращает страницу HTML вместо VALIDATED или INVALID. Я понял, что я должен использоватьapplication/x-www-form-urlencoded и это параметры, чтобы быть в том же порядке.

Как я могу получить URL запроса?

Я хотел бы использовать URL-адрес запроса и добавить&cmd=_notify-validate к этому

Ответы на вопрос(5)

Ваш ответ на вопрос