private static string CreateWebRequest(AmazonFPS.Request request) { string response = string.Empty; Uri url = new Uri(request.ToString()); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = WebRequestMethods.Http.Post; try { WebResponse webResponse = webRequest.GetResponse(); using (StreamReader sr = new StreamReader(webResponse.GetResponseStream())) { response = sr.ReadToEnd(); sr.Close(); } } catch (WebException e) { WebResponse webException = e.Response; using (StreamReader sr = new StreamReader(webException.GetResponseStream())) { response = sr.ReadToEnd(); sr.Close(); } } return(response); }
public static string CaptureOrder(Order o) { AmazonFPS.Request request = new AmazonFPS.Request(); string status = string.Empty; if (AppLogic.AppConfigBool("UseLiveTransactions")) { request.url = AppLogic.AppConfig("AMAZON.FPS_LiveServer"); } else { request.url = AppLogic.AppConfig("AMAZON.FPS_TestServer"); } request.ord = o; request.accessKey = AppLogic.AppConfig("AMAZON.AccessKey"); request.type = AmazonFPS.Request.ActionType.Settle; request.secretKey = AppLogic.AppConfig("AMAZON.SecretKey"); request.timeStamp = string.Concat(DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture), "Z"); string response = CreateWebRequest(request); if (response.Contains("<Errors")) { status = GetErrorMessages(response); } else { AmazonFPS.ResponseDeserialization.SettleResponse deserializedResponse = (AmazonFPS.ResponseDeserialization.SettleResponse)DeserializeResponse(response, typeof(AmazonFPS.ResponseDeserialization.SettleResponse)); if (deserializedResponse.settle.tranStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Pending || deserializedResponse.settle.tranStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Success) { AmazonFPS.ResponseDeserialization.TransactionStatus tranStatus = deserializedResponse.settle.tranStatus; StringBuilder txResult = new StringBuilder(); txResult.AppendFormat("TransactionId={0}", deserializedResponse.settle.tranId); txResult.AppendFormat("&TransactionStatus={0}", deserializedResponse.settle.tranStatus); txResult.AppendFormat("&RequestId={0}", deserializedResponse.metadata.reqId); o.CaptureTXResult = txResult.ToString(); StringBuilder txCommand = new StringBuilder(); txCommand.AppendFormat("Action={0}", tranStatus.ToString()); txCommand.AppendFormat("&AWSAccessKeyId={0}", request.accessKey); txCommand.AppendFormat("&ReserveTransactionId={0}", request.ord.AuthorizationPNREF); txCommand.AppendFormat("&SignatureVersion={0}", request.signatureVersion); txCommand.AppendFormat("&TimeStamp={0}", request.timeStamp); txCommand.AppendFormat("&Version={0}", request.schemaVersion); o.CaptureTXCommand = txCommand.ToString(); DB.ExecuteSQL(String.Format("update orders set CaptureTXCommand={0}, CaptureTXResult={1} where OrderNumber={2}", DB.SQuote(txCommand.ToString()), DB.SQuote(txResult.ToString()), o.OrderNumber)); status = AppLogic.ro_OK; } } return(status); }
public static string UpdateTransaction(Order o) { string status = AppLogic.ro_OK; AmazonFPS.Request request = new AmazonFPS.Request(); if (AppLogic.AppConfigBool("UseLiveTransactions")) { request.url = AppLogic.AppConfig("AMAZON.FPS_LiveServer"); } else { request.url = AppLogic.AppConfig("AMAZON.FPS_TestServer"); } request.type = AmazonFPS.Request.ActionType.GetTransactionStatus; request.accessKey = AppLogic.AppConfig("AMAZON.AccessKey"); request.secretKey = AppLogic.AppConfig("AMAZON.SecretKey"); request.timeStamp = string.Concat(DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture), "Z"); request.ord = o; string response = CreateWebRequest(request); if (response.Contains("<Errors")) { status = GetErrorMessages(response); } else { AmazonFPS.ResponseDeserialization.UpdateTransaction deserializedResponse = (AmazonFPS.ResponseDeserialization.UpdateTransaction)DeserializeResponse(response, typeof(AmazonFPS.ResponseDeserialization.UpdateTransaction)); switch (deserializedResponse.transResult.StatusCode) { case AmazonFPS.ResponseDeserialization.StatusCodes.Success: { if ((o.TransactionState.Equals(AppLogic.ro_TXStateAuthorized) || o.TransactionState.Equals(AppLogic.ro_TXStatePending)) && deserializedResponse.transResult.TransactionStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Success) { status = Gateway.ForceCapture(o.OrderNumber); } else if (o.TransactionState.Equals(AppLogic.ro_TXStatePending) && deserializedResponse.transResult.TransactionStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Reserved) { MakeForceAuthorize(o.OrderNumber); } break; } case AmazonFPS.ResponseDeserialization.StatusCodes.Cancelled: { status = "Order Transaction Updated"; if (o.TransactionState.Equals("AUTHORIZED") && deserializedResponse.transResult.TransactionStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Cancelled) { status = Gateway.ForceVoidStatus(o.OrderNumber); } break; } case AmazonFPS.ResponseDeserialization.StatusCodes.PendingVerification: { status = "Order is still in pending status"; break; } case AmazonFPS.ResponseDeserialization.StatusCodes.PendingNetworkResponse: { status = "Order is still in pending network response"; break; } default: break; } } return(status); }
public static string RefundOrder(int originalOrderNumber, int newOrderNumber, decimal refundAmount, string refundReason, Address useBillingAddress) { string transactionId = string.Empty, status = string.Empty; using (SqlConnection conn = DB.dbConn()) { conn.Open(); using (IDataReader rs = DB.GetRS(String.Format("SELECT AuthorizationPNREF, OrderTotal FROM Orders with (NOLOCK) where OrderNumber={0}", originalOrderNumber.ToString()), conn)) { if (rs.Read()) { transactionId = DB.RSField(rs, "AuthorizationPNREF"); if (refundAmount == 0M) { refundAmount = DB.RSFieldDecimal(rs, "OrderTotal"); } } } } AmazonFPS.Request request = new AmazonFPS.Request(); if (AppLogic.AppConfigBool("UseLiveTransactions")) { request.url = AppLogic.AppConfig("AMAZON.FPS_LiveServer"); } else { request.url = AppLogic.AppConfig("AMAZON.FPS_TestServer"); } request.type = AmazonFPS.Request.ActionType.Refund; request.accessKey = AppLogic.AppConfig("AMAZON.AccessKey"); request.secretKey = AppLogic.AppConfig("AMAZON.SecretKey"); request.timeStamp = string.Concat(DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture), "Z"); request.ord = new Order(originalOrderNumber); request.description = refundReason; string response = CreateWebRequest(request); if (response.Contains("<Errors")) { status = GetErrorMessages(response); } else { AmazonFPS.ResponseDeserialization.RefundResponse deserializedResponse = (AmazonFPS.ResponseDeserialization.RefundResponse)DeserializeResponse(response, typeof(AmazonFPS.ResponseDeserialization.RefundResponse)); if (deserializedResponse.refund.tranStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Pending || deserializedResponse.refund.tranStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Success) { AmazonFPS.ResponseDeserialization.TransactionStatus tranStatus = deserializedResponse.refund.tranStatus; StringBuilder txResult = new StringBuilder(); txResult.AppendFormat("TransactionId={0}", deserializedResponse.refund.tranId); txResult.AppendFormat("&TransactionStatus={0}", deserializedResponse.refund.tranStatus); txResult.AppendFormat("&RequestId={0}", deserializedResponse.metadata.reqId); StringBuilder txCommand = new StringBuilder(); txCommand.AppendFormat("Action={0}", tranStatus.ToString()); txCommand.AppendFormat("&AWSAccessKeyId={0}", request.accessKey); txCommand.AppendFormat("&CallerDescription={0}", request.GetCallerDescription()); txCommand.AppendFormat("&CallerReference={0}", request.GetCallerReference()); txCommand.AppendFormat("&TransactionId={0}", request.ord.AuthorizationPNREF); txCommand.AppendFormat("&SignatureVersion={0}", request.signatureVersion); txCommand.AppendFormat("&TimeStamp={0}", request.timeStamp); txCommand.AppendFormat("&Version={0}", request.schemaVersion); DB.ExecuteSQL(String.Format("update orders set RefundTXCommand={0}, RefundTXResult={1} where OrderNumber={2}", DB.SQuote(txCommand.ToString()), DB.SQuote(txResult.ToString()), originalOrderNumber.ToString())); status = AppLogic.ro_OK; } } return(status); }
public static string VoidOrder(int orderNumber) { string transactionID = string.Empty, transactionState = string.Empty, status = string.Empty; using (SqlConnection conn = DB.dbConn()) { conn.Open(); using (IDataReader rs = DB.GetRS(String.Format("SELECT AuthorizationPNREF, TransactionState FROM Orders with (NOLOCK) where OrderNumber={0}", orderNumber.ToString()), conn)) { if (rs.Read()) { transactionState = DB.RSField(rs, "TransactionState"); transactionID = DB.RSField(rs, "AuthorizationPNREF"); } } } if (transactionState.Equals("CAPTURED", StringComparison.InvariantCultureIgnoreCase)) { return(AppLogic.GetString("AmazonSimplePay.VoidedCaptureError", Customer.Current.SkinID, Customer.Current.LocaleSetting)); } AmazonFPS.Request request = new AmazonFPS.Request(); if (AppLogic.AppConfigBool("UseLiveTransactions")) { request.url = AppLogic.AppConfig("AMAZON.FPS_LiveServer"); } else { request.url = AppLogic.AppConfig("AMAZON.FPS_TestServer"); } request.type = AmazonFPS.Request.ActionType.Cancel; request.accessKey = AppLogic.AppConfig("AMAZON.AccessKey"); request.secretKey = AppLogic.AppConfig("AMAZON.SecretKey"); request.timeStamp = string.Concat(DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture), "Z"); request.ord = new Order(orderNumber); string response = CreateWebRequest(request); if (response.Contains("<Errors")) { status = GetErrorMessages(response); } else { AmazonFPS.ResponseDeserialization.CancelResponse deserializedResponse = (AmazonFPS.ResponseDeserialization.CancelResponse)DeserializeResponse(response, typeof(AmazonFPS.ResponseDeserialization.CancelResponse)); if (deserializedResponse.cancel.tranStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Pending || deserializedResponse.cancel.tranStatus == AmazonFPS.ResponseDeserialization.TransactionStatus.Cancelled) { AmazonFPS.ResponseDeserialization.TransactionStatus tranStatus = deserializedResponse.cancel.tranStatus; StringBuilder txResult = new StringBuilder(); txResult.AppendFormat("TransactionId={0}", deserializedResponse.cancel.tranId); txResult.AppendFormat("&TransactionStatus={0}", deserializedResponse.cancel.tranStatus); txResult.AppendFormat("&RequestId={0}", deserializedResponse.metadata.reqId); StringBuilder txCommand = new StringBuilder(); txCommand.AppendFormat("Action={0}", tranStatus.ToString()); txCommand.AppendFormat("&AWSAccessKeyId={0}", request.accessKey); txCommand.AppendFormat("&TransactionId={0}", request.ord.AuthorizationPNREF); txCommand.AppendFormat("&SignatureVersion={0}", request.signatureVersion); txCommand.AppendFormat("&TimeStamp={0}", request.timeStamp); txCommand.AppendFormat("&Version={0}", request.schemaVersion); DB.ExecuteSQL(String.Format("update orders set VoidTXCommand={0}, VoidTXResult={1} where OrderNumber={2}", DB.SQuote(txCommand.ToString()), DB.SQuote(txResult.ToString()), orderNumber)); status = AppLogic.ro_OK; } } return(status); }