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
à
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
Vous devez vous connecter pour publier un commentaire.
Basé sur accepté de répondre, je suis venu avec le code suivant à la mise en œuvre de IPN écouteur pour ASP.NET MVC. La solution a déjà été déployé et semble fonctionner correctement.
EDIT:
Permettez-moi de partager mon expérience - le code ci-dessus a fonctionne très bien jusqu'à maintenant, mais tout à coup, il a échoué pour un IPN il était en traitement, c'est à dire
responseString == "INVALID"
.La question s'est avéré être que mon compte a été configuré pour utiliser
charset == windows-1252
qui est de PayPal par défaut. Cependant,FormUrlEncodedContent
utilise UTF-8 pour l'encodage et, par conséquent, la validation a échoué, à cause des caractères comme "ű". La solution était de mettre encharset
en UTF-8, ce qui peut être fait dans le Profil > Mes outils de vente > bouton PayPal langue d'encodage > Plus d'Options, consultez ce fil.Si ce code est utilisé pour être de travail, il n'est pas maintenant. PayPal exige pour la vérification, les données pour être affichés en arrière dans le même ordre ET précédées de la variable cmd. Ce code ne répond à aucune de ces exigences.
pourquoi pensez-vous poster une vierge demande à paypal avant de poster à nouveau avec les données de la demande?
bien, je vois votre point de vue et dois admettre que je ne suis pas sûr, devra passer plus de temps sur ce. Veuillez voir mes commentaires ci-dessous le deuxième plus haut voté réponse, on dirait que je me demandais à propos de la même comme vous le faites...
Incroyable. J'étais perdu avec ces situation, la modification de l'encodage a été la solution à ma situation. Merci.
OriginalL'auteur Michal Hosala
C'est mon code
Hésitez pas à l'examen est quelque chose qui est mal
Même si la documentation PayPal n'est pas très clair sur ce soit, en regardant le "la Réception de votre première notification" je voir l'ÉTAPE 1 "Lors de la réception d'une notification de la part de PayPal, envoyez un vide réponse HTTP 200.", mais le autre morceau de documentation ne parle pas de cette étape, et c'est ce que je vois dans les exemples de code...
OriginalL'auteur Marc
L'extension de Michal Hosala de réponse, il y a deux choses à faire pour obtenir un succès de la poignée de main avec PayPal
D'abord, le réglage du protocole de sécurité avant de faire la demande à PayPal
Deuxième, en évitant le dictionnaire, parce que pour la vérification, PayPal exige que les données soient réinjectées dans le même ordre et précédées de la cmd variable. J'ai fini par faire ce
Dans le Intégration de PayPal Guide on peut trouver cela. "Le préfixe a retourné le message avec le cmd=_notify-validate variable, mais ne change pas le message champs, l'ordre des champs, ou le codage des caractères dans le message d'origine."
Oui je sais ce que l'intégration de Paypal guide dit, mais je me suis dit, dans le monde réel, le monde réel, l'ordre n'a plus d'importance selon la spécification HTML.
J'ai fait cette intégration d'un moment de retour ne peut donc pas dire avec certitude, mais je pense que je n'allais pas l'accusé de réception en arrière quand j'ai utilisé le dictionnaire.
OriginalL'auteur bilal.haider
J'étais également à la recherche d'une solution similaire à l'OP question d'origine de
Is there any IPN listener controller example? At least a PaypalIPNBindingModel to bind the Paypal query.
et je suis arrivé à cette page. J'ai essayé les autres solutions mentionnées dans ce fil de discussion, ils ont tous travaillé, mais j'ai vraiment besoin de l'PayPal requête modèle de solution donc j'ai googler jusqu'à ce que je suis tombé sur Carlos Rodriguez La création d'un compte PayPal IPN API Web d'Extrémité article sur le blog.Voici un aperçu de ce que Carlos a fait:
De créer un modèle. De Base les propriétés que vous définissez dans le modèle de l'ipn réponse que vous obtiendrez de la part de PayPal.
Créer un compte PayPal classe Validator.
Créer votre contrôleur.
Créer un modèle de classeur qui va définir la manière dont le Web Api va automatiquement créer le modèle pour vous.
Enregistrer votre classeur de modèles de WebApiConfig.cs.
config.BindParameter(typeof(IPNBindingModel), new IPNModelBinder());
Espère que cela aide quelqu'un d'autre. Merci Carlos Rodriguez pour votre étonnant code.
OriginalL'auteur Annie Lagang
Il y a un officiel c# exemple ici:
https://github.com/paypal/ipn-code-samples
en chemin
\c#\paypal_ipn_mvc.cs
L'exemple en C# indique un ASP.NET MVC contrôleur avec une action qui répond à l'IPN.
OriginalL'auteur Harry Kakoulidis