You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
482 lines
19 KiB
482 lines
19 KiB
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") + "\",");
|
|
sb.Append("\"RESPONSE_TEXT\":\"" + jsonObj.GetValue("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 && tempo.GetValue("PURCHASE_COUNT") != null)
|
|
{
|
|
sb.Append("\\\"EPS_TOTAL_AMT\\\":\\\"" + tempo.GetValue("EPS_TOTAL_AMT") + "\\\",");
|
|
sb.Append("\\\"CASHBACK_COUNT\\\":\\\"" + tempo.GetValue("CASHBACK_COUNT") + "\\\",");
|
|
sb.Append("\\\"CASHBACK_AMT\\\":\\\"" + tempo.GetValue("CASHBACK_AMT") + "\\\",");
|
|
sb.Append("\\\"PURCHASE_COUNT\\\":\\\"" + tempo.GetValue("PURCHASE_COUNT") + "\\\"");
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
|