Sto cercando di implementare un Paypal notifica immediata del pagamento (IPN)Get richiesta POST prima in un ApiController
Il protocol è
- PayPal HTTP POST vostro ascoltatore un messaggio IPN che notifica di un evento.
- Il listener restituisce una risposta HTTP 200 vuota a PayPal.
- Il listener HTTP invia il messaggio completo, inalterato a PayPal; il messaggio deve contenere gli stessi campi (nello stesso ordine) come messaggio originale ed essere codificato allo stesso modo del messaggio originale .
- PayPal invia una sola parola indietro: VERIFIED (se il messaggio corrisponde all'originale) o INVALID (se il messaggio non corrisponde all'originale ).
Finora ho
[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/cgi-bin/webscr";
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.PostAsync("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;
}
Il mio problema è che non riesco a capire come inviare la richiesta originale a Paypal con i parametri nello stesso ordine. Potrei costruire un HttpContent
con il mio PaypalIPNBindingModel
ma non posso garantire l'ordine.
C'è un modo per raggiungere questo obiettivo?
Grazie
Non è possibile ricevere come una stringa da PayPal, quindi è possibile deserializzare da soli, fate quello che dovete fare per convalidarlo, poi posta la stringa hanno mandato indietro? –
Grazie, sì penso, ma ho pensato che sarebbe stato più elegante usare il modello di binding di asp.net, ma se non c'è altro modo, farò la deserializzazione da solo. – Marc