Est-il un exemple pour PayPal IPN

J'ai un Asp.Net WEB API 2 projet et je tiens à mettre en œuvre une Notification Instantanée de Paiement (IPN) auditeur contrôleur.

Je ne peux pas trouver un exemple et de package nuget. Tout ce que je besoin est de reconnaître que l'utilisateur a payé avec la norme html sur le bouton Paypal. C'est assez simple.

Tous les packages nuget sont de créer de la facture ou de bouton personnalisé. Ce n'est pas ce dont j'ai besoin

Les échantillons sur paypal pour le classique asp.net et pas pour MVC ou de l'API WEB MVC

Je suis sûr que quelqu'un l'a fait déjà et quand j'ai commencé à coder, j'ai eu un sentiment que j'étais en train de réinventer la roue.

Est-il un IPN auditeur contrôleur de exemple?

Au moins un PaypalIPNBindingModel de lier l'Paypal requête.

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

        return Ok();
    }

MODIFIER

Jusqu'à présent j'ai le code suivant

        [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;
        }

mais pour l'étape 3 j'ai essayé de poster mon modèle json, mais paypal renvoie une page HTML au lieu de valider ou non VALIDE. J'ai compris que je dois utiliser application/x-www-form-urlencoded et les paramètres à être dans le même ordre.

Comment puis-je obtenir l'URL de la requête?

Je voudrais utiliser l'Url de la requête et ajouter &cmd=_notify-validate à

Ne cet exemple sur CodeProject aider?
Aussi, voici l'IPN exemple sur GitHub pour asp.net. (Destiné à l'inclure dans ma réponse précédente).
Je vous remercie. Voir mon edit s'il vous plaît
Voir le Réception d'un message non VALIDE de la part de PayPal sur la page PayPal site des Développeurs. Il explique exactement comment votre URL de réponse doivent être formatées. Comme vous l'avez indiqué, il doit inclure tous les paramètres de l'URL que vous avez reçu la notification dans le même ordre, mais avec cmd=_notify-validate précédent les autres paramètres d'URL.
Mon problème est que j'ai un PaypalIPNBindingModel objet au lieu de la première demande. Je ne peux pas être sûr que j'ai le même ordre. Je suis à essayer de comprendre comment obtenir les premières données post.

OriginalL'auteur Marc | 2014-10-29