添加项目文件。

MTR
rexlin 5 years ago
parent 2c34d9d465
commit beaf945a41
  1. 31
      DLL_HK.sln
  2. 6
      ECR_N5_DLL_TestUI/App.config
  3. 9
      ECR_N5_DLL_TestUI/App.xaml
  4. 17
      ECR_N5_DLL_TestUI/App.xaml.cs
  5. 132
      ECR_N5_DLL_TestUI/ECR_N5_DLL_TestUI.csproj
  6. 101
      ECR_N5_DLL_TestUI/MainWindow.xaml
  7. 1050
      ECR_N5_DLL_TestUI/MainWindow.xaml.cs
  8. 55
      ECR_N5_DLL_TestUI/Properties/AssemblyInfo.cs
  9. 63
      ECR_N5_DLL_TestUI/Properties/Resources.Designer.cs
  10. 117
      ECR_N5_DLL_TestUI/Properties/Resources.resx
  11. 26
      ECR_N5_DLL_TestUI/Properties/Settings.Designer.cs
  12. 7
      ECR_N5_DLL_TestUI/Properties/Settings.settings
  13. 6
      n5coredll/LoyaltyType.cs
  14. 2434
      n5coredll/N5Core.cs
  15. 96
      n5coredll/N5PropertyOper.cs
  16. 239
      n5coredll/ObjectUtil.cs
  17. 15
      n5coredll/PaymentApp.cs
  18. 23
      n5coredll/PaymentType.cs
  19. 36
      n5coredll/Properties/AssemblyInfo.cs
  20. 26
      n5coredll/Properties/Settings.Designer.cs
  21. 6
      n5coredll/Properties/Settings.settings
  22. 374
      n5coredll/RefundResult.cs
  23. 103
      n5coredll/RequestResult.cs
  24. 468
      n5coredll/RetrievalResult.cs
  25. 461
      n5coredll/SaleResult.cs
  26. 9
      n5coredll/TxnStatus.cs
  27. 5
      n5coredll/TxnType.cs
  28. 36
      n5coredll/Util.cs
  29. 169
      n5coredll/VoidResult.cs
  30. 3
      n5coredll/app.config
  31. BIN
      n5coredll/n5codedll.snk
  32. 88
      n5coredll/n5coredll.csproj

@ -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

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

@ -0,0 +1,9 @@
<Application x:Class="ECR_N5_DLL_TestUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ECR_N5_DLL_TestUI"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace ECR_N5_DLL_TestUI
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
}
}

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DEF387D0-3F98-4720-874D-8A753399B206}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>ECR_N5_DLL_TestUI</RootNamespace>
<AssemblyName>ECR_N5_DLL_TestUI</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 和 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\n5coredll\n5coredll.csproj">
<Project>{1f0c1d84-fd97-41f1-bc8b-f2f22c1997a1}</Project>
<Name>n5coredll</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

@ -0,0 +1,101 @@
<Window x:Class="ECR_N5_DLL_TestUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ECR_N5_DLL_TestUI"
mc:Ignorable="d"
Title="ECR N5 DLL TEST" Height="881" Width="810">
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="644*"/>
<RowDefinition Height="68*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions>
<Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="331" Margin="46,445,0,0" VerticalAlignment="Top" Width="702" Grid.RowSpan="2" />
<TextBox x:Name="result1TextBox" HorizontalAlignment="Left" Height="258" Margin="406,485,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="330"/>
<Label Content="ECR N5 TEST" HorizontalAlignment="Left" Margin="248,-1,0,0" VerticalAlignment="Top" Width="304" Height="75" FontSize="48"/>
<RadioButton Content="Refund" HorizontalAlignment="Left" Margin="264,77,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Retrieval" HorizontalAlignment="Left" Margin="409,77,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Sale" HorizontalAlignment="Left" Margin="26,77,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Void" HorizontalAlignment="Left" Margin="145,77,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<Label Content="Please select test function:" HorizontalAlignment="Left" Margin="46,49,0,0" VerticalAlignment="Top" FontSize="16"/>
<Label Content="Please input test data:" HorizontalAlignment="Left" Margin="46,174,0,0" VerticalAlignment="Top" FontSize="16"/>
<Label Content="Payment Application : " HorizontalAlignment="Left" Margin="434,204,0,0" VerticalAlignment="Top"/>
<Label Content="Transaction Amount : " HorizontalAlignment="Left" Margin="61,208,0,0" VerticalAlignment="Top" Width="140"/>
<TextBox x:Name="txnAmtTextBox" HorizontalAlignment="Left" Height="23" Margin="201,208,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="205"/>
<Label Content="QR Code Value : " HorizontalAlignment="Left" Margin="61,234,0,0" VerticalAlignment="Top" Width="114"/>
<TextBox x:Name="qrValueTextBox" HorizontalAlignment="Left" Height="23" Margin="201,234,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="543"/>
<Button x:Name="submit_1_Button" Content="Submit" HorizontalAlignment="Left" Margin="494,405,0,0" VerticalAlignment="Top" Width="104" Click="Submit_1_Button_Click" Height="27"/>
<Label Content="response:" HorizontalAlignment="Left" Margin="402,455,0,0" VerticalAlignment="Top"/>
<ComboBox x:Name="paymentAppIdComboBox" SelectedIndex="0" HorizontalAlignment="Left" Margin="578,208,0,0" VerticalAlignment="Top" Width="164" >
<ComboBoxItem Content="CC"/>
<ComboBoxItem Content="QRC"/>
<ComboBoxItem Content="CPN"/>
<ComboBoxItem Content="AE"/>
<ComboBoxItem Content="DC"/>
<ComboBoxItem Content="EPS"/>
<ComboBoxItem Content="OPS"/>
<ComboBoxItem Content="FPS"/>
<ComboBoxItem Content="EPS"/>
<ComboBoxItem Content="NONE"/>
</ComboBox>
<Label Content="Transaction Id : " HorizontalAlignment="Left" Margin="61,261,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="ecrTxnIdTextBox" HorizontalAlignment="Left" Height="23" Margin="201,261,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="543"/>
<RadioButton Content="Settlement" HorizontalAlignment="Left" Margin="26,106,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Reprint" HorizontalAlignment="Left" Margin="145,106,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Link Request" HorizontalAlignment="Left" Margin="264,106,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<Label Content="portName : " HorizontalAlignment="Left" Margin="59,405,0,0" VerticalAlignment="Top"/>
<ComboBox x:Name="portNameComboBox" SelectedIndex="2" HorizontalAlignment="Left" Margin="145,409,0,0" VerticalAlignment="Top" Width="205" SelectionChanged="PortNameComboBox_SelectionChanged">
<ComboBoxItem Content="COM1"/>
<ComboBoxItem Content="COM2"/>
<ComboBoxItem Content="COM3"/>
<ComboBoxItem Content="COM4"/>
<ComboBoxItem Content="COM5"/>
<ComboBoxItem Content="COM6"/>
<ComboBoxItem Content="COM7"/>
<ComboBoxItem Content="COM8"/>
<ComboBoxItem Content="COM9"/>
<ComboBoxItem Content="COM10"/>
<ComboBoxItem Content="COM11"/>
<ComboBoxItem Content="COM12"/>
<ComboBoxItem Content="COM13"/>
<ComboBoxItem Content="COM14"/>
<ComboBoxItem Content="COM15"/>
<ComboBoxItem Content="COM16"/>
<ComboBoxItem Content="COM17"/>
<ComboBoxItem Content="COM18"/>
<ComboBoxItem Content="COM19"/>
<ComboBoxItem Content="COM20"/>
</ComboBox>
<TextBox x:Name="requestTextBox" HorizontalAlignment="Left" Height="258" Margin="58,487,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="330"/>
<Label Content="request:" HorizontalAlignment="Left" Margin="48,455,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="logPathTextBox" HorizontalAlignment="Left" Height="23" Margin="48,29.667,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="680" Grid.Row="1"/>
<Button x:Name="reset_Button" Content="Reset" HorizontalAlignment="Left" Margin="375,405,0,0" VerticalAlignment="Top" Width="101" Click="Reset_Button_Click" Height="27"/>
<RadioButton Content="Terminaion" HorizontalAlignment="Left" Margin="409,106,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Scan" HorizontalAlignment="Left" Margin="528,106,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="ReadCard" HorizontalAlignment="Left" Margin="528,77,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="AddPoint" HorizontalAlignment="Left" Margin="647,77,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<Label Content="Pan : " HorizontalAlignment="Left" Margin="61,290,0,0" VerticalAlignment="Top" Width="114"/>
<TextBox x:Name="panTextBox" HorizontalAlignment="Left" Height="23" Margin="201,290,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="543"/>
<Label Content="Exp Date : " HorizontalAlignment="Left" Margin="61,317,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="expDateTextBox" HorizontalAlignment="Left" Height="23" Margin="201,317,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="543"/>
<RadioButton Content="PreAuth" HorizontalAlignment="Left" Margin="647,105,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Offline" HorizontalAlignment="Left" Margin="26,137,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="Adjust" HorizontalAlignment="Left" Margin="145,137,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="BatchEnquiry" HorizontalAlignment="Left" Margin="264,137,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<RadioButton Content="SettleEnquiry" HorizontalAlignment="Left" Margin="408,137,0,0" VerticalAlignment="Top" FontSize="14" Checked="RadioButton_Checked"/>
<Label Content="Authcode" HorizontalAlignment="Left" Margin="61,345,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="authCodeTextBox" Height="23" Margin="201,345,40.667,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<Label Content="SettleDate" HorizontalAlignment="Left" Margin="489,375,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="settleDateTextBox" Height="23" Margin="578,375,41,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<Label Content="BatchId" HorizontalAlignment="Left" Margin="63,375,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="batchIdTextBox" Height="23" Margin="201,375,341,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<Button x:Name="submit_repeat_Button" Content="Start Repeat" Margin="616,405,65,0" VerticalAlignment="Top" Click="Submit_Repeat_Button_Click" Height="27"/>
</Grid>
</ScrollViewer>
</Window>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,55 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ECR_N5_DLL_TestUI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ECR_N5_DLL_TestUI")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
//若要开始生成可本地化的应用程序,请设置
//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
//例如,如果您在源文件中使用的是美国英语,
//使用的是美国英语,请将 <UICulture> 设置为 en-US。 然后取消
//对以下 NeutralResourceLanguage 特性的注释。 更新
//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //主题特定资源词典所处位置
//(未在页面中找到资源时使用,
//或应用程序资源字典中找到时使用)
ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
//(未在页面中找到资源时使用,
//、应用程序或任何主题专用资源字典中找到时使用)
)]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace ECR_N5_DLL_TestUI.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ECR_N5_DLL_TestUI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace ECR_N5_DLL_TestUI.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;
}
}
}
}

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

@ -0,0 +1,6 @@
using System;
namespace n5coredll {
public enum LoyaltyType {
UP, MT, BK, LM, NONE
}
}

File diff suppressed because it is too large Load Diff

@ -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);
}
}
}
}
}

@ -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();
}
}
}

@ -0,0 +1,15 @@
using System;
namespace n5coredll
{
public enum PaymentApp {
CC,
QRC,
CPN,
AMEX,
DC,
FPS,
EPS,
OPS,
NONE
}
}

@ -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
}
}

@ -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")]

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
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;
}
}
}
}

@ -0,0 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
</SettingsFile>

@ -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;
}
}
}

@ -0,0 +1,103 @@
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 toJsonForSettlement()
{
return "{\"EVENT_NAME\":\"SETTLE\"}";
}
public static string toJsonForReprint()
{
return "{\"EVENT_NAME\":\"PRINT\",\"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 string toJsonForSummaryEnquiry(string period)
{
return "{\"EVENT_NAME\":\"SUMMARY_ENQUIRY\",\"TXN_DATE_START_TO_END\":\"" + period + "\"}";
}
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 + "\"}";
}
}
}

@ -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;
}
}
}

@ -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, decimal tipAmt, PaymentApp appId, string qrcValue, string pan, string expDate)
{
string cardSaleMsg = "{\"EVENT_NAME\":\"SALE\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TIPS\":" + tipAmt + ",\"TXN_AMT\":" + txnAmt + ",\"PAN\":\"" + pan + "\",\"EXPIRY_DATE\":\"" + expDate + "\",\"QRC_VALUE\":\"" + qrcValue + "\"}";
return cardSaleMsg;
}
public static string toJsonForPreauth(string txnId, decimal txnAmt, PaymentApp appId, string pan, string expDate)
{
string cardSaleMsg = "{\"EVENT_NAME\":\"PREAUTH\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TXN_AMT\":" + txnAmt + ",\"PAN\":\"" + pan + "\",\"EXPIRY_DATE\":\"" + expDate + "\"}";
return cardSaleMsg;
}
public static string toJsonForOffline(string txnId, decimal txnAmt, PaymentApp appId, string authCode, string pan, string expDate)
{
string cardSaleMsg = "{\"EVENT_NAME\":\"OFFLINE\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TXN_AMT\":" + txnAmt + ",\"AUTH_CODE\":\"" + authCode + "\""+ ",\"PAN\":\"" + pan + "\",\"EXPIRY_DATE\":\"" + expDate + "\"}";
return cardSaleMsg;
}
public static string toJsonForAdjust(string txnId, decimal totalAmt, decimal totalForeignAmt, PaymentApp appId)
{
string cardSaleMsg = "{\"EVENT_NAME\":\"ADJUST\",\"PAYMENT_APP_ID\":\"" + ObjectUtil.getPaymentAppValue(appId) + "\",\"TXN_ID\":\"" + txnId + "\",\"TOTAL_TXN_AMT\":" + totalAmt + ",\"TOTAL_FOREIGN_AMT\":" + totalForeignAmt + "}";
return cardSaleMsg;
}
private static string getTxnId() {
StringBuilder txnIdSb = new StringBuilder();
DateTime dt = DateTime.Now;
txnIdSb.Append(dt.ToString("yyyyMMddHHmmssfff"));
Console.WriteLine("txnIdSb = " + txnIdSb.ToString());
int randomTime = 0;
if (dt.Ticks.ToString().Length > 8) {
Console.WriteLine("Ticks.Length > 8 = " + dt.Ticks.ToString());
randomTime = int.Parse(dt.Ticks.ToString().Substring(0, 8));
}
else {
randomTime = int.Parse(dt.Ticks.ToString());
}
if (randomTime > 0) {
Random random = new Random(randomTime);
for (int i = 0; i < 15; i++) {
int thidRandom = random.Next(10);
txnIdSb.Append(thidRandom);
}
Console.WriteLine("txnIdSb.ToString = " + txnIdSb.ToString());
return txnIdSb.ToString();
}
else {
Console.WriteLine("randomTime is error = " + randomTime);
}
return "";
}
public 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;
}
}
}

@ -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 }
}

@ -0,0 +1,5 @@
using System;
namespace n5coredll
{
public enum TxnType { SALE, REFUND, NONE }
}

@ -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();
}
}
}

@ -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;
}
}
}

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

Binary file not shown.

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1F0C1D84-FD97-41F1-BC8B-F2F22C1997A1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>n5coredll</RootNamespace>
<AssemblyName>n5coredll</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
<RegisterForComInterop>true</RegisterForComInterop>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RegisterForComInterop>true</RegisterForComInterop>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>n5codedll.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="LoyaltyType.cs" />
<Compile Include="N5Core.cs" />
<Compile Include="N5PropertyOper.cs" />
<Compile Include="ObjectUtil.cs" />
<Compile Include="PaymentApp.cs" />
<Compile Include="PaymentType.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="RefundResult.cs" />
<Compile Include="RequestResult.cs" />
<Compile Include="RetrievalResult.cs" />
<Compile Include="SaleResult.cs" />
<Compile Include="TxnStatus.cs" />
<Compile Include="TxnType.cs" />
<Compile Include="Util.cs" />
<Compile Include="VoidResult.cs" />
</ItemGroup>
<ItemGroup>
<None Include="n5codedll.snk" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
Loading…
Cancel
Save