terminos sesion saldo por pago negativo iniciar hacer gratis cuenta crear consecuencias condiciones como colombia c# asp.net paypal payment-gateway

c# - sesion - paypal terminos y condiciones



El estándar de pago de PayPal devuelve GET en lugar de POST desde dispositivos móviles, por lo tanto no puede validar-registrar el pago (1)

He hecho esto para PayPal en mi proyecto WebAPI Asp.NET. Espero que lo ayude:

[AllowAnonymous] [HttpPost] [Route("api/PayPal/IPN")] [ResponseType(typeof(OrderPayPalDTO))] public async Task<IHttpActionResult> PayPalIPN() { try { decimal tot; var data = this.Request.Content.ReadAsStringAsync().Result; if (data == null) return BadRequest(); // Parse the query string variables into a NameValueCollection. NameValueCollection qscoll = HttpUtility.ParseQueryString(data); PayPalViewModel payPalModel = new PayPalViewModel(); var payPal = payPalModel.ToPayPalVM(qscoll); //HRE IS A EXTENSION METHOD TO MAP to a CLASS if (payPal == null) return InternalServerError(new Exception()); //Try cast total from paypal if (!decimal.TryParse(payPal.mc_gross, out tot)) return InternalServerError(new Exception(Constant.Error.PAYMENT_ERROR_TOTAL_CAST)); // If status is Ok /or Completed if (payPal.payment_status.Equals(Constant.PaymentStatus.PAYED) || payPal.payment_status.Equals(Constant.PaymentStatus.COMPLETED)) { // update payment bool ok = await this.UpdatePayment(order, user); if (!ok) return InternalServerError(new Exception(Constant.Error.PAYMENT_ERROR_UPDATE)); } return Ok(order); } catch (Exception ex) { _logger.LogException(ex); return (Constant.CONFIGURATION_GLOBALS.IS_DEVELOPMENT_MODE) ? InternalServerError(ex) : InternalServerError(new Exception(Constant.Error.ERROR_GENERIC_500)); } }

Y mi asignador y clase PayPalViewModel

public class PayPalViewModel { public string mc_gross { get; set; } public string custom { get; set; } public string payment_status { get; set; } public string payment_type { get; set; } public string mc_currency { get; set; } public string payer_id { get; set; } public DateTime payment_date { get; set; } public string payment_gross { get; set; } /// <summary> /// ToPayPalVM From NameValueCollection /// </summary> /// <returns></returns> public PayPalViewModel ToPayPalVM(NameValueCollection qscoll) { if (qscoll == null) return null; DateTime date = DateTime.Now; string mcGross = qscoll["mc_gross"]; string paymentType = qscoll["payment_type"]; string mcCurrency = qscoll["mc_currency"]; string paymentStatus = qscoll["payment_status"]; string payerId = qscoll["payer_id"]; string paymentDate = qscoll["payment_date"]; string paymentGross = qscoll["payment_gross"]; string cust = qscoll["custom"]; var datePay = DateTime.TryParse(paymentDate, out date); return new PayPalViewModel { mc_gross = mcGross, custom = cust, payment_status = paymentStatus, payment_type = paymentType, mc_currency = mcCurrency, payer_id = payerId, payment_gross = paymentGross, payment_date = (datePay) ? date : DateTime.Now }; } }

He integrado PayPal Payment Standard hace un par de años para adquirir el pago.

Mi aplicación está en Asp.Net. Está en modo sandbox actualmente.

Tengo un botón Pagar ahora en mi sitio web que tiene PostBackURL en el sitio de PayPal con todos los parámetros necesarios. Cuando el usuario hace clic en el botón, se redirige a PayPal, que el usuario puede pagar a través de su cuenta o tarjeta de débito / crédito. Y en una transacción exitosa el usuario es enviado de regreso a mi aplicación. Cuando el usuario vuelve a mi aplicación, obtengo varios parámetros como "payment_status" en la colección Request.Form. Valido la respuesta y muestro el mensaje de éxito / falla en consecuencia.

El flujo anterior está funcionando bien cuando el usuario está en un navegador en el escritorio.

Pero cuando el usuario está en dispositivos móviles y trabaja con el navegador móvil. El usuario se conecta a la página amigable de PayPal. El usuario paga con su cuenta. Luego se muestra el mensaje de éxito. Pero cuando el usuario es redirigido a mi aplicación, no obtengo ningún valor en la colección Request.Form. Debido a lo cual no puedo validar la respuesta de PayPal.

Además, he aprendido que cuando en los navegadores de escritorio PayPal devuelve la respuesta mediante el método POST a mi sitio web, Request.Form contiene los datos.

Mientras que, en el caso de navegadores móviles, PayPal devuelve la respuesta mediante el método GET, por lo tanto, Request.Form no contiene ningún dato.

¿Por qué PayPal devuelve la respuesta a través de GET? En tal caso, los datos no están disponibles, incluso en la cadena de consulta, ¿cómo puedo validar la respuesta, si el pago es exitoso o no?

He leído documentación y dice que no hay otra configuración específica para el estándar de pago móvil de PayPal.

No deseo migrar para realizar el pago o cualquier otra configuración.

También he buscado muchos hilos en SO relacionados con el mismo y no encontré ninguna solución adecuada que atienda a mi necesidad y, por lo tanto, hago una nueva pregunta.