public void GetStatus(byte[] parameters) { //verify the transaction var status = Verify(true, parameters); if (status == "VERIFIED") { //check that the payment_status is Completed if (PayPalPaymentInfo.payment_status.ToLower() == "completed") { //check that txn_id has not been previously processed to prevent duplicates //check that receiver_email is your Primary PayPal email //check that payment_amount/payment_currency are correct //process payment/refund/etc } else if (status == "INVALID") { //log for manual investigation } else { PayPalLog.Debug(string.Format("Unknown status[{0}] {1}", status, JsonConvert.SerializeObject(PayPalPaymentInfo))); } } }
public OrderRecord UpdateOrderStatus(PayPalPaymentInfo payPalPaymentInfo) { var order = GetOrderByNumber(payPalPaymentInfo.invoice); OrderStatus orderStatus; switch (payPalPaymentInfo.payment_status.ToLower()) { case "completed": orderStatus = OrderStatus.Paid; break; default: orderStatus = OrderStatus.Cancelled; break; } //if (order.Status == orderStatus) // return; order.Status = orderStatus; order.PaymentServiceProviderResponse = JsonConvert.SerializeObject(payPalPaymentInfo); order.PaymentReference = payPalPaymentInfo.txn_id; switch (order.Status) { case OrderStatus.Paid: order.PaidAt = _dateTimeService.Now; break; case OrderStatus.Completed: order.CompletedAt = _dateTimeService.Now; break; case OrderStatus.Cancelled: order.CancelledAt = _dateTimeService.Now; break; } //PayPalLog.Debug(JsonConvert.SerializeObject(order)); // _orderRepository.Update(order); PayPalLog.Debug("Updated"); return(order); }
public HttpStatusCodeResult IPN(FormCollection result) { try { var payPalPaymentInfo = new PayPalPaymentInfo(); TryUpdateModel(payPalPaymentInfo, result.ToValueProvider()); var model = new PayPalListenerModel { PayPalPaymentInfo = payPalPaymentInfo }; var parameters = Request.BinaryRead(Request.ContentLength); if (parameters.Length > 0) { model.GetStatus(parameters); PayPalLog.Debug(payPalPaymentInfo.invoice); PayPalLog.Debug(payPalPaymentInfo.payment_status); try { var order = _orderService.GetOrderByNumber(payPalPaymentInfo.invoice); OrderStatus orderStatus; switch (payPalPaymentInfo.payment_status.ToLower()) { case "completed": orderStatus = OrderStatus.Paid; break; default: orderStatus = OrderStatus.Cancelled; break; } order.Status = orderStatus; order.PaymentReference = payPalPaymentInfo.txn_id; switch (order.Status) { case OrderStatus.Paid: order.PaidAt = DateTime.Now; break; case OrderStatus.Completed: order.CompletedAt = DateTime.Now; break; case OrderStatus.Cancelled: order.CancelledAt = DateTime.Now; break; } } catch (Exception ex) { PayPalLog.Debug(string.Format("Error saving order [{0}] {1}", payPalPaymentInfo.invoice, JsonConvert.SerializeObject(payPalPaymentInfo))); PayPalLog.Error(ex); } } else { PayPalLog.Debug(string.Format("No PayPal return parameters [{0}]", JsonConvert.SerializeObject(result))); } } catch (Exception ex) { PayPalLog.Debug(string.Format("Error unknown [{0}] {1}", ex.Message, result)); PayPalLog.Error(ex); } return(new HttpStatusCodeResult(200, "Success")); }