/// <summary> /// Executes the transaction request to SagePay /// </summary> /// <param name="orderInfo"></param> /// <returns></returns> public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo) { var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id); var sagePayDirectIntegration = new SagePayDirectIntegration(); var request = sagePayDirectIntegration.DirectPaymentRequest(); SetRequestData(request, orderInfo); var result = sagePayDirectIntegration.ProcessDirectPaymentRequest(request, SagePaySettings.DirectPaymentUrl); if (result.Status == ResponseStatus.OK || (SagePaySettings.DefaultTransactionType == TransactionType.AUTHENTICATE && result.Status == ResponseStatus.REGISTERED)) { orderInfo.PaymentInfo.Parameters = result.Status + "&" + result.StatusDetail; PaymentProviderHelper.SetTransactionId(orderInfo, result.VpsTxId); //Response.Redirect(string.Format("Result.aspx?vendorTxCode={0}", request.VendorTxCode)); } else if (result.Status == ResponseStatus.THREEDAUTH) { // todo: not supported yet! code below is work in progress //var threeDSecureRequest = new PaymentRequest(); //threeDSecureRequest.Parameters.Add("paReq", result.PaReq.Replace(" ", "+")); //threeDSecureRequest.Parameters.Add("acsUrl", result.AcsUrl); //threeDSecureRequest.Parameters.Add("md", result.Md); //threeDSecureRequest.Parameters.Add("vendorTxCode", request.VendorTxCode); //// Save Order with Order status in 3D Process //var threeDAuth = new NameValueCollection //{ // {"paReq", result.PaReq.Replace(" ", "+")}, // {"acsUrl", result.AcsUrl}, // {"md", result.Md}, // {"vendorTxCode", request.VendorTxCode} //}; //if (HttpContext.Current.Session["USER_3DAUTH"] != null) //{ // HttpContext.Current.Session["USER_3DAUTH"] = null; //} //HttpContext.Current.Session.Add("USER_3DAUTH", threeDAuth); ////<form action="<%= ACSUrl %>" method="post"> ////<input type="hidden" name="PaReq" value="<%= PaReq %>" /> ////<input type="hidden" name="TermUrl" value="<%= TermUrl %>" /> ////<input type="hidden" name="MD" value="<%= MD %>" /> ////<input type="submit" value="Go" /> ////</form> //var responseString = _requestSender.SendRequest(result.AcsUrl, threeDSecureRequest.ParametersAsString); //var threeDAuthRequest = sagePayDirectIntegration.ThreeDAuthRequest(); //threeDAuthRequest.Md = Request.Form["MD"]; //threeDAuthRequest.PaRes = Request.Form["PaRes"]; //var directPaymentResult = sagePayDirectIntegration.ProcessDirect3D(threeDAuthRequest); //if (directPaymentResult.Status == ResponseStatus.OK) //{ // orderInfo.Paid = true; // orderInfo.Status = OrderStatus.ReadyForDispatch; //} //else //{ // Log.Instance.LogError("SagePay Did not return a proper directPaymentResult status: " + directPaymentResult.StatusDetail); // PaymentProviderHelper.AddValidationResult(orderInfo, orderInfo.PaymentInfo.Id, "SagePayReturnedError", directPaymentResult.StatusDetail); //} } else { Log.Instance.LogError("SagePay Did not return a proper status: " + result.StatusDetail); PaymentProviderHelper.AddValidationResult(orderInfo, orderInfo.PaymentInfo.Id, "SagePayReturnedError", result.StatusDetail); } orderInfo.Save(); return(new PaymentRequest()); }
/// <summary> /// Executes the transaction request to SagePay /// </summary> /// <param name="orderInfo"></param> /// <returns></returns> public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo) { var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id); var sagePayDirectIntegration = new SagePayDirectIntegration(); var request = sagePayDirectIntegration.DirectPaymentRequest(); SetRequestData(request, orderInfo); var result = sagePayDirectIntegration.ProcessDirectPaymentRequest(request, SagePaySettings.DirectPaymentUrl); if (result.Status == ResponseStatus.OK || (SagePaySettings.DefaultTransactionType == TransactionType.AUTHENTICATE && result.Status == ResponseStatus.REGISTERED)) { orderInfo.PaymentInfo.Parameters = result.Status + "&" + result.StatusDetail; PaymentProviderHelper.SetTransactionId(orderInfo, result.VpsTxId); //Response.Redirect(string.Format("Result.aspx?vendorTxCode={0}", request.VendorTxCode)); } else if (result.Status == ResponseStatus.THREEDAUTH) { // todo: not supported yet! code below is work in progress //var threeDSecureRequest = new PaymentRequest(); //threeDSecureRequest.Parameters.Add("paReq", result.PaReq.Replace(" ", "+")); //threeDSecureRequest.Parameters.Add("acsUrl", result.AcsUrl); //threeDSecureRequest.Parameters.Add("md", result.Md); //threeDSecureRequest.Parameters.Add("vendorTxCode", request.VendorTxCode); //// Save Order with Order status in 3D Process //var threeDAuth = new NameValueCollection //{ // {"paReq", result.PaReq.Replace(" ", "+")}, // {"acsUrl", result.AcsUrl}, // {"md", result.Md}, // {"vendorTxCode", request.VendorTxCode} //}; //if (HttpContext.Current.Session["USER_3DAUTH"] != null) //{ // HttpContext.Current.Session["USER_3DAUTH"] = null; //} //HttpContext.Current.Session.Add("USER_3DAUTH", threeDAuth); ////<form action="<%= ACSUrl %>" method="post"> ////<input type="hidden" name="PaReq" value="<%= PaReq %>" /> ////<input type="hidden" name="TermUrl" value="<%= TermUrl %>" /> ////<input type="hidden" name="MD" value="<%= MD %>" /> ////<input type="submit" value="Go" /> ////</form> //var responseString = _requestSender.SendRequest(result.AcsUrl, threeDSecureRequest.ParametersAsString); //var threeDAuthRequest = sagePayDirectIntegration.ThreeDAuthRequest(); //threeDAuthRequest.Md = Request.Form["MD"]; //threeDAuthRequest.PaRes = Request.Form["PaRes"]; //var directPaymentResult = sagePayDirectIntegration.ProcessDirect3D(threeDAuthRequest); //if (directPaymentResult.Status == ResponseStatus.OK) //{ // orderInfo.Paid = true; // orderInfo.Status = OrderStatus.ReadyForDispatch; //} //else //{ // Log.Instance.LogError("SagePay Did not return a proper directPaymentResult status: " + directPaymentResult.StatusDetail); // PaymentProviderHelper.AddValidationResult(orderInfo, orderInfo.PaymentInfo.Id, "SagePayReturnedError", directPaymentResult.StatusDetail); //} } else { Log.Instance.LogError("SagePay Did not return a proper status: " + result.StatusDetail); PaymentProviderHelper.AddValidationResult(orderInfo, orderInfo.PaymentInfo.Id, "SagePayReturnedError", result.StatusDetail); } orderInfo.Save(); return new PaymentRequest(); }