¿Hay alguna muestra para PayPal IPN?
Tengo un proyecto Asp.Net WEB API 2 y me gustaría implementar un controlador de escucha de Notificación de pago instantánea (IPN).
No puedo encontrar ningún ejemplo y paquete nuget. Todo lo que necesito es reconocer que el usuario pagó con el botón html estándar en Paypal. Es bastante simple.
Todos los paquetes nuget son para crear una factura o un botón personalizado. No es lo que necesito
Las muestras en paypal son para asp.net clásico y no para MVC o WEB API MVC
Estoy seguro de que alguien ya lo hizo y cuando comencé a codificar tuve la sensación de que estaba reinventando la rueda.
¿Hay algún ejemplo de controlador de escucha IPN?
Al menos un PaypalIPNBindingModel para vincular la consulta de Paypal.
[Route("IPN")]
[HttpPost]
public IHttpActionResult IPN(PaypalIPNBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
return Ok();
}
EDITAR
Hasta ahora tengo el siguiente código
[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;
}
pero para el paso 3 intenté publicar mi modelo como json pero paypal devuelve una página HTML en lugar de VALIDADA o NO VÁLIDA. Descubrí que tengo que usarapplication/x-www-form-urlencoded
y los parámetros deben estar en el mismo orden.
¿Cómo puedo obtener la URL de solicitud?
Usaría la consulta Url y agregaría&cmd=_notify-validate
lo