using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Text; namespace n5coredll { public class SettleResult { private static string EVENT_NAME = "EVENT_NAME"; private static string STATUS = "STATUS"; private static string RESP_CODE = "RESP_CODE"; private static string RESPONSE_TEXT = "RESPONSE_TEXT"; private static string TXN_DATE = "TXN_DATE"; private static string TXN_TIME = "TXN_TIME"; private static string MID = "MID"; private static string TID = "TID"; private static string HOST_COUNT = "HOST_COUNT"; private static string HOST_AMT = "HOST_AMT"; private static string BATCH = "BATCH"; private static string BANKIN_VALUE_DATE = "BANKIN_VALUE_DATE"; private static string EPS_TOTAL_COUNT = "EPS_TOTAL_COUNT"; private static string EPS_TOTAL_AMT = "EPS_TOTAL_AMT"; private static string CASHBACK_COUNT = "CASHBACK_COUNT"; private static string CASHBACK_AMT = "CASHBACK_AMT"; private static string PURCHASE_COUNT = "PURCHASE_COUNT"; private static string PURCHASE_AMT = "PURCHASE_AMT"; private static string TRACE_NO = "TRACE_NO"; private string eventName = ""; private string status; private string respCode; private string responseText = ""; private string txnDate; private string txnTime; private string mid; private string tid; private decimal hostCount; private decimal hostAmt; private string bankinValueDate = ""; private decimal eptTotalCount; private decimal eptTotalAmt; private decimal cashbackCount; private decimal cashbackAmt; private decimal purchaseCount; private decimal purchaseAmt; private string traceNo; private void setEventName(string pEventName) { eventName = pEventName; } public string EventName { get { return eventName; } } public string Status { get { return status; } } private void setStatus(string pStatus) { this.status = pStatus; } public string RespCode { get { return respCode; } } private void setRespCode(string pRespCode) { this.respCode = pRespCode; } public string ResponseText { get { return responseText; } } private void setResponseText(string pResponseText) { this.responseText = pResponseText; } public string TraceNo { get { return traceNo; } } private void setTraceNo(string pTraceNo) { this.traceNo = pTraceNo; } public string TxnDate { get { return txnDate; } } private void setTxnDate(string pTxnDate) { this.txnDate = pTxnDate; } public string TxnTime { get { return txnTime; } } private void setTxnTime(string pTxnTime) { this.txnTime = pTxnTime; } public string getMid() { return mid; } private void setMid(string pMid) { this.mid = pMid; } public string getTid() { return tid; } private void setTid(string pTid) { this.tid = pTid; } public decimal HostCount { get { return hostCount; } } private void setHostCount(decimal pHostCount) { this.hostCount = pHostCount; } public decimal HostAmt { get { return hostAmt; } } private void setHostAmt(decimal pHostAmt) { this.hostAmt = pHostAmt; } private void setBankinValueDate(string pBankinValueDate) { bankinValueDate = pBankinValueDate; } public string BankinValueDate { get { return bankinValueDate; } } public decimal EPSTotalCount { get { return eptTotalCount; } } private void setEPSTotalCount(decimal pEptTotalCount) { this.eptTotalCount = pEptTotalCount; } public decimal EPSTotalAmt { get { return eptTotalAmt; } } private void setEPSTotalAmt(decimal pEptTotalAmt) { this.eptTotalAmt = pEptTotalAmt; } public decimal CashbackCount { get { return cashbackCount; } } private void setCashbackCount(decimal pCashbackCount) { this.cashbackCount = pCashbackCount; } public decimal CashbackAmt { get { return cashbackAmt; } } private void setCashbackAmt(decimal pCashbackAmt) { this.cashbackAmt = pCashbackAmt; } public decimal PurchaseCount { get { return purchaseCount; } } private void setPurchaseCount(decimal pPurchaseCount) { this.purchaseCount = pPurchaseCount; } public decimal PurchaseAmt { get { return purchaseAmt; } } private void setPurchaseAmt(decimal pPurchaseAmt) { this.purchaseAmt = pPurchaseAmt; } private static string curTxnId; public static string toJsonForSale(string txnId, decimal txnAmt, decimal tipAmt, PaymentApp appId, string qrcValue) { string cardSaleMsg = "{\"EVENT_NAME\":\"SALE\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TIPS\":" + tipAmt + ",\"TXN_AMT\":" + txnAmt + ",\"QRC_VALUE\":\"" + qrcValue + "\"}"; return cardSaleMsg; } public static string toJsonForSale(string txnId, decimal txnAmt, decimal tipAmt, decimal cashbackAmt, string ecrRefNo, String currency, PaymentApp appId, string qrcValue, string pan, string expDate) { string cardSaleMsg = "{\"EVENT_NAME\":\"SALE\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TIPS\":" + tipAmt + ",\"TXN_AMT\":" + txnAmt + ",\"CASHBACK_AMT\":" + cashbackAmt + ",\"ECR_REF_NO\":\"" + ecrRefNo + "\",\"CURRENCY\":\"" + currency + "\",\"PAN\":\"" + pan + "\",\"EXPIRY_DATE\":\"" + expDate + "\",\"QRC_VALUE\":\"" + qrcValue + "\"}"; return cardSaleMsg; } public static string toJsonForPreauth(string txnId, decimal txnAmt, PaymentApp appId, string pan, string expDate) { string cardSaleMsg = "{\"EVENT_NAME\":\"PREAUTH\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TXN_AMT\":" + txnAmt + ",\"PAN\":\"" + pan + "\",\"EXPIRY_DATE\":\"" + expDate + "\"}"; return cardSaleMsg; } public static string toJsonForOffline(string txnId, decimal txnAmt, PaymentApp appId, string authCode, string pan, string expDate) { string cardSaleMsg = "{\"EVENT_NAME\":\"OFFLINE\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TXN_AMT\":" + txnAmt + ",\"AUTH_CODE\":\"" + authCode + "\""+ ",\"PAN\":\"" + pan + "\",\"EXPIRY_DATE\":\"" + expDate + "\"}"; return cardSaleMsg; } public static string toJsonForAdjust(string txnId, decimal totalAmt, decimal totalForeignAmt, PaymentApp appId) { string cardSaleMsg = "{\"EVENT_NAME\":\"ADJUST\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TOTAL_TXN_AMT\":" + totalAmt + ",\"TOTAL_FOREIGN_AMT\":" + totalForeignAmt + "}"; return cardSaleMsg; } private static string getTxnId() { StringBuilder txnIdSb = new StringBuilder(); DateTime dt = DateTime.Now; txnIdSb.Append(dt.ToString("yyyyMMddHHmmssfff")); Console.WriteLine("txnIdSb = " + txnIdSb.ToString()); int randomTime = 0; if (dt.Ticks.ToString().Length > 8) { Console.WriteLine("Ticks.Length > 8 = " + dt.Ticks.ToString()); randomTime = int.Parse(dt.Ticks.ToString().Substring(0, 8)); } else { randomTime = int.Parse(dt.Ticks.ToString()); } if (randomTime > 0) { Random random = new Random(randomTime); for (int i = 0; i < 15; i++) { int thidRandom = random.Next(10); txnIdSb.Append(thidRandom); } Console.WriteLine("txnIdSb.ToString = " + txnIdSb.ToString()); return txnIdSb.ToString(); } else { Console.WriteLine("randomTime is error = " + randomTime); } return ""; } public SettleResult() { } public SettleResult(string pStatus) { this.setStatus(pStatus); } public static SettleResult toSettleResultFromJsonMsg(string jsonMsg) { if (jsonMsg == null || !jsonMsg.StartsWith("{") || !jsonMsg.EndsWith("}")) { return null; } int jsonLength = jsonMsg.Length; jsonMsg = jsonMsg.Substring(0, jsonLength - 1); jsonMsg = jsonMsg.Substring(1, jsonLength - 2); string[] column = jsonMsg.Split(','); string[] valueColumn = null; string valueColumn0 = null; string valueColumn1 = null; SettleResult saleResult = new SettleResult(); for (int i = 0; i < column.Length; i++) { valueColumn = column[i].Split(':'); valueColumn0 = valueColumn[0].Replace('"', ' ').Trim(); valueColumn1 = valueColumn[1].Replace('"', ' ').Trim(); if (SettleResult.EVENT_NAME.Equals(valueColumn0)) { saleResult.setEventName(valueColumn1); } if (SettleResult.STATUS.Equals(valueColumn0)) { saleResult.setStatus(valueColumn1); } if (SettleResult.RESP_CODE.Equals(valueColumn0)) { saleResult.setRespCode(valueColumn1); } if (SettleResult.RESPONSE_TEXT.Equals(valueColumn0)) { saleResult.setResponseText(valueColumn1); } if (SettleResult.TXN_DATE.Equals(valueColumn0)) { saleResult.setTxnDate(valueColumn1); } if (SettleResult.TXN_TIME.Equals(valueColumn0)) { saleResult.setTxnTime(valueColumn1); } if (SettleResult.MID.Equals(valueColumn0)) { saleResult.setMid(valueColumn1); } if (SettleResult.TID.Equals(valueColumn0)) { saleResult.setTid(valueColumn1); } if (SettleResult.HOST_COUNT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setHostCount(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setHostCount(decimal.Parse(valueColumn1)); } } if (SettleResult.HOST_AMT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setHostAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setHostAmt(decimal.Parse(valueColumn1)); } } if (SettleResult.BANKIN_VALUE_DATE.Equals(valueColumn0)) { saleResult.setBankinValueDate(valueColumn1); } if (SettleResult.EPS_TOTAL_COUNT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setEPSTotalCount(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setEPSTotalCount(decimal.Parse(valueColumn1)); } } if (SettleResult.EPS_TOTAL_AMT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setEPSTotalAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setEPSTotalAmt(decimal.Parse(valueColumn1)); } } if (SettleResult.CASHBACK_COUNT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setCashbackCount(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setCashbackCount(decimal.Parse(valueColumn1)); } } if (SettleResult.CASHBACK_AMT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setCashbackAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setCashbackAmt(decimal.Parse(valueColumn1)); } } if (SettleResult.PURCHASE_COUNT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setPurchaseCount(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setPurchaseCount(decimal.Parse(valueColumn1)); } } if (SettleResult.PURCHASE_AMT.Equals(valueColumn0)) { if (valueColumn1 == null || "".Equals(valueColumn1)) { saleResult.setPurchaseAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); } else { saleResult.setPurchaseAmt(decimal.Parse(valueColumn1)); } } if (SettleResult.TRACE_NO.Equals(valueColumn0)) { saleResult.setTraceNo(valueColumn1); } } return saleResult; } public static string rebuildSettleRespMsg(string saleResultJsonStr) { //saleResultJsonStr = "{\"EVENT_NAME\":\"SETTLE_RESP\",\"MID\":\"000000888\",\"STATUS\":\"00\",\"TRACE_NO\":\"000485\",\"HOST_AMT\":2030.1,\"HOST_COUNT\":13,\"BATCH\":\"[{\\\"BANKIN_VALUE_DATE\\\":\\\"1117\\\",\\\"EPS_TOTAL_COUNT\\\":\\\"7\\\",\\\"EPS_TOTAL_AMT\\\":\\\"1118.10\\\"},{\\\"BANKIN_VALUE_DATE\\\":\\\"1118\\\",\\\"EPS_TOTAL_COUNT\\\":\\\"2\\\",\\\"EPS_TOTAL_AMT\\\":\\\"303.00\\\"},{\\\"BANKIN_VALUE_DATE\\\":\\\"1119\\\",\\\"EPS_TOTAL_COUNT\\\":\\\"4\\\",\\\"EPS_TOTAL_AMT\\\":\\\"609.00\\\"}]\",\"TID\":\"123372\",\"TXN_DATE\":\"091217\"}"; //saleResultJsonStr = "{\"EVENT_NAME\":\"SETTLE_RESP\",\"MID\":\"000000888\",\"STATUS\":\"00\",\"TRACE_NO\":\"000485\",\"HOST_AMT\":2030.1,\"HOST_COUNT\":13,\"TID\":\"123372\",\"TXN_DATE\":\"091217\"}"; StringBuilder sb = new StringBuilder(""); JObject jsonObj = null; try { jsonObj = JObject.Parse(saleResultJsonStr); sb.Append("{"); sb.Append("\"EVENT_NAME\":\"" + jsonObj.GetValue("EVENT_NAME") + "\","); sb.Append("\"STATUS\":\"" + jsonObj.GetValue("STATUS") + "\","); sb.Append("\"RESP_CODE\":\"" + jsonObj.GetValue("RESP_CODE") + "\","); if (jsonObj.GetValue("RESPONSE_TEXT") != null) sb.Append("\"RESPONSE_TEXT\":\"" + jsonObj.GetValue("RESPONSE_TEXT") + "\","); else sb.Append("\"RESPONSE_TEXT\":"); sb.Append("\"TXN_DATE\":\"" + jsonObj.GetValue("TXN_DATE") + "\","); sb.Append("\"TXN_TIME\":\"" + jsonObj.GetValue("TXN_TIME") + "\","); sb.Append("\"MID\":\"" + jsonObj.GetValue("MID") + "\","); sb.Append("\"TID\":\"" + jsonObj.GetValue("TID") + "\","); sb.Append("\"HOST_COUNT\":" + jsonObj.GetValue("HOST_COUNT") + ","); sb.Append("\"HOST_AMT\":" + jsonObj.GetValue("HOST_AMT") + ","); String batchJson = (String)jsonObj.GetValue("BATCH"); if (batchJson != null) { sb.Append("\"TRACE_NO\":\"" + jsonObj.GetValue("TRACE_NO") + "\","); sb.Append("\"BATCH\":\"["); JArray jlist = JArray.Parse(batchJson); for (int i = 0; i < jlist.Count; ++i) //遍历JArray { JObject tempo = JObject.Parse(jlist[i].ToString()); sb.Append("{"); sb.Append("\\\"BANKIN_VALUE_DATE\\\":\\\"" + tempo.GetValue("BANKIN_VALUE_DATE") + "\\\","); sb.Append("\\\"EPS_TOTAL_COUNT\\\":\\\"" + tempo.GetValue("EPS_TOTAL_COUNT") + "\\\","); if (tempo.GetValue("CASHBACK_COUNT") != null) { if (tempo.GetValue("EPS_TOTAL_AMT") != null) { sb.Append("\\\"EPS_TOTAL_AMT\\\":\\\"" + tempo.GetValue("EPS_TOTAL_AMT") + "\\\","); } if (tempo.GetValue("CASHBACK_COUNT") != null) { sb.Append("\\\"CASHBACK_COUNT\\\":\\\"" + tempo.GetValue("CASHBACK_COUNT") + "\\\","); } if (tempo.GetValue("CASHBACK_AMT") != null) { sb.Append("\\\"CASHBACK_AMT\\\":\\\"" + tempo.GetValue("CASHBACK_AMT") + "\\\","); } if (tempo.GetValue("PURCHASE_COUNT") != null) { sb.Append("\\\"PURCHASE_COUNT\\\":\\\"" + tempo.GetValue("PURCHASE_COUNT") + "\\\""); } if (tempo.GetValue("PURCHASE_AMT") != null) { sb.Append("\\\"PURCHASE_AMT\\\":\\\"" + tempo.GetValue("PURCHASE_AMT") + "\\\""); } } else { sb.Append("\\\"EPS_TOTAL_AMT\\\":\\\"" + tempo.GetValue("EPS_TOTAL_AMT") + "\\\""); } if (i != jlist.Count - 1) { sb.Append("},"); } else { sb.Append("}]\""); } } } else { sb.Append("\"TRACE_NO\":\"" + jsonObj.GetValue("TRACE_NO") +"\""); } sb.Append("}"); } catch (Exception ex) { } return sb.ToString(); } } }