/// <summary> /// Post process payment (used by payment gateways that require redirecting to a third-party URL) /// </summary> /// <param name="postProcessPaymentRequest">Payment info required for an order processing</param> public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest) { //create common query parameters for the request try { ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return(true); }; var kimial = new KimialPG.KimiaIPGRouteServiceSoapClient(KimialPG.KimiaIPGRouteServiceSoapClient.EndpointConfiguration.KimiaIPGRouteServiceSoap); decimal OrderTotal = postProcessPaymentRequest.Order.OrderTotal; if (!_payPaymentSettings.IsToman) { OrderTotal = postProcessPaymentRequest.Order.OrderTotal * 10; } string returnUrl = this._webHelper.GetStoreLocation() + "SizPay/Verify?OrderId=" + postProcessPaymentRequest.Order.Id.ToString(); DateTime d = DateTime.Now; PersianCalendar pc = new PersianCalendar(); var result1 = kimial.GetTokenAsync(new KimialPG.GenerateToken() { UserName = _payPaymentSettings.UserName, Password = _payPaymentSettings.Password, MerchantID = _payPaymentSettings.MerchentId, TerminalID = _payPaymentSettings.TerminalId, Amount = Convert.ToInt32(OrderTotal), DocDate = string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d)), OrderID = postProcessPaymentRequest.Order.Id.ToString(), ReturnURL = returnUrl, //ExtraInf=_payPaymentSettings.InvoiceNo, InvoiceNo = postProcessPaymentRequest.Order.Id.ToString(), AppExtraInf = new KimialPG.AppExtraInf(), }).Result;//.Body.GetTokenResult; var result2 = result1.Body; var result = result2.GetTokenResult; if (result.ResCod == 0) { postProcessPaymentRequest.Order.AuthorizationTransactionCode = result.Token; EngineContext.Current.Resolve <IOrderService>().UpdateOrder(postProcessPaymentRequest.Order); this._httpContextAccessor.HttpContext.Response.Redirect( this._webHelper.GetStoreLocation() + "SizPay/Pay?MerchantID=" + _payPaymentSettings.MerchentId + "&TerminalID=" + _payPaymentSettings.TerminalId + "&Token=" + result.Token); } else { this.logger.Error("Error Code : " + result.ResCod + " " + "Error Message : " + result.Message); throw new NopException("Error Code : " + result.ResCod + " " + "Error Message : " + result.Message); } } catch (Exception exp) { this.logger.Error("Error Code : " + exp.Message); throw new NopException("Error Message" + exp.Message); } }
//[HttpPost] public ActionResult Verify(int ResCod, string Message, int MrchID, string TrmnlID, int InvoiceNo, string ExtraInf, string Token) { if (ResCod == 0) { var order = _orderService.GetOrderById(InvoiceNo); if (order.AuthorizationTransactionCode == Token) { ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return(true); }; var kimial = new KimialPG.KimiaIPGRouteServiceSoapClient(KimialPG.KimiaIPGRouteServiceSoapClient.EndpointConfiguration.KimiaIPGRouteServiceSoap); var result = kimial.ConfirmAsync(new KimialPG.PaymentRequest() { MerchantID = _payPaymentSettings.MerchentId, Password = _payPaymentSettings.Password, UserName = _payPaymentSettings.UserName, TerminalID = _payPaymentSettings.TerminalId, Token = Token }).Result.Body.ConfirmResult; if (result.ResCod == 0) { this._orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = result.TraceNo + " " + result.TransNo, DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow, }); _orderProcessingService.MarkOrderAsPaid(order); return(RedirectToRoute("CheckoutCompleted", new { orderId = order.Id })); } else { this._orderService.InsertOrderNote(new OrderNote { OrderId = order.Id, Note = result.Message, DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow, }); } _orderService.UpdateOrder(order); } } return(base.RedirectToAction("Error", "SizPay", new { ErrorCode = ResCod, Message = Message })); }