From f4396dc23751f44e4f88f289d2b2fe02da601163 Mon Sep 17 00:00:00 2001 From: rexlin Date: Wed, 23 Sep 2020 10:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 63 + .gitignore | 261 ++++ N5_DLL_HKGOV.sln | 31 + n5coredll/LogUtil.cs | 72 + n5coredll/LoyaltyType.cs | 6 + n5coredll/N5Core.cs | 1687 +++++++++++++++++++++ n5coredll/N5PropertyOper.cs | 96 ++ n5coredll/ObjectUtil.cs | 239 +++ n5coredll/PaymentApp.cs | 15 + n5coredll/PaymentType.cs | 23 + n5coredll/Properties/AssemblyInfo.cs | 36 + n5coredll/Properties/Settings.Designer.cs | 26 + n5coredll/Properties/Settings.settings | 6 + n5coredll/RefundResult.cs | 374 +++++ n5coredll/RequestResult.cs | 164 ++ n5coredll/RetrievalResult.cs | 468 ++++++ n5coredll/SaleResult.cs | 461 ++++++ n5coredll/TxnStatus.cs | 9 + n5coredll/TxnType.cs | 5 + n5coredll/Util.cs | 36 + n5coredll/VoidResult.cs | 169 +++ n5coredll/app.config | 3 + n5coredll/n5codedll.snk | Bin 0 -> 596 bytes n5coredll/n5coredll.csproj | 89 ++ 24 files changed, 4339 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 N5_DLL_HKGOV.sln create mode 100644 n5coredll/LogUtil.cs create mode 100644 n5coredll/LoyaltyType.cs create mode 100644 n5coredll/N5Core.cs create mode 100644 n5coredll/N5PropertyOper.cs create mode 100644 n5coredll/ObjectUtil.cs create mode 100644 n5coredll/PaymentApp.cs create mode 100644 n5coredll/PaymentType.cs create mode 100644 n5coredll/Properties/AssemblyInfo.cs create mode 100644 n5coredll/Properties/Settings.Designer.cs create mode 100644 n5coredll/Properties/Settings.settings create mode 100644 n5coredll/RefundResult.cs create mode 100644 n5coredll/RequestResult.cs create mode 100644 n5coredll/RetrievalResult.cs create mode 100644 n5coredll/SaleResult.cs create mode 100644 n5coredll/TxnStatus.cs create mode 100644 n5coredll/TxnType.cs create mode 100644 n5coredll/Util.cs create mode 100644 n5coredll/VoidResult.cs create mode 100644 n5coredll/app.config create mode 100644 n5coredll/n5codedll.snk create mode 100644 n5coredll/n5coredll.csproj diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c4efe2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,261 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +#*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc \ No newline at end of file diff --git a/N5_DLL_HKGOV.sln b/N5_DLL_HKGOV.sln new file mode 100644 index 0000000..9e913bd --- /dev/null +++ b/N5_DLL_HKGOV.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.539 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "n5coredll", "n5coredll\n5coredll.csproj", "{1F0C1D84-FD97-41F1-BC8B-F2F22C1997A1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ECR_N5_DLL_TestUI", "..\ECR_N5_DLL_TestUI\ECR_N5_DLL_TestUI.csproj", "{DEF387D0-3F98-4720-874D-8A753399B206}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1F0C1D84-FD97-41F1-BC8B-F2F22C1997A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F0C1D84-FD97-41F1-BC8B-F2F22C1997A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F0C1D84-FD97-41F1-BC8B-F2F22C1997A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F0C1D84-FD97-41F1-BC8B-F2F22C1997A1}.Release|Any CPU.Build.0 = Release|Any CPU + {DEF387D0-3F98-4720-874D-8A753399B206}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEF387D0-3F98-4720-874D-8A753399B206}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEF387D0-3F98-4720-874D-8A753399B206}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEF387D0-3F98-4720-874D-8A753399B206}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {09A4E58D-A17A-46E6-A4C0-323D0C8C2E63} + EndGlobalSection +EndGlobal diff --git a/n5coredll/LogUtil.cs b/n5coredll/LogUtil.cs new file mode 100644 index 0000000..b4726dd --- /dev/null +++ b/n5coredll/LogUtil.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace n5coredll +{ + public class LogUtil + { + private static String mLogPath; + private static LogUtil mInstance; + public static LogUtil getInstance() + { + if (mInstance == null) + mInstance = new LogUtil(); + + return mInstance; + } + + public void setLogPath(String logPath) + { + if (logPath.EndsWith(@"\")) + mLogPath = logPath; + else + mLogPath = logPath + @"\"; + } + + private String getCurLogFile() + { + + StringBuilder txnIdSb = new StringBuilder(); + DateTime dt = DateTime.Now; + return ("n5dll" + "_" + dt.ToString("yyyyMMdd") +".log"); + } + + public void addRepeatLog(string logInfo) + { + try + { + String path = mLogPath + getCurLogFile(); + //path = @"C:\Users\rexli\AppData\Local\Temp\test.log"; + if (!File.Exists(path)) + { + using (StreamWriter sw = File.CreateText(path)) + { + sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff") + " [LOGGER] " + logInfo); + sw.Flush(); + sw.Close(); + } + + } + else + { + using (StreamWriter sw = File.AppendText(path)) + { + sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff") + " [LOGGER] " + logInfo); + sw.Flush(); + sw.Close(); + } + + } + // Console.WriteLine(logInfo); + + } + catch (Exception err) + { + Console.WriteLine("Exception = " + err); + } + } + } +} \ No newline at end of file diff --git a/n5coredll/LoyaltyType.cs b/n5coredll/LoyaltyType.cs new file mode 100644 index 0000000..820a33e --- /dev/null +++ b/n5coredll/LoyaltyType.cs @@ -0,0 +1,6 @@ +using System; +namespace n5coredll { + public enum LoyaltyType { + UP, MT, BK, LM, NONE + } +} diff --git a/n5coredll/N5Core.cs b/n5coredll/N5Core.cs new file mode 100644 index 0000000..8c283fa --- /dev/null +++ b/n5coredll/N5Core.cs @@ -0,0 +1,1687 @@ +using System; +using System.IO.Ports; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; + +namespace n5coredll +{ + + [ClassInterface(ClassInterfaceType.AutoDual)] + [Guid("92138541-8E7B-43FD-A4A4-748F28A934CD")] + [ProgId("n5coredll.N5Core")] + public class N5Core + { + private System.IO.Ports.SerialPort serialPort1; + private int sendTime; + private int mTotalRecvCount = 0; + private Byte[] currReqByteArr; + private string currResultJsonStr; + private bool isSending = false; + private int mRecvTimes; + private byte[] mTotalRecvResult = new byte[10000]; + private int mRecvIndex = 0; + + private bool isReadyBack = false; + private int timeOut = 1200000; + private bool isGetACK = false; + + //for serial port config + private string portName = null; + private string baudRate = null; + private string dataBits = null; + private string stopBits = null; + private string parity = null; + + private static String STATUS_NO_TXN = "13"; + private static String STATUS_SUCC = "00"; + private static String STATUS_PROCESSING = "03"; + private static String ERR_STATUS_FAIL = "10"; + + private static String ERR_CODE_OPENCOM = "DLL_ERR_0001"; + private static String ERR_MSG_OPENCOM = "Open comport fail!"; + + private static String ERR_CODE_ECHO = "DLL_ERR_0002"; + private static String ERR_MSG_ECHO = "Cannot connect terminal!"; + + private static String ERR_CODE_TIMEOUT = "DLL_ERR_0003"; + private static String ERR_MSG_TIMEOUT = "Receive timeout!"; + + private static String ERR_CODE_BUSY = "DLL_ERR_0004"; + private static String ERR_MSG_BUSY = "Last function has not returned yet!"; + + private bool isProcessingSale = false; + private static String ERR_CODE_PARAM = "DLL_ERR_0005"; + private static String ERR_MSG_PARAM = "Input params format error!"; + private Boolean ifBusy = false; + private LogUtil logger; + private static N5Core myInstance; + + public N5Core() + { + + } + + public static N5Core getInstance() + { + if (myInstance == null) + myInstance = new N5Core(); + return myInstance; + } + + public int initN5Core(string portName, string baudRate, string dataBits, string stopBits, string parity, string timeOut, string logPath) + { + int returnResult = -1; + logger = LogUtil.getInstance(); + logger.setLogPath(logPath); + + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [initN5Core] >>>>>>>>>>>>>>>>"); + logger.addRepeatLog("input param [portName]: " + portName); + logger.addRepeatLog("input param [baudRate]: " + baudRate); + logger.addRepeatLog("input param [dataBits]: " + dataBits); + logger.addRepeatLog("input param [stopBits]: " + stopBits); + logger.addRepeatLog("input param [parity]: " + parity); + logger.addRepeatLog("input param [timeOut]: " + timeOut); + logger.addRepeatLog("input param [logPath]: " + logPath); + if (portName != null && !portName.Equals(string.Empty)) + this.portName = portName; + else + this.portName = "COM1"; + + if (baudRate != null && !baudRate.Equals(string.Empty)) + this.baudRate = baudRate; + else + this.baudRate = "9600"; + + if (dataBits != null && !dataBits.Equals(string.Empty)) + this.dataBits = dataBits; + else + this.dataBits = "8"; + + if (stopBits != null && !stopBits.Equals(string.Empty)) + this.stopBits = stopBits; + else + this.stopBits = "One"; + + if (parity != null && !parity.Equals(string.Empty)) + this.parity = parity; + else + this.parity = "None"; + + if (timeOut != null && !timeOut.Equals(string.Empty)) + try + { + this.timeOut = int.Parse(timeOut); + + } + catch { + this.timeOut = 120000; + } + + else + this.timeOut = 120000; + bool result = openSerialPort(); + if (result) + { + String echoResult = sendLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status == STATUS_SUCC) + returnResult = 0; + } + LogUtil.getInstance().addRepeatLog("[result]: " + returnResult); + logger.addRepeatLog("<<<<<<<<<<<<<<<< End Event [initN5Core] <<<<<<<<<<<<<<<<"); + return returnResult; + } + + 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(); + 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 string requestSale(string txnId, string txnAmt, string paymentType, string billType) + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestSale] >>>>>>>>>>>>>>>>"); + logger.addRepeatLog("input param [txnId]: " + txnId); + logger.addRepeatLog("input param [txnAmt]: " + txnAmt); + logger.addRepeatLog("input param [paymentType]: " + paymentType); + logger.addRepeatLog("input param [billType]: " + billType); + if (ifBusy) + return RequestResult.createRespErrJson("requestSale","SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_BUSY,ERR_MSG_BUSY); + ifBusy = true; + if ((txnId == null || txnId.Equals(String.Empty)) + || (txnAmt == null || txnAmt.Equals(String.Empty)) + || (paymentType == null || paymentType.Equals(String.Empty)) + || (billType == null || billType.Equals(String.Empty)) + ) { + Console.WriteLine("Error! Input empty"); + + ifBusy = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + + decimal dtxnAmt = decimal.Parse(txnAmt); + if (dtxnAmt.CompareTo(decimal.Parse("0")) < 1 || dtxnAmt.CompareTo(decimal.Parse("99999999.99")) > 1) + { + Console.WriteLine("txnAmt must be from 0.00 to 99999999.99!"); + ifBusy = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + if (txnId.Length > 15) + { + Console.WriteLine("txnId length must be 15"); + ifBusy = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt,ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + if (paymentType.Length != 3 || !paymentType.Equals("FPS")) + { + Console.WriteLine("paymentType length must be 3"); + ifBusy = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + if (billType.Length != 3) + { + Console.WriteLine("billType length must be 3"); + ifBusy = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt ,ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + + if (openSerialPort()) + { + isProcessingSale = true; + + String echoResult = sendInnerLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + ifBusy = false; + isProcessingSale = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + Thread.Sleep(500); + + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + string reqSaleStr = SaleResult.toJsonForSale(txnId, dtxnAmt, paymentType, billType); + Console.WriteLine("reqSaleStr = " + reqSaleStr); + if (reqSaleStr == null || "".Equals(reqSaleStr)) + { + Console.WriteLine("reqSaleStr is null. "); + closeSerialPort(); + ifBusy = false; + isProcessingSale = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType,txnAmt,ERR_STATUS_FAIL,"",""); + } + currReqByteArr = packReqMsg(reqSaleStr); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + Console.WriteLine("currReqByteArr is null. "); + closeSerialPort(); + ifBusy = false; + isProcessingSale = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, "", ""); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + Console.WriteLine("serialPort no open. "); + closeSerialPort(); + ifBusy = false; + isProcessingSale = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL,ERR_CODE_OPENCOM,ERR_MSG_OPENCOM); + } + + int sleepTime = timeOut / 1000; + if (sleepTime > 210) + sleepTime = 210; + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + int inqCount = 0; + DateTime lastInqTime = DateTime.Now; + + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else if (!isProcessingSale) + { + closeSerialPort(); + ifEnd = true; + String tmpResult = RequestResult.createRespProcessingJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, "F9994"); + return tmpResult; + } + else if (sp.TotalSeconds < 30) + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + //closeSerialPort(); + String tmpJson = currResultJsonStr; + if (tmpJson != null && !"".Equals(tmpJson) && tmpJson.Contains("SALE_RESP")) + { + ifBusy = false; + ifEnd = true; + isProcessingSale = false; + SaleResult tmpSaleResult = SaleResult.toSaleResultFromJsonMsg(tmpJson); + LogUtil.getInstance().addRepeatLog("[result]: " + tmpJson); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestSale] <<<<<<<<<<<<<<<<"); + return tmpJson; + } + } + } + else + { + //closeSerialPort(); + TimeSpan txnInqSp = nowTime - lastInqTime; + if (inqCount == 0 || (inqCount > 0 && txnInqSp.TotalSeconds > 5)) + { + string retrivReusltStr = requestInnerRetrieval(txnId); + if (retrivReusltStr != null && retrivReusltStr.Contains("ABORT_RESP")) + { + retrivReusltStr = requestInnerRetrieval(txnId); + } + inqCount++; + lastInqTime = DateTime.Now; + if (retrivReusltStr != null && !"".Equals(retrivReusltStr)) + { + RetrievalResult retrievalResult = RetrievalResult.toRetrievalResultFromJsonMsg(retrivReusltStr); + if (retrievalResult.Status == STATUS_PROCESSING && (retrievalResult.RespCode != null && (retrievalResult.RespCode.Equals("F9994") || retrievalResult.RespCode.Equals("null")))) + { + ifBusy = false; + ifEnd = true; + isProcessingSale = false; + String tmpResult = RequestResult.createRespProcessingJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, "F9994"); + return tmpResult; + } + else if (retrievalResult.Status == STATUS_SUCC || retrievalResult.Status == ERR_STATUS_FAIL) + { + retrivReusltStr = retrivReusltStr.Replace("\"STATUS\":\"00\"", "\"STATUS\":\"" + retrievalResult.Status + "\""); + ifBusy = false; + ifEnd = true; + isProcessingSale = false; + retrivReusltStr = retrivReusltStr.Replace("RETRIEVAL_RESP", "SALE_RESP"); + LogUtil.getInstance().addRepeatLog("[result]: " + retrivReusltStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestSale] <<<<<<<<<<<<<<<<"); + return retrivReusltStr; + } + else if (retrievalResult.Status == STATUS_NO_TXN) + { + string saleResultStr = "{\"EVENT_NAME\":\"SALE_RESP\",\"STATUS\":\"10\",\"TXN_ID\":\"" + txnId + "\",\"TXN_AMT\":" + txnAmt + "}"; + + //String saleResultStr = "\"EVENT_NAME\":\"SALE_RESP\",\"STATUS\":\"10\""; + // retrivReusltStr = retrivReusltStr.Replace("RETRIEVAL_RESP", "SALE_RESP"); + //retrivReusltStr = retrivReusltStr.Replace("\"STATUS\":\"13\"", "\"STATUS\":\"10\""); + ifBusy = false; + isProcessingSale = false; + ifEnd = true; + LogUtil.getInstance().addRepeatLog("[result]: " + saleResultStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestSale] <<<<<<<<<<<<<<<<"); + return saleResultStr; + } + + } + } + isReadyBack = false; + } + } + + + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + closeSerialPort(); + ifBusy = false; + isProcessingSale = false; + return RequestResult.createRespErrJson("requestSale", "SALE_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL,ERR_CODE_TIMEOUT,ERR_MSG_TIMEOUT); + } + + public string requestCreateOrder(string txnId, string txnAmt, string paymentType, string billType) + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestCreateOrder] >>>>>>>>>>>>>>>>"); + logger.addRepeatLog("input param [txnId]: " + txnId); + logger.addRepeatLog("input param [txnAmt]: " + txnAmt); + logger.addRepeatLog("input param [paymentType]: " + paymentType); + logger.addRepeatLog("input param [billType]: " + billType); + if (ifBusy) + return RequestResult.createRespErrJson("requestCreateOrder","CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_BUSY, ERR_MSG_BUSY); + + ifBusy = true; + if ((txnId == null || txnId.Equals(String.Empty)) + || (txnAmt == null || txnAmt.Equals(String.Empty)) + || (paymentType == null || paymentType.Equals(String.Empty)) + || (billType == null || billType.Equals(String.Empty)) + ) + { + Console.WriteLine("Error! Input empty"); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM,ERR_CODE_PARAM); + } + + decimal dtxnAmt = decimal.Parse(txnAmt); + if (dtxnAmt.CompareTo(decimal.Parse("0")) < 1 || dtxnAmt.CompareTo(decimal.Parse("99999999.99")) > 1) + { + Console.WriteLine("txnAmt must be from 0.00 to 99999999.99!"); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_CODE_PARAM); + } + if (txnId.Length > 15) + { + Console.WriteLine("txnId length must be 15"); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_CODE_PARAM); + } + if (paymentType.Length != 3 || !paymentType.Equals("FPS")) + { + Console.WriteLine("paymentType length must be 3"); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_CODE_PARAM); + } + if (billType.Length != 3) + { + Console.WriteLine("billType length must be 3"); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_CODE_PARAM); + } + String echoResult = sendInnerLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + Thread.Sleep(500); + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + if (openSerialPort()) + { + string reqSaleStr = RequestResult.toJsonForCreateOrder(txnId, dtxnAmt, paymentType, billType); + Console.WriteLine("reqSaleStr = " + reqSaleStr); + if (reqSaleStr == null || "".Equals(reqSaleStr)) + { + Console.WriteLine("reqSaleStr is null. "); + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL,"",""); + } + currReqByteArr = packReqMsg(reqSaleStr); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + Console.WriteLine("currReqByteArr is null. "); + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP", txnId, paymentType, txnAmt, ERR_STATUS_FAIL, "", ""); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + Console.WriteLine("serialPort no open. "); + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP",txnId, paymentType, txnAmt, ERR_STATUS_FAIL,ERR_CODE_OPENCOM,ERR_MSG_OPENCOM); + } + + int sleepTime = 5000 / 1000; + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + ifBusy = false; + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestCreateOrder] <<<<<<<<<<<<<<<<"); + return currResultJsonStr; + } + } + } + } + ifBusy = false; + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + closeSerialPort(); + return RequestResult.createRespErrJson("requestCreateOrder", "CREATE_ORDER_RESP",txnId, paymentType, txnAmt, ERR_STATUS_FAIL,ERR_CODE_TIMEOUT,ERR_MSG_TIMEOUT); + } + + public string sendLinkTestRequest() + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [sendLinkTestRequest] >>>>>>>>>>>>>>>>"); + + if (isProcessingSale) + return RequestResult.createRespErrJson("sendLinkTestRequest", "ECHO_RESP", ERR_STATUS_FAIL, ERR_CODE_BUSY, ERR_MSG_BUSY); + + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + if (openSerialPort()) + { + currReqByteArr = this.packReqMsg(RequestResult.toJsonForLinkTest()); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + closeSerialPort(); + return RequestResult.createRespErrJson("ECHO_RESP", ERR_STATUS_FAIL); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + closeSerialPort(); + + return RequestResult.createRespErrJson("sendLinkTestRequest","ECHO_RESP", ERR_STATUS_FAIL,ERR_CODE_OPENCOM,ERR_MSG_OPENCOM); + } + + int sleepTime = 3000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [sendLinkTestRequest] <<<<<<<<<<<<<<<<"); + + return currResultJsonStr; + } + } + } + } + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + closeSerialPort(); + return RequestResult.createRespErrJson("sendLinkTestRequest","ECHO_RESP", ERR_STATUS_FAIL,ERR_CODE_TIMEOUT,ERR_MSG_TIMEOUT); + } + + private string sendInnerLinkTestRequest() + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [sendInnerLinkTestRequest] >>>>>>>>>>>>>>>>"); + + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + if (openSerialPort()) + { + currReqByteArr = this.packReqMsg(RequestResult.toJsonForLinkTest()); + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + + int sleepTime = 3000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [sendLinkTestRequest] <<<<<<<<<<<<<<<<"); + + return currResultJsonStr; + } + } + } + } + } + + + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + return RequestResult.createRespErrJson("sendInnerLinkTestRequest", "ECHO_RESP", ERR_STATUS_FAIL, ERR_CODE_TIMEOUT, ERR_MSG_TIMEOUT); + } + + public string sendHealthCheckRequest() + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [sendHealthCheckRequest] >>>>>>>>>>>>>>>>"); + + if (ifBusy) + return RequestResult.createRespErrJson("sendHealthCheckRequest", "HEALTH_CHECK_RESP", ERR_STATUS_FAIL, ERR_CODE_BUSY, ERR_MSG_BUSY); + String echoResult = sendInnerLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + ifBusy = false; + return RequestResult.createRespErrJson("sendHealthCheckRequest","HEALTH_CHECK_RESP", ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + Thread.Sleep(500); + ifBusy = true; + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + if (openSerialPort()) + { + currReqByteArr = this.packReqMsg(RequestResult.toJsonForHealthCheck()); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("HEALTH_CHECK_RESP", ERR_STATUS_FAIL); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("sendHealthCheckRequest","HEALTH_CHECK_RESP", ERR_STATUS_FAIL,ERR_CODE_OPENCOM,ERR_MSG_OPENCOM); + } + + int sleepTime = 5000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + ifBusy = false; + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [sendHealthCheckRequest] <<<<<<<<<<<<<<<<"); + + return currResultJsonStr; + } + } + } + } + ifBusy = false; + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + closeSerialPort(); + return RequestResult.createRespErrJson("sendHealthCheckRequest","HEALTH_CHECK_RESP", ERR_STATUS_FAIL,ERR_MSG_TIMEOUT,ERR_CODE_TIMEOUT); + } + + public string requestSettlement() + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestSettlement] >>>>>>>>>>>>>>>>"); + + if (ifBusy) + return RequestResult.createRespErrJson("requestSettlement","SETTLE_RESP", ERR_STATUS_FAIL, ERR_CODE_BUSY, ERR_MSG_BUSY); + String echoResult = sendInnerLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + ifBusy = false; + return RequestResult.createRespErrJson("requestSettlement","SETTLE_RESP", ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + Thread.Sleep(500); + ifBusy = true; + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + if (openSerialPort()) + { + currReqByteArr = this.packReqMsg(RequestResult.toJsonForSettlement()); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("SETTLE_RESP", ERR_STATUS_FAIL); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + ifBusy = false; + closeSerialPort(); + return RequestResult.createRespErrJson("requestSettlement","SETTLE_RESP", ERR_STATUS_FAIL,ERR_CODE_OPENCOM,ERR_MSG_TIMEOUT); + } + + int sleepTime = 10000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + ifBusy = false; + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestSettlement] <<<<<<<<<<<<<<<<"); + + return currResultJsonStr; + } + } + } + } + + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + ifBusy = false; + return RequestResult.createRespErrJson("requestSettlement","SETTLE_RESP", ERR_STATUS_FAIL,ERR_CODE_TIMEOUT,ERR_MSG_TIMEOUT); + } + + public string requestSummaryEnquiry(String txnDateRange) + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestSummaryEnquiry] >>>>>>>>>>>>>>>>"); + logger.addRepeatLog("input param [txnDateRange]: " + txnDateRange); + if (ifBusy) + return RequestResult.createRespErrJson("requestSummaryEnquiry","SUMMARY_ENQUIRY_RESP", ERR_STATUS_FAIL, ERR_CODE_BUSY, ERR_MSG_BUSY); + if (txnDateRange == null || "".Equals(txnDateRange.Trim())) + { + Console.WriteLine("parameter error"); + return RequestResult.createRespErrJson("requestSummaryEnquiry","SUMMARY_ENQUIRY_RESP", ERR_STATUS_FAIL,ERR_CODE_PARAM,ERR_MSG_PARAM); + } + if (txnDateRange.Length != 17) + { + Console.WriteLine("txnDateRange length must be 17"); + ifBusy = false; + return RequestResult.createRespErrJson("requestSummaryEnquiry","SUMMARY_ENQUIRY_RESP", ERR_STATUS_FAIL,ERR_CODE_PARAM,ERR_MSG_PARAM); + } + String echoResult = sendInnerLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + ifBusy = false; + return RequestResult.createRespErrJson("requestSummaryEnquiry","SUMMARY_ENQUIRY_RESP", ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + Thread.Sleep(500); + ifBusy = true; + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + if (openSerialPort()) + { + + currReqByteArr = this.packReqMsg(RequestResult.toJsonForSummaryEnquiry(txnDateRange)); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("SUMMARY_ENQUIRY_RESP", ERR_STATUS_FAIL); + //return "Request failed: params error"; + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + ifBusy = false; + closeSerialPort(); + return RequestResult.createRespErrJson("requestSummaryEnquiry","SUMMARY_ENQUIRY_RESP", ERR_STATUS_FAIL, ERR_CODE_OPENCOM, ERR_MSG_OPENCOM); + } + + int sleepTime = 10000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + ifBusy = false; + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestSummaryEnquiry] <<<<<<<<<<<<<<<<"); + + return currResultJsonStr; + } + } + } + } + + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + ifBusy = false; + return RequestResult.createRespErrJson("requestSummaryEnquiry","SUMMARY_ENQUIRY_RESP", ERR_STATUS_FAIL, ERR_CODE_TIMEOUT, ERR_MSG_TIMEOUT); + } + + public string requestRetrieval(string txnId) + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestRetrieval] >>>>>>>>>>>>>>>>"); + logger.addRepeatLog("input param [txnId]: " + txnId); + + if (isProcessingSale) + return RequestResult.createRespErrJson("requestRetrieval", "RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_BUSY, ERR_MSG_BUSY); + + + if (txnId == null || "".Equals(txnId.Trim())) + { + Console.WriteLine("parameter error"); + return RequestResult.createRespErrJson("requestRetrieval","RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + if (txnId.Length > 15) + { + Console.WriteLine("txnId length must be 15"); + return RequestResult.createRespErrJson("requestRetrieval","RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + + String echoResult = sendInnerLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("requestRetrieval","RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + Thread.Sleep(500); + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + + if (openSerialPort()) + { + string reqRetrievalStr = RetrievalResult.toJsonForRetrieval(txnId); + Console.WriteLine("reqRetrievalStr = " + reqRetrievalStr); + if (reqRetrievalStr == null || "".Equals(reqRetrievalStr)) + { + Console.WriteLine("reqRetrievalStr is null. "); + closeSerialPort(); + return RequestResult.createRespErrJson("RETRIEVAL_RESP", ERR_STATUS_FAIL); + } + currReqByteArr = packReqMsg(reqRetrievalStr); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + Console.WriteLine("currReqByteArr is null. "); + closeSerialPort(); + return RequestResult.createRespErrJson("RETRIEVAL_RESP", ERR_STATUS_FAIL); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + Console.WriteLine("serialPort no open. "); + closeSerialPort(); + return RequestResult.createRespErrJson("requestRetrieval","RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_OPENCOM, ERR_MSG_OPENCOM); + } + + int sleepTime = 5000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + ifBusy = false; + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestRetrieval] <<<<<<<<<<<<<<<<"); + + return currResultJsonStr; + } + } + } + } + + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + closeSerialPort(); + return RequestResult.createRespErrJson("requestRetrieval","RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_TIMEOUT, ERR_MSG_TIMEOUT); + } + + private int innerRetrievalTimeout = 4550; + private string requestInnerRetrieval(string txnId) + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestInnerRetrieval] >>>>>>>>>>>>>>>>"); + logger.addRepeatLog("input param [txnId]: " + txnId); + + if (txnId == null || "".Equals(txnId.Trim())) + { + Console.WriteLine("parameter error"); + return RequestResult.createRespErrJson("requestInnerRetrieval", "RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + if (txnId.Length > 15) + { + Console.WriteLine("txnId length must be 15"); + return RequestResult.createRespErrJson("requestInnerRetrieval", "RETRIEVAL_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + if (openSerialPort()) + { + string reqRetrievalStr = RetrievalResult.toJsonForRetrieval(txnId); + Console.WriteLine("reqRetrievalStr = " + reqRetrievalStr); + if (reqRetrievalStr == null || "".Equals(reqRetrievalStr)) + { + Console.WriteLine("reqRetrievalStr is null. "); + //closeSerialPort(); + return RequestResult.createRespErrJson("RETRIEVAL_RESP", ERR_STATUS_FAIL); + } + currReqByteArr = packReqMsg(reqRetrievalStr); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + Console.WriteLine("currReqByteArr is null. "); + //closeSerialPort(); + + return RequestResult.createRespErrJson("RETRIEVAL_RESP", ERR_STATUS_FAIL); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + Console.WriteLine("serialPort no open. "); + //closeSerialPort(); + return RequestResult.createRespErrJson("requestInnerRetrieval", "RETRIEVAL_RESP", txnId, STATUS_PROCESSING, ERR_CODE_OPENCOM, ERR_MSG_OPENCOM); + } + + + sendTime = 0; + isSending = false; + mRecvTimes = 0; + //isReadyBack = false; + //currReqByteArr = null; + //currResultJsonStr = null; + isGetACK = false; + + + int sleepTime = innerRetrievalTimeout / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + //closeSerialPort(); + String tmpJson = currResultJsonStr; + if (tmpJson != null && !"".Equals(tmpJson) && tmpJson.Contains("RETRIEVAL_RESP")) + { + //ifBusy = false; + LogUtil.getInstance().addRepeatLog("[result]: " + tmpJson); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestInnerRetrieval] <<<<<<<<<<<<<<<<"); + sendTime = 0; + isSending = false; + mRecvTimes = 0; + return tmpJson; + } + else if (tmpJson != null && !"".Equals(tmpJson) && tmpJson.Contains("ABORT_RESP")) + { + } + else + { + currResultJsonStr = null; + isReadyBack = false; + isGetACK = false; + } + } + } + } + + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + //closeSerialPort(); + return RequestResult.createRespErrJson("requestInnerRetrieval", "RETRIEVAL_RESP", txnId, STATUS_PROCESSING, ERR_CODE_TIMEOUT, ERR_MSG_TIMEOUT); + } + + private bool ifProcessingAbort = false; + public string requestAbort() + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestAbort] >>>>>>>>>>>>>>>>"); + if (ifProcessingAbort) + return RequestResult.createRespErrJson("requestAbort", "ABORT_RESP", ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + ifProcessingAbort = true; + + + if (openSerialPort()) + { + if (!isProcessingSale) + { + String echoResult = sendInnerLinkTestRequest(); + currResultJsonStr = null; + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + ifProcessingAbort = false; + return RequestResult.createRespErrJson("requestAbort", "ABORT_RESP", ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + } + Thread.Sleep(500); + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + string abortStr = RequestResult.toJsonForAbort(); + Console.WriteLine("abortStr = " + abortStr); + if (abortStr == null || "".Equals(abortStr)) + { + Console.WriteLine("abortStr is null. "); + if (!isProcessingSale) + closeSerialPort(); + ifProcessingAbort = false; + return RequestResult.createRespErrJson("ABORT_RESP", ERR_STATUS_FAIL); + } + currReqByteArr = packReqMsg(abortStr); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + Console.WriteLine("currReqByteArr is null. "); + if (!isProcessingSale) + closeSerialPort(); + ifProcessingAbort = false; + return RequestResult.createRespErrJson("ABORT_RESP", ERR_STATUS_FAIL); + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + Console.WriteLine("serialPort no open. "); + if (!isProcessingSale) + closeSerialPort(); + ifProcessingAbort = false; + return RequestResult.createRespErrJson("requestAbort","ABORT_RESP", ERR_STATUS_FAIL, ERR_CODE_OPENCOM,ERR_MSG_OPENCOM); + } + + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + + int sleepTime = 5000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + + String tmpJson = currResultJsonStr; + if (tmpJson != null && !"".Equals(tmpJson) && tmpJson.Contains("ABORT_RESP")) + { + LogUtil.getInstance().addRepeatLog("[result]: " + tmpJson); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestAbort] <<<<<<<<<<<<<<<<"); + ifProcessingAbort = false; + if (tmpJson.Contains("{\"EVENT_NAME\":\"ABORT_RESP\",\"STATUS\":\"00\"}") && isProcessingSale) + { + ifBusy = false; + isProcessingSale = false; + } + sendTime = 0; + isSending = false; + mRecvTimes = 0; + //isReadyBack = false; + //currResultJsonStr = null; + isGetACK = false; + if (!isProcessingSale) + closeSerialPort(); + return tmpJson; + } + else if (tmpJson != null && !"".Equals(tmpJson) && tmpJson.Contains("RETRIEVAL_RESP")) + { + } + else + { + currResultJsonStr = null; + isReadyBack = false; + isGetACK = false; + } + } + } + } + /* + for (int i = 0; i < sleepTime; i++) + { + Console.WriteLine("retrievalResult = " + retrievalResult); + if (!isReadyBack) + { + if (i > 9 && i % 10 == 0 && !isGetACK) + { + this.resendReqMsg(); + } + Console.WriteLine("Sleep i = " + i + ", " + DateTime.Now.ToString()); + System.Threading.Thread.Sleep(1000); + } + else + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + return currResultJsonStr; + } + else + { + //return "Request failed: sytem error"; + return RequestResult.createRespErrJson("RETRIEVAL_RESP", ERR_STATUS_SYSTEM); + } + + } + }*/ + + // + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + closeSerialPort(); + ifProcessingAbort = false; + return RequestResult.createRespErrJson("requestAbort","ABORT_RESP", ERR_STATUS_FAIL, ERR_CODE_TIMEOUT, ERR_MSG_TIMEOUT); + } + + public string requestPrint(String txnId) + { + logger.addRepeatLog(">>>>>>>>>>>>>>>> Start Event [requestPrint] >>>>>>>>>>>>>>>>"); + logger.addRepeatLog("input param [txnId]: " + txnId); + + if (ifBusy) + return RequestResult.createRespErrJson("requestPrint","PRINT_RESP",txnId, ERR_STATUS_FAIL, ERR_CODE_BUSY, ERR_MSG_BUSY); + if (txnId == null || "".Equals(txnId.Trim())) + { + Console.WriteLine("parameter error"); + return RequestResult.createRespErrJson("requestPrint","PRINT_RESP", txnId, ERR_STATUS_FAIL,ERR_CODE_PARAM,ERR_MSG_PARAM); + } + if (txnId.Length > 15) + { + Console.WriteLine("txnId length must be 15"); + ifBusy = false; + return RequestResult.createRespErrJson("requestPrint","PRINT_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_PARAM, ERR_MSG_PARAM); + } + String echoResult = sendInnerLinkTestRequest(); + if (RequestResult.toReqResultFromJsonMsg(echoResult).Status != STATUS_SUCC) + { + Console.WriteLine("LinkTest failed!"); + ifBusy = false; + return RequestResult.createRespErrJson("requestPrint","PRINT_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_ECHO, ERR_MSG_ECHO); + } + Thread.Sleep(500); + ifBusy = true; + sendTime = 0; + isSending = false; + mRecvTimes = 0; + isReadyBack = false; + currReqByteArr = null; + currResultJsonStr = null; + isGetACK = false; + if (openSerialPort()) + { + currReqByteArr = this.packReqMsg(RequestResult.toJsonForReprint(txnId)); + if (currReqByteArr == null || currReqByteArr.Length == 0) + { + closeSerialPort(); + ifBusy = false; + return RequestResult.createRespErrJson("PRINT_RESP", ERR_STATUS_FAIL); + //return "Request failed: params error"; + } + + Console.WriteLine("currReqByteArr = " + currReqByteArr); + Console.WriteLine("currReqByteArr.Length = " + currReqByteArr.Length); + this.sendReqMsg(); + } + else + { + ifBusy = false; + closeSerialPort(); + return RequestResult.createRespErrJson("requestPrint","PRINT_RESP", txnId, ERR_STATUS_FAIL, ERR_CODE_OPENCOM, ERR_MSG_OPENCOM); + } + + int sleepTime = 10000 / 1000; + + DateTime startTime = DateTime.Now; + + Boolean ifEnd = false; + while (!ifEnd) + { + DateTime nowTime = DateTime.Now; + TimeSpan sp = nowTime - startTime; + if (sp.TotalSeconds > sleepTime) + ifEnd = true; + else + { + if (!isSending && !isGetACK) + this.resendReqMsg(); + if (isReadyBack) + { + closeSerialPort(); + if (currResultJsonStr != null && !"".Equals(currResultJsonStr)) + { + ifBusy = false; + LogUtil.getInstance().addRepeatLog("[result]: " + currResultJsonStr); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [requestSettlement] <<<<<<<<<<<<<<<<"); + + return currResultJsonStr; + } + } + } + } + + Console.WriteLine("Timeout return : " + DateTime.Now.ToString()); + ifBusy = false; + return RequestResult.createRespErrJson("requestPrint","PRINT_RESP", ERR_STATUS_FAIL,ERR_CODE_TIMEOUT,ERR_MSG_TIMEOUT); + } + + private void closeSerialPort() + { + if (serialPort1 != null && serialPort1.IsOpen) + { + try + { + Console.WriteLine("SerialPort Close "); + serialPort1.Close(); + } + catch (Exception ex) { } + } + } + + private bool openSerialPort() + { + if (serialPort1 != null && serialPort1.IsOpen) + { + return true; + } + + Console.WriteLine("portName = " + portName + ", baudRate = " + baudRate + ", dataBits = " + dataBits + ", stopBits = " + stopBits + ", parity = " + parity); + if (ObjectUtil.isNull(portName) || ObjectUtil.isNull(baudRate) || ObjectUtil.isNull(dataBits) || ObjectUtil.isNull(stopBits) || ObjectUtil.isNull(parity)) + { + Console.WriteLine("No config data."); + return false; + } + + try + { + if (serialPort1 == null) + serialPort1 = new System.IO.Ports.SerialPort(); + + serialPort1.PortName = portName; + Console.WriteLine("serialPort1.PortName = " + serialPort1.PortName); + serialPort1.BaudRate = Convert.ToInt32(baudRate); + serialPort1.DataBits = Convert.ToInt32(dataBits); + serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stopBits); + serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), parity); + serialPort1.ReceivedBytesThreshold = 1; + serialPort1.DataReceived += new SerialDataReceivedEventHandler(m_DataReceived); + + if (!serialPort1.IsOpen) + { + serialPort1.Open(); + } + return true; + } + catch (Exception err) + { + Console.WriteLine("Exception = " + err); + + serialPort1 = null; + return false; + } + } + + private void m_DataReceived(object sender, SerialDataReceivedEventArgs eventArgs) + { + Console.WriteLine("****** m_DataReceived *******"); + try + { + if (serialPort1.IsOpen) + { + int recvCount = serialPort1.BytesToRead; + Console.WriteLine("recvCount = " + recvCount); + if (recvCount > 0) + { + mRecvTimes++; + Console.WriteLine("mRecvTimes = " + mRecvTimes); + byte[] recvResult = new byte[recvCount]; + + serialPort1.Read(recvResult, 0, recvCount); + + Console.WriteLine("**********recvResult.Length = " + recvResult.Length); + StringBuilder recvResultSB = new StringBuilder(); + for (int i = 0; i < recvResult.Length; i++) + { + if (recvResult[i].ToString().Length == 1) + { + recvResultSB.Append("0"); + } + recvResultSB.Append(recvResult[i].ToString()); + } + Console.WriteLine("**********recvResult = " + recvResultSB.ToString()); + // string recvResultStr = System.Text.Encoding.Default.GetString(recvResult); + //Console.WriteLine("read result = " + recvResultStr); + //int thisRecvInt = Int32.Parse(recvResultStr, System.Globalization.NumberStyles.HexNumber); + + mTotalRecvCount += recvCount; + Console.WriteLine("mTotalRecvCount = " + mTotalRecvCount); + + if (recvResult[0] == 0x06 && mRecvTimes ==1) + { + isGetACK = true; + Console.WriteLine("ACK!"); + reset(); + if (isSending) + { + sendTime = 0; + isSending = false; + } + return; + } + if (recvResult[0] == 0x15) + { + Console.WriteLine("NAK!"); + + reset(); + resendReqMsg(); + return; + } + if (mRecvTimes == 1) + { + if (recvResult[0] == 0x02) + { + Console.WriteLine("STX found!"); + } + else + { + Console.WriteLine("STX not found!"); + sendNak(); + reset(); + return; + } + } + if (mTotalRecvCount > 4 && (recvResult[recvCount - 1] == 0x03 || (recvCount > 1 && recvResult[recvCount - 2] == 0x03))) + { + if (recvResult[recvCount - 1] == 0x03) + { + Console.WriteLine("ETX found but has no LRC!"); + + System.Array.Copy(recvResult, 0, mTotalRecvResult, mRecvIndex, recvCount); + mRecvIndex += recvCount; + + byte[] lrcRecvResult = new byte[1]; + int lrcRecvCount = readFromSerialPort(lrcRecvResult); + if (lrcRecvCount > 0) + { + mRecvTimes += 1; + + Console.WriteLine("LRC found!"); + Console.WriteLine("Total receive times is " + mRecvTimes); + + System.Array.Copy(lrcRecvResult, 0, mTotalRecvResult, mRecvIndex, lrcRecvCount); + } + } + else if (recvCount > 1 && recvResult[recvCount - 2] == 0x03) + { + Console.WriteLine("ETX found!"); + Console.WriteLine("Total receive times is " + mRecvTimes); + + System.Array.Copy(recvResult, 0, mTotalRecvResult, mRecvIndex, recvCount); + } + + byte[] len = new byte[] { mTotalRecvResult[1], mTotalRecvResult[2] }; + int length = 0; + String lenStr = ObjectUtil.bcd2Str(len); + Console.WriteLine("Length string is [" + lenStr + "]"); + try + { + length = int.Parse(lenStr); + } + catch (Exception e) + { + Console.WriteLine("Msg length format has error : " + e); + sendNak(); + reset(); + return; + } + if (length != mTotalRecvCount - 5) + { + Console.WriteLine("Length not match! length = " + length + ", mTotalRecvCount = " + mTotalRecvCount); + Console.WriteLine("msg: " + System.Text.Encoding.Default.GetString(mTotalRecvResult)); + sendNak(); + reset(); + return; + } + byte[] msg = new byte[length]; + for (int i = 3; i < length + 3; i++) + { + msg[i - 3] = mTotalRecvResult[i]; + } + byte olrc = mTotalRecvResult[4 + length]; + byte[] lrcMsg = new byte[1 + len.Length + msg.Length]; // including ETX, no STX + System.Array.Copy(mTotalRecvResult, 1, lrcMsg, 0, lrcMsg.Length); + byte nlrc = ObjectUtil.lrc(lrcMsg); + if (nlrc == olrc) + { + Console.WriteLine("Check LRC success! LRC is [" + ObjectUtil.desToHex(new byte[] { nlrc }) + "]"); + sendAck(); + string jsonMsg = System.Text.Encoding.Default.GetString(msg); + + onMsgReceived(jsonMsg); + reset(); + return; + } + else + { + Console.WriteLine("Check LRC failed! LRC is [" + ObjectUtil.desToHex(new byte[] { nlrc }) + "]"); + sendNak(); + reset(); + return; + } + } + else + { + Console.WriteLine("ETX not found!"); + + System.Array.Copy(recvResult, 0, mTotalRecvResult, mRecvIndex, recvCount); + mRecvIndex += recvCount; + } + + System.Threading.Thread.Sleep(100); + } + } + } + catch { } + } + + private void reset() + { + mTotalRecvResult = new byte[4096]; + mTotalRecvCount = 0; + mRecvIndex = 0; + mRecvTimes = 0; + } + + private void sendToSerialPort(byte[] msg) + { + try + { + serialPort1.Write(msg, 0, msg.Length); + } + catch (Exception err) + { + //logger.addRepeatLog("serialPort1 Write error " + err.Message); + } + } + + private void resendReqMsg() + { + if (!isSending || sendTime > 3) + { + this.isReadyBack = true; + return; + } + sendReqMsg(); + } + + private void sendAck() + { + Console.WriteLine("Execute sendAck!"); + + sendToSerialPort(new byte[] { 0x06 }); + } + + private void sendNak() + { + Console.WriteLine("Execute sendNak!"); + + sendToSerialPort(new byte[] { 0x15 }); + } + + private void sendReqMsg() + { + try + { + sendTime++; + Console.WriteLine("serialPort1 Write start "); + isSending = true; + serialPort1.Write(currReqByteArr, 0, currReqByteArr.Length); + } + catch (Exception err) + { + //logger.addRepeatLog("serialPort1 Write error " + err.Message); + try + { + if (currReqByteArr != null) + { + if (serialPort1.IsOpen) + serialPort1.Write(currReqByteArr, 0, currReqByteArr.Length); + else + { + serialPort1.Open(); + serialPort1.Write(currReqByteArr, 0, currReqByteArr.Length); + } + } + } + catch (Exception ex) { } + }; + Console.WriteLine("serialPort1 Write end "); + } + + private Byte[] packReqMsg(string reqJson) + { + Console.WriteLine("packReqMsg -> " + reqJson); + byte[] bytesJsonReq = System.Text.Encoding.Default.GetBytes(reqJson); + + //Step 1: Add STX 0x02 in 1st byte and msgLength with BCD format in 2-3 byte + int msgLength = bytesJsonReq.Length; + string msgLengthStrWithZeorLeft = msgLength.ToString().PadLeft(4, '0'); + Byte[] msgLengthBCD = ObjectUtil.ConvertFrom(msgLengthStrWithZeorLeft); + byte[] bytesAddSTXAddMsgLenReq = new byte[bytesJsonReq.Length + 1 + 2]; + bytesAddSTXAddMsgLenReq[0] = 0x02; + bytesAddSTXAddMsgLenReq[1] = msgLengthBCD[0]; + bytesAddSTXAddMsgLenReq[2] = msgLengthBCD[1]; + System.Array.Copy(bytesJsonReq, 0, bytesAddSTXAddMsgLenReq, 3, bytesJsonReq.Length); + + //Step 2: calculate LRC + byte[] bytesAddETXAddMsgLenReq = new byte[bytesJsonReq.Length + 1 + 2]; + + bytesAddETXAddMsgLenReq[0] = msgLengthBCD[0]; + bytesAddETXAddMsgLenReq[1] = msgLengthBCD[1]; + System.Array.Copy(bytesJsonReq, 0, bytesAddETXAddMsgLenReq, 2, bytesJsonReq.Length); + bytesAddETXAddMsgLenReq[bytesAddETXAddMsgLenReq.Length - 1] = 0x03; + Byte result_lrc = ObjectUtil.lrc(bytesAddETXAddMsgLenReq); + + //Step 3: pack + byte[] finalMsg = new byte[bytesJsonReq.Length + 5]; + System.Array.Copy(bytesAddSTXAddMsgLenReq, 0, finalMsg, 0, bytesAddSTXAddMsgLenReq.Length); + finalMsg[finalMsg.Length - 2] = 0x03; + finalMsg[finalMsg.Length - 1] = result_lrc; + + StringBuilder reqMsgSb = new StringBuilder(); + for (int i = 0; i < finalMsg.Length; i++) + { + if (finalMsg[i].ToString().Length == 1) + { + reqMsgSb.Append("0"); + } + reqMsgSb.Append(finalMsg[i].ToString()); + } + Console.WriteLine("finalMsg = " + reqMsgSb.ToString()); + return finalMsg; + } + + private int readFromSerialPort(byte[] msg) + { + Console.WriteLine("Execute readFromSerialPort!"); + int recvCount = serialPort1.BytesToRead; + + if (recvCount > 0) + { + byte[] recvResult = new byte[recvCount]; + serialPort1.Read(recvResult, 0, recvCount); + string recvResultStr = System.Text.Encoding.Default.GetString(recvResult); + + System.Array.Copy(recvResult, 0, msg, 0, recvCount); + } + + return recvCount; + } + + private void onMsgReceived(string msgReceived) + { + Console.WriteLine("msgReceived = " + msgReceived); + this.currResultJsonStr = msgReceived; + this.isReadyBack = true; + } + + } +} diff --git a/n5coredll/N5PropertyOper.cs b/n5coredll/N5PropertyOper.cs new file mode 100644 index 0000000..268286d --- /dev/null +++ b/n5coredll/N5PropertyOper.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; +using System.IO; + +namespace n5coredll +{ + class N5PropertyOper : System.Collections.Hashtable { + private string fileName = ""; + private ArrayList list = new ArrayList(); + public ArrayList List { + get { return list; } + set { list = value; } + } + public N5PropertyOper(string fileName) { + this.fileName = fileName; + this.Load(fileName); + } + + public override void Add(object key, object value) { + base.Add(key, value); + list.Add(key); + + } + + public override ICollection Keys { + get { + return list; + } + } + + private void Load(string filePath) { + char[] convertBuf = new char[1024]; + int limit; + int keyLen; + int valueStart; + char c; + string bufLine = string.Empty; + bool hasSep; + bool precedingBackslash; + using (StreamReader sr = new StreamReader(filePath)) { + while (sr.Peek() >= 0) { + bufLine = sr.ReadLine(); + limit = bufLine.Length; + keyLen = 0; + valueStart = limit; + hasSep = false; + precedingBackslash = false; + if (bufLine.StartsWith("#")) + keyLen = bufLine.Length; + while (keyLen < limit) { + c = bufLine[keyLen]; + if ((c == '=' || c == ':') & !precedingBackslash) { + valueStart = keyLen + 1; + hasSep = true; + break; + } + else if ((c == ' ' || c == '\t' || c == '\f') & !precedingBackslash) { + valueStart = keyLen + 1; + break; + } + if (c == '\\') { + precedingBackslash = !precedingBackslash; + } + else { + precedingBackslash = false; + } + keyLen++; + } + while (valueStart < limit) { + c = bufLine[valueStart]; + if (c != ' ' && c != '\t' && c != '\f') { + if (!hasSep && (c == '=' || c == ':')) { + hasSep = true; + } + else { + break; + } + } + valueStart++; + } + string key = bufLine.Substring(0, keyLen); + string values = bufLine.Substring(valueStart, limit - valueStart); + if (key == "") + key += "#"; + while (key.StartsWith("#") & this.Contains(key)) { + key += "#"; + } + this.Add(key, values); + } + } + } + } +} diff --git a/n5coredll/ObjectUtil.cs b/n5coredll/ObjectUtil.cs new file mode 100644 index 0000000..4f5311c --- /dev/null +++ b/n5coredll/ObjectUtil.cs @@ -0,0 +1,239 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace n5coredll +{ + class ObjectUtil { + + public static bool isNull(object obj) { + if (obj == null || "".Equals(obj.ToString())) { + return true; + } + return false; + } + + public static TxnType getTxnType(String pTxnType) { + switch (pTxnType) { + case "SALE": + return TxnType.SALE; + case "REFUND": + return TxnType.REFUND; + default: + return TxnType.NONE; + } + } + + public static string getTxnTypeValue(TxnType pTxnType) { + switch (pTxnType) { + case TxnType.SALE: + return "SALE"; + case TxnType.REFUND: + return "REFUND"; + default: + return ""; + } + } + + public static TxnStatus getTxnStatus(String pTxnStatus) + { + switch (pTxnStatus) + { + case "A": + return TxnStatus.Approved; + case "P": + return TxnStatus.Confirming; + case "V": + return TxnStatus.Voided; + case "S": + return TxnStatus.Settled; + default: + return TxnStatus.Failed; + } + } + + public static LoyaltyType getLoyaltyType(String pLoyalType) { + switch (pLoyalType) { + case "UP": + return LoyaltyType.UP; + case "MT": + return LoyaltyType.MT; + case "BK": + return LoyaltyType.BK; + case "LM": + return LoyaltyType.LM; + default: + return LoyaltyType.NONE; + } + } + + public static string getLoyaltyTypeValue(LoyaltyType pLoyalType) { + switch (pLoyalType) { + case LoyaltyType.UP: + return "UP"; + case LoyaltyType.MT: + return "MT"; + case LoyaltyType.BK: + return "BK"; + case LoyaltyType.LM: + return "LM"; + default: + return ""; + } + } + + public static PaymentApp getPaymentApp(String pPaymentApp) { + switch (pPaymentApp) { + case "CC": + return PaymentApp.CC; + case "QRC": + return PaymentApp.QRC; + case "CPN": + return PaymentApp.CPN; + case "AE": + return PaymentApp.AMEX; + case "DC": + return PaymentApp.DC; + case "FPS": + return PaymentApp.FPS; + case "EPS": + return PaymentApp.EPS; + case "OPS": + return PaymentApp.OPS; + default: + return PaymentApp.NONE; + } + } + + public static string getPaymentAppValue(PaymentApp pPaymentApp) { + switch (pPaymentApp) { + case PaymentApp.CC: + return "CC"; + case PaymentApp.QRC: + return "QRC"; + case PaymentApp.CPN: + return "CPN"; + case PaymentApp.AMEX: + return "AE"; + case PaymentApp.DC: + return "DC"; + case PaymentApp.FPS: + return "FPS"; + case PaymentApp.EPS: + return "EPS"; + case PaymentApp.OPS: + return "OPS"; + default: + return "NONE"; + } + } + + public static PaymentType getPaymentType(String pPaymentType) { + switch (pPaymentType) { + case "VC": + return PaymentType.VC; + case "VC-QR": + return PaymentType.VC_QR; + case "MC": + return PaymentType.MC; + case "MC-QR": + return PaymentType.MC_QR; + case "JCB": + return PaymentType.JCB; + case "JCB-QR": + return PaymentType.JCB_QR; + case "UP": + return PaymentType.UP; + case "UP-QR": + return PaymentType.UP_QR; + case "AE": + return PaymentType.AE; + case "DC": + return PaymentType.DC; + case "ALP": + return PaymentType.ALP; + case "WCP": + return PaymentType.WCP; + default: + return PaymentType.NONE; + } + } + + public static string getPaymentTypeValue(PaymentType pPaymentType) { + switch (pPaymentType) { + case PaymentType.VC: + return "VC"; + case PaymentType.VC_QR: + return "VC-QR"; + case PaymentType.MC: + return "MC"; + case PaymentType.MC_QR: + return "MC-QR"; + case PaymentType.JCB: + return "JCB"; + case PaymentType.JCB_QR: + return "JCB-QR"; + case PaymentType.UP: + return "UP"; + case PaymentType.UP_QR: + return "UP-QR"; + case PaymentType.AE: + return "AE"; + case PaymentType.DC: + return "DC"; + case PaymentType.ALP: + return "ALP"; + case PaymentType.WCP: + return "WCP"; + default: + return ""; + } + } + + public static Byte[] ConvertFrom(string strTemp) { + try { + if (Convert.ToBoolean(strTemp.Length & 1))//数字的二进制码最后1位是1则为奇数 + { + strTemp = "0" + strTemp;//数位为奇数时前面补0 + } + Byte[] aryTemp = new Byte[strTemp.Length / 2]; + for (int i = 0; i < (strTemp.Length / 2); i++) { + aryTemp[i] = (Byte)(((strTemp[i * 2] - '0') << 4) | (strTemp[i * 2 + 1] - '0')); + } + return aryTemp;//高位在前 + } + catch { return null; } + } + + public static Byte lrc(Byte[] datas) { + byte tmp = 0; + for (int i = 0; i < datas.Length; i++) { + tmp ^= datas[i]; + } + return tmp; + } + + public static string bcd2Str(byte[] bytes) { + Console.WriteLine("Execute bcd2Str!"); + + StringBuilder temp = new StringBuilder(); + for (int i = 0; i < bytes.Length; i++) { + int h = ((bytes[i] & 0xff) >> 4) + 48; + temp.Append((char)h); + int l = ((bytes[i] & 0x0f)) + 48; + temp.Append((char)l); + } + return temp.ToString(); + } + + public static string desToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(""); + for (int i = 0; i < bytes.Length; i++) { + string st = string.Format("%02X", bytes[i]); + sb.Append(st); + } + return sb.ToString(); + } + } +} diff --git a/n5coredll/PaymentApp.cs b/n5coredll/PaymentApp.cs new file mode 100644 index 0000000..b8bed5a --- /dev/null +++ b/n5coredll/PaymentApp.cs @@ -0,0 +1,15 @@ +using System; +namespace n5coredll +{ + public enum PaymentApp { + CC, + QRC, + CPN, + AMEX, + DC, + FPS, + EPS, + OPS, + NONE + } +} diff --git a/n5coredll/PaymentType.cs b/n5coredll/PaymentType.cs new file mode 100644 index 0000000..156ee8b --- /dev/null +++ b/n5coredll/PaymentType.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace n5coredll +{ + public enum PaymentType { + VC, + VC_QR, + MC, + MC_QR, + JCB, + JCB_QR, + UP, + UP_QR, + AE, + DC, + ALP, + WCP, + NONE + } +} diff --git a/n5coredll/Properties/AssemblyInfo.cs b/n5coredll/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1625255 --- /dev/null +++ b/n5coredll/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("n5coredll")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Home")] +[assembly: AssemblyProduct("n5coredll")] +[assembly: AssemblyCopyright("Copyright © Home 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(true)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("1f0c1d84-fd97-41f1-bc8b-f2f22c1997a1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/n5coredll/Properties/Settings.Designer.cs b/n5coredll/Properties/Settings.Designer.cs new file mode 100644 index 0000000..277cf71 --- /dev/null +++ b/n5coredll/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace n5coredll.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/n5coredll/Properties/Settings.settings b/n5coredll/Properties/Settings.settings new file mode 100644 index 0000000..049245f --- /dev/null +++ b/n5coredll/Properties/Settings.settings @@ -0,0 +1,6 @@ + + + + + + diff --git a/n5coredll/RefundResult.cs b/n5coredll/RefundResult.cs new file mode 100644 index 0000000..d03f67d --- /dev/null +++ b/n5coredll/RefundResult.cs @@ -0,0 +1,374 @@ +using System; +using System.Text; +namespace n5coredll +{ + public class RefundResult { + private static string TXN_ID = "TXN_ID"; + private static string STATUS = "STATUS"; + private static string TXN_AMT = "TXN_AMT"; + private static string PAYMENT_TYPE = "PAYMENT_TYPE"; + private static string RESP_CODE = "RESP_CODE"; + private static string TRACE_NO = "TRACE_NO"; + private static string TXN_DATE = "TXN_DATE"; + private static string TXN_TIME = "TXN_TIME"; + private static string HOST_REF = "HOST_REF"; + private static string AUTH_CODE = "AUTH_CODE"; + private static string LOCAL_CUR = "LOCAL_CUR"; + private static string FOREIGN_CUR = "FOREIGN_CUR"; + private static string FXRATE = "FXRATE"; + private static string FOREIGN_AMT = "FOREIGN_AMT"; + private static string MID = "MID"; + private static string TID = "TID"; + private static string PAN = "PAN"; + private static string EXPIRY_DATE = "EXPIRY_DATE"; + private static string AID = "AID"; + private static string ENTRY_MODE = "ENTRY_MODE"; + private static string BATCH_NO = "BATCH_NO"; + private static string TC = "TC"; + private static string APP = "APP"; + private static string ACQUIRER = "ACQUIRER"; + + private string ecrRefTxnId; + private string status; + private decimal txnAmt; + private PaymentType paymentType; + private string respCode; + private string traceNo; + private string txnDate; + private string txnTime; + private string hostRef; + private string couponId; + private string authCode; + private string localCur; + private string foreignCur; + private string fxRate; + private string foreignAmt; + private string mid; + private string tid; + private string pan; + private string expiryDate; + private string aid; + private string entryMode; + private string batchNo; + private string tc; + private string app; + private string acquirer; + + private void setEcrRefTxnId(string pEcrRefTxnId) { + ecrRefTxnId = pEcrRefTxnId; + } + + public string EcrRefTxnId { + get { return ecrRefTxnId; } + } + + public string Status { + get { return status; } + } + private void setStatus(string pStatus) { + this.status = pStatus; + } + public decimal TxnAmt { + get { return txnAmt; } + } + private void setTxnAmt(decimal pTxnAmt) { + this.txnAmt = pTxnAmt; + } + public PaymentType PaymentType { + get { return paymentType; } + } + private void setPaymentType(PaymentType pPaymentType) { + this.paymentType = pPaymentType; + } + public string RespCode { + get { return respCode; } + } + private void setRespCode(string pRespCode) { + this.respCode = pRespCode; + } + 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 HostRef { + get { return hostRef; } + } + private void setHostRef(string pHostRef) { + this.hostRef = pHostRef; + } + public string CouponId { + get { return couponId; } + } + private void setCouponId(string pCouponId) { + this.couponId = pCouponId; + } + public string AuthCode { + get { return authCode; } + } + private void setAuthCode(string pAuthCode) { + this.authCode = pAuthCode; + } + public string LocalCur { + get { return localCur; } + } + private void setLocalCur(string pLocalCur) { + this.localCur = pLocalCur; + } + public string ForeignCur { + get { return foreignCur; } + } + private void setForeignCur(string pForeignCur) { + this.foreignCur = pForeignCur; + } + public string FxRate { + get { return fxRate; } + } + private void setFxRate(string pFxRate) { + this.fxRate = pFxRate; + } + public string ForeignAmt { + get { return foreignAmt; } + } + private void setForeignAmt(string pForeignAmt) { + this.foreignAmt = pForeignAmt; + } + public string Mid { + get { return mid; } + } + private void setMid(string pMid) { + this.mid = pMid; + } + public string Tid { + get { return tid; } + } + private void setTid(string pTid) { + this.tid = pTid; + } + public string Pan { + get { return pan; } + } + private void setPan(string pPan) { + this.pan = pPan; + } + public string ExpiryDate { + get { return expiryDate; } + } + private void setExpiryDate(string pExpiryDate) { + this.expiryDate = pExpiryDate; + } + public string Aid { + get { return aid; } + } + private void setAid(string pAid) { + this.aid = pAid; + } + public string EntryMode { + get { return entryMode; } + } + private void setEntryMode(string pEntryMode) { + this.entryMode = pEntryMode; + } + public string BatchNo { + get { return batchNo; } + } + private void setBatchNo(string pBatchNo) { + this.batchNo = pBatchNo; + } + public string Tc { + get { return tc; } + } + private void setTc(string pTc) { + this.tc = pTc; + } + public string App { + get { return app; } + } + private void setApp(string pApp) { + this.app = pApp; + } + public string Acquirer { + get { return acquirer; } + } + private void setAcquirer(string pAcquirer) { + this.acquirer = pAcquirer; + } + + public RefundResult() { + } + + public RefundResult(string pStatus) { + this.setStatus(pStatus); + } + + private static string curTxnId; + public static string getCurTxnId() + { + return curTxnId; + } + + public static string toJsonForRefund(decimal txnAmt, PaymentApp appId, string qrcValue) { + string thisTxnId = getTxnId(); + if (thisTxnId == null || "".Equals(thisTxnId)) { + Console.WriteLine("getTxnId is null "); + return null; + } + curTxnId = thisTxnId; + string cardRefundMsg = "{\"EVENT_NAME\":\"REFUND\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + thisTxnId + "\",\"QRC_VALUE\":\"" + qrcValue + "\",\"TXN_AMT\":" + txnAmt.ToString() + "}"; + return cardRefundMsg; + } + + public static string toJsonForRefund(string txnIId, decimal txnAmt, PaymentApp appId, string qrcValue) + { + string cardRefundMsg = "{\"EVENT_NAME\":\"REFUND\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnIId + "\",\"QRC_VALUE\":\"" + qrcValue + "\",\"TXN_AMT\":" + txnAmt.ToString() + "}"; + return cardRefundMsg; + } + + 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 static RefundResult toRefundResultFromJsonMsg(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; + RefundResult RefundResult = new RefundResult(); + + for (int i = 0; i < column.Length; i++) { + valueColumn = column[i].Split(':'); + valueColumn0 = valueColumn[0].Replace('"', ' ').Trim(); + valueColumn1 = valueColumn[1].Replace('"', ' ').Trim(); + if (RefundResult.TXN_ID.Equals(valueColumn0)) { + RefundResult.setEcrRefTxnId(valueColumn1); + } + if (RefundResult.STATUS.Equals(valueColumn0)) { + RefundResult.setStatus(valueColumn1); + } + + if (RefundResult.TXN_AMT.Equals(valueColumn0)) { + if (valueColumn1 == null || "".Equals(valueColumn1)) { + RefundResult.setTxnAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); + } + else { + RefundResult.setTxnAmt(decimal.Parse(valueColumn1)); + } + } + + if (RefundResult.PAYMENT_TYPE.Equals(valueColumn0)) { + RefundResult.setPaymentType(ObjectUtil.getPaymentType(valueColumn1)); + } + + if (RefundResult.RESP_CODE.Equals(valueColumn0)) { + RefundResult.setRespCode(valueColumn1); + } + + if (RefundResult.TRACE_NO.Equals(valueColumn0)) { + RefundResult.setTraceNo(valueColumn1); + } + if (RefundResult.TXN_DATE.Equals(valueColumn0)) { + RefundResult.setTxnDate(valueColumn1); + } + if (RefundResult.TXN_TIME.Equals(valueColumn0)) { + RefundResult.setTxnTime(valueColumn1); + } + + if (RefundResult.HOST_REF.Equals(valueColumn0)) { + RefundResult.setHostRef(valueColumn1); + } + if (RefundResult.AUTH_CODE.Equals(valueColumn0)) { + RefundResult.setAuthCode(valueColumn1); + } + if (RefundResult.LOCAL_CUR.Equals(valueColumn0)) { + RefundResult.setLocalCur(valueColumn1); + } + if (RefundResult.FOREIGN_CUR.Equals(valueColumn0)) { + RefundResult.setForeignCur(valueColumn1); + } + if (RefundResult.FXRATE.Equals(valueColumn0)) { + RefundResult.setFxRate(valueColumn1); + } + if (RefundResult.FOREIGN_AMT.Equals(valueColumn0)) { + RefundResult.setForeignAmt(valueColumn1); + } + if (RefundResult.MID.Equals(valueColumn0)) { + RefundResult.setMid(valueColumn1); + } + if (RefundResult.TID.Equals(valueColumn0)) { + RefundResult.setTid(valueColumn1); + } + if (RefundResult.PAN.Equals(valueColumn0)) { + RefundResult.setPan(valueColumn1); + } + if (RefundResult.EXPIRY_DATE.Equals(valueColumn0)) { + RefundResult.setExpiryDate(valueColumn1); + } + if (RefundResult.AID.Equals(valueColumn0)) { + RefundResult.setAid(valueColumn1); + } + if (RefundResult.ENTRY_MODE.Equals(valueColumn0)) { + RefundResult.setEntryMode(valueColumn1); + } + if (RefundResult.BATCH_NO.Equals(valueColumn0)) { + RefundResult.setBatchNo(valueColumn1); + } + if (RefundResult.APP.Equals(valueColumn0)) { + RefundResult.setApp(valueColumn1); + } + if (RefundResult.TC.Equals(valueColumn0)) { + RefundResult.setTc(valueColumn1); + } + if (RefundResult.ACQUIRER.Equals(valueColumn0)) { + RefundResult.setAcquirer(valueColumn1); + } + + } + return RefundResult; + } + } +} diff --git a/n5coredll/RequestResult.cs b/n5coredll/RequestResult.cs new file mode 100644 index 0000000..0b7c17a --- /dev/null +++ b/n5coredll/RequestResult.cs @@ -0,0 +1,164 @@ +using System; +using System.Text; +namespace n5coredll +{ + public class RequestResult { + private static string STATUS = "STATUS"; + + private string status; + + public string Status { + get { return status; } + } + private void setStatus(string pStatus) { + this.status = pStatus; + } + + public RequestResult() { + } + + public RequestResult(string pStatus) { + this.setStatus(pStatus); + } + + public static string toJsonForLinkTest() { + return "{\"EVENT_NAME\":\"ECHO\"}"; + } + + public static string toJsonForHealthCheck() + { + return "{\"EVENT_NAME\":\"HEALTH_CHECK\"}"; + } + + public static string toJsonForCreateOrder(string txnId, decimal txnAmt, string paymentType, string billType) + { + + string cardSaleMsg = "{\"EVENT_NAME\":\"CREATE_ORDER\",\"TXN_ID\":\"" + txnId + "\",\"TXN_AMT\":" + txnAmt + ",\"PAYMENT_TYPE\":\"" + paymentType + "\",\"BILL_TYPE_ID\":\"" + billType + "\"}"; + return cardSaleMsg; + } + + public static string toJsonForSettlement() + { + return "{\"EVENT_NAME\":\"SETTLE\"}"; + } + + public static string toJsonForSummaryEnquiry(String txnDateRange) + { + return "{\"EVENT_NAME\":\"SUMMARY_ENQUIRY\",\"TXN_DATE_START_TO_END\":\"" + txnDateRange + "\"}"; + } + + public static string toJsonForReprint(String txnId) + { + return "{\"EVENT_NAME\":\"PRINT\",\"TXN_ID\":\"" + txnId + "\",\"IS_REPRINT\":true}"; + } + + public static string toJsonForAbort() + { + return "{\"EVENT_NAME\":\"ABORT\"}"; + } + + public static string toJsonForScan() + { + return "{\"EVENT_NAME\":\"SCAN\"}"; + } + + public static string toJsonForReadCardNFC() + { + return "{\"EVENT_NAME\":\"READ_CARD\"}"; + } + + public static string toJsonForAddPoint(string inputTxnId, decimal txnAmt) + { + string cardSaleMsg = "{\"EVENT_NAME\":\"ADD_POINT\",\"TXN_ID\":\"" + inputTxnId + "\",\"TXN_AMT\":" + txnAmt + "}"; + return cardSaleMsg; + } + + public static string toJsonForBatchEnquiry(string settleDate) + { + return "{\"EVENT_NAME\":\"BATCH_ENQUIRY\",\"SETTLE_DATE\":\"" + settleDate + "\"}"; + } + + public static string toJsonForSettleEnquiry(string batchId) + { + return "{\"EVENT_NAME\":\"SETTLE_ENQUIRY\",\"BATCH_ID\":\"" + batchId + "\"}"; + } + + public static RequestResult toReqResultFromJsonMsg(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; + RequestResult reqResult = new RequestResult(); + for (int i = 0; i < column.Length; i++) { + valueColumn = column[i].Split(':'); + valueColumn0 = valueColumn[0].Replace('"', ' ').Trim(); + valueColumn1 = valueColumn[1].Replace('"', ' ').Trim(); + if (RequestResult.STATUS.Equals(valueColumn0)) { + reqResult.setStatus(valueColumn1); + } + } + return reqResult; + } + + public static String createRespErrJson(String eventName, String status) + { + return "{\"EVENT_NAME\":\"" +eventName + "\",\"STATUS\":\"" + status + "\"}"; + } + + public static String createRespErrJson(String eventName, String status, String respCode, String errMsg) + { + return "{\"EVENT_NAME\":\"" + eventName + "\",\"STATUS\":\"" + status + "\",\"RESP_CODE\":\"" + respCode + "\",\"ERR_MSG\":\"" + errMsg + "\"}"; + } + + public static String createRespErrJson(String functionName, String eventName, String status, String respCode, String errMsg) + { + LogUtil.getInstance().addRepeatLog("[result]: " + "{\"EVENT_NAME\":\"" + eventName + "\",\"STATUS\":\"" + status + "\",\"RESP_CODE\":\"" + respCode + "\",\"ERR_MSG\":\"" + errMsg + "\"}"); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [" + functionName + "] <<<<<<<<<<<<<<<<"); + + return "{\"EVENT_NAME\":\"" + eventName + "\",\"STATUS\":\"" + status + "\",\"RESP_CODE\":\"" + respCode + "\",\"ERR_MSG\":\"" + errMsg + "\"}"; + } + + public static String createRespErrJson(String functionName, String eventName, String txnId, String paymentType, String txnAmt, String status, String respCode, String errMsg) + { + LogUtil.getInstance().addRepeatLog("[result]: " + "{\"EVENT_NAME\":\"" + eventName + "\",\"STATUS\":\"" + status + "\",\"RESP_CODE\":\"" + respCode + "\",\"ERR_MSG\":\"" + errMsg + "\"}"); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [" + functionName + "] <<<<<<<<<<<<<<<<"); + if (txnId == null || txnId == "") + txnId = ""; + return "{\"EVENT_NAME\":\"" + eventName + "\",\"TXN_ID\":\"" + txnId + "\",\"PAYMENT_TYPE\":\"" + paymentType + "\",\"TXN_AMT\":\"" + txnAmt + "\",\"STATUS\":\"" + status + "\",\"RESP_CODE\":\"" + respCode + "\",\"ERR_MSG\":\"" + errMsg + "\"}"; + } + + public static String createRespErrJson(String functionName, String eventName, String txnId, String status, String respCode, String errMsg) + { + LogUtil.getInstance().addRepeatLog("[result]: " + "{\"EVENT_NAME\":\"" + eventName + "\",\"STATUS\":\"" + status + "\",\"RESP_CODE\":\"" + respCode + "\",\"ERR_MSG\":\"" + errMsg + "\"}"); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [" + functionName + "] <<<<<<<<<<<<<<<<"); + if (txnId == null || txnId == "") + txnId = ""; + return "{\"EVENT_NAME\":\"" + eventName + "\",\"TXN_ID\":\"" + txnId + "\",\"STATUS\":\"" + status + "\",\"RESP_CODE\":\"" + respCode + "\",\"ERR_MSG\":\"" + errMsg + "\"}"; + } + + public static String createRespProcessingJson(String functionName, String eventName, String txnId, String paymentType, String txnAmt) + { + LogUtil.getInstance().addRepeatLog("[result]: " + "{\"EVENT_NAME\":\"" + eventName + "\",\"STATUS\":\"" + "03" + "\"}"); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [" + functionName + "] <<<<<<<<<<<<<<<<"); + if (txnId == null || txnId == "") + txnId = ""; + return "{\"EVENT_NAME\":\"" + eventName + "\",\"TXN_ID\":\"" + txnId + "\",\"PAYMENT_TYPE\":\"" + paymentType + "\",\"TXN_AMT\":\"" + txnAmt + "\",\"STATUS\":\"" + "03" + "\"}"; + } + + public static String createRespProcessingJson(String functionName, String eventName, String txnId, String paymentType, String txnAmt, String respCode) + { + LogUtil.getInstance().addRepeatLog("[result]: " + "{\"EVENT_NAME\":\"" + eventName + "\",\"STATUS\":\"" + "03" + "\",\"RESP_CODE\":\"" + respCode + "\"}"); + LogUtil.getInstance().addRepeatLog("<<<<<<<<<<<<<<<< End Event [" + functionName + "] <<<<<<<<<<<<<<<<"); + if (txnId == null || txnId == "") + txnId = ""; + return "{\"EVENT_NAME\":\"" + eventName + "\",\"TXN_ID\":\"" + txnId + "\",\"PAYMENT_TYPE\":\"" + paymentType + "\",\"TXN_AMT\":\"" + txnAmt + "\",\"STATUS\":\"" + "03" + "\",\"RESP_CODE\":\"" + respCode + "\"}"; + } + } +} diff --git a/n5coredll/RetrievalResult.cs b/n5coredll/RetrievalResult.cs new file mode 100644 index 0000000..38cdaae --- /dev/null +++ b/n5coredll/RetrievalResult.cs @@ -0,0 +1,468 @@ +using System; +using System.Text; + +namespace n5coredll +{ + public class RetrievalResult { + private static string EVENT_NAME = "EVENT_NAME"; + private static string TXN_TYPE = "TXN_TYPE"; + private static string TXN_ID = "TXN_ID"; + private static string STATUS = "STATUS"; + private static string TXN_STATUS = "TXN_STATUS"; + private static string TXN_AMT = "TXN_AMT"; + private static string TIPS = "TIPS"; + private static string PAYMENT_TYPE = "PAYMENT_TYPE"; + private static string RESP_CODE = "RESP_CODE"; + private static string LOYALTY_TYPE = "LOYALTY_TYPE"; + private static string CAMPAIGN_ID = "CAMPAIGN_ID"; + private static string TRACE_NO = "TRACE_NO"; + private static string TXN_DATE = "TXN_DATE"; + private static string TXN_TIME = "TXN_TIME"; + private static string HOST_REF = "HOST_REF"; + private static string COUPON_ID = "COUPON_ID"; + private static string AUTH_CODE = "AUTH_CODE"; + private static string TENDER = "TENDER"; + private static string AUTH_AMT = "AUTH_AMT"; + private static string DISCOUNT = "DISCOUNT"; + private static string LOCAL_CUR = "LOCAL_CUR"; + private static string FOREIGN_CUR = "FOREIGN_CUR"; + private static string FXRATE = "FXRATE"; + private static string FOREIGN_AMT = "FOREIGN_AMT"; + private static string MID = "MID"; + private static string TID = "TID"; + private static string PAN = "PAN"; + private static string EXPIRY_DATE = "EXPIRY_DATE"; + private static string LOYALTY_REF = "LOYALTY_REF"; + private static string AID = "AID"; + private static string ENTRY_MODE = "ENTRY_MODE"; + private static string BATCH_NO = "BATCH_NO"; + private static string TC = "TC"; + private static string APP = "APP"; + private static string ACQUIRER = "ACQUIRER"; + + private string eventName; + private TxnType txnType; + private string ecrRefTxnId; + private string status; + private TxnStatus txnStatus; + private decimal txnAmt; + private decimal tipAmt; + private PaymentType paymentType; + private string respCode; + private LoyaltyType loyaltyType; + private string campaignId; + private string traceNo; + private string txnDate; + private string txnTime; + private string hostRef; + private string couponId; + private string authCode; + private string tender; + private string authAmt; + private string discAmt; + private string localCur; + private string foreignCur; + private string fxRate; + private string foreignAmt; + private string mid; + private string tid; + private string pan; + private string expiryDate; + private string loyaltyRef; + private string aid; + private string entryMode; + private string batchNo; + private string tc; + private string app; + private string acquirer; + + public void setEventName(string pEventName) + { + eventName = pEventName; + } + + public string EventName + { + get { return eventName; } + } + + private void setTxnType(TxnType pTxnType) { + txnType = pTxnType; + } + + public TxnType TxnType { + get { return txnType; } + } + + private void setTxnStatus(TxnStatus pTxnStatus) { + txnStatus = pTxnStatus; + } + + public TxnStatus TxnStatus { + get { return txnStatus; } + } + + private void setTender(string pTender) { + tender = pTender; + } + + public string Tender { + get { return tender; } + } + + private void setEcrRefTxnId(string pEcrRefTxnId) { + ecrRefTxnId = pEcrRefTxnId; + } + + public string EcrRefTxnId { + get { return ecrRefTxnId; } + } + + public string Status { + get { return status; } + } + private void setStatus(string pStatus) { + this.status = pStatus; + } + public decimal TxnAmt { + get { return txnAmt; } + } + private void setTxnAmt(decimal pTxnAmt) { + this.txnAmt = pTxnAmt; + } + public decimal TipAmt { + get { return tipAmt; } + } + private void setTipAmt(decimal pTipAmt) { + this.tipAmt = pTipAmt; + } + public PaymentType PaymentType { + get { return paymentType; } + } + private void setPaymentType(PaymentType pPaymentType) { + this.paymentType = pPaymentType; + } + public string RespCode { + get { return respCode; } + } + private void setRespCode(string pRespCode) { + this.respCode = pRespCode; + } + public LoyaltyType LoyaltyType { + get { return loyaltyType; } + } + private void setLoyaltyType(LoyaltyType pLoyaltyType) { + this.loyaltyType = pLoyaltyType; + } + public string CampaignId { + get { return campaignId; } + } + private void setCampaignId(string pCampaignId) { + this.campaignId = pCampaignId; + } + 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 HostRef { + get { return hostRef; } + } + private void setHostRef(string pHostRef) { + this.hostRef = pHostRef; + } + public string CouponId { + get { return couponId; } + } + private void setCouponId(string pCouponId) { + this.couponId = pCouponId; + } + public string AuthCode { + get { return authCode; } + } + private void setAuthCode(string pAuthCode) { + this.authCode = pAuthCode; + } + public string AuthAmt { + get { return authAmt; } + } + private void setAuthAmt(string pAuthAmt) { + this.authAmt = pAuthAmt; + } + public string DiscAmt { + get { return discAmt; } + } + private void setDiscAmt(string pDiscAmt) { + this.discAmt = pDiscAmt; + } + public string LocalCur { + get { return localCur; } + } + private void setLocalCur(string pLocalCur) { + this.localCur = pLocalCur; + } + public string ForeignCur { + get { return foreignCur; } + } + private void setForeignCur(string pForeignCur) { + this.foreignCur = pForeignCur; + } + public string FxRate { + get { return fxRate; } + } + private void setFxRate(string pFxRate) { + this.fxRate = pFxRate; + } + public string ForeignAmt { + get { return foreignAmt; } + } + private void setForeignAmt(string pForeignAmt) { + this.foreignAmt = pForeignAmt; + } + public string Mid { + get { return mid; } + } + private void setMid(string pMid) { + this.mid = pMid; + } + public string Tid { + get { return tid; } + } + private void setTid(string pTid) { + this.tid = pTid; + } + public string Pan { + get { return pan; } + } + private void setPan(string pPan) { + this.pan = pPan; + } + public string ExpiryDate { + get { return expiryDate; } + } + private void setExpiryDate(string pExpiryDate) { + this.expiryDate = pExpiryDate; + } + public string LoyaltyRef { + get { return loyaltyRef; } + } + private void setLoyaltyRef(string pLoyaltyRef) { + this.loyaltyRef = pLoyaltyRef; + } + public string Aid { + get { return aid; } + } + private void setAid(string pAid) { + this.aid = pAid; + } + public string EntryMode { + get { return entryMode; } + } + private void setEntryMode(string pEntryMode) { + this.entryMode = pEntryMode; + } + public string BatchNo { + get { return batchNo; } + } + private void setBatchNo(string pBatchNo) { + this.batchNo = pBatchNo; + } + public string Tc { + get { return tc; } + } + private void setTc(string pTc) { + this.tc = pTc; + } + public string App { + get { return app; } + } + private void setApp(string pApp) { + this.app = pApp; + } + public string Acquirer { + get { return acquirer; } + } + private void setAcquirer(string pAcquirer) { + this.acquirer = pAcquirer; + } + + public RetrievalResult() { + } + + public RetrievalResult(string pStatus) { + this.setStatus(pStatus); + } + + public static string toJsonForRetrieval(string txnId) { + + if (txnId == null || "".Equals(txnId)) { + Console.WriteLine("txnId is null "); + return null; + } + string cardSaleMsg = "{\"EVENT_NAME\":\"RETRIEVAL\",\"TXN_ID\":\"" + txnId + "\"}"; + return cardSaleMsg; + } + + public static RetrievalResult toRetrievalResultFromJsonMsg(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; + RetrievalResult retrievalResult = new RetrievalResult(); + + for (int i = 0; i < column.Length; i++) { + valueColumn = column[i].Split(':'); + valueColumn0 = valueColumn[0].Replace('"', ' ').Trim(); + valueColumn1 = valueColumn[1].Replace('"', ' ').Trim(); + if (RetrievalResult.EVENT_NAME.Equals(valueColumn0)) + { + retrievalResult.setEventName(valueColumn1); + } + if (RetrievalResult.TXN_TYPE.Equals(valueColumn0)) { + retrievalResult.setTxnType(ObjectUtil.getTxnType(valueColumn1)); + } + + if (RetrievalResult.TXN_ID.Equals(valueColumn0)) { + retrievalResult.setEcrRefTxnId(valueColumn1); + } + if (RetrievalResult.STATUS.Equals(valueColumn0)) { + retrievalResult.setStatus(valueColumn1); + } + + if (RetrievalResult.TXN_STATUS.Equals(valueColumn0)) { + retrievalResult.setTxnStatus(ObjectUtil.getTxnStatus(valueColumn1)); + } + + if (RetrievalResult.TXN_AMT.Equals(valueColumn0)) { + if (valueColumn1 == null || "".Equals(valueColumn1)) { + retrievalResult.setTxnAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); + } + else { + retrievalResult.setTxnAmt(decimal.Parse(valueColumn1, System.Globalization.NumberStyles.AllowDecimalPoint)); + } + } + + if (RetrievalResult.TIPS.Equals(valueColumn0)) { + if (valueColumn1 == null || "".Equals(valueColumn1)) { + retrievalResult.setTipAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); + } + else { + retrievalResult.setTipAmt(decimal.Parse(valueColumn1, System.Globalization.NumberStyles.AllowDecimalPoint)); + } + } + + if (RetrievalResult.PAYMENT_TYPE.Equals(valueColumn0)) { + retrievalResult.setPaymentType(ObjectUtil.getPaymentType(valueColumn1)); + } + + if (RetrievalResult.RESP_CODE.Equals(valueColumn0)) { + retrievalResult.setRespCode(valueColumn1); + } + + if (RetrievalResult.LOYALTY_TYPE.Equals(valueColumn0)) { + retrievalResult.setLoyaltyType(ObjectUtil.getLoyaltyType(valueColumn1)); + } + + if (RetrievalResult.CAMPAIGN_ID.Equals(valueColumn0)) { + retrievalResult.setCampaignId(valueColumn1); + } + + if (RetrievalResult.TRACE_NO.Equals(valueColumn0)) { + retrievalResult.setTraceNo(valueColumn1); + } + if (RetrievalResult.TXN_DATE.Equals(valueColumn0)) { + retrievalResult.setTxnDate(valueColumn1); + } + if (RetrievalResult.TXN_TIME.Equals(valueColumn0)) { + retrievalResult.setTxnTime(valueColumn1); + } + + if (RetrievalResult.HOST_REF.Equals(valueColumn0)) { + retrievalResult.setHostRef(valueColumn1); + } + if (RetrievalResult.COUPON_ID.Equals(valueColumn0)) { + retrievalResult.setCouponId(valueColumn1); + } + if (RetrievalResult.AUTH_CODE.Equals(valueColumn0)) { + retrievalResult.setAuthCode(valueColumn1); + } + + if (RetrievalResult.TENDER.Equals(valueColumn0)) { + retrievalResult.setTender(valueColumn1); + } + if (RetrievalResult.AUTH_AMT.Equals(valueColumn0)) { + retrievalResult.setAuthAmt(valueColumn1); + } + if (RetrievalResult.DISCOUNT.Equals(valueColumn0)) { + retrievalResult.setDiscAmt(valueColumn1); + } + if (RetrievalResult.LOCAL_CUR.Equals(valueColumn0)) { + retrievalResult.setLocalCur(valueColumn1); + } + if (RetrievalResult.FOREIGN_CUR.Equals(valueColumn0)) { + retrievalResult.setForeignCur(valueColumn1); + } + if (RetrievalResult.FXRATE.Equals(valueColumn0)) { + retrievalResult.setFxRate(valueColumn1); + } + if (RetrievalResult.FOREIGN_AMT.Equals(valueColumn0)) { + retrievalResult.setForeignAmt(valueColumn1); + } + if (RetrievalResult.MID.Equals(valueColumn0)) { + retrievalResult.setMid(valueColumn1); + } + if (RetrievalResult.TID.Equals(valueColumn0)) { + retrievalResult.setTid(valueColumn1); + } + if (RetrievalResult.PAN.Equals(valueColumn0)) { + retrievalResult.setPan(valueColumn1); + } + if (RetrievalResult.EXPIRY_DATE.Equals(valueColumn0)) { + retrievalResult.setExpiryDate(valueColumn1); + } + if (RetrievalResult.LOYALTY_REF.Equals(valueColumn0)) { + retrievalResult.setLoyaltyRef(valueColumn1); + } + if (RetrievalResult.AID.Equals(valueColumn0)) { + retrievalResult.setAid(valueColumn1); + } + if (RetrievalResult.ENTRY_MODE.Equals(valueColumn0)) { + retrievalResult.setEntryMode(valueColumn1); + } + if (RetrievalResult.BATCH_NO.Equals(valueColumn0)) { + retrievalResult.setBatchNo(valueColumn1); + } + if (RetrievalResult.APP.Equals(valueColumn0)) { + retrievalResult.setApp(valueColumn1); + } + if (RetrievalResult.TC.Equals(valueColumn0)) { + retrievalResult.setTc(valueColumn1); + } + if (RetrievalResult.ACQUIRER.Equals(valueColumn0)) { + retrievalResult.setAcquirer(valueColumn1); + } + } + + return retrievalResult; + } + } +} diff --git a/n5coredll/SaleResult.cs b/n5coredll/SaleResult.cs new file mode 100644 index 0000000..565d4a6 --- /dev/null +++ b/n5coredll/SaleResult.cs @@ -0,0 +1,461 @@ +using System; +using System.Text; + +namespace n5coredll +{ + public class SaleResult { + private static string TXN_ID = "TXN_ID"; + private static string STATUS = "STATUS"; + private static string TXN_AMT = "TXN_AMT"; + private static string TIPS = "TIPS"; + private static string PAYMENT_TYPE = "PAYMENT_TYPE"; + private static string RESP_CODE = "RESP_CODE"; + private static string LOYALTY_TYPE = "LOYALTY_TYPE"; + private static string CAMPAIGN_ID = "CAMPAIGN_ID"; + private static string TRACE_NO = "TRACE_NO"; + private static string TXN_DATE = "TXN_DATE"; + private static string TXN_TIME = "TXN_TIME"; + private static string HOST_REF = "HOST_REF"; + private static string COUPON_ID = "COUPON_ID"; + private static string AUTH_CODE = "AUTH_CODE"; + private static string AUTH_AMT = "AUTH_AMT"; + private static string DISCOUNT = "DISCOUNT"; + private static string LOCAL_CUR = "LOCAL_CUR"; + private static string FOREIGN_CUR = "FOREIGN_CUR"; + private static string FXRATE = "FXRATE"; + private static string FOREIGN_AMT = "FOREIGN_AMT"; + private static string MID = "MID"; + private static string TID = "TID"; + private static string PAN = "PAN"; + private static string EXPIRY_DATE = "EXPIRY_DATE"; + private static string LOYALTY_REF = "LOYALTY_REF"; + private static string AID = "AID"; + private static string ENTRY_MODE = "ENTRY_MODE"; + private static string BATCH_NO = "BATCH_NO"; + private static string TC = "TC"; + private static string APP = "APP"; + private static string ACQUIRER = "ACQUIRER"; + + private string ecrRefTxnId; + private string status; + private decimal txnAmt; + private decimal tipAmt; + private PaymentType paymentType; + private string respCode; + private LoyaltyType loyaltyType; + private string campaignId; + private string traceNo; + private string txnDate; + private string txnTime; + private string hostRef; + private string couponId; + private string authCode; + private string authAmt; + private string discAmt; + private string localCur; + private string foreignCur; + private string fxRate; + private string foreignAmt; + private string mid; + private string tid; + private string pan; + private string expiryDate; + private string loyaltyRef; + private string aid; + private string entryMode; + private string batchNo; + private string tc; + private string app; + private string acquirer; + + private void setEcrRefTxnId(string pEcrRefTxnId) { + ecrRefTxnId = pEcrRefTxnId; + } + + public string EcrRefTxnId { + get { return ecrRefTxnId; } + } + + public string Status { + get { return status; } + } + private void setStatus(string pStatus) { + this.status = pStatus; + } + public decimal TxnAmt { + get { return txnAmt; } + } + private void setTxnAmt(decimal pTxnAmt) { + this.txnAmt = pTxnAmt; + } + public decimal TipAmt { + get { return tipAmt; } + } + private void setTipAmt(decimal pTipAmt) { + this.tipAmt = pTipAmt; + } + public PaymentType PaymentType { + get { return paymentType; } + } + private void setPaymentType(PaymentType pPaymentType) { + this.paymentType = pPaymentType; + } + public string RespCode { + get { return respCode; } + } + private void setRespCode(string pRespCode) { + this.respCode = pRespCode; + } + public LoyaltyType LoyaltyType { + get { return loyaltyType; } + } + private void setLoyaltyType(LoyaltyType pLoyaltyType) { + this.loyaltyType = pLoyaltyType; + } + public string CampaignId { + get { return campaignId; } + } + private void setCampaignId(string pCampaignId) { + this.campaignId = pCampaignId; + } + 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 HostRef { + get { return hostRef; } + } + private void setHostRef(string pHostRef) { + this.hostRef = pHostRef; + } + public string CouponId { + get { return couponId; } + } + private void setCouponId(string pCouponId) { + this.couponId = pCouponId; + } + public string AuthCode { + get { return authCode; } + } + private void setAuthCode(string pAuthCode) { + this.authCode = pAuthCode; + } + public string AuthAmt { + get { return authAmt; } + } + private void setAuthAmt(string pAuthAmt) { + this.authAmt = pAuthAmt; + } + public string DiscAmt { + get { return discAmt; } + } + private void setDiscAmt(string pDiscAmt) { + this.discAmt = pDiscAmt; + } + public string LocalCur { + get { return localCur; } + } + private void setLocalCur(string pLocalCur) { + this.localCur = pLocalCur; + } + public string ForeignCur { + get { return foreignCur; } + } + private void setForeignCur(string pForeignCur) { + this.foreignCur = pForeignCur; + } + public string FxRate { + get { return fxRate; } + } + private void setFxRate(string pFxRate) { + this.fxRate = pFxRate; + } + public string ForeignAmt { + get { return foreignAmt; } + } + private void setForeignAmt(string pForeignAmt) { + this.foreignAmt = pForeignAmt; + } + 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 string getPan() { + return pan; + } + private void setPan(string pPan) { + this.pan = pPan; + } + public string getExpiryDate() { + return expiryDate; + } + private void setExpiryDate(string pExpiryDate) { + this.expiryDate = pExpiryDate; + } + public string getLoyaltyRef() { + return loyaltyRef; + } + private void setLoyaltyRef(string pLoyaltyRef) { + this.loyaltyRef = pLoyaltyRef; + } + public string getAid() { + return aid; + } + private void setAid(string pAid) { + this.aid = pAid; + } + public string EntryMode { + get { return entryMode; } + } + private void setEntryMode(string pEntryMode) { + this.entryMode = pEntryMode; + } + public string BatchNo { + get { return batchNo; } + } + private void setBatchNo(string pBatchNo) { + this.batchNo = pBatchNo; + } + public string Tc { + get { return tc; } + } + private void setTc(string pTc) { + this.tc = pTc; + } + public string App { + get { return app; } + } + private void setApp(string pApp) { + this.app = pApp; + } + public string Acquirer { + get { return acquirer; } + } + private void setAcquirer(string pAcquirer) { + this.acquirer = pAcquirer; + } + + 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, string paymentType, string billType) + { + + string cardSaleMsg = "{\"EVENT_NAME\":\"SALE\",\"TXN_ID\":\"" + txnId + "\",\"TXN_AMT\":" + txnAmt + ",\"PAYMENT_TYPE\":\"" + paymentType + "\",\"BILL_TYPE_ID\":\"" + billType + "\"}"; + 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 SaleResult() { + } + + public SaleResult(string pStatus) { + this.setStatus(pStatus); + } + + public static SaleResult toSaleResultFromJsonMsg(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; + SaleResult saleResult = new SaleResult(); + + for (int i = 0; i < column.Length; i++) { + valueColumn = column[i].Split(':'); + valueColumn0 = valueColumn[0].Replace('"', ' ').Trim(); + valueColumn1 = valueColumn[1].Replace('"', ' ').Trim(); + if (SaleResult.TXN_ID.Equals(valueColumn0)) { + saleResult.setEcrRefTxnId(valueColumn1); + } + if (SaleResult.STATUS.Equals(valueColumn0)) { + saleResult.setStatus(valueColumn1); + } + + if (SaleResult.TXN_AMT.Equals(valueColumn0)) { + if (valueColumn1 == null || "".Equals(valueColumn1)) { + saleResult.setTxnAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); + } + else { + saleResult.setTxnAmt(decimal.Parse(valueColumn1)); + } + } + + if (SaleResult.TIPS.Equals(valueColumn0)) { + if (valueColumn1 == null || "".Equals(valueColumn1)) { + saleResult.setTipAmt(decimal.Parse("0.00", System.Globalization.NumberStyles.AllowDecimalPoint)); + } + else { + saleResult.setTipAmt(decimal.Parse(valueColumn1, System.Globalization.NumberStyles.AllowDecimalPoint)); + } + } + + if (SaleResult.PAYMENT_TYPE.Equals(valueColumn0)) { + saleResult.setPaymentType(ObjectUtil.getPaymentType(valueColumn1)); + } + + if (SaleResult.RESP_CODE.Equals(valueColumn0)) { + saleResult.setRespCode(valueColumn1); + } + + if (SaleResult.LOYALTY_TYPE.Equals(valueColumn0)) { + saleResult.setLoyaltyType(ObjectUtil.getLoyaltyType(valueColumn1)); + } + + if (SaleResult.CAMPAIGN_ID.Equals(valueColumn0)) { + saleResult.setCampaignId(valueColumn1); + } + + if (SaleResult.TRACE_NO.Equals(valueColumn0)) { + saleResult.setTraceNo(valueColumn1); + } + if (SaleResult.TXN_DATE.Equals(valueColumn0)) { + saleResult.setTxnDate(valueColumn1); + } + if (SaleResult.TXN_TIME.Equals(valueColumn0)) { + saleResult.setTxnTime(valueColumn1); + } + + if (SaleResult.HOST_REF.Equals(valueColumn0)) { + saleResult.setHostRef(valueColumn1); + } + if (SaleResult.COUPON_ID.Equals(valueColumn0)) { + saleResult.setCouponId(valueColumn1); + } + if (SaleResult.AUTH_CODE.Equals(valueColumn0)) { + saleResult.setAuthCode(valueColumn1); + } + if (SaleResult.AUTH_AMT.Equals(valueColumn0)) { + saleResult.setAuthAmt(valueColumn1); + } + if (SaleResult.DISCOUNT.Equals(valueColumn0)) { + saleResult.setDiscAmt(valueColumn1); + } + if (SaleResult.LOCAL_CUR.Equals(valueColumn0)) { + saleResult.setLocalCur(valueColumn1); + } + if (SaleResult.FOREIGN_CUR.Equals(valueColumn0)) { + saleResult.setForeignCur(valueColumn1); + } + if (SaleResult.FXRATE.Equals(valueColumn0)) { + saleResult.setFxRate(valueColumn1); + } + if (SaleResult.FOREIGN_AMT.Equals(valueColumn0)) { + saleResult.setForeignAmt(valueColumn1); + } + if (SaleResult.MID.Equals(valueColumn0)) { + saleResult.setMid(valueColumn1); + } + if (SaleResult.TID.Equals(valueColumn0)) { + saleResult.setTid(valueColumn1); + } + if (SaleResult.PAN.Equals(valueColumn0)) { + saleResult.setPan(valueColumn1); + } + if (SaleResult.EXPIRY_DATE.Equals(valueColumn0)) { + saleResult.setExpiryDate(valueColumn1); + } + if (SaleResult.LOYALTY_REF.Equals(valueColumn0)) { + saleResult.setLoyaltyRef(valueColumn1); + } + if (SaleResult.AID.Equals(valueColumn0)) { + saleResult.setAid(valueColumn1); + } + if (SaleResult.ENTRY_MODE.Equals(valueColumn0)) { + saleResult.setEntryMode(valueColumn1); + } + if (SaleResult.BATCH_NO.Equals(valueColumn0)) { + saleResult.setBatchNo(valueColumn1); + } + if (SaleResult.APP.Equals(valueColumn0)) { + saleResult.setApp(valueColumn1); + } + if (SaleResult.TC.Equals(valueColumn0)) { + saleResult.setTc(valueColumn1); + } + if (SaleResult.ACQUIRER.Equals(valueColumn0)) { + saleResult.setAcquirer(valueColumn1); + } + + } + return saleResult; + } + } +} diff --git a/n5coredll/TxnStatus.cs b/n5coredll/TxnStatus.cs new file mode 100644 index 0000000..6c2ca64 --- /dev/null +++ b/n5coredll/TxnStatus.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace n5coredll +{ + public enum TxnStatus { Approved, Confirming, Voided, Settled, Failed } +} diff --git a/n5coredll/TxnType.cs b/n5coredll/TxnType.cs new file mode 100644 index 0000000..5a14909 --- /dev/null +++ b/n5coredll/TxnType.cs @@ -0,0 +1,5 @@ +using System; +namespace n5coredll +{ + public enum TxnType { SALE, REFUND, NONE } +} diff --git a/n5coredll/Util.cs b/n5coredll/Util.cs new file mode 100644 index 0000000..2553a89 --- /dev/null +++ b/n5coredll/Util.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace n5coredll +{ + public class Util + { + public static string bcd2Str(byte[] bytes) + { + Console.WriteLine("Execute bcd2Str!"); + + StringBuilder temp = new StringBuilder(); + for (int i = 0; i < bytes.Length; i++) + { + int h = ((bytes[i] & 0xff) >> 4) + 48; + temp.Append((char)h); + int l = ((bytes[i] & 0x0f)) + 48; + temp.Append((char)l); + } + return temp.ToString(); + } + + public static string desToHex(byte[] bytes) + { + StringBuilder sb = new StringBuilder(""); + for (int i = 0; i < bytes.Length; i++) + { + string st = string.Format("%02X", bytes[i]); + sb.Append(st); + } + return sb.ToString(); + } + } +} diff --git a/n5coredll/VoidResult.cs b/n5coredll/VoidResult.cs new file mode 100644 index 0000000..647cf73 --- /dev/null +++ b/n5coredll/VoidResult.cs @@ -0,0 +1,169 @@ +using System; +using System.Text; + +namespace n5coredll +{ + public class VoidResult { + private static string TXN_ID = "TXN_ID"; + private static string STATUS = "STATUS"; + private static string PAYMENT_TYPE = "PAYMENT_TYPE"; + private static string RESP_CODE = "RESP_CODE"; + private static string TXN_DATE = "TXN_DATE"; + private static string TXN_TIME = "TXN_TIME"; + private static string HOST_REF = "HOST_REF"; + private static string TC = "TC"; + private static string APP = "APP"; + private static string ACQUIRER = "ACQUIRER"; + + private string ecrRefTxnId; + private string status; + private PaymentType paymentType; + private string respCode; + private string txnDate; + private string txnTime; + private string hostRef; + private string tc; + private string app; + private string acquirer; + + + private void setEcrRefTxnId(string pEcrRefTxnId) { + ecrRefTxnId = pEcrRefTxnId; + } + + public string EcrRefTxnId { + get { return ecrRefTxnId; } + } + + public string Status { + get { return status; } + } + private void setStatus(string pStatus) { + this.status = pStatus; + } + + public PaymentType PaymentType { + get { return paymentType; } + } + private void setPaymentType(PaymentType pPaymentType) { + this.paymentType = pPaymentType; + } + public string RespCode { + get { return respCode; } + } + private void setRespCode(string pRespCode) { + this.respCode = pRespCode; + } + + 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 HostRef { + get { return hostRef; } + } + private void setHostRef(string pHostRef) { + this.hostRef = pHostRef; + } + public string Tc { + get { return tc; } + } + private void setTc(string pTc) { + this.tc = pTc; + } + public string App { + get { return app; } + } + private void setApp(string pApp) { + this.app = pApp; + } + public string Acquirer { + get { return acquirer; } + } + private void setAcquirer(string pAcquirer) { + this.acquirer = pAcquirer; + } + + public VoidResult() { + } + + public VoidResult(string pStatus) { + this.setStatus(pStatus); + } + + public static string toJsonForVoid(string txnId, string qrcValue) { + if (txnId == null || "".Equals(txnId)) { + Console.WriteLine("txnId is null "); + return null; + } + + string cardVoidMsg = "{\"EVENT_NAME\":\"VOID\",\"TXN_ID\":\"" + txnId + "\",\"QRC_VALUE\":\"" + qrcValue + "\",\"PAYMENT_APP_ID\":\"CC\"}"; + return cardVoidMsg; + } + + public static VoidResult toVoidResultFromJsonMsg(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; + VoidResult VoidResult = new VoidResult(); + + for (int i = 0; i < column.Length; i++) { + valueColumn = column[i].Split(':'); + valueColumn0 = valueColumn[0].Replace('"', ' ').Trim(); + valueColumn1 = valueColumn[1].Replace('"', ' ').Trim(); + + if (VoidResult.TXN_ID.Equals(valueColumn0)) { + VoidResult.setEcrRefTxnId(valueColumn1); + } + if (VoidResult.STATUS.Equals(valueColumn0)) { + VoidResult.setStatus(valueColumn1); + } + + if (VoidResult.PAYMENT_TYPE.Equals(valueColumn0)) { + VoidResult.setPaymentType(ObjectUtil.getPaymentType(valueColumn1)); + } + + if (VoidResult.RESP_CODE.Equals(valueColumn0)) { + VoidResult.setRespCode(valueColumn1); + } + if (VoidResult.TXN_DATE.Equals(valueColumn0)) { + VoidResult.setTxnDate(valueColumn1); + } + if (VoidResult.TXN_TIME.Equals(valueColumn0)) { + VoidResult.setTxnTime(valueColumn1); + } + + if (VoidResult.HOST_REF.Equals(valueColumn0)) { + VoidResult.setHostRef(valueColumn1); + } + + if (VoidResult.APP.Equals(valueColumn0)) { + VoidResult.setApp(valueColumn1); + } + if (VoidResult.TC.Equals(valueColumn0)) { + VoidResult.setTc(valueColumn1); + } + if (VoidResult.ACQUIRER.Equals(valueColumn0)) { + VoidResult.setAcquirer(valueColumn1); + } + } + + return VoidResult; + } + } +} diff --git a/n5coredll/app.config b/n5coredll/app.config new file mode 100644 index 0000000..49cc43e --- /dev/null +++ b/n5coredll/app.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/n5coredll/n5codedll.snk b/n5coredll/n5codedll.snk new file mode 100644 index 0000000000000000000000000000000000000000..bd8dde04d238d1403d9a7aaeb74a1dfceea4775e GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098?(JEG;O z>(;}WR>kwd+XPtJBLR5cRO-8S;%nT)Ibu&9oo%EPm!|{`w1{I6-{v0R+fOY>&xAEw z9!^VmmO+?S7<>9fXz6Yk(XJnc;RR)Z{OTC!l^(CmwiA|{{X;w-qLV2saZT=qU|+ZE zl*_y^Aiz;)F?HL?^JLIJvd6fagY6WaWfh#PxWe~BfWNN*5WkTwsU9eoJ%iV$E&vC> z57hz#31Nibk)z+Af(wDG|DsuI!9cXZI51KbgFwRg*p7eP^1Ttr&$cYs_5 ztIDD_ocqw`UbSz402o>pmGNu_&aZwr6ViDz7y(!il4y>2O%Fc`bFv}?mHb|~?PMTbii_hhiL@D>j@gJZ>mgU&a5qXcKEy(t2D_?Ft0ez# i>5($|HVL~kvHGO%(S^YmVSMm-v4G9FIXgTFi#M_DiXJ2Y literal 0 HcmV?d00001 diff --git a/n5coredll/n5coredll.csproj b/n5coredll/n5coredll.csproj new file mode 100644 index 0000000..43aed9b --- /dev/null +++ b/n5coredll/n5coredll.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {1F0C1D84-FD97-41F1-BC8B-F2F22C1997A1} + Library + Properties + n5coredll + n5coredll + v3.5 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AnyCPU + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + AnyCPU + + + true + + + n5codedll.snk + + + + + + + + + + + + + + + + + + + + True + True + Settings.settings + + + + + + + + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + \ No newline at end of file