From 4f458ceec9475cc5d02e9978cf1899d5ada744e1 Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 13 Nov 2019 18:22:38 +0530 Subject: [PATCH 001/161] + Added code to support proxy --- src/Configuration.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Configuration.cs b/src/Configuration.cs index 03f3d01..c56a499 100644 --- a/src/Configuration.cs +++ b/src/Configuration.cs @@ -25,6 +25,11 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("timeout", "300000"); _configurationDictionary.Add("proxyAddress", string.Empty); _configurationDictionary.Add("proxyPort", string.Empty); + _configurationDictionary.Add("proxyAddress", ""); + _configurationDictionary.Add("proxyPort", ""); + _configurationDictionary.Add("proxyUsername", ""); + _configurationDictionary.Add("proxyPassword", ""); + return _configurationDictionary; } From 9270ffdfedd2d54566fea1f5470717c8133ffcb6 Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 13 Nov 2019 18:24:11 +0530 Subject: [PATCH 002/161] + Fixed indentation --- src/Configuration.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Configuration.cs b/src/Configuration.cs index c56a499..19b129e 100644 --- a/src/Configuration.cs +++ b/src/Configuration.cs @@ -25,7 +25,7 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("timeout", "300000"); _configurationDictionary.Add("proxyAddress", string.Empty); _configurationDictionary.Add("proxyPort", string.Empty); - _configurationDictionary.Add("proxyAddress", ""); + _configurationDictionary.Add("proxyAddress", ""); _configurationDictionary.Add("proxyPort", ""); _configurationDictionary.Add("proxyUsername", ""); _configurationDictionary.Add("proxyPassword", ""); From 6c736bb6a9fd0b3a2728d082573dccb8ec849e26 Mon Sep 17 00:00:00 2001 From: snavinch Date: Mon, 17 Feb 2020 14:59:40 +0530 Subject: [PATCH 003/161] - Removed the proxy settings --- src/Configuration.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Configuration.cs b/src/Configuration.cs index 19b129e..c5082d5 100644 --- a/src/Configuration.cs +++ b/src/Configuration.cs @@ -23,12 +23,10 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("logFileName", string.Empty); _configurationDictionary.Add("logFileMaxSize", "5242880"); _configurationDictionary.Add("timeout", "300000"); - _configurationDictionary.Add("proxyAddress", string.Empty); - _configurationDictionary.Add("proxyPort", string.Empty); - _configurationDictionary.Add("proxyAddress", ""); - _configurationDictionary.Add("proxyPort", ""); - _configurationDictionary.Add("proxyUsername", ""); - _configurationDictionary.Add("proxyPassword", ""); + // _configurationDictionary.Add("proxyAddress", string.Empty); + // _configurationDictionary.Add("proxyPort", string.Empty); + // _configurationDictionary.Add("proxyUsername", string.Empty); + // _configurationDictionary.Add("proxyPassword", string.Empty); return _configurationDictionary; From d73e35cc59a25b8397d3b00307f3c20b57095b72 Mon Sep 17 00:00:00 2001 From: snavinch Date: Mon, 17 Feb 2020 15:02:13 +0530 Subject: [PATCH 004/161] Renamed DecisionManager folder --- .../CoreServices/CreateDecisionManagerCase.cs | 0 .../CoreServices/DecisionProfileReject.cs | 0 .../CoreServices/DmWithBuyerInformation.cs | 0 .../CoreServices/DmWithDeviceInformation.cs | 0 .../CoreServices/DmWithMerchantDefinedInformation.cs | 0 .../CoreServices/DmWithShippingInformation.cs | 0 .../CoreServices/DmWithTravelInformation.cs | 0 .../CoreServices/ScoreExceedsThreshold.cs | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/CreateDecisionManagerCase.cs (100%) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/DecisionProfileReject.cs (100%) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/DmWithBuyerInformation.cs (100%) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/DmWithDeviceInformation.cs (100%) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/DmWithMerchantDefinedInformation.cs (100%) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/DmWithShippingInformation.cs (100%) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/DmWithTravelInformation.cs (100%) rename src/Samples/{DecisionManager => Risk Management}/CoreServices/ScoreExceedsThreshold.cs (100%) diff --git a/src/Samples/DecisionManager/CoreServices/CreateDecisionManagerCase.cs b/src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/CreateDecisionManagerCase.cs rename to src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs diff --git a/src/Samples/DecisionManager/CoreServices/DecisionProfileReject.cs b/src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/DecisionProfileReject.cs rename to src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs diff --git a/src/Samples/DecisionManager/CoreServices/DmWithBuyerInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/DmWithBuyerInformation.cs rename to src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs diff --git a/src/Samples/DecisionManager/CoreServices/DmWithDeviceInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/DmWithDeviceInformation.cs rename to src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs diff --git a/src/Samples/DecisionManager/CoreServices/DmWithMerchantDefinedInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/DmWithMerchantDefinedInformation.cs rename to src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs diff --git a/src/Samples/DecisionManager/CoreServices/DmWithShippingInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/DmWithShippingInformation.cs rename to src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs diff --git a/src/Samples/DecisionManager/CoreServices/DmWithTravelInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/DmWithTravelInformation.cs rename to src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs diff --git a/src/Samples/DecisionManager/CoreServices/ScoreExceedsThreshold.cs b/src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs similarity index 100% rename from src/Samples/DecisionManager/CoreServices/ScoreExceedsThreshold.cs rename to src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs From cf0ecd1a26d8a0a29d7a3283e8a52c8e4e35610b Mon Sep 17 00:00:00 2001 From: snavinch Date: Mon, 17 Feb 2020 15:17:35 +0530 Subject: [PATCH 005/161] + Renamed Decision Manager folder --- src/SampleCode.csproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 6aded5e..8761da9 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -92,14 +92,14 @@ - - - - - - - - + + + + + + + + From 64bfe10941f94153e8be9594b1d3eeabd7d9d09c Mon Sep 17 00:00:00 2001 From: snavinch Date: Mon, 17 Feb 2020 15:54:39 +0530 Subject: [PATCH 006/161] + Renamed files and namespaces for Decision Manager --- src/SampleCode.cs | 658 +++++++++--------- .../CoreServices/CreateDecisionManagerCase.cs | 2 +- .../CoreServices/DecisionProfileReject.cs | 2 +- .../CoreServices/DmWithBuyerInformation.cs | 2 +- .../CoreServices/DmWithDeviceInformation.cs | 2 +- .../DmWithMerchantDefinedInformation.cs | 2 +- .../CoreServices/DmWithShippingInformation.cs | 2 +- .../CoreServices/DmWithTravelInformation.cs | 2 +- .../CoreServices/ScoreExceedsThreshold.cs | 2 +- 9 files changed, 340 insertions(+), 334 deletions(-) diff --git a/src/SampleCode.cs b/src/SampleCode.cs index ee4afd4..da3871b 100644 --- a/src/SampleCode.cs +++ b/src/SampleCode.cs @@ -1,327 +1,333 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using NLog; - -namespace Cybersource_rest_samples_dotnet -{ - public class SampleCode - { - private static readonly string PathOfSamplesFolder = Path.Combine($"{AppDomain.CurrentDomain.BaseDirectory}", $"Samples"); - - private static readonly string ProjectNamespace = "Cybersource_rest_samples_dotnet"; - - // List of all the all the APIs - private static readonly List ApiList = new List(); - - // List of Sample Code name for each API Call - private static readonly List ApiFunctionCalls = new List(); - - // List of Location Path for the Directories containing Sample Codes - // The Paths are used to Call the Class File Dynamically (using Reflections) avoiding long switch case statements - private static readonly List SampleCodeClassesPathList = new List(); - - // Name of the Sample Code File to run for the current execution - private static string _sampleToRun = string.Empty; - - // NLog Logger object - private static Logger logger; - - public static void Main(string[] args) - { - // initializing logger object - // LogManager.DisableLogging(); - logger = LogManager.GetCurrentClassLogger(); - logger.Trace("\n"); - logger.Trace("PROGRAM EXECUTION BEGINS"); - - // Set Network Settings (To Avoid SSL/TLS Secure Channel Error) - SetNetworkSettings(); - - // Initialize Api List and the paths of all the sample codes - InitializeSampleClassesPathList(); - InitializeApiList(); - - if (args.Length == 1) - { - // Run the Sample Code as per input in the command line - RunSample(args[0]); - return; - } - - // Display all sample codes available to run - ShowMethods(); - - // Run the Sample Code as per user input - RunSample(); - - logger.Trace("PROGRAM EXECUTION ENDS"); - } - - public static void RunSample(string cmdLineArg = null) - { - try - { - _sampleToRun = string.IsNullOrEmpty(cmdLineArg) ? Console.ReadLine() : cmdLineArg; - logger.Trace($"Input provided for Sample Code to Run: {_sampleToRun}"); - - Console.WriteLine("\n"); - Type className = null; - - if (_sampleToRun.ToUpper().Contains("RUNALL")) - { - foreach (var apiMethod in ApiList) - { - Console.WriteLine("\n#### START RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); - RunSample(apiMethod.ApiFunctionCall); - Console.WriteLine("\n#### END RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); - } - } - else - { - foreach (var path in SampleCodeClassesPathList) - { - className = Type.GetType(path + _sampleToRun); - - if (className != null) - { - logger.Trace($"Sample Code found in the namespace: {path}"); - break; - } - } - - if (className == null) - { - logger.Warn("No Sample Code Found with the name: {0}", _sampleToRun); - Console.WriteLine("No Sample Code Found with the name: {0}", _sampleToRun); - - if (cmdLineArg == null) - { - ShowMethods(); - RunSample(); - } - - return; - } - - var obj = Activator.CreateInstance(className); - var methodInfo = className.GetMethod("Run"); - if (methodInfo != null) - { - logger.Trace($"Invoking Run() method of {_sampleToRun}"); - Console.WriteLine($"Invoking Run() method of {_sampleToRun}"); - methodInfo.Invoke(obj, null); - } - else - { - logger.Warn($"No Run Method Found in the class: {_sampleToRun}"); - Console.WriteLine("No Run Method Found in the class: {0}", _sampleToRun); - - if (cmdLineArg == null) - { - ShowMethods(); - RunSample(); - } - - return; - } - } - } - catch (Exception e) - { - Console.WriteLine("Exception in RunSample() Method: " + e.Message); - - if (e.InnerException != null) - { - Console.WriteLine("Inner Exception: " + e.InnerException.Message); - Console.WriteLine(e.InnerException.StackTrace); - } - - Console.WriteLine(e.StackTrace); - } - - if (cmdLineArg == null) - { - Console.WriteLine("\nPress any key to continue....."); - Console.ReadLine(); - ShowMethods(); - RunSample(); - } - } - - private static void ShowMethods() - { - logger.Trace("Beginning to Show All Sample Codes on Console"); - - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - Console.WriteLine(" - Code Sample Names -"); - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - - var apiFamilies = new List(); - - foreach (var api in ApiList.Where(api => !apiFamilies.Contains(api.ApiFamily))) - { - apiFamilies.Add(api.ApiFamily); - } - - foreach (var apiFamily in apiFamilies) - { - logger.Trace($"Showing Sample Codes for Api Family: {apiFamily}"); - - Console.WriteLine(" " + apiFamily.ToUpper() + " APIs "); - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - - var lineCharsCount = 0; - const int nextLineCharsMaxCount = 85; - string apirow = null; - - foreach (var api in ApiList.Where(api => api.ApiFamily == apiFamily).OrderBy(api => api.ApiFunctionCall)) - { - if (lineCharsCount + api.ApiFunctionCall.Length < nextLineCharsMaxCount) - { - apirow += " " + api.ApiFunctionCall + " \n"; - } - else - { - Console.WriteLine(apirow); - apirow = " " + api.ApiFunctionCall + " \n"; - lineCharsCount = 0; - } - - lineCharsCount = lineCharsCount + api.ApiFunctionCall.Length; - } - - Console.WriteLine(apirow); - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - } - - logger.Trace("All Sample Codes Shown on Console"); - Console.WriteLine(string.Empty); - Console.Write("Type a sample name & then press : "); - } - - private static void InitializeApiList() - { - /* - Initialization of Api List contains Following steps:- - - 1. Find the Api Families (Folders inside the main 'Samples' Folder) - - For Each Api Family:- - 2. Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) - 3. Create Api Object by providing value of Api Family and File Name (Extracted from File path). - 4. Add the Api Object to the ApiList List. - */ - - // 1. Find the Api Families (Folders inside the main 'Samples' Folder) - logger.Trace($"Samples Folder At:{Path.GetFullPath(PathOfSamplesFolder)}"); - - var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*"); - var apiFamilies = new List(); - - foreach (var dir in dirList) - { - var dirModified = dir.Replace(' ', '_'); - dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); - dirModified = dirModified.Replace(@"/", "."); - dirModified = dirModified.Replace(@"\", "."); - - apiFamilies.Add(dirModified); - } - - foreach (var apiFamily in apiFamilies) - { - // 2.Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) - var allfiles = Directory.GetFileSystemEntries(Path.Combine(PathOfSamplesFolder, apiFamily), "*.cs*", SearchOption.AllDirectories); - - logger.Trace($"Api Family: {apiFamily}"); - logger.Trace($"Total Sample Codes Detected: {allfiles.Count()}"); - - foreach (var file in allfiles) - { - var lastBackSlashIndex = file.LastIndexOf(@"/", StringComparison.Ordinal); - - if (lastBackSlashIndex == -1) - { - lastBackSlashIndex = file.LastIndexOf(@"\", StringComparison.Ordinal); - } - - var firstPart = file.Remove(lastBackSlashIndex); - var secondPart = file.Substring(lastBackSlashIndex + 1, file.Length - firstPart.Length - 4); - - ApiFunctionCalls.Add(secondPart); - - // 3.Create Api Object by providing value of Api Family and File Name(Extracted from File path). - var newApi = new Api - { - ApiFamily = apiFamily, - ApiFunctionCall = secondPart - }; - - // 4.Add the Api Object to the ApiList List. - ApiList.Add(newApi); - } - } - - CheckDuplicateSampleCodes(); - } - - private static void CheckDuplicateSampleCodes() - { - // Verify if this Api Already exists in the Api List or not (FunctionCall must be unique) - var duplicateListOutput = "Following Duplicate Sample Codes Found: "; - bool duplicateFound = false; - foreach (var apiFuncCall in ApiFunctionCalls) - { - if (ApiFunctionCalls.FindAll(x => x == apiFuncCall).Count > 1) - { - duplicateListOutput += apiFuncCall + ", "; - duplicateFound = true; - } - } - - if (duplicateFound) - { - logger.Warn("DUPLICATE SAMPLE CODES DETECTED!"); - Console.WriteLine(); - Console.WriteLine("WARNING:"); - Console.WriteLine(duplicateListOutput); - Console.WriteLine(); - } - } - - private static void InitializeSampleClassesPathList() - { - // dirList has got all the folders and sub-folders for the Samples Folder Path - var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*", SearchOption.AllDirectories); - logger.Trace($"Project Namespace value provided: {ProjectNamespace}"); - - foreach (var dir in dirList) - { - /* - Once we have the path of each folder, - we can use that to create the namespace names of all the sample codes, - inside the folder [Samples]. - */ - var dirModified = dir.Replace(' ', '_'); - dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); - dirModified = dirModified.Replace(@"/", "."); - dirModified = dirModified.Replace(@"\", "."); - - // SampleCodeClassesPathList is the complete list of all the possible namespaces for all the sample codes - SampleCodeClassesPathList.Add(ProjectNamespace + ".Samples." + dirModified + "."); - } - } - - private static void SetNetworkSettings() - { - // setting servicepointmanager configs for SSL/TSL / Proxy issues - ServicePointManager.Expect100Continue = true; - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - ServicePointManager.ServerCertificateValidationCallback += - (sender, certificate, chain, sslPolicyErrors) => true; - } - } +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using NLog; + +namespace Cybersource_rest_samples_dotnet +{ + public class SampleCode + { + private static readonly string PathOfSamplesFolder = Path.Combine($"{AppDomain.CurrentDomain.BaseDirectory}", $"Samples"); + + private static readonly string ProjectNamespace = "Cybersource_rest_samples_dotnet"; + + // List of all the all the APIs + private static readonly List ApiList = new List(); + + // List of Sample Code name for each API Call + private static readonly List ApiFunctionCalls = new List(); + + // List of Location Path for the Directories containing Sample Codes + // The Paths are used to Call the Class File Dynamically (using Reflections) avoiding long switch case statements + private static readonly List SampleCodeClassesPathList = new List(); + + // Name of the Sample Code File to run for the current execution + private static string _sampleToRun = string.Empty; + + // NLog Logger object + private static Logger logger; + + public static void Main(string[] args) + { + // initializing logger object + // LogManager.DisableLogging(); + logger = LogManager.GetCurrentClassLogger(); + logger.Trace("\n"); + logger.Trace("PROGRAM EXECUTION BEGINS"); + + // Set Network Settings (To Avoid SSL/TLS Secure Channel Error) + SetNetworkSettings(); + + // Initialize Api List and the paths of all the sample codes + InitializeSampleClassesPathList(); + InitializeApiList(); + + if (args.Length == 1) + { + // Run the Sample Code as per input in the command line + RunSample(args[0]); + return; + } + + // Display all sample codes available to run + ShowMethods(); + + // Run the Sample Code as per user input + RunSample(); + + logger.Trace("PROGRAM EXECUTION ENDS"); + } + + public static void RunSample(string cmdLineArg = null) + { + try + { + _sampleToRun = string.IsNullOrEmpty(cmdLineArg) ? Console.ReadLine() : cmdLineArg; + logger.Trace($"Input provided for Sample Code to Run: {_sampleToRun}"); + + Console.WriteLine("\n"); + Type className = null; + + if (_sampleToRun.ToUpper().Contains("RUNALL")) + { + foreach (var apiMethod in ApiList) + { + Console.WriteLine("\n#### START RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); + RunSample(apiMethod.ApiFunctionCall); + Console.WriteLine("\n#### END RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); + } + } + else + { + foreach (var path in SampleCodeClassesPathList) + { + className = Type.GetType(path + _sampleToRun); + + if (className != null) + { + logger.Trace($"Sample Code found in the namespace: {path}"); + break; + } + } + + if (className == null) + { + logger.Warn("No Sample Code Found with the name: {0}", _sampleToRun); + Console.WriteLine("No Sample Code Found with the name: {0}", _sampleToRun); + + if (cmdLineArg == null) + { + ShowMethods(); + RunSample(); + } + + return; + } + + var obj = Activator.CreateInstance(className); + var methodInfo = className.GetMethod("Run"); + if (methodInfo != null) + { + logger.Trace($"Invoking Run() method of {_sampleToRun}"); + Console.WriteLine($"Invoking Run() method of {_sampleToRun}"); + methodInfo.Invoke(obj, null); + } + else + { + logger.Warn($"No Run Method Found in the class: {_sampleToRun}"); + Console.WriteLine("No Run Method Found in the class: {0}", _sampleToRun); + + if (cmdLineArg == null) + { + ShowMethods(); + RunSample(); + } + + return; + } + } + } + catch (Exception e) + { + Console.WriteLine("Exception in RunSample() Method: " + e.Message); + + if (e.InnerException != null) + { + Console.WriteLine("Inner Exception: " + e.InnerException.Message); + Console.WriteLine(e.InnerException.StackTrace); + } + + Console.WriteLine(e.StackTrace); + } + + if (cmdLineArg == null) + { + Console.WriteLine("\nPress any key to continue....."); + Console.ReadLine(); + ShowMethods(); + RunSample(); + } + } + + private static void ShowMethods() + { + logger.Trace("Beginning to Show All Sample Codes on Console"); + + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + Console.WriteLine(" - Code Sample Names -"); + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + + var apiFamilies = new List(); + + foreach (var api in ApiList.Where(api => !apiFamilies.Contains(api.ApiFamily))) + { + apiFamilies.Add(api.ApiFamily); + } + + foreach (var apiFamily in apiFamilies) + { + logger.Trace($"Showing Sample Codes for Api Family: {apiFamily}"); + + Console.WriteLine(" " + apiFamily.ToUpper() + " APIs "); + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + + var lineCharsCount = 0; + const int nextLineCharsMaxCount = 85; + string apirow = null; + + foreach (var api in ApiList.Where(api => api.ApiFamily == apiFamily).OrderBy(api => api.ApiFunctionCall)) + { + if (lineCharsCount + api.ApiFunctionCall.Length < nextLineCharsMaxCount) + { + apirow += " " + api.ApiFunctionCall + " \n"; + } + else + { + Console.WriteLine(apirow); + apirow = " " + api.ApiFunctionCall + " \n"; + lineCharsCount = 0; + } + + lineCharsCount = lineCharsCount + api.ApiFunctionCall.Length; + } + + Console.WriteLine(apirow); + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + } + + logger.Trace("All Sample Codes Shown on Console"); + Console.WriteLine(string.Empty); + Console.Write("Type a sample name & then press : "); + } + + private static void InitializeApiList() + { + /* + Initialization of Api List contains Following steps:- + + 1. Find the Api Families (Folders inside the main 'Samples' Folder) + + For Each Api Family:- + 2. Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) + 3. Create Api Object by providing value of Api Family and File Name (Extracted from File path). + 4. Add the Api Object to the ApiList List. + */ + + // 1. Find the Api Families (Folders inside the main 'Samples' Folder) + logger.Trace($"Samples Folder At:{Path.GetFullPath(PathOfSamplesFolder)}"); + + var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*"); + var apiFamilies = new List(); + + foreach (var dir in dirList) + { + var dirModified = dir; + + if (!dir.Contains("Risk Management")) + { + dirModified = dir.Replace(' ', '_'); + } + + dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); + dirModified = dirModified.Replace(@"/", "."); + dirModified = dirModified.Replace(@"\", "."); + + apiFamilies.Add(dirModified); + } + + foreach (var apiFamily in apiFamilies) + { + // 2.Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) + var allfiles = Directory.GetFileSystemEntries(Path.Combine(PathOfSamplesFolder, apiFamily), "*.cs*", SearchOption.AllDirectories); + + logger.Trace($"Api Family: {apiFamily}"); + logger.Trace($"Total Sample Codes Detected: {allfiles.Count()}"); + + foreach (var file in allfiles) + { + var lastBackSlashIndex = file.LastIndexOf(@"/", StringComparison.Ordinal); + + if (lastBackSlashIndex == -1) + { + lastBackSlashIndex = file.LastIndexOf(@"\", StringComparison.Ordinal); + } + + var firstPart = file.Remove(lastBackSlashIndex); + var secondPart = file.Substring(lastBackSlashIndex + 1, file.Length - firstPart.Length - 4); + + ApiFunctionCalls.Add(secondPart); + + // 3.Create Api Object by providing value of Api Family and File Name(Extracted from File path). + var newApi = new Api + { + ApiFamily = apiFamily, + ApiFunctionCall = secondPart + }; + + // 4.Add the Api Object to the ApiList List. + ApiList.Add(newApi); + } + } + + CheckDuplicateSampleCodes(); + } + + private static void CheckDuplicateSampleCodes() + { + // Verify if this Api Already exists in the Api List or not (FunctionCall must be unique) + var duplicateListOutput = "Following Duplicate Sample Codes Found: "; + bool duplicateFound = false; + foreach (var apiFuncCall in ApiFunctionCalls) + { + if (ApiFunctionCalls.FindAll(x => x == apiFuncCall).Count > 1) + { + duplicateListOutput += apiFuncCall + ", "; + duplicateFound = true; + } + } + + if (duplicateFound) + { + logger.Warn("DUPLICATE SAMPLE CODES DETECTED!"); + Console.WriteLine(); + Console.WriteLine("WARNING:"); + Console.WriteLine(duplicateListOutput); + Console.WriteLine(); + } + } + + private static void InitializeSampleClassesPathList() + { + // dirList has got all the folders and sub-folders for the Samples Folder Path + var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*", SearchOption.AllDirectories); + logger.Trace($"Project Namespace value provided: {ProjectNamespace}"); + + foreach (var dir in dirList) + { + /* + Once we have the path of each folder, + we can use that to create the namespace names of all the sample codes, + inside the folder [Samples]. + */ + var dirModified = dir.Replace(' ', '_'); + dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); + dirModified = dirModified.Replace(@"/", "."); + dirModified = dirModified.Replace(@"\", "."); + + // SampleCodeClassesPathList is the complete list of all the possible namespaces for all the sample codes + SampleCodeClassesPathList.Add(ProjectNamespace + ".Samples." + dirModified + "."); + } + } + + private static void SetNetworkSettings() + { + // setting servicepointmanager configs for SSL/TSL / Proxy issues + ServicePointManager.Expect100Continue = true; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + ServicePointManager.ServerCertificateValidationCallback += + (sender, certificate, chain, sslPolicyErrors) => true; + } + } } \ No newline at end of file diff --git a/src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs b/src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs index 185e560..3acfe0e 100644 --- a/src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs +++ b/src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class CreateDecisionManagerCase { diff --git a/src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs b/src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs index d341729..497930f 100644 --- a/src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs +++ b/src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class DecisionProfileReject { diff --git a/src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs index e2646e4..7b1e271 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs +++ b/src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class DmWithBuyerInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs index a433764..6865401 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs +++ b/src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class DmWithDeviceInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs index ad6e935..3e626a6 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs +++ b/src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class DmWithMerchantDefinedInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs index a867ee4..f202084 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs +++ b/src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class DmWithShippingInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs b/src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs index e99020c..1ce3a63 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs +++ b/src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class DmWithTravelInformation { diff --git a/src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs b/src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs index 4d41c6d..8ecff8a 100644 --- a/src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs +++ b/src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.DecisionManager.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices { public class ScoreExceedsThreshold { From 230e9973907884fc83e2b0a3f503ced074b97752 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 26 Feb 2020 13:33:28 +0530 Subject: [PATCH 007/161] Added sample codes for Reporting (Create a Standard or Classic Subscription) and Risk Management (List Management and Fraud Marking) --- src/SampleCode.csproj | 20 ++- .../Payouts/CoreServices/ProcessPayout.cs | 2 +- .../CreateStandardOrClassicSubscription.cs | 36 +++++ .../CoreServices/AddDuplicateInformation.cs | 85 +++++++++++ .../CoreServices/AddressMatchNotFound.cs | 62 ++++++++ .../ApartmentNumberMissingOrNotFound.cs | 78 ++++++++++ .../CoreServices/CanadianBillingDetails.cs | 88 +++++++++++ .../CoreServices/ComplianceStatusCompleted.cs | 112 ++++++++++++++ .../ExportComplianceInformationProvided.cs | 118 +++++++++++++++ .../CoreServices/FraudMarking.cs | 54 +++++++ .../CoreServices/ListManagement.cs | 81 ++++++++++ .../CoreServices/MultipleLineItems.cs | 121 +++++++++++++++ .../CoreServices/MultipleSanctionLists.cs | 140 ++++++++++++++++++ .../CoreServices/NoCompanyName.cs | 90 +++++++++++ .../CoreServices/RemoveFromHistory.cs | 49 ++++++ .../ShippingDetailsNotUSOrCanada.cs | 108 ++++++++++++++ .../CoreServices/ValidateExportCompliance.cs | 98 ++++++++++++ .../CoreServices/VerifyCustomerAddress.cs | 108 ++++++++++++++ src/packages.config | 4 +- 19 files changed, 1449 insertions(+), 5 deletions(-) create mode 100644 src/Samples/Reporting/CoreServices/CreateStandardOrClassicSubscription.cs create mode 100644 src/Samples/Risk Management/CoreServices/AddDuplicateInformation.cs create mode 100644 src/Samples/Risk Management/CoreServices/AddressMatchNotFound.cs create mode 100644 src/Samples/Risk Management/CoreServices/ApartmentNumberMissingOrNotFound.cs create mode 100644 src/Samples/Risk Management/CoreServices/CanadianBillingDetails.cs create mode 100644 src/Samples/Risk Management/CoreServices/ComplianceStatusCompleted.cs create mode 100644 src/Samples/Risk Management/CoreServices/ExportComplianceInformationProvided.cs create mode 100644 src/Samples/Risk Management/CoreServices/FraudMarking.cs create mode 100644 src/Samples/Risk Management/CoreServices/ListManagement.cs create mode 100644 src/Samples/Risk Management/CoreServices/MultipleLineItems.cs create mode 100644 src/Samples/Risk Management/CoreServices/MultipleSanctionLists.cs create mode 100644 src/Samples/Risk Management/CoreServices/NoCompanyName.cs create mode 100644 src/Samples/Risk Management/CoreServices/RemoveFromHistory.cs create mode 100644 src/Samples/Risk Management/CoreServices/ShippingDetailsNotUSOrCanada.cs create mode 100644 src/Samples/Risk Management/CoreServices/ValidateExportCompliance.cs create mode 100644 src/Samples/Risk Management/CoreServices/VerifyCustomerAddress.cs diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 8761da9..8022976 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -40,10 +40,10 @@ lib\ApiSdk.dll - ..\packages\CyberSource.Authentication.0.0.0.5\lib\AuthenticationSdk.dll + ..\packages\CyberSource.Authentication.0.0.0.6\lib\AuthenticationSdk.dll - ..\packages\CyberSource.Rest.Client.0.0.1.1\lib\cybersource-rest-client-dotnet.dll + ..\packages\CyberSource.Rest.Client.0.0.1.2\lib\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -92,6 +92,13 @@ + + + + + + + @@ -99,6 +106,12 @@ + + + + + + @@ -145,6 +158,9 @@ + + + diff --git a/src/Samples/Payouts/CoreServices/ProcessPayout.cs b/src/Samples/Payouts/CoreServices/ProcessPayout.cs index 8d5dbea..47435a5 100644 --- a/src/Samples/Payouts/CoreServices/ProcessPayout.cs +++ b/src/Samples/Payouts/CoreServices/ProcessPayout.cs @@ -10,7 +10,7 @@ public static void Run() { var requestObj = new OctCreatePaymentRequest(); - var clientReferenceInformationObj = new Ptsv2payoutsClientReferenceInformation + var clientReferenceInformationObj = new PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation { Code = "33557799" }; diff --git a/src/Samples/Reporting/CoreServices/CreateStandardOrClassicSubscription.cs b/src/Samples/Reporting/CoreServices/CreateStandardOrClassicSubscription.cs new file mode 100644 index 0000000..6e9b5cd --- /dev/null +++ b/src/Samples/Reporting/CoreServices/CreateStandardOrClassicSubscription.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class CreateStandardOrClassicSubscription + { + public static void Run() + { + string reportDefinitionName = "TransactionRequestClass"; + string subscriptionType = "CLASSIC"; + var requestObj = new PredefinedSubscriptionRequestBean( + ReportDefinitionName: reportDefinitionName, + SubscriptionType: subscriptionType + ); + + string organizationId = null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReportSubscriptionsApi(clientConfig); + apiInstance.CreateStandardOrClassicSubscription(requestObj, organizationId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/AddDuplicateInformation.cs b/src/Samples/Risk Management/CoreServices/AddDuplicateInformation.cs new file mode 100644 index 0000000..2ac6335 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/AddDuplicateInformation.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class AddDuplicateInformation + { + public static RiskV1UpdatePost201Response Run() + { + string type = "positive"; + string orderInformationAddressAddress1 = "1234 Sample St."; + string orderInformationAddressAddress2 = "Mountain View"; + string orderInformationAddressLocality = "California"; + string orderInformationAddressCountry = "US"; + string orderInformationAddressAdministrativeArea = "CA"; + string orderInformationAddressPostalCode = "94043"; + Riskv1liststypeentriesOrderInformationAddress orderInformationAddress = new Riskv1liststypeentriesOrderInformationAddress( + Address1: orderInformationAddressAddress1, + Address2: orderInformationAddressAddress2, + Locality: orderInformationAddressLocality, + Country: orderInformationAddressCountry, + AdministrativeArea: orderInformationAddressAdministrativeArea, + PostalCode: orderInformationAddressPostalCode + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToEmail = "nobody@example.com"; + Riskv1liststypeentriesOrderInformationBillTo orderInformationBillTo = new Riskv1liststypeentriesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Email: orderInformationBillToEmail + ); + + Riskv1liststypeentriesOrderInformation orderInformation = new Riskv1liststypeentriesOrderInformation( + Address: orderInformationAddress, + BillTo: orderInformationBillTo + ); + + Riskv1liststypeentriesPaymentInformation paymentInformation = new Riskv1liststypeentriesPaymentInformation( + ); + + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string riskInformationMarkingDetailsAction = "add"; + Riskv1liststypeentriesRiskInformationMarkingDetails riskInformationMarkingDetails = new Riskv1liststypeentriesRiskInformationMarkingDetails( + Action: riskInformationMarkingDetailsAction + ); + + Riskv1liststypeentriesRiskInformation riskInformation = new Riskv1liststypeentriesRiskInformation( + MarkingDetails: riskInformationMarkingDetails + ); + + var requestObj = new AddNegativeListRequest( + OrderInformation: orderInformation, + PaymentInformation: paymentInformation, + ClientReferenceInformation: clientReferenceInformation, + RiskInformation: riskInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1UpdatePost201Response result = apiInstance.AddNegative(type, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/AddressMatchNotFound.cs b/src/Samples/Risk Management/CoreServices/AddressMatchNotFound.cs new file mode 100644 index 0000000..dfc61d4 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/AddressMatchNotFound.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class AddressMatchNotFound + { + public static RiskV1AddressVerificationsPost201Response Run() + { + string clientReferenceInformationCode = "addressEg"; + string clientReferenceInformationComments = "dav-error response check"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "Apt C "; + string orderInformationBillToAddress2 = ""; + string orderInformationBillToAdministrativeArea = "California"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Glendale"; + string orderInformationBillToPostalCode = "91204"; + Riskv1addressverificationsOrderInformationBillTo orderInformationBillTo = new Riskv1addressverificationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1addressverificationsOrderInformation orderInformation = new Riskv1addressverificationsOrderInformation( + BillTo: orderInformationBillTo + ); + + var requestObj = new VerifyCustomerAddressRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/ApartmentNumberMissingOrNotFound.cs b/src/Samples/Risk Management/CoreServices/ApartmentNumberMissingOrNotFound.cs new file mode 100644 index 0000000..3b80339 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/ApartmentNumberMissingOrNotFound.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class ApartmentNumberMissingOrNotFound + { + public static RiskV1AddressVerificationsPost201Response Run() + { + string clientReferenceInformationCode = "addressEg"; + string clientReferenceInformationComments = "dav-error response check"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "6th 4th ave"; + string orderInformationBillToAddress2 = ""; + string orderInformationBillToAdministrativeArea = "NY"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "rensslaer"; + string orderInformationBillToPostalCode = "12144"; + Riskv1addressverificationsOrderInformationBillTo orderInformationBillTo = new Riskv1addressverificationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "996633"; + string orderInformationLineItemsProductName1 = "qwerty"; + string orderInformationLineItemsProductCode1 = "handling"; + orderInformationLineItems.Add(new Riskv1addressverificationsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + Riskv1addressverificationsOrderInformation orderInformation = new Riskv1addressverificationsOrderInformation( + BillTo: orderInformationBillTo, + LineItems: orderInformationLineItems + ); + + var requestObj = new VerifyCustomerAddressRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/CanadianBillingDetails.cs b/src/Samples/Risk Management/CoreServices/CanadianBillingDetails.cs new file mode 100644 index 0000000..7c93f92 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/CanadianBillingDetails.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class CanadianBillingDetails + { + public static RiskV1AddressVerificationsPost201Response Run() + { + string clientReferenceInformationCode = "addressEg"; + string clientReferenceInformationComments = "dav-All fields"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "1650 Burton Ave"; + string orderInformationBillToAddress2 = ""; + string orderInformationBillToAddress3 = ""; + string orderInformationBillToAddress4 = ""; + string orderInformationBillToAdministrativeArea = "BC"; + string orderInformationBillToCountry = "CA"; + string orderInformationBillToLocality = "VICTORIA"; + string orderInformationBillToPostalCode = "V8T 2N6"; + Riskv1addressverificationsOrderInformationBillTo orderInformationBillTo = new Riskv1addressverificationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Address3: orderInformationBillToAddress3, + Address4: orderInformationBillToAddress4, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "9966223"; + string orderInformationLineItemsProductName1 = "headset"; + string orderInformationLineItemsProductCode1 = "electronic"; + orderInformationLineItems.Add(new Riskv1addressverificationsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + Riskv1addressverificationsOrderInformation orderInformation = new Riskv1addressverificationsOrderInformation( + BillTo: orderInformationBillTo, + LineItems: orderInformationLineItems + ); + + string buyerInformationMerchantCustomerId = "ABCD"; + Riskv1addressverificationsBuyerInformation buyerInformation = new Riskv1addressverificationsBuyerInformation( + MerchantCustomerId: buyerInformationMerchantCustomerId + ); + + var requestObj = new VerifyCustomerAddressRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/ComplianceStatusCompleted.cs b/src/Samples/Risk Management/CoreServices/ComplianceStatusCompleted.cs new file mode 100644 index 0000000..696fd03 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/ComplianceStatusCompleted.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class ComplianceStatusCompleted + { + public static RiskV1ExportComplianceInquiriesPost201Response Run() + { + string clientReferenceInformationCode = "verification example"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationBillToAddress1 = "901 Metro Centre Blvd"; + string orderInformationBillToAddress2 = "2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToFirstName = "Suman"; + string orderInformationBillToLastName = "Kumar"; + string orderInformationBillToEmail = "donewithhorizon@test.com"; + Riskv1exportcomplianceinquiriesOrderInformationBillTo orderInformationBillTo = new Riskv1exportcomplianceinquiriesOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Email: orderInformationBillToEmail + ); + + string orderInformationShipToCountry = "be"; + string orderInformationShipToFirstName = "DumbelDore"; + string orderInformationShipToLastName = "Albus"; + Riskv1exportcomplianceinquiriesOrderInformationShipTo orderInformationShipTo = new Riskv1exportcomplianceinquiriesOrderInformationShipTo( + Country: orderInformationShipToCountry, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "19.00"; + orderInformationLineItems.Add(new Riskv1exportcomplianceinquiriesOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + Riskv1exportcomplianceinquiriesOrderInformation orderInformation = new Riskv1exportcomplianceinquiriesOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string buyerInformationMerchantCustomerId = "87789"; + Riskv1addressverificationsBuyerInformation buyerInformation = new Riskv1addressverificationsBuyerInformation( + MerchantCustomerId: buyerInformationMerchantCustomerId + ); + + string exportComplianceInformationAddressOperator = "and"; + string exportComplianceInformationWeightsAddress = "abc"; + string exportComplianceInformationWeightsCompany = "def"; + string exportComplianceInformationWeightsName = "adb"; + Riskv1exportcomplianceinquiriesExportComplianceInformationWeights exportComplianceInformationWeights = new Riskv1exportcomplianceinquiriesExportComplianceInformationWeights( + Address: exportComplianceInformationWeightsAddress, + Company: exportComplianceInformationWeightsCompany, + Name: exportComplianceInformationWeightsName + ); + + + List exportComplianceInformationSanctionLists = new List (); + exportComplianceInformationSanctionLists.Add("abc"); + exportComplianceInformationSanctionLists.Add("acc"); + exportComplianceInformationSanctionLists.Add("bac"); + Riskv1exportcomplianceinquiriesExportComplianceInformation exportComplianceInformation = new Riskv1exportcomplianceinquiriesExportComplianceInformation( + AddressOperator: exportComplianceInformationAddressOperator, + Weights: exportComplianceInformationWeights, + SanctionLists: exportComplianceInformationSanctionLists + ); + + var requestObj = new ValidateExportComplianceRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation, + ExportComplianceInformation: exportComplianceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/ExportComplianceInformationProvided.cs b/src/Samples/Risk Management/CoreServices/ExportComplianceInformationProvided.cs new file mode 100644 index 0000000..7a5743c --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/ExportComplianceInformationProvided.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class ExportComplianceInformationProvided + { + public static RiskV1ExportComplianceInquiriesPost201Response Run() + { + string clientReferenceInformationCode = "verification example"; + string clientReferenceInformationComments = "Export -fields"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "901 Metro Centre Blvd"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCompanyName = "A & C International Trade, Inc"; + Riskv1exportcomplianceinquiriesOrderInformationBillToCompany orderInformationBillToCompany = new Riskv1exportcomplianceinquiriesOrderInformationBillToCompany( + Name: orderInformationBillToCompanyName + ); + + string orderInformationBillToFirstName = "ANDREE"; + string orderInformationBillToLastName = "AGNESE"; + string orderInformationBillToEmail = "test@domain.com"; + Riskv1exportcomplianceinquiriesOrderInformationBillTo orderInformationBillTo = new Riskv1exportcomplianceinquiriesOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode, + Company: orderInformationBillToCompany, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Email: orderInformationBillToEmail + ); + + string orderInformationShipToCountry = "IN"; + string orderInformationShipToFirstName = "DumbelDore"; + string orderInformationShipToLastName = "Albus"; + Riskv1exportcomplianceinquiriesOrderInformationShipTo orderInformationShipTo = new Riskv1exportcomplianceinquiriesOrderInformationShipTo( + Country: orderInformationShipToCountry, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "123456"; + string orderInformationLineItemsProductName1 = "Qwe"; + string orderInformationLineItemsProductCode1 = "physical_software"; + orderInformationLineItems.Add(new Riskv1exportcomplianceinquiriesOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + Riskv1exportcomplianceinquiriesOrderInformation orderInformation = new Riskv1exportcomplianceinquiriesOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string exportComplianceInformationAddressOperator = "and"; + string exportComplianceInformationWeightsAddress = "low"; + string exportComplianceInformationWeightsCompany = "exact"; + string exportComplianceInformationWeightsName = "exact"; + Riskv1exportcomplianceinquiriesExportComplianceInformationWeights exportComplianceInformationWeights = new Riskv1exportcomplianceinquiriesExportComplianceInformationWeights( + Address: exportComplianceInformationWeightsAddress, + Company: exportComplianceInformationWeightsCompany, + Name: exportComplianceInformationWeightsName + ); + + + List exportComplianceInformationSanctionLists = new List (); + exportComplianceInformationSanctionLists.Add("Bureau Of Industry and Security"); + Riskv1exportcomplianceinquiriesExportComplianceInformation exportComplianceInformation = new Riskv1exportcomplianceinquiriesExportComplianceInformation( + AddressOperator: exportComplianceInformationAddressOperator, + Weights: exportComplianceInformationWeights, + SanctionLists: exportComplianceInformationSanctionLists + ); + + var requestObj = new ValidateExportComplianceRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + ExportComplianceInformation: exportComplianceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/FraudMarking.cs b/src/Samples/Risk Management/CoreServices/FraudMarking.cs new file mode 100644 index 0000000..0b22a2c --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/FraudMarking.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class FraudMarking + { + public static RiskV1UpdatePost201Response Run() + { + string id = "5825489395116729903003"; + string riskInformationMarkingDetailsNotes = "Adding this transaction as suspect"; + string riskInformationMarkingDetailsReason = "suspected"; + + List riskInformationMarkingDetailsFieldsIncluded = new List (); + riskInformationMarkingDetailsFieldsIncluded.Add("customer_email"); + riskInformationMarkingDetailsFieldsIncluded.Add("customer_phone"); + string riskInformationMarkingDetailsAction = "add"; + Riskv1decisionsidmarkingRiskInformationMarkingDetails riskInformationMarkingDetails = new Riskv1decisionsidmarkingRiskInformationMarkingDetails( + Notes: riskInformationMarkingDetailsNotes, + Reason: riskInformationMarkingDetailsReason, + FieldsIncluded: riskInformationMarkingDetailsFieldsIncluded, + Action: riskInformationMarkingDetailsAction + ); + + Riskv1decisionsidmarkingRiskInformation riskInformation = new Riskv1decisionsidmarkingRiskInformation( + MarkingDetails: riskInformationMarkingDetails + ); + + var requestObj = new FraudMarkingActionRequest( + RiskInformation: riskInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1UpdatePost201Response result = apiInstance.FraudUpdate(id, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/ListManagement.cs b/src/Samples/Risk Management/CoreServices/ListManagement.cs new file mode 100644 index 0000000..9ee37c0 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/ListManagement.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class ListManagement + { + public static RiskV1UpdatePost201Response Run() + { + string type = "negative"; + string orderInformationAddressAddress1 = "1234 Sample St."; + string orderInformationAddressAddress2 = "Mountain View"; + string orderInformationAddressLocality = "California"; + string orderInformationAddressCountry = "US"; + string orderInformationAddressAdministrativeArea = "CA"; + string orderInformationAddressPostalCode = "94043"; + Riskv1liststypeentriesOrderInformationAddress orderInformationAddress = new Riskv1liststypeentriesOrderInformationAddress( + Address1: orderInformationAddressAddress1, + Address2: orderInformationAddressAddress2, + Locality: orderInformationAddressLocality, + Country: orderInformationAddressCountry, + AdministrativeArea: orderInformationAddressAdministrativeArea, + PostalCode: orderInformationAddressPostalCode + ); + + string orderInformationBillToEmail = "test@example.com"; + Riskv1liststypeentriesOrderInformationBillTo orderInformationBillTo = new Riskv1liststypeentriesOrderInformationBillTo( + Email: orderInformationBillToEmail + ); + + Riskv1liststypeentriesOrderInformation orderInformation = new Riskv1liststypeentriesOrderInformation( + Address: orderInformationAddress, + BillTo: orderInformationBillTo + ); + + Riskv1liststypeentriesPaymentInformation paymentInformation = new Riskv1liststypeentriesPaymentInformation( + ); + + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string riskInformationMarkingDetailsAction = "add"; + Riskv1liststypeentriesRiskInformationMarkingDetails riskInformationMarkingDetails = new Riskv1liststypeentriesRiskInformationMarkingDetails( + Action: riskInformationMarkingDetailsAction + ); + + Riskv1liststypeentriesRiskInformation riskInformation = new Riskv1liststypeentriesRiskInformation( + MarkingDetails: riskInformationMarkingDetails + ); + + var requestObj = new AddNegativeListRequest( + OrderInformation: orderInformation, + PaymentInformation: paymentInformation, + ClientReferenceInformation: clientReferenceInformation, + RiskInformation: riskInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1UpdatePost201Response result = apiInstance.AddNegative(type, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/MultipleLineItems.cs b/src/Samples/Risk Management/CoreServices/MultipleLineItems.cs new file mode 100644 index 0000000..ec21510 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/MultipleLineItems.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class MultipleLineItems + { + public static RiskV1AddressVerificationsPost201Response Run() + { + string clientReferenceInformationCode = "addressEg"; + string clientReferenceInformationComments = "dav-All fields"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "12301 research st"; + string orderInformationBillToAddress2 = "1"; + string orderInformationBillToAddress3 = "2"; + string orderInformationBillToAddress4 = "3"; + string orderInformationBillToAdministrativeArea = "TX"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Austin"; + string orderInformationBillToPostalCode = "78759"; + Riskv1addressverificationsOrderInformationBillTo orderInformationBillTo = new Riskv1addressverificationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Address3: orderInformationBillToAddress3, + Address4: orderInformationBillToAddress4, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode + ); + + string orderInformationShipToAddress1 = "PO Box 9088"; + string orderInformationShipToAddress2 = ""; + string orderInformationShipToAddress3 = ""; + string orderInformationShipToAddress4 = ""; + string orderInformationShipToAdministrativeArea = "California"; + string orderInformationShipToCountry = "US"; + string orderInformationShipToLocality = "San Jose"; + string orderInformationShipToPostalCode = "95132"; + Riskv1addressverificationsOrderInformationShipTo orderInformationShipTo = new Riskv1addressverificationsOrderInformationShipTo( + Address1: orderInformationShipToAddress1, + Address2: orderInformationShipToAddress2, + Address3: orderInformationShipToAddress3, + Address4: orderInformationShipToAddress4, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Country: orderInformationShipToCountry, + Locality: orderInformationShipToLocality, + PostalCode: orderInformationShipToPostalCode + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "9966223"; + string orderInformationLineItemsProductName1 = "headset"; + string orderInformationLineItemsProductCode1 = "electronix"; + orderInformationLineItems.Add(new Riskv1addressverificationsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + string orderInformationLineItemsUnitPrice2 = "10.50"; + int orderInformationLineItemsQuantity2 = 2; + string orderInformationLineItemsProductSKU2 = "9966226"; + string orderInformationLineItemsProductName2 = "wwrdf"; + string orderInformationLineItemsProductCode2 = "electronic"; + orderInformationLineItems.Add(new Riskv1addressverificationsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice2, + Quantity: orderInformationLineItemsQuantity2, + ProductSKU: orderInformationLineItemsProductSKU2, + ProductName: orderInformationLineItemsProductName2, + ProductCode: orderInformationLineItemsProductCode2 + )); + + Riskv1addressverificationsOrderInformation orderInformation = new Riskv1addressverificationsOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string buyerInformationMerchantCustomerId = "QWERTY"; + Riskv1addressverificationsBuyerInformation buyerInformation = new Riskv1addressverificationsBuyerInformation( + MerchantCustomerId: buyerInformationMerchantCustomerId + ); + + var requestObj = new VerifyCustomerAddressRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/MultipleSanctionLists.cs b/src/Samples/Risk Management/CoreServices/MultipleSanctionLists.cs new file mode 100644 index 0000000..0df8019 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/MultipleSanctionLists.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class MultipleSanctionLists + { + public static RiskV1ExportComplianceInquiriesPost201Response Run() + { + string clientReferenceInformationCode = "verification example"; + string clientReferenceInformationComments = "All fields"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "901 Metro Centre Blvd"; + string orderInformationBillToAddress2 = " "; + string orderInformationBillToAddress3 = ""; + string orderInformationBillToAddress4 = "Foster City"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "CA"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCompanyName = "A & C International Trade, Inc."; + Riskv1exportcomplianceinquiriesOrderInformationBillToCompany orderInformationBillToCompany = new Riskv1exportcomplianceinquiriesOrderInformationBillToCompany( + Name: orderInformationBillToCompanyName + ); + + string orderInformationBillToFirstName = "Suman"; + string orderInformationBillToLastName = "Kumar"; + string orderInformationBillToEmail = "test@domain.com"; + Riskv1exportcomplianceinquiriesOrderInformationBillTo orderInformationBillTo = new Riskv1exportcomplianceinquiriesOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Address3: orderInformationBillToAddress3, + Address4: orderInformationBillToAddress4, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode, + Company: orderInformationBillToCompany, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Email: orderInformationBillToEmail + ); + + string orderInformationShipToCountry = "IN"; + string orderInformationShipToFirstName = "DumbelDore"; + string orderInformationShipToLastName = "Albus"; + Riskv1exportcomplianceinquiriesOrderInformationShipTo orderInformationShipTo = new Riskv1exportcomplianceinquiriesOrderInformationShipTo( + Country: orderInformationShipToCountry, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "610009"; + string orderInformationLineItemsProductName1 = "Xer"; + string orderInformationLineItemsProductCode1 = "physical_software"; + orderInformationLineItems.Add(new Riskv1exportcomplianceinquiriesOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + Riskv1exportcomplianceinquiriesOrderInformation orderInformation = new Riskv1exportcomplianceinquiriesOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string buyerInformationMerchantCustomerId = "Export1"; + Riskv1addressverificationsBuyerInformation buyerInformation = new Riskv1addressverificationsBuyerInformation( + MerchantCustomerId: buyerInformationMerchantCustomerId + ); + + string deviceInformationIpAddress = "127.0.0.1"; + string deviceInformationHostName = "www.cybersource.ir"; + Riskv1exportcomplianceinquiriesDeviceInformation deviceInformation = new Riskv1exportcomplianceinquiriesDeviceInformation( + IpAddress: deviceInformationIpAddress, + HostName: deviceInformationHostName + ); + + string exportComplianceInformationAddressOperator = "and"; + string exportComplianceInformationWeightsAddress = "low"; + string exportComplianceInformationWeightsCompany = "exact"; + string exportComplianceInformationWeightsName = "exact"; + Riskv1exportcomplianceinquiriesExportComplianceInformationWeights exportComplianceInformationWeights = new Riskv1exportcomplianceinquiriesExportComplianceInformationWeights( + Address: exportComplianceInformationWeightsAddress, + Company: exportComplianceInformationWeightsCompany, + Name: exportComplianceInformationWeightsName + ); + + + List exportComplianceInformationSanctionLists = new List (); + exportComplianceInformationSanctionLists.Add("Bureau Of Industry and Security"); + exportComplianceInformationSanctionLists.Add("DOS_DTC"); + exportComplianceInformationSanctionLists.Add("AUSTRALIA"); + Riskv1exportcomplianceinquiriesExportComplianceInformation exportComplianceInformation = new Riskv1exportcomplianceinquiriesExportComplianceInformation( + AddressOperator: exportComplianceInformationAddressOperator, + Weights: exportComplianceInformationWeights, + SanctionLists: exportComplianceInformationSanctionLists + ); + + var requestObj = new ValidateExportComplianceRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation, + DeviceInformation: deviceInformation, + ExportComplianceInformation: exportComplianceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/NoCompanyName.cs b/src/Samples/Risk Management/CoreServices/NoCompanyName.cs new file mode 100644 index 0000000..a4f8c9b --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/NoCompanyName.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class NoCompanyName + { + public static RiskV1ExportComplianceInquiriesPost201Response Run() + { + string clientReferenceInformationCode = "verification example"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationBillToAddress1 = "901 Metro Centre Blvd"; + string orderInformationBillToAddress2 = "2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToFirstName = "Suman"; + string orderInformationBillToLastName = "Kumar"; + string orderInformationBillToEmail = "donewithhorizon@test.com"; + Riskv1exportcomplianceinquiriesOrderInformationBillTo orderInformationBillTo = new Riskv1exportcomplianceinquiriesOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Email: orderInformationBillToEmail + ); + + string orderInformationShipToCountry = "be"; + string orderInformationShipToFirstName = "DumbelDore"; + string orderInformationShipToLastName = "Albus"; + Riskv1exportcomplianceinquiriesOrderInformationShipTo orderInformationShipTo = new Riskv1exportcomplianceinquiriesOrderInformationShipTo( + Country: orderInformationShipToCountry, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "19.00"; + orderInformationLineItems.Add(new Riskv1exportcomplianceinquiriesOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + Riskv1exportcomplianceinquiriesOrderInformation orderInformation = new Riskv1exportcomplianceinquiriesOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string buyerInformationMerchantCustomerId = "87789"; + Riskv1addressverificationsBuyerInformation buyerInformation = new Riskv1addressverificationsBuyerInformation( + MerchantCustomerId: buyerInformationMerchantCustomerId + ); + + var requestObj = new ValidateExportComplianceRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/RemoveFromHistory.cs b/src/Samples/Risk Management/CoreServices/RemoveFromHistory.cs new file mode 100644 index 0000000..4837296 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/RemoveFromHistory.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class RemoveFromHistory + { + public static RiskV1UpdatePost201Response Run() + { + string id = "5825489395116729903003"; + string riskInformationMarkingDetailsNotes = "Adding this transaction as suspect"; + string riskInformationMarkingDetailsReason = "suspected"; + string riskInformationMarkingDetailsAction = "hide"; + Riskv1decisionsidmarkingRiskInformationMarkingDetails riskInformationMarkingDetails = new Riskv1decisionsidmarkingRiskInformationMarkingDetails( + Notes: riskInformationMarkingDetailsNotes, + Reason: riskInformationMarkingDetailsReason, + Action: riskInformationMarkingDetailsAction + ); + + Riskv1decisionsidmarkingRiskInformation riskInformation = new Riskv1decisionsidmarkingRiskInformation( + MarkingDetails: riskInformationMarkingDetails + ); + + var requestObj = new FraudMarkingActionRequest( + RiskInformation: riskInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1UpdatePost201Response result = apiInstance.FraudUpdate(id, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/ShippingDetailsNotUSOrCanada.cs b/src/Samples/Risk Management/CoreServices/ShippingDetailsNotUSOrCanada.cs new file mode 100644 index 0000000..a3e10a6 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/ShippingDetailsNotUSOrCanada.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class ShippingDetailsNotUSOrCanada + { + public static RiskV1AddressVerificationsPost201Response Run() + { + string clientReferenceInformationCode = "addressEg"; + string clientReferenceInformationComments = "dav-All fields"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "12301 research st"; + string orderInformationBillToAddress2 = "1"; + string orderInformationBillToAddress3 = "2"; + string orderInformationBillToAddress4 = "3"; + string orderInformationBillToAdministrativeArea = "TX"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Austin"; + string orderInformationBillToPostalCode = "78759"; + Riskv1addressverificationsOrderInformationBillTo orderInformationBillTo = new Riskv1addressverificationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Address3: orderInformationBillToAddress3, + Address4: orderInformationBillToAddress4, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode + ); + + string orderInformationShipToAddress1 = "4R.ILHA TERCEIRA,232-R/C-ESQ"; + string orderInformationShipToAddress2 = " "; + string orderInformationShipToAddress3 = ""; + string orderInformationShipToAddress4 = ""; + string orderInformationShipToAdministrativeArea = "WI"; + string orderInformationShipToCountry = "PT"; + string orderInformationShipToLocality = "Carcavelos"; + string orderInformationShipToPostalCode = "29681"; + Riskv1addressverificationsOrderInformationShipTo orderInformationShipTo = new Riskv1addressverificationsOrderInformationShipTo( + Address1: orderInformationShipToAddress1, + Address2: orderInformationShipToAddress2, + Address3: orderInformationShipToAddress3, + Address4: orderInformationShipToAddress4, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Country: orderInformationShipToCountry, + Locality: orderInformationShipToLocality, + PostalCode: orderInformationShipToPostalCode + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "9966223"; + string orderInformationLineItemsProductName1 = "headset"; + string orderInformationLineItemsProductCode1 = "electronic"; + orderInformationLineItems.Add(new Riskv1addressverificationsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + Riskv1addressverificationsOrderInformation orderInformation = new Riskv1addressverificationsOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string buyerInformationMerchantCustomerId = "ABCD"; + Riskv1addressverificationsBuyerInformation buyerInformation = new Riskv1addressverificationsBuyerInformation( + MerchantCustomerId: buyerInformationMerchantCustomerId + ); + + var requestObj = new VerifyCustomerAddressRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/ValidateExportCompliance.cs b/src/Samples/Risk Management/CoreServices/ValidateExportCompliance.cs new file mode 100644 index 0000000..c4c84f6 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/ValidateExportCompliance.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class ValidateExportCompliance + { + public static RiskV1ExportComplianceInquiriesPost201Response Run() + { + string clientReferenceInformationCode = "verification example"; + string clientReferenceInformationComments = "Export-basic"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "901 Metro Centre Blvd"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCompanyName = "A & C International Trade, Inc"; + Riskv1exportcomplianceinquiriesOrderInformationBillToCompany orderInformationBillToCompany = new Riskv1exportcomplianceinquiriesOrderInformationBillToCompany( + Name: orderInformationBillToCompanyName + ); + + string orderInformationBillToFirstName = "ANDREE"; + string orderInformationBillToLastName = "AGNESE"; + string orderInformationBillToEmail = "test@domain.com"; + Riskv1exportcomplianceinquiriesOrderInformationBillTo orderInformationBillTo = new Riskv1exportcomplianceinquiriesOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode, + Company: orderInformationBillToCompany, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Email: orderInformationBillToEmail + ); + + string orderInformationShipToCountry = "IN"; + string orderInformationShipToFirstName = "DumbelDore"; + string orderInformationShipToLastName = "Albus"; + Riskv1exportcomplianceinquiriesOrderInformationShipTo orderInformationShipTo = new Riskv1exportcomplianceinquiriesOrderInformationShipTo( + Country: orderInformationShipToCountry, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "123456"; + string orderInformationLineItemsProductName1 = "Qwe"; + string orderInformationLineItemsProductCode1 = "physical_software"; + orderInformationLineItems.Add(new Riskv1exportcomplianceinquiriesOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + Riskv1exportcomplianceinquiriesOrderInformation orderInformation = new Riskv1exportcomplianceinquiriesOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + var requestObj = new ValidateExportComplianceRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Risk Management/CoreServices/VerifyCustomerAddress.cs b/src/Samples/Risk Management/CoreServices/VerifyCustomerAddress.cs new file mode 100644 index 0000000..28bf061 --- /dev/null +++ b/src/Samples/Risk Management/CoreServices/VerifyCustomerAddress.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +{ + public class VerifyCustomerAddress + { + public static RiskV1AddressVerificationsPost201Response Run() + { + string clientReferenceInformationCode = "addressEg"; + string clientReferenceInformationComments = "dav-All fields"; + Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments + ); + + string orderInformationBillToAddress1 = "12301 research st"; + string orderInformationBillToAddress2 = "1"; + string orderInformationBillToAddress3 = "2"; + string orderInformationBillToAddress4 = "3"; + string orderInformationBillToAdministrativeArea = "TX"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Austin"; + string orderInformationBillToPostalCode = "78759"; + Riskv1addressverificationsOrderInformationBillTo orderInformationBillTo = new Riskv1addressverificationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Address3: orderInformationBillToAddress3, + Address4: orderInformationBillToAddress4, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode + ); + + string orderInformationShipToAddress1 = "1715 oaks apt # 7"; + string orderInformationShipToAddress2 = " "; + string orderInformationShipToAddress3 = ""; + string orderInformationShipToAddress4 = ""; + string orderInformationShipToAdministrativeArea = "WI"; + string orderInformationShipToCountry = "US"; + string orderInformationShipToLocality = "SUPERIOR"; + string orderInformationShipToPostalCode = "29681"; + Riskv1addressverificationsOrderInformationShipTo orderInformationShipTo = new Riskv1addressverificationsOrderInformationShipTo( + Address1: orderInformationShipToAddress1, + Address2: orderInformationShipToAddress2, + Address3: orderInformationShipToAddress3, + Address4: orderInformationShipToAddress4, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Country: orderInformationShipToCountry, + Locality: orderInformationShipToLocality, + PostalCode: orderInformationShipToPostalCode + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "120.50"; + int orderInformationLineItemsQuantity1 = 3; + string orderInformationLineItemsProductSKU1 = "9966223"; + string orderInformationLineItemsProductName1 = "headset"; + string orderInformationLineItemsProductCode1 = "electronic"; + orderInformationLineItems.Add(new Riskv1addressverificationsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + ProductSKU: orderInformationLineItemsProductSKU1, + ProductName: orderInformationLineItemsProductName1, + ProductCode: orderInformationLineItemsProductCode1 + )); + + Riskv1addressverificationsOrderInformation orderInformation = new Riskv1addressverificationsOrderInformation( + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string buyerInformationMerchantCustomerId = "ABCD"; + Riskv1addressverificationsBuyerInformation buyerInformation = new Riskv1addressverificationsBuyerInformation( + MerchantCustomerId: buyerInformationMerchantCustomerId + ); + + var requestObj = new VerifyCustomerAddressRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VerificationApi(clientConfig); + RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/packages.config b/src/packages.config index 91d6fae..a4406d6 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - - + + From 2685e046378e7ab7217487d1bfd2535ed0957ae2 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 26 Feb 2020 14:43:41 +0530 Subject: [PATCH 008/161] Changing folder name to RiskManagement --- src/SampleCode.csproj | 46 +++++++++---------- .../CoreServices/AddDuplicateInformation.cs | 2 +- .../CoreServices/AddressMatchNotFound.cs | 2 +- .../ApartmentNumberMissingOrNotFound.cs | 2 +- .../CoreServices/CanadianBillingDetails.cs | 2 +- .../CoreServices/ComplianceStatusCompleted.cs | 2 +- .../CoreServices/CreateDecisionManagerCase.cs | 2 +- .../CoreServices/DecisionProfileReject.cs | 2 +- .../CoreServices/DmWithBuyerInformation.cs | 2 +- .../CoreServices/DmWithDeviceInformation.cs | 2 +- .../DmWithMerchantDefinedInformation.cs | 2 +- .../CoreServices/DmWithShippingInformation.cs | 2 +- .../CoreServices/DmWithTravelInformation.cs | 2 +- .../ExportComplianceInformationProvided.cs | 2 +- .../CoreServices/FraudMarking.cs | 2 +- .../CoreServices/ListManagement.cs | 2 +- .../CoreServices/MultipleLineItems.cs | 2 +- .../CoreServices/MultipleSanctionLists.cs | 2 +- .../CoreServices/NoCompanyName.cs | 2 +- .../CoreServices/RemoveFromHistory.cs | 2 +- .../CoreServices/ScoreExceedsThreshold.cs | 2 +- .../ShippingDetailsNotUSOrCanada.cs | 2 +- .../CoreServices/ValidateExportCompliance.cs | 2 +- .../CoreServices/VerifyCustomerAddress.cs | 2 +- 24 files changed, 46 insertions(+), 46 deletions(-) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/AddDuplicateInformation.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/AddressMatchNotFound.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/ApartmentNumberMissingOrNotFound.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/CanadianBillingDetails.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/ComplianceStatusCompleted.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/CreateDecisionManagerCase.cs (96%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/DecisionProfileReject.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/DmWithBuyerInformation.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/DmWithDeviceInformation.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/DmWithMerchantDefinedInformation.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/DmWithShippingInformation.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/DmWithTravelInformation.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/ExportComplianceInformationProvided.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/FraudMarking.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/ListManagement.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/MultipleLineItems.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/MultipleSanctionLists.cs (99%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/NoCompanyName.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/RemoveFromHistory.cs (96%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/ScoreExceedsThreshold.cs (97%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/ShippingDetailsNotUSOrCanada.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/ValidateExportCompliance.cs (98%) rename src/Samples/{Risk Management => RiskManagement}/CoreServices/VerifyCustomerAddress.cs (98%) diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 8022976..2b66ae4 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -93,26 +93,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -158,9 +158,9 @@ - - - + + + diff --git a/src/Samples/Risk Management/CoreServices/AddDuplicateInformation.cs b/src/Samples/RiskManagement/CoreServices/AddDuplicateInformation.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/AddDuplicateInformation.cs rename to src/Samples/RiskManagement/CoreServices/AddDuplicateInformation.cs index 2ac6335..da3cb3e 100644 --- a/src/Samples/Risk Management/CoreServices/AddDuplicateInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/AddDuplicateInformation.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class AddDuplicateInformation { diff --git a/src/Samples/Risk Management/CoreServices/AddressMatchNotFound.cs b/src/Samples/RiskManagement/CoreServices/AddressMatchNotFound.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/AddressMatchNotFound.cs rename to src/Samples/RiskManagement/CoreServices/AddressMatchNotFound.cs index dfc61d4..8633569 100644 --- a/src/Samples/Risk Management/CoreServices/AddressMatchNotFound.cs +++ b/src/Samples/RiskManagement/CoreServices/AddressMatchNotFound.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class AddressMatchNotFound { diff --git a/src/Samples/Risk Management/CoreServices/ApartmentNumberMissingOrNotFound.cs b/src/Samples/RiskManagement/CoreServices/ApartmentNumberMissingOrNotFound.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/ApartmentNumberMissingOrNotFound.cs rename to src/Samples/RiskManagement/CoreServices/ApartmentNumberMissingOrNotFound.cs index 3b80339..ffb8c9d 100644 --- a/src/Samples/Risk Management/CoreServices/ApartmentNumberMissingOrNotFound.cs +++ b/src/Samples/RiskManagement/CoreServices/ApartmentNumberMissingOrNotFound.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ApartmentNumberMissingOrNotFound { diff --git a/src/Samples/Risk Management/CoreServices/CanadianBillingDetails.cs b/src/Samples/RiskManagement/CoreServices/CanadianBillingDetails.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/CanadianBillingDetails.cs rename to src/Samples/RiskManagement/CoreServices/CanadianBillingDetails.cs index 7c93f92..e4edcf7 100644 --- a/src/Samples/Risk Management/CoreServices/CanadianBillingDetails.cs +++ b/src/Samples/RiskManagement/CoreServices/CanadianBillingDetails.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class CanadianBillingDetails { diff --git a/src/Samples/Risk Management/CoreServices/ComplianceStatusCompleted.cs b/src/Samples/RiskManagement/CoreServices/ComplianceStatusCompleted.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/ComplianceStatusCompleted.cs rename to src/Samples/RiskManagement/CoreServices/ComplianceStatusCompleted.cs index 696fd03..91571f3 100644 --- a/src/Samples/Risk Management/CoreServices/ComplianceStatusCompleted.cs +++ b/src/Samples/RiskManagement/CoreServices/ComplianceStatusCompleted.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ComplianceStatusCompleted { diff --git a/src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs b/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs similarity index 96% rename from src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs rename to src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs index 3acfe0e..c46045e 100644 --- a/src/Samples/Risk Management/CoreServices/CreateDecisionManagerCase.cs +++ b/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class CreateDecisionManagerCase { diff --git a/src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs rename to src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs index 497930f..cf28630 100644 --- a/src/Samples/Risk Management/CoreServices/DecisionProfileReject.cs +++ b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class DecisionProfileReject { diff --git a/src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs rename to src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs index 7b1e271..4c6e5f6 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithBuyerInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class DmWithBuyerInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs rename to src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs index 6865401..b2f7c79 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithDeviceInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class DmWithDeviceInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs rename to src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs index 3e626a6..1b6f423 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithMerchantDefinedInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class DmWithMerchantDefinedInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs rename to src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs index f202084..c12a993 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithShippingInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class DmWithShippingInformation { diff --git a/src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs rename to src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs index 1ce3a63..37c2968 100644 --- a/src/Samples/Risk Management/CoreServices/DmWithTravelInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class DmWithTravelInformation { diff --git a/src/Samples/Risk Management/CoreServices/ExportComplianceInformationProvided.cs b/src/Samples/RiskManagement/CoreServices/ExportComplianceInformationProvided.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/ExportComplianceInformationProvided.cs rename to src/Samples/RiskManagement/CoreServices/ExportComplianceInformationProvided.cs index 7a5743c..a3acdb4 100644 --- a/src/Samples/Risk Management/CoreServices/ExportComplianceInformationProvided.cs +++ b/src/Samples/RiskManagement/CoreServices/ExportComplianceInformationProvided.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ExportComplianceInformationProvided { diff --git a/src/Samples/Risk Management/CoreServices/FraudMarking.cs b/src/Samples/RiskManagement/CoreServices/FraudMarking.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/FraudMarking.cs rename to src/Samples/RiskManagement/CoreServices/FraudMarking.cs index 0b22a2c..672c990 100644 --- a/src/Samples/Risk Management/CoreServices/FraudMarking.cs +++ b/src/Samples/RiskManagement/CoreServices/FraudMarking.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class FraudMarking { diff --git a/src/Samples/Risk Management/CoreServices/ListManagement.cs b/src/Samples/RiskManagement/CoreServices/ListManagement.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/ListManagement.cs rename to src/Samples/RiskManagement/CoreServices/ListManagement.cs index 9ee37c0..bbad0e7 100644 --- a/src/Samples/Risk Management/CoreServices/ListManagement.cs +++ b/src/Samples/RiskManagement/CoreServices/ListManagement.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ListManagement { diff --git a/src/Samples/Risk Management/CoreServices/MultipleLineItems.cs b/src/Samples/RiskManagement/CoreServices/MultipleLineItems.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/MultipleLineItems.cs rename to src/Samples/RiskManagement/CoreServices/MultipleLineItems.cs index ec21510..0347fb4 100644 --- a/src/Samples/Risk Management/CoreServices/MultipleLineItems.cs +++ b/src/Samples/RiskManagement/CoreServices/MultipleLineItems.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class MultipleLineItems { diff --git a/src/Samples/Risk Management/CoreServices/MultipleSanctionLists.cs b/src/Samples/RiskManagement/CoreServices/MultipleSanctionLists.cs similarity index 99% rename from src/Samples/Risk Management/CoreServices/MultipleSanctionLists.cs rename to src/Samples/RiskManagement/CoreServices/MultipleSanctionLists.cs index 0df8019..51da666 100644 --- a/src/Samples/Risk Management/CoreServices/MultipleSanctionLists.cs +++ b/src/Samples/RiskManagement/CoreServices/MultipleSanctionLists.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class MultipleSanctionLists { diff --git a/src/Samples/Risk Management/CoreServices/NoCompanyName.cs b/src/Samples/RiskManagement/CoreServices/NoCompanyName.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/NoCompanyName.cs rename to src/Samples/RiskManagement/CoreServices/NoCompanyName.cs index a4f8c9b..0f85a02 100644 --- a/src/Samples/Risk Management/CoreServices/NoCompanyName.cs +++ b/src/Samples/RiskManagement/CoreServices/NoCompanyName.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class NoCompanyName { diff --git a/src/Samples/Risk Management/CoreServices/RemoveFromHistory.cs b/src/Samples/RiskManagement/CoreServices/RemoveFromHistory.cs similarity index 96% rename from src/Samples/Risk Management/CoreServices/RemoveFromHistory.cs rename to src/Samples/RiskManagement/CoreServices/RemoveFromHistory.cs index 4837296..0730423 100644 --- a/src/Samples/Risk Management/CoreServices/RemoveFromHistory.cs +++ b/src/Samples/RiskManagement/CoreServices/RemoveFromHistory.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class RemoveFromHistory { diff --git a/src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs b/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs similarity index 97% rename from src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs rename to src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs index 8ecff8a..ed42031 100644 --- a/src/Samples/Risk Management/CoreServices/ScoreExceedsThreshold.cs +++ b/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs @@ -6,7 +6,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices { public class ScoreExceedsThreshold { diff --git a/src/Samples/Risk Management/CoreServices/ShippingDetailsNotUSOrCanada.cs b/src/Samples/RiskManagement/CoreServices/ShippingDetailsNotUSOrCanada.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/ShippingDetailsNotUSOrCanada.cs rename to src/Samples/RiskManagement/CoreServices/ShippingDetailsNotUSOrCanada.cs index a3e10a6..daff8ea 100644 --- a/src/Samples/Risk Management/CoreServices/ShippingDetailsNotUSOrCanada.cs +++ b/src/Samples/RiskManagement/CoreServices/ShippingDetailsNotUSOrCanada.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ShippingDetailsNotUSOrCanada { diff --git a/src/Samples/Risk Management/CoreServices/ValidateExportCompliance.cs b/src/Samples/RiskManagement/CoreServices/ValidateExportCompliance.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/ValidateExportCompliance.cs rename to src/Samples/RiskManagement/CoreServices/ValidateExportCompliance.cs index c4c84f6..8907247 100644 --- a/src/Samples/Risk Management/CoreServices/ValidateExportCompliance.cs +++ b/src/Samples/RiskManagement/CoreServices/ValidateExportCompliance.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ValidateExportCompliance { diff --git a/src/Samples/Risk Management/CoreServices/VerifyCustomerAddress.cs b/src/Samples/RiskManagement/CoreServices/VerifyCustomerAddress.cs similarity index 98% rename from src/Samples/Risk Management/CoreServices/VerifyCustomerAddress.cs rename to src/Samples/RiskManagement/CoreServices/VerifyCustomerAddress.cs index 28bf061..e2a6d89 100644 --- a/src/Samples/Risk Management/CoreServices/VerifyCustomerAddress.cs +++ b/src/Samples/RiskManagement/CoreServices/VerifyCustomerAddress.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Risk_Management +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class VerifyCustomerAddress { From d818d87470ed922dfbcd22bc2dfbaa67c6bb8e88 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Mon, 30 Mar 2020 11:41:11 +0530 Subject: [PATCH 009/161] Folder restructure --- src/SampleCode.cs | 6 +- src/SampleCode.csproj | 176 +++++++++--------- .../GenerateKey.cs | 18 +- .../FlexTokenizeCard.cs} | 48 ++--- .../Payments/Capture/CapturePayment.cs | 53 ++++++ .../Capture/CapturePaymentServiceFee.cs | 71 +++++++ .../Payments/CoreServices/CapturePayment.cs | 65 ------- .../ProcessAuthorizationReversal.cs | 37 ---- .../Payments/CoreServices/ProcessCredit.cs | 78 -------- .../Payments/CoreServices/ProcessPayment.cs | 90 --------- .../Payments/CoreServices/RefundCapture.cs | 33 ---- .../Payments/CoreServices/RefundPayment.cs | 36 ---- .../Payments/CoreServices/VoidCapture.cs | 30 --- .../Payments/CoreServices/VoidCredit.cs | 31 --- .../Payments/CoreServices/VoidPayment.cs | 31 --- .../Payments/CoreServices/VoidRefund.cs | 31 --- src/Samples/Payments/Credit/Credit.cs | 90 +++++++++ .../ElectronicCheckStandAloneCredits.cs | 100 ++++++++++ .../Payments/Credit/ServiceFeesCredit.cs | 90 +++++++++ .../ElectronicCheck/ProcessEcheckCredit.cs | 86 --------- .../ElectronicCheck/ProcessEcheckPayment.cs | 87 --------- .../ElectronicCheck/RefundEcheckPayment.cs | 69 ------- .../VoidECheckPaymentRefund.cs | 34 ---- .../ElectronicCheck/VoidEcheckCredit.cs | 32 ---- .../Payments/Payments/CyberSourceMPOSEMV.cs | 123 ++++++++++++ .../Payments/DigitalPaymentGooglePay.cs | 108 +++++++++++ .../Payments/DigitalPaymentsApplePay.cs | 110 +++++++++++ .../Payments/ElectronicCheckDebits.cs | 104 +++++++++++ src/Samples/Payments/Payments/LevelIIData.cs | 111 +++++++++++ src/Samples/Payments/Payments/LevelIIIData.cs | 132 +++++++++++++ .../Payments/Payments/PartialAuthorization.cs | 106 +++++++++++ .../Payments/PaymentNetworkTokenization.cs | 112 +++++++++++ .../PaymentWithPaymentInstrumentToken.cs | 99 ++++++++++ .../ServiceFeesWithCreditCardTransaction.cs | 121 ++++++++++++ .../Payments/SimpleAuthorizationInternet.cs | 107 +++++++++++ .../Payments/SimpleAuthorizationRetail.cs | 118 ++++++++++++ .../Payments/ZeroDollarAuthorization.cs | 104 +++++++++++ src/Samples/Payments/Refund/RefundCapture.cs | 54 ++++++ src/Samples/Payments/Refund/RefundPayment.cs | 55 ++++++ .../Reversal/ProcessAuthorizationReversal.cs | 54 ++++++ .../ServiceFeesAuthorizationReversal.cs | 54 ++++++ .../CapturePaymentWithServiceFee.cs | 81 -------- .../ServiceFees/CreditWithServiceFee.cs | 82 -------- .../ECheckStandaloneCreditWithServiceFee.cs | 88 --------- ...cessAuthorizationReversalWithServiceFee.cs | 46 ----- .../ProcessEcheckCreditWithServiceFee.cs | 65 ------- .../ProcessEcheckPaymentWithServiceFee.cs | 89 --------- .../ProcessPaymentWithServiceFee.cs | 94 ---------- .../ServiceFees/VoidCreditWithServiceFee.cs | 35 ---- ...oidStandaloneEcheckCreditWithServiceFee.cs | 35 ---- src/Samples/Payments/Void/VoidCapture.cs | 41 ++++ src/Samples/Payments/Void/VoidCredit.cs | 42 +++++ src/Samples/Payments/Void/VoidPayment.cs | 43 +++++ src/Samples/Payments/Void/VoidRefund.cs | 42 +++++ .../Payouts/CoreServices/ProcessPayout.cs | 124 ------------ src/Samples/Payouts/PayoutCardNotToken.cs | 138 ++++++++++++++ src/Samples/Payouts/PayoutToken.cs | 134 +++++++++++++ .../GetConversionDetailTransactions.cs | 34 ++++ .../CoreServices/CreateAdhocReport.cs | 51 ----- ...SubscriptionForReportNameByOrganization.cs | 42 ----- .../GetConversionDetailTransactions.cs | 30 --- ...tfundingInformationForAccountOrMerchant.cs | 30 --- .../CoreServices/GetNotificationOfChanges.cs | 31 --- .../GetPurchaseAndRefundDetails.cs | 34 ---- .../CoreServices/GetReportBasedOnReportid.cs | 28 --- .../CoreServices/GetReportDefinition.cs | 27 --- .../GetReportingResourceInformation.cs | 27 --- .../CoreServices/RetrieveAvailableReports.cs | 30 --- ...tfundingInformationForAccountOrMerchant.cs | 35 ++++ .../GetNotificationOfChanges.cs | 33 ++++ .../GetPaymentBatchSummaryData.cs | 18 +- .../GetPurchaseAndRefundDetails.cs | 39 ++++ .../ReportDefinitions/GetReportDefinition.cs | 35 ++++ .../GetReportingResourceInformation.cs | 33 ++++ .../DownloadReport.cs | 46 ++--- ...reateClassicStandardReportSubscription.cs} | 4 +- .../CreateReportSubscription.cs | 55 ++++++ ...eSubscriptionOfReportNameByOrganization.cs | 18 +- .../GetAllSubscriptions.cs | 18 +- .../GetSubscriptionForReportName.cs | 18 +- .../Reporting/Reports/CreateAdhocReport.cs | 58 ++++++ .../Reports/GetReportBasedOnReportId.cs | 33 ++++ .../Reports/RetrieveAvailableReports.cs | 40 ++++ .../CoreServices/CreateDecisionManagerCase.cs | 73 -------- .../CoreServices/DecisionProfileReject.cs | 82 -------- .../CoreServices/DmWithBuyerInformation.cs | 86 --------- .../CoreServices/DmWithDeviceInformation.cs | 82 -------- .../DmWithMerchantDefinedInformation.cs | 87 --------- .../CoreServices/DmWithShippingInformation.cs | 86 --------- .../CoreServices/DmWithTravelInformation.cs | 94 ---------- .../CoreServices/ScoreExceedsThreshold.cs | 86 --------- .../AddDataToList.cs} | 6 +- .../AddDuplicateInformation.cs | 0 .../DecisionManager/BasicDMTransaction.cs | 88 +++++++++ .../DecisionManager/DMWithBuyerInformation.cs | 106 +++++++++++ .../DMWithDecisionProfileRejectResponse.cs | 98 ++++++++++ .../DMWithDeviceInformation.cs | 102 ++++++++++ .../DMWithMerchantDefinedInformation.cs | 105 +++++++++++ .../DMWithScoreExceedsThresholdResponse.cs | 110 +++++++++++ .../DMWithShippingInformation.cs | 110 +++++++++++ .../DMWithTravelInformation.cs | 115 ++++++++++++ .../MarkAsSuspect.cs} | 2 +- .../RemoveFromHistory.cs | 0 .../AddressMatchNotFound.cs | 2 +- .../ApartmentNumberMissingOrNotFound.cs | 0 .../CanadianBillingDetails.cs | 0 .../ComplianceStatusCompleted.cs | 0 .../CustomerMatchDeniedPartiesList.cs} | 4 +- .../ExportComplianceInformationProvided.cs | 0 .../MultipleLineItems.cs | 2 +- .../MultipleSanctionLists.cs | 0 .../NoCompanyName.cs | 0 .../ShippingDetailsNotUSOrCanada.cs | 0 .../VerboseRequestWithAllFields.cs} | 4 +- .../CoreServices/GetListOfFiles.cs | 29 --- .../DownloadFileWithFileIdentifier.cs | 44 ++--- src/Samples/SecureFileShare/GetListOfFiles.cs | 34 ++++ .../CoreServices/CreatePaymentInstrument.cs | 68 ------- .../RetrieveAllPaymentInstruments.cs | 28 --- .../RetrieveInstrumentIdentifier.cs | 28 --- .../CoreServices/RetrievePaymentInstrument.cs | 28 --- .../UpdateInstrumentIdentifier.cs | 51 ----- .../CoreServices/UpdatePaymentInstrument.cs | 68 ------- .../CreateInstrumentIdentifierBankAccount.cs | 43 +++++ .../CreateInstrumentIdentifierCard.cs | 41 ++++ ...mentIdentifierCardEnrollForNetworkToken.cs | 65 +++++++ .../DeleteInstrumentIdentifier.cs | 19 +- .../RetrieveAllPaymentInstruments.cs | 36 ++++ .../RetrieveInstrumentIdentifier.cs} | 26 ++- .../CreatePaymentInstrumentBankAccount.cs | 128 +++++++++++++ .../CreatePaymentInstrumentCard.cs | 102 ++++++++++ ...mentInstrumentCardEnrollForNetworkToken.cs | 102 ++++++++++ ...nstrumentCardWithInstrumentIdentifierId.cs | 98 ++++++++++ .../CreatePaymentInstrumentPinlessDebit.cs | 104 +++++++++++ .../CreatePaymentInstrumentTokenizedCard.cs | 102 ++++++++++ .../DeletePaymentInstrument.cs | 18 +- .../RetrievePaymentInstrument.cs | 34 ++++ .../CoreServices/GetListOfBatchFiles.cs | 29 --- .../GetIndividualBatchFile.cs | 20 +- .../TransactionBatches/GetListOfBatchFiles.cs | 33 ++++ .../GetTransactionDetailsForGivenBatchId.cs | 34 ++-- .../{CoreServices => }/RetrieveTransaction.cs | 20 +- .../CoreServices/CreateSearchRequest.cs | 37 ---- .../TransactionSearch/CreateSearchRequest.cs | 48 +++++ .../{CoreServices => }/GetSearchResults.cs | 22 ++- .../CoreServices/GetUserInformation.cs | 30 --- .../GetUserInformationDeprecated.cs | 35 ++++ 147 files changed, 5083 insertions(+), 3171 deletions(-) rename src/Samples/Flex/{CoreServices => KeyGeneration}/GenerateKey.cs (57%) rename src/Samples/Flex/{CoreServices/TokenizeCard.cs => Tokenization/FlexTokenizeCard.cs} (68%) create mode 100644 src/Samples/Payments/Capture/CapturePayment.cs create mode 100644 src/Samples/Payments/Capture/CapturePaymentServiceFee.cs delete mode 100644 src/Samples/Payments/CoreServices/CapturePayment.cs delete mode 100644 src/Samples/Payments/CoreServices/ProcessAuthorizationReversal.cs delete mode 100644 src/Samples/Payments/CoreServices/ProcessCredit.cs delete mode 100644 src/Samples/Payments/CoreServices/ProcessPayment.cs delete mode 100644 src/Samples/Payments/CoreServices/RefundCapture.cs delete mode 100644 src/Samples/Payments/CoreServices/RefundPayment.cs delete mode 100644 src/Samples/Payments/CoreServices/VoidCapture.cs delete mode 100644 src/Samples/Payments/CoreServices/VoidCredit.cs delete mode 100644 src/Samples/Payments/CoreServices/VoidPayment.cs delete mode 100644 src/Samples/Payments/CoreServices/VoidRefund.cs create mode 100644 src/Samples/Payments/Credit/Credit.cs create mode 100644 src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs create mode 100644 src/Samples/Payments/Credit/ServiceFeesCredit.cs delete mode 100644 src/Samples/Payments/ElectronicCheck/ProcessEcheckCredit.cs delete mode 100644 src/Samples/Payments/ElectronicCheck/ProcessEcheckPayment.cs delete mode 100644 src/Samples/Payments/ElectronicCheck/RefundEcheckPayment.cs delete mode 100644 src/Samples/Payments/ElectronicCheck/VoidECheckPaymentRefund.cs delete mode 100644 src/Samples/Payments/ElectronicCheck/VoidEcheckCredit.cs create mode 100644 src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs create mode 100644 src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs create mode 100644 src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs create mode 100644 src/Samples/Payments/Payments/ElectronicCheckDebits.cs create mode 100644 src/Samples/Payments/Payments/LevelIIData.cs create mode 100644 src/Samples/Payments/Payments/LevelIIIData.cs create mode 100644 src/Samples/Payments/Payments/PartialAuthorization.cs create mode 100644 src/Samples/Payments/Payments/PaymentNetworkTokenization.cs create mode 100644 src/Samples/Payments/Payments/PaymentWithPaymentInstrumentToken.cs create mode 100644 src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs create mode 100644 src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs create mode 100644 src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs create mode 100644 src/Samples/Payments/Payments/ZeroDollarAuthorization.cs create mode 100644 src/Samples/Payments/Refund/RefundCapture.cs create mode 100644 src/Samples/Payments/Refund/RefundPayment.cs create mode 100644 src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs create mode 100644 src/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs delete mode 100644 src/Samples/Payments/ServiceFees/CapturePaymentWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/ProcessAuthorizationReversalWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/ProcessEcheckCreditWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/ProcessEcheckPaymentWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/ProcessPaymentWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/VoidCreditWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/VoidStandaloneEcheckCreditWithServiceFee.cs create mode 100644 src/Samples/Payments/Void/VoidCapture.cs create mode 100644 src/Samples/Payments/Void/VoidCredit.cs create mode 100644 src/Samples/Payments/Void/VoidPayment.cs create mode 100644 src/Samples/Payments/Void/VoidRefund.cs delete mode 100644 src/Samples/Payouts/CoreServices/ProcessPayout.cs create mode 100644 src/Samples/Payouts/PayoutCardNotToken.cs create mode 100644 src/Samples/Payouts/PayoutToken.cs create mode 100644 src/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs delete mode 100644 src/Samples/Reporting/CoreServices/CreateAdhocReport.cs delete mode 100644 src/Samples/Reporting/CoreServices/CreateReportSubscriptionForReportNameByOrganization.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetConversionDetailTransactions.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetNetfundingInformationForAccountOrMerchant.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetNotificationOfChanges.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetPurchaseAndRefundDetails.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetReportBasedOnReportid.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetReportDefinition.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs delete mode 100644 src/Samples/Reporting/CoreServices/RetrieveAvailableReports.cs create mode 100644 src/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs create mode 100644 src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs rename src/Samples/Reporting/{CoreServices => PaymentBatchSummaries}/GetPaymentBatchSummaryData.cs (67%) create mode 100644 src/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs create mode 100644 src/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs create mode 100644 src/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs rename src/Samples/Reporting/{CoreServices => ReportDownloads}/DownloadReport.cs (56%) rename src/Samples/Reporting/{CoreServices/CreateStandardOrClassicSubscription.cs => ReportSubscriptions/CreateClassicStandardReportSubscription.cs} (94%) create mode 100644 src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs rename src/Samples/Reporting/{CoreServices => ReportSubscriptions}/DeleteSubscriptionOfReportNameByOrganization.cs (68%) rename src/Samples/Reporting/{CoreServices => ReportSubscriptions}/GetAllSubscriptions.cs (51%) rename src/Samples/Reporting/{CoreServices => ReportSubscriptions}/GetSubscriptionForReportName.cs (52%) create mode 100644 src/Samples/Reporting/Reports/CreateAdhocReport.cs create mode 100644 src/Samples/Reporting/Reports/GetReportBasedOnReportId.cs create mode 100644 src/Samples/Reporting/Reports/RetrieveAvailableReports.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs rename src/Samples/RiskManagement/{CoreServices/ListManagement.cs => DecisionManager/AddDataToList.cs} (92%) rename src/Samples/RiskManagement/{CoreServices => DecisionManager}/AddDuplicateInformation.cs (100%) create mode 100644 src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs create mode 100644 src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs create mode 100644 src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs create mode 100644 src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs create mode 100644 src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs create mode 100644 src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs create mode 100644 src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs create mode 100644 src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs rename src/Samples/RiskManagement/{CoreServices/FraudMarking.cs => DecisionManager/MarkAsSuspect.cs} (98%) rename src/Samples/RiskManagement/{CoreServices => DecisionManager}/RemoveFromHistory.cs (100%) rename src/Samples/RiskManagement/{CoreServices => Verification}/AddressMatchNotFound.cs (99%) rename src/Samples/RiskManagement/{CoreServices => Verification}/ApartmentNumberMissingOrNotFound.cs (100%) rename src/Samples/RiskManagement/{CoreServices => Verification}/CanadianBillingDetails.cs (100%) rename src/Samples/RiskManagement/{CoreServices => Verification}/ComplianceStatusCompleted.cs (100%) rename src/Samples/RiskManagement/{CoreServices/ValidateExportCompliance.cs => Verification/CustomerMatchDeniedPartiesList.cs} (98%) rename src/Samples/RiskManagement/{CoreServices => Verification}/ExportComplianceInformationProvided.cs (100%) rename src/Samples/RiskManagement/{CoreServices => Verification}/MultipleLineItems.cs (99%) rename src/Samples/RiskManagement/{CoreServices => Verification}/MultipleSanctionLists.cs (100%) rename src/Samples/RiskManagement/{CoreServices => Verification}/NoCompanyName.cs (100%) rename src/Samples/RiskManagement/{CoreServices => Verification}/ShippingDetailsNotUSOrCanada.cs (100%) rename src/Samples/RiskManagement/{CoreServices/VerifyCustomerAddress.cs => Verification/VerboseRequestWithAllFields.cs} (98%) delete mode 100644 src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs rename src/Samples/SecureFileShare/{CoreServices => }/DownloadFileWithFileIdentifier.cs (56%) create mode 100644 src/Samples/SecureFileShare/GetListOfFiles.cs delete mode 100644 src/Samples/TMS/CoreServices/CreatePaymentInstrument.cs delete mode 100644 src/Samples/TMS/CoreServices/RetrieveAllPaymentInstruments.cs delete mode 100644 src/Samples/TMS/CoreServices/RetrieveInstrumentIdentifier.cs delete mode 100644 src/Samples/TMS/CoreServices/RetrievePaymentInstrument.cs delete mode 100644 src/Samples/TMS/CoreServices/UpdateInstrumentIdentifier.cs delete mode 100644 src/Samples/TMS/CoreServices/UpdatePaymentInstrument.cs create mode 100644 src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs create mode 100644 src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs create mode 100644 src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs rename src/Samples/{TMS/CoreServices => TokenManagement/InstrumentIdentifier}/DeleteInstrumentIdentifier.cs (54%) create mode 100644 src/Samples/TokenManagement/InstrumentIdentifier/RetrieveAllPaymentInstruments.cs rename src/Samples/{TMS/CoreServices/CreateInstrumentIdentifier.cs => TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs} (52%) create mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs create mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs create mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs create mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs create mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs create mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs rename src/Samples/{TMS/CoreServices => TokenManagement/PaymentInstrument}/DeletePaymentInstrument.cs (53%) create mode 100644 src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs delete mode 100644 src/Samples/TransactionBatches/CoreServices/GetListOfBatchFiles.cs rename src/Samples/TransactionBatches/{CoreServices => }/GetIndividualBatchFile.cs (59%) create mode 100644 src/Samples/TransactionBatches/GetListOfBatchFiles.cs rename src/Samples/TransactionBatches/{CoreServices => }/GetTransactionDetailsForGivenBatchId.cs (67%) rename src/Samples/TransactionDetails/{CoreServices => }/RetrieveTransaction.cs (56%) delete mode 100644 src/Samples/TransactionSearch/CoreServices/CreateSearchRequest.cs create mode 100644 src/Samples/TransactionSearch/CreateSearchRequest.cs rename src/Samples/TransactionSearch/{CoreServices => }/GetSearchResults.cs (55%) delete mode 100644 src/Samples/UserManagement/CoreServices/GetUserInformation.cs create mode 100644 src/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs diff --git a/src/SampleCode.cs b/src/SampleCode.cs index da3871b..a379c1c 100644 --- a/src/SampleCode.cs +++ b/src/SampleCode.cs @@ -72,12 +72,16 @@ public static void RunSample(string cmdLineArg = null) if (_sampleToRun.ToUpper().Contains("RUNALL")) { + int sampleCount = 1; foreach (var apiMethod in ApiList) { - Console.WriteLine("\n#### START RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); + Console.WriteLine("\n" + sampleCount + ".\t#### START RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); RunSample(apiMethod.ApiFunctionCall); Console.WriteLine("\n#### END RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); + sampleCount++; } + + Console.WriteLine("\n\nTotal number of Sample run : " + sampleCount); } else { diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 2b66ae4..1312bed 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -92,93 +92,101 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Samples/Flex/CoreServices/GenerateKey.cs b/src/Samples/Flex/KeyGeneration/GenerateKey.cs similarity index 57% rename from src/Samples/Flex/CoreServices/GenerateKey.cs rename to src/Samples/Flex/KeyGeneration/GenerateKey.cs index fbf19af..df56ca3 100644 --- a/src/Samples/Flex/CoreServices/GenerateKey.cs +++ b/src/Samples/Flex/KeyGeneration/GenerateKey.cs @@ -1,28 +1,34 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Flex.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Flex { public class GenerateKey { public static FlexV1KeysPost200Response Run() { - var requestObj = new GeneratePublicKeyRequest("None"); + string encryptionType = "None"; + var requestObj = new GeneratePublicKeyRequest( + EncryptionType: encryptionType + ); try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new KeyGenerationApi(clientConfig); - var result = apiInstance.GeneratePublicKey(requestObj); + var apiInstance = new KeyGenerationApi(clientConfig); + FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(requestObj); Console.WriteLine(result); return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); return null; } } diff --git a/src/Samples/Flex/CoreServices/TokenizeCard.cs b/src/Samples/Flex/Tokenization/FlexTokenizeCard.cs similarity index 68% rename from src/Samples/Flex/CoreServices/TokenizeCard.cs rename to src/Samples/Flex/Tokenization/FlexTokenizeCard.cs index 23a25a8..df4320d 100644 --- a/src/Samples/Flex/CoreServices/TokenizeCard.cs +++ b/src/Samples/Flex/Tokenization/FlexTokenizeCard.cs @@ -1,44 +1,47 @@ -using System; +using System; using System.Collections.Generic; -using System.IO; -using System.Security.Cryptography; -using System.Text; +using System.Globalization; + using CyberSource.Api; using CyberSource.Model; using CyberSource.Utilities.Flex.Model; using CyberSource.Utilities.Flex.TokenVerification; -namespace Cybersource_rest_samples_dotnet.Samples.Flex.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Flex { - public class TokenizeCard + public class FlexTokenizeCard { - public static void Run() + public static FlexV1TokensPost200Response Run() { var generateKeyResult = GenerateKey.Run(); - var keyId = generateKeyResult.KeyId; + string keyId = generateKeyResult.KeyId; var derFormat = generateKeyResult.Der.Format; var derAlgo = generateKeyResult.Der.Algorithm; var derPublicKey = generateKeyResult.Der.PublicKey; - var requestObj = new TokenizeRequest - ( + string cardInfoCardNumber = "4111111111111111"; + string cardInfoCardExpirationMonth = "12"; + string cardInfoCardExpirationYear = "2031"; + string cardInfoCardType = "001"; + Flexv1tokensCardInfo cardInfo = new Flexv1tokensCardInfo( + CardNumber: cardInfoCardNumber, + CardExpirationMonth: cardInfoCardExpirationMonth, + CardExpirationYear: cardInfoCardExpirationYear, + CardType: cardInfoCardType + ); + + var requestObj = new TokenizeRequest( KeyId: keyId, - CardInfo: new Flexv1tokensCardInfo - ( - CardExpirationYear: "2031", - CardNumber: "5555555555554444", - CardType: "002", - CardExpirationMonth: "03" - ) - ); + CardInfo: cardInfo + ); try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new TokenizationApi(clientConfig); - var result = apiInstance.Tokenize(requestObj); + var apiInstance = new TokenizationApi(clientConfig); + FlexV1TokensPost200Response result = apiInstance.Tokenize(requestObj); Console.WriteLine(result); TokenVerificationUtility tokenVerifier = new TokenVerificationUtility(); @@ -67,10 +70,13 @@ public static void Run() var tokenVerificationResult = tokenVerifier.Verify(flexPublicKey, postParameters); Console.WriteLine("TOKEN VERIFICATION : " + tokenVerificationResult); + + return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } diff --git a/src/Samples/Payments/Capture/CapturePayment.cs b/src/Samples/Payments/Capture/CapturePayment.cs new file mode 100644 index 0000000..6b7ff80 --- /dev/null +++ b/src/Samples/Payments/Capture/CapturePayment.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CapturePayment + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + var id = SimpleAuthorizationInternet.Run().Id; + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Capture/CapturePaymentServiceFee.cs b/src/Samples/Payments/Capture/CapturePaymentServiceFee.cs new file mode 100644 index 0000000..e5f990a --- /dev/null +++ b/src/Samples/Payments/Capture/CapturePaymentServiceFee.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CapturePaymentServiceFee + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + ServiceFeesWithCreditCardTransaction.CaptureTrueForProcessPayment = false; + var id = ServiceFeesWithCreditCardTransaction.Run().Id; + + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "2325.00"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsServiceFeeAmount = "30.00"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + ServiceFeeAmount: orderInformationAmountDetailsServiceFeeAmount + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string merchantInformationServiceFeeDescriptorName = "Vacations Service Fee"; + string merchantInformationServiceFeeDescriptorContact = "8009999999"; + string merchantInformationServiceFeeDescriptorState = "CA"; + Ptsv2paymentsMerchantInformationServiceFeeDescriptor merchantInformationServiceFeeDescriptor = new Ptsv2paymentsMerchantInformationServiceFeeDescriptor( + Name: merchantInformationServiceFeeDescriptorName, + Contact: merchantInformationServiceFeeDescriptorContact, + State: merchantInformationServiceFeeDescriptorState + ); + + Ptsv2paymentsidcapturesMerchantInformation merchantInformation = new Ptsv2paymentsidcapturesMerchantInformation( + ServiceFeeDescriptor: merchantInformationServiceFeeDescriptor + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/CapturePayment.cs b/src/Samples/Payments/CoreServices/CapturePayment.cs deleted file mode 100644 index 529105f..0000000 --- a/src/Samples/Payments/CoreServices/CapturePayment.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class CapturePayment - { - public static PtsV2PaymentsCapturesPost201Response Run() - { - var processPaymentId = ProcessPayment.Run().Id; - - var requestObj = new CapturePaymentRequest(); - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation - { - Code = "test_capture" - }; - - requestObj.ClientReferenceInformation = clientReferenceInformationObj; - - var orderInformationObj = new Ptsv2paymentsidcapturesOrderInformation(); - - var billToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - orderInformationObj.BillTo = billToObj; - - var amountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "102.21", - Currency = "USD" - }; - - orderInformationObj.AmountDetails = amountDetailsObj; - - requestObj.OrderInformation = orderInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new CaptureApi(clientConfig); - - var result = apiInstance.CapturePayment(requestObj, processPaymentId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/ProcessAuthorizationReversal.cs b/src/Samples/Payments/CoreServices/ProcessAuthorizationReversal.cs deleted file mode 100644 index 7ee8449..0000000 --- a/src/Samples/Payments/CoreServices/ProcessAuthorizationReversal.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class ProcessAuthorizationReversal - { - public static PtsV2PaymentsReversalsPost201Response Run() - { - var processPaymentId = ProcessPayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_reversal"); - var amount = new Ptsv2paymentsidreversalsOrderInformationLineItems(null, "102.21"); - var amountDetailsObj = new List { amount }; - var orderInformationObj = new Ptsv2paymentsidreversalsOrderInformation(null, amountDetailsObj); - var requestBody = new AuthReversalRequest(clientReferenceInformationObj, null, null, orderInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReversalApi(clientConfig); - - var result = apiInstance.AuthReversal(processPaymentId, requestBody); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/ProcessCredit.cs b/src/Samples/Payments/CoreServices/ProcessCredit.cs deleted file mode 100644 index a054e9f..0000000 --- a/src/Samples/Payments/CoreServices/ProcessCredit.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class ProcessCredit - { - public static PtsV2CreditsPost201Response Run() - { - var requestObj = new CreateCreditRequest(); - - var v2PaymentsClientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation - { - Code = "test_credits" - }; - - requestObj.ClientReferenceInformation = v2PaymentsClientReferenceInformationObj; - - var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - - var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - PhoneNumber = "4158880000", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "san francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; - - var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "200", - Currency = "usd" - }; - - v2PaymentsOrderInformationObj.AmountDetails = v2PaymentsOrderInformationAmountDetailsObj; - - requestObj.OrderInformation = v2PaymentsOrderInformationObj; - - var v2PaymentsPaymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - - var v2PaymentsPaymentInformationCardObj = new Ptsv2paymentsidrefundsPaymentInformationCard - { - ExpirationYear = "2031", - Number = "4111111111111111", - ExpirationMonth = "03", - Type = "001" - }; - - v2PaymentsPaymentInformationObj.Card = v2PaymentsPaymentInformationCardObj; - - requestObj.PaymentInformation = v2PaymentsPaymentInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new CreditApi(clientConfig); - - var result = apiInstance.CreateCredit(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/ProcessPayment.cs b/src/Samples/Payments/CoreServices/ProcessPayment.cs deleted file mode 100644 index 49ebb09..0000000 --- a/src/Samples/Payments/CoreServices/ProcessPayment.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class ProcessPayment - { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - - public static PtsV2PaymentsPost201Response Run() - { - var processingInformationObj = new Ptsv2paymentsProcessingInformation() { CommerceIndicator = "internet" }; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation { Code = "test_payment" }; - - var pointOfSaleInformationObj = new Ptsv2paymentsPointOfSaleInformation - { - CatLevel = 6, - TerminalCapability = 4 - }; - - var orderInformationObj = new Ptsv2paymentsOrderInformation(); - - var billToObj = new Ptsv2paymentsOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - orderInformationObj.BillTo = billToObj; - - var amountDetailsObj = new Ptsv2paymentsOrderInformationAmountDetails - { - TotalAmount = "102.21", - Currency = "USD" - }; - - orderInformationObj.AmountDetails = amountDetailsObj; - - var paymentInformationObj = new Ptsv2paymentsPaymentInformation(); - - var cardObj = new Ptsv2paymentsPaymentInformationCard - { - ExpirationYear = "2031", - Number = "4111111111111111", - SecurityCode = "123", - ExpirationMonth = "12" - }; - - paymentInformationObj.Card = cardObj; - - var requestObj = new CreatePaymentRequest - { - ProcessingInformation = processingInformationObj, - PaymentInformation = paymentInformationObj, - ClientReferenceInformation = clientReferenceInformationObj, - PointOfSaleInformation = pointOfSaleInformationObj, - OrderInformation = orderInformationObj - }; - - if (CaptureTrueForProcessPayment) - { - requestObj.ProcessingInformation.Capture = true; - } - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentsApi(clientConfig); - - var result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/RefundCapture.cs b/src/Samples/Payments/CoreServices/RefundCapture.cs deleted file mode 100644 index 5fdb171..0000000 --- a/src/Samples/Payments/CoreServices/RefundCapture.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class RefundCapture - { - public static void Run() - { - var capturePaymentId = CapturePayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation("test_refund_capture"); - var amountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails("102.21", "USD"); - var orderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(amountDetailsObj); - var requestBody = new RefundCaptureRequest(clientReferenceInformationObj,null, null, orderInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new RefundApi(clientConfig); - - var result = apiInstance.RefundCapture(requestBody, capturePaymentId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/RefundPayment.cs b/src/Samples/Payments/CoreServices/RefundPayment.cs deleted file mode 100644 index 6031c80..0000000 --- a/src/Samples/Payments/CoreServices/RefundPayment.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class RefundPayment - { - public static PtsV2PaymentsRefundPost201Response Run() - { - ProcessPayment.CaptureTrueForProcessPayment = true; - var processPaymentId = ProcessPayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation("test_refund_payment"); - var amountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails("10", "USD"); - var orderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(amountDetailsObj); - var requestBody = new RefundPaymentRequest(clientReferenceInformationObj, null, null, orderInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new RefundApi(clientConfig); - - var result = apiInstance.RefundPayment(requestBody, processPaymentId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} \ No newline at end of file diff --git a/src/Samples/Payments/CoreServices/VoidCapture.cs b/src/Samples/Payments/CoreServices/VoidCapture.cs deleted file mode 100644 index 93250e7..0000000 --- a/src/Samples/Payments/CoreServices/VoidCapture.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class VoidCapture - { - public static void Run() - { - var capturePaymentId = CapturePayment.Run().Id; - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_capture_void"); - var requestBody = new VoidCaptureRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - - var result = apiInstance.VoidCapture(requestBody, capturePaymentId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/VoidCredit.cs b/src/Samples/Payments/CoreServices/VoidCredit.cs deleted file mode 100644 index a12def3..0000000 --- a/src/Samples/Payments/CoreServices/VoidCredit.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class VoidCredit - { - public static void Run() - { - var processCreditId = ProcessCredit.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_credit_void"); - var requestBody = new VoidCreditRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - - var result = apiInstance.VoidCredit(requestBody, processCreditId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/VoidPayment.cs b/src/Samples/Payments/CoreServices/VoidPayment.cs deleted file mode 100644 index 542ebac..0000000 --- a/src/Samples/Payments/CoreServices/VoidPayment.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class VoidPayment - { - public static void Run() - { - ProcessPayment.CaptureTrueForProcessPayment = true; - var processPaymentId = ProcessPayment.Run().Id; - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_payment_void"); - var requestObj = new VoidPaymentRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - - var result = apiInstance.VoidPayment(requestObj, processPaymentId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/VoidRefund.cs b/src/Samples/Payments/CoreServices/VoidRefund.cs deleted file mode 100644 index b24c772..0000000 --- a/src/Samples/Payments/CoreServices/VoidRefund.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class VoidRefund - { - public static void Run() - { - var refundPaymentId = RefundPayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_refund_void"); - var requestBody = new VoidRefundRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - - var result = apiInstance.VoidRefund(requestBody, refundPaymentId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/Credit/Credit.cs b/src/Samples/Payments/Credit/Credit.cs new file mode 100644 index 0000000..993d125 --- /dev/null +++ b/src/Samples/Payments/Credit/Credit.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class Credit + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "12345678"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "03"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsidrefundsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsidrefundsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "200"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "900 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "9321499232"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs b/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs new file mode 100644 index 0000000..b6172c5 --- /dev/null +++ b/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ElectronicCheckStandAloneCredits + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "TC46125-1"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string processingInformationCommerceIndicator = "internet"; + Ptsv2creditsProcessingInformation processingInformation = new Ptsv2creditsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationBankAccountType = "C"; + string paymentInformationBankAccountNumber = "4100"; + string paymentInformationBankAccountCheckNumber = "123456"; + Ptsv2paymentsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsPaymentInformationBankAccount( + Type: paymentInformationBankAccountType, + Number: paymentInformationBankAccountNumber, + CheckNumber: paymentInformationBankAccountCheckNumber + ); + + string paymentInformationBankRoutingNumber = "071923284"; + Ptsv2paymentsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsPaymentInformationBank( + Account: paymentInformationBankAccount, + RoutingNumber: paymentInformationBankRoutingNumber + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Bank: paymentInformationBank + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Credit/ServiceFeesCredit.cs b/src/Samples/Payments/Credit/ServiceFeesCredit.cs new file mode 100644 index 0000000..53153c5 --- /dev/null +++ b/src/Samples/Payments/Credit/ServiceFeesCredit.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ServiceFeesCredit + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "12345678"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "03"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsidrefundsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsidrefundsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "2325.00"; + string orderInformationAmountDetailsCurrency = "usd"; + string orderInformationAmountDetailsServiceFeeAmount = "30.0"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + ServiceFeeAmount: orderInformationAmountDetailsServiceFeeAmount + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/ElectronicCheck/ProcessEcheckCredit.cs b/src/Samples/Payments/ElectronicCheck/ProcessEcheckCredit.cs deleted file mode 100644 index bffd794..0000000 --- a/src/Samples/Payments/ElectronicCheck/ProcessEcheckCredit.cs +++ /dev/null @@ -1,86 +0,0 @@ -using CyberSource.Api; -using CyberSource.Model; -using System; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ElectronicCheck -{ - /** - * This is the sample code to do Credit transaction to bank account - */ - class ProcessEcheckCredit - { - public static PtsV2CreditsPost201Response Run() - { - var requestObj = new CreateCreditRequest(); - - var v2PaymentsClientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation - { - Code = "test_credits" - }; - - requestObj.ClientReferenceInformation = v2PaymentsClientReferenceInformationObj; - - var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - PhoneNumber = "4158880000", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "san francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "200", - Currency = "usd" - }; - - var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; - v2PaymentsOrderInformationObj.AmountDetails = v2PaymentsOrderInformationAmountDetailsObj; - - requestObj.OrderInformation = v2PaymentsOrderInformationObj; - - var bankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - CheckNumber = "123456" - }; - - var bankObj = new Ptsv2paymentsPaymentInformationBank - { - Account = bankAccountObj - }; - - bankObj.RoutingNumber = "071923284"; - - var paymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - paymentInformationObj.Bank = bankObj; - - requestObj.PaymentInformation = paymentInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new CreditApi(clientConfig); - - var result = apiInstance.CreateCredit(requestObj); - - Console.WriteLine(result); - - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ElectronicCheck/ProcessEcheckPayment.cs b/src/Samples/Payments/ElectronicCheck/ProcessEcheckPayment.cs deleted file mode 100644 index b0cc018..0000000 --- a/src/Samples/Payments/ElectronicCheck/ProcessEcheckPayment.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ElectronicCheck -{ - public class ProcessEcheckPayment - { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - - public static PtsV2PaymentsPost201Response Run() - { - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation { Code = "test_payment" }; - - var processingInformationObj = new Ptsv2paymentsProcessingInformation() { CommerceIndicator = "internet" }; - - var billToObj = new Ptsv2paymentsOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - var amountDetailsObj = new Ptsv2paymentsOrderInformationAmountDetails - { - TotalAmount = "102.21", - Currency = "USD" - }; - - var orderInformationObj = new Ptsv2paymentsOrderInformation(); - orderInformationObj.BillTo = billToObj; - orderInformationObj.AmountDetails = amountDetailsObj; - - var bankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - CheckNumber = "123456" - }; - - var bankObj = new Ptsv2paymentsPaymentInformationBank - { - Account = bankAccountObj - }; - bankObj.RoutingNumber= "071923284"; - - var paymentInformationObj = new Ptsv2paymentsPaymentInformation(); - paymentInformationObj.Bank = bankObj; - - var requestObj = new CreatePaymentRequest - { - ProcessingInformation = processingInformationObj, - PaymentInformation = paymentInformationObj, - ClientReferenceInformation = clientReferenceInformationObj, - OrderInformation = orderInformationObj - }; - - if (CaptureTrueForProcessPayment) - { - requestObj.ProcessingInformation.Capture = true; - } - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentsApi(clientConfig); - - var result = apiInstance.CreatePayment(requestObj); - - Console.WriteLine(result); - - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ElectronicCheck/RefundEcheckPayment.cs b/src/Samples/Payments/ElectronicCheck/RefundEcheckPayment.cs deleted file mode 100644 index fb1231b..0000000 --- a/src/Samples/Payments/ElectronicCheck/RefundEcheckPayment.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; -using Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ElectronicCheck -{ - public class RefundEcheckPayment - { - public static PtsV2PaymentsRefundPost201Response Run() - { - var capturePaymentId = CapturePayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation("test_refund_capture"); - - var amountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails("102.21", "USD"); - - var billToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - var orderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(amountDetailsObj, billToObj); - - var bankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - CheckNumber = "123456" - }; - - var bankObj = new Ptsv2paymentsPaymentInformationBank - { - Account = bankAccountObj - }; - bankObj.RoutingNumber = "071923284"; - - var paymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - paymentInformationObj.Bank = bankObj; - - var requestBody = new RefundCaptureRequest(clientReferenceInformationObj, null, paymentInformationObj, orderInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new RefundApi(clientConfig); - - var result = apiInstance.RefundCapture(requestBody, capturePaymentId); - - Console.WriteLine(result.Id); - - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} \ No newline at end of file diff --git a/src/Samples/Payments/ElectronicCheck/VoidECheckPaymentRefund.cs b/src/Samples/Payments/ElectronicCheck/VoidECheckPaymentRefund.cs deleted file mode 100644 index a7d79eb..0000000 --- a/src/Samples/Payments/ElectronicCheck/VoidECheckPaymentRefund.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ElectronicCheck -{ - public class VoidECheckPaymentRefund - { - public static void Run() - { - var refundPaymentId = RefundEcheckPayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_refund_void"); - var requestBody = new VoidRefundRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - var result = apiInstance.VoidRefund(requestBody, refundPaymentId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/ElectronicCheck/VoidEcheckCredit.cs b/src/Samples/Payments/ElectronicCheck/VoidEcheckCredit.cs deleted file mode 100644 index dc5b387..0000000 --- a/src/Samples/Payments/ElectronicCheck/VoidEcheckCredit.cs +++ /dev/null @@ -1,32 +0,0 @@ - -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ElectronicCheck -{ - public class VoidEcheckCredit - { - public static void Run() - { - var processCreditId = ProcessEcheckCredit.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_credit_void"); - var requestBody = new VoidCreditRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - - var result = apiInstance.VoidCredit(requestBody, processCreditId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs b/src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs new file mode 100644 index 0000000..2d5b6bd --- /dev/null +++ b/src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CyberSourceMPOSEMV + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_16"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "retail"; + string processingInformationPaymentSolution = "011"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PaymentSolution: processingInformationPaymentSolution + ); + + string paymentInformationFluidDataDescriptor = "EMV.PAYMENT.AnywhereCommerce.Walker"; + string paymentInformationFluidDataValue = "ewogICJkYXRhIiA6ICJOZmNwRURiK1dLdzBnQkpsaTRcL1hlWm1ITzdUSng0bnRoMnc2Mk9ITVJQK3hCRlFPdFE0WWpRcnY0RmFkOHh6VExqT2VFQm5iNHFzeGZMYTNyNXcxVEdXblFGQnNzMWtPYnA0XC95alNtVE1JSGVjbGc5OFROaEhNb0VRcjJkRkFqYVpBTFAxSlBsdVhKSVwvbTZKSmVwNGh3VHRWZE16Z2laSUhnaWFCYzNXZVd1ZnYzc1l0cGRaZDZYZENEUFdLeXFkYjBJdUtkdkpBPT0iLAogICJzaWduYXR1cmUiIDogIkFxck1pKzc0cm1GeVBKVE9HN3NuN2p5K1YxTlpBZUNJVE56TW01N1B5cmc9IiwKICAic2lnbmF0dXJlQWxnSW5mbyIgOiAiSE1BQ3dpdGhTSEEyNTYiLAogICJoZWFkZXIiIDogewogICAgInRyYW5zYWN0aW9uSWQiIDogIjE1MTU2MjI2NjIuMTcyMjIwIiwKICAgICJwdWJsaWNLZXlIYXNoIiA6ICJcLzdmdldqRVhMazJPRWpcL3Z5bk1jeEZvMmRWSTlpRXVoT2Nab0tHQnpGTmM9IiwKICAgICJhcHBsaWNhdGlvbkRhdGEiIDogIkN5YmVyU291cmNlLlZNcG9zS2l0IiwKICAgICJlcGhlbWVyYWxQdWJsaWNLZXkiIDogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRW1JN0tScnRNN2NNelk5Zmw2UWt2NEQzdE9jU0NYR1hoOFwvK2R4K2s5c1Zrbk05UFQrOXRqMzk2YWF6QjRcL0hYaWlLRW9DXC9jUzdoSzF6UFk3MVwvN0pUUT09IgogIH0sCiAgInZlcnNpb24iIDogIjEuMCIKfQ=="; + Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( + Descriptor: paymentInformationFluidDataDescriptor, + Value: paymentInformationFluidDataValue + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + FluidData: paymentInformationFluidData + ); + + string orderInformationAmountDetailsTotalAmount = "15.0"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 1; + bool pointOfSaleInformationEmvFallback = true; + int pointOfSaleInformationEmvFallbackCondition = 1; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Fallback: pointOfSaleInformationEmvFallback, + FallbackCondition: pointOfSaleInformationEmvFallbackCondition + ); + + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs b/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs new file mode 100644 index 0000000..957babf --- /dev/null +++ b/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class DigitalPaymentGooglePay + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC_1231223"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + string processingInformationCommerceIndicator = "internet"; + string processingInformationPaymentSolution = "012"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PaymentSolution: processingInformationPaymentSolution + ); + + string paymentInformationTokenizedCardNumber = "4111111111111111"; + string paymentInformationTokenizedCardExpirationMonth = "12"; + string paymentInformationTokenizedCardExpirationYear = "2020"; + string paymentInformationTokenizedCardCryptogram = "EHuWW9PiBkWvqE5juRwDzAUFBAk="; + string paymentInformationTokenizedCardTransactionType = "1"; + Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( + Number: paymentInformationTokenizedCardNumber, + ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, + ExpirationYear: paymentInformationTokenizedCardExpirationYear, + Cryptogram: paymentInformationTokenizedCardCryptogram, + TransactionType: paymentInformationTokenizedCardTransactionType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + TokenizedCard: paymentInformationTokenizedCard + ); + + string orderInformationAmountDetailsTotalAmount = "20"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "901 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs b/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs new file mode 100644 index 0000000..41af1cb --- /dev/null +++ b/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class DigitalPaymentsApplePay + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC_1231223"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + string processingInformationCommerceIndicator = "internet"; + string processingInformationPaymentSolution = "001"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PaymentSolution: processingInformationPaymentSolution + ); + + string paymentInformationTokenizedCardNumber = "4111111111111111"; + string paymentInformationTokenizedCardExpirationMonth = "12"; + string paymentInformationTokenizedCardExpirationYear = "2031"; + string paymentInformationTokenizedCardCryptogram = "AceY+igABPs3jdwNaDg3MAACAAA="; + string paymentInformationTokenizedCardTransactionType = "1"; + Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( + Number: paymentInformationTokenizedCardNumber, + ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, + ExpirationYear: paymentInformationTokenizedCardExpirationYear, + Cryptogram: paymentInformationTokenizedCardCryptogram, + TransactionType: paymentInformationTokenizedCardTransactionType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + TokenizedCard: paymentInformationTokenizedCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "901 Metro Center Blvd"; + string orderInformationBillToAddress2 = "Desk M3-5573"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/ElectronicCheckDebits.cs b/src/Samples/Payments/Payments/ElectronicCheckDebits.cs new file mode 100644 index 0000000..5a0ad3a --- /dev/null +++ b/src/Samples/Payments/Payments/ElectronicCheckDebits.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ElectronicCheckDebits + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationBankAccountType = "C"; + string paymentInformationBankAccountNumber = "4100"; + Ptsv2paymentsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsPaymentInformationBankAccount( + Type: paymentInformationBankAccountType, + Number: paymentInformationBankAccountNumber + ); + + string paymentInformationBankRoutingNumber = "071923284"; + Ptsv2paymentsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsPaymentInformationBank( + Account: paymentInformationBankAccount, + RoutingNumber: paymentInformationBankRoutingNumber + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Bank: paymentInformationBank + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/LevelIIData.cs b/src/Samples/Payments/Payments/LevelIIData.cs new file mode 100644 index 0000000..82f10c4 --- /dev/null +++ b/src/Samples/Payments/Payments/LevelIIData.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class LevelIIData + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_12"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "112.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationInvoiceDetailsPurchaseOrderNumber = "LevelII Auth Po"; + Ptsv2paymentsOrderInformationInvoiceDetails orderInformationInvoiceDetails = new Ptsv2paymentsOrderInformationInvoiceDetails( + PurchaseOrderNumber: orderInformationInvoiceDetailsPurchaseOrderNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + InvoiceDetails: orderInformationInvoiceDetails + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/LevelIIIData.cs b/src/Samples/Payments/Payments/LevelIIIData.cs new file mode 100644 index 0000000..8206976 --- /dev/null +++ b/src/Samples/Payments/Payments/LevelIIIData.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class LevelIIIData + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_14"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "internet"; + string processingInformationPurchaseLevel = "3"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PurchaseLevel: processingInformationPurchaseLevel + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsProductCode1 = "default"; + int orderInformationLineItemsQuantity1 = 10; + string orderInformationLineItemsUnitPrice1 = "10.00"; + string orderInformationLineItemsTotalAmount1 = "100"; + bool orderInformationLineItemsAmountIncludesTax1 = false; + bool orderInformationLineItemsDiscountApplied1 = false; + orderInformationLineItems.Add(new Ptsv2paymentsOrderInformationLineItems( + ProductCode: orderInformationLineItemsProductCode1, + Quantity: orderInformationLineItemsQuantity1, + UnitPrice: orderInformationLineItemsUnitPrice1, + TotalAmount: orderInformationLineItemsTotalAmount1, + AmountIncludesTax: orderInformationLineItemsAmountIncludesTax1, + DiscountApplied: orderInformationLineItemsDiscountApplied1 + )); + + string orderInformationInvoiceDetailsPurchaseOrderNumber = "LevelIII Auth Po"; + Ptsv2paymentsOrderInformationInvoiceDetails orderInformationInvoiceDetails = new Ptsv2paymentsOrderInformationInvoiceDetails( + PurchaseOrderNumber: orderInformationInvoiceDetailsPurchaseOrderNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + LineItems: orderInformationLineItems, + InvoiceDetails: orderInformationInvoiceDetails + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/PartialAuthorization.cs b/src/Samples/Payments/Payments/PartialAuthorization.cs new file mode 100644 index 0000000..4d931b8 --- /dev/null +++ b/src/Samples/Payments/Payments/PartialAuthorization.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PartialAuthorization + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "1234567890"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "7012.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 6; + int pointOfSaleInformationTerminalCapability = 4; + bool pointOfSaleInformationEmvFallback = false; + int pointOfSaleInformationEmvFallbackCondition = 1; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Fallback: pointOfSaleInformationEmvFallback, + FallbackCondition: pointOfSaleInformationEmvFallbackCondition + ); + + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs b/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs new file mode 100644 index 0000000..e6d44a8 --- /dev/null +++ b/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PaymentNetworkTokenization + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC_123122"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationTokenizedCardNumber = "4111111111111111"; + string paymentInformationTokenizedCardExpirationMonth = "12"; + string paymentInformationTokenizedCardExpirationYear = "2031"; + string paymentInformationTokenizedCardTransactionType = "1"; + Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( + Number: paymentInformationTokenizedCardNumber, + ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, + ExpirationYear: paymentInformationTokenizedCardExpirationYear, + TransactionType: paymentInformationTokenizedCardTransactionType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + TokenizedCard: paymentInformationTokenizedCard + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationCavv = "AAABCSIIAAAAAAACcwgAEMCoNh+="; + string consumerAuthenticationInformationXid = "T1Y0OVcxMVJJdkI0WFlBcXptUzE="; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + Cavv: consumerAuthenticationInformationCavv, + Xid: consumerAuthenticationInformationXid + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/PaymentWithPaymentInstrumentToken.cs b/src/Samples/Payments/Payments/PaymentWithPaymentInstrumentToken.cs new file mode 100644 index 0000000..be56f54 --- /dev/null +++ b/src/Samples/Payments/Payments/PaymentWithPaymentInstrumentToken.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PaymentWithPaymentInstrumentToken + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCustomerCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + CustomerId: paymentInformationCustomerCustomerId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Customer: paymentInformationCustomer + ); + + string orderInformationAmountDetailsTotalAmount = "22"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs b/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs new file mode 100644 index 0000000..e2b7ad9 --- /dev/null +++ b/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ServiceFeesWithCreditCardTransaction + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "2325.00"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsServiceFeeAmount = "30.0"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + ServiceFeeAmount: orderInformationAmountDetailsServiceFeeAmount + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string merchantInformationServiceFeeDescriptorName = "Vacations Service Fee"; + string merchantInformationServiceFeeDescriptorContact = "8009999999"; + string merchantInformationServiceFeeDescriptorState = "CA"; + Ptsv2paymentsMerchantInformationServiceFeeDescriptor merchantInformationServiceFeeDescriptor = new Ptsv2paymentsMerchantInformationServiceFeeDescriptor( + Name: merchantInformationServiceFeeDescriptorName, + Contact: merchantInformationServiceFeeDescriptorContact, + State: merchantInformationServiceFeeDescriptorState + ); + + Ptsv2paymentsMerchantInformation merchantInformation = new Ptsv2paymentsMerchantInformation( + ServiceFeeDescriptor: merchantInformationServiceFeeDescriptor + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs b/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs new file mode 100644 index 0000000..b8352f9 --- /dev/null +++ b/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SimpleAuthorizationInternet + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs b/src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs new file mode 100644 index 0000000..f2ede75 --- /dev/null +++ b/src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SimpleAuthorizationRetail + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_8"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "5555555555554444"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "002"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "108.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string pointOfSaleInformationTerminalId = "001"; + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + TerminalId: pointOfSaleInformationTerminalId, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs b/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs new file mode 100644 index 0000000..b2912b0 --- /dev/null +++ b/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ZeroDollarAuthorization + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "1234567890"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "5555555555554444"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "0"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Refund/RefundCapture.cs b/src/Samples/Payments/Refund/RefundCapture.cs new file mode 100644 index 0000000..1af5f43 --- /dev/null +++ b/src/Samples/Payments/Refund/RefundCapture.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class RefundCapture + { + public static PtsV2PaymentsRefundPost201Response Run() + { + var id = CapturePayment.Run().Id; + + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new RefundCaptureRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new RefundApi(clientConfig); + PtsV2PaymentsRefundPost201Response result = apiInstance.RefundCapture(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Refund/RefundPayment.cs b/src/Samples/Payments/Refund/RefundPayment.cs new file mode 100644 index 0000000..2a11555 --- /dev/null +++ b/src/Samples/Payments/Refund/RefundPayment.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class RefundPayment + { + public static PtsV2PaymentsRefundPost201Response Run() + { + SimpleAuthorizationInternet.CaptureTrueForProcessPayment = true; + var id = SimpleAuthorizationInternet.Run().Id; + + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new RefundPaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new RefundApi(clientConfig); + PtsV2PaymentsRefundPost201Response result = apiInstance.RefundPayment(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs b/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs new file mode 100644 index 0000000..37a1cb8 --- /dev/null +++ b/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ProcessAuthorizationReversal + { + public static PtsV2PaymentsReversalsPost201Response Run() + { + var id = SimpleAuthorizationInternet.Run().Id; + + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string reversalInformationAmountDetailsTotalAmount = "102.21"; + Ptsv2paymentsidreversalsReversalInformationAmountDetails reversalInformationAmountDetails = new Ptsv2paymentsidreversalsReversalInformationAmountDetails( + TotalAmount: reversalInformationAmountDetailsTotalAmount + ); + + string reversalInformationReason = "testing"; + Ptsv2paymentsidreversalsReversalInformation reversalInformation = new Ptsv2paymentsidreversalsReversalInformation( + AmountDetails: reversalInformationAmountDetails, + Reason: reversalInformationReason + ); + + var requestObj = new AuthReversalRequest( + ClientReferenceInformation: clientReferenceInformation, + ReversalInformation: reversalInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReversalApi(clientConfig); + PtsV2PaymentsReversalsPost201Response result = apiInstance.AuthReversal(id, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs b/src/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs new file mode 100644 index 0000000..7de31a0 --- /dev/null +++ b/src/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ServiceFeesAuthorizationReversal + { + public static PtsV2PaymentsReversalsPost201Response Run() + { + var id = ServiceFeesWithCreditCardTransaction.Run().Id; + + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string reversalInformationAmountDetailsTotalAmount = "2325.00"; + Ptsv2paymentsidreversalsReversalInformationAmountDetails reversalInformationAmountDetails = new Ptsv2paymentsidreversalsReversalInformationAmountDetails( + TotalAmount: reversalInformationAmountDetailsTotalAmount + ); + + string reversalInformationReason = "34"; + Ptsv2paymentsidreversalsReversalInformation reversalInformation = new Ptsv2paymentsidreversalsReversalInformation( + AmountDetails: reversalInformationAmountDetails, + Reason: reversalInformationReason + ); + + var requestObj = new AuthReversalRequest( + ClientReferenceInformation: clientReferenceInformation, + ReversalInformation: reversalInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReversalApi(clientConfig); + PtsV2PaymentsReversalsPost201Response result = apiInstance.AuthReversal(id, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/ServiceFees/CapturePaymentWithServiceFee.cs b/src/Samples/Payments/ServiceFees/CapturePaymentWithServiceFee.cs deleted file mode 100644 index b73c452..0000000 --- a/src/Samples/Payments/ServiceFees/CapturePaymentWithServiceFee.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; -using Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class CapturePaymentWithServiceFee - { - public static PtsV2PaymentsRefundPost201Response Run() - { - ProcessPayment.CaptureTrueForProcessPayment = true; - - var processPaymentId = ProcessPayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation("test_refund_payment"); - - var amountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "2325.00", - Currency = "USD", - ServiceFeeAmount = "30.00" - }; - - var billToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - var orderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(amountDetailsObj, billToObj); - - var bankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - CheckNumber = "123456" - }; - - var bankObj = new Ptsv2paymentsPaymentInformationBank - { - Account = bankAccountObj - }; - bankObj.RoutingNumber = "071923284"; - - var paymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - paymentInformationObj.Bank = bankObj; - - var requestBody = new RefundPaymentRequest - { - PaymentInformation = paymentInformationObj, - ClientReferenceInformation = clientReferenceInformationObj, - OrderInformation = orderInformationObj - }; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new RefundApi(clientConfig); - - var result = apiInstance.RefundPayment(requestBody, processPaymentId); - - Console.WriteLine(result); - - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } - } \ No newline at end of file diff --git a/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs deleted file mode 100644 index 687978a..0000000 --- a/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Model; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class CreditWithServiceFee - { - public static PtsV2CreditsPost201Response Run() - { - var requestObj = new CreateCreditRequest(); - - var v2PaymentsClientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation - { - Code = "12345678" - }; - - requestObj.ClientReferenceInformation = v2PaymentsClientReferenceInformationObj; - - var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - var v2paymentsOrderInformationBillToCompany = "Visa"; - var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - PhoneNumber = "4158880000", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "san francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - v2PaymentsOrderInformationBillToObj.Company = v2paymentsOrderInformationBillToCompany; - v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; - - var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "2325.00", - Currency = "usd", - ServiceFeeAmount = "30.00" - }; - - v2PaymentsOrderInformationObj.AmountDetails = v2PaymentsOrderInformationAmountDetailsObj; - - requestObj.OrderInformation = v2PaymentsOrderInformationObj; - - var v2PaymentsPaymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - - var v2PaymentsPaymentInformationCardObj = new Ptsv2paymentsidrefundsPaymentInformationCard - { - ExpirationYear = "2031", - Number = "4111111111111111", - ExpirationMonth = "03" - }; - - v2PaymentsPaymentInformationObj.Card = v2PaymentsPaymentInformationCardObj; - - requestObj.PaymentInformation = v2PaymentsPaymentInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new CreditApi(clientConfig); - - var result = apiInstance.CreateCredit(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs deleted file mode 100644 index 8f67e1f..0000000 --- a/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class ECheckStandaloneCreditWithServiceFee - { - public static PtsV2CreditsPost201Response Run() - { - var requestObj = new CreateCreditRequest(); - - var v2PaymentsClientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation - { - Code = "TC46125-1" - }; - requestObj.ClientReferenceInformation = v2PaymentsClientReferenceInformationObj; - var processingInformation = new Ptsv2creditsProcessingInformation - { - CommerceIndicator = "internet" - }; - requestObj.ProcessingInformation = processingInformation; - - var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - var v2paymentsOrderInformationBillToCompany = "Visa"; - var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - PhoneNumber = "4158880000", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "san francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - v2PaymentsOrderInformationBillToObj.Company = v2paymentsOrderInformationBillToCompany; - v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; - - var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "2325.00", - Currency = "usd", - ServiceFeeAmount = "30.00" - }; - - v2PaymentsOrderInformationObj.AmountDetails = v2PaymentsOrderInformationAmountDetailsObj; - - requestObj.OrderInformation = v2PaymentsOrderInformationObj; - - var v2PaymentsPaymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - var v2paymentsPaymentInformationBankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - CheckNumber = "123456" - }; - var v2paymentsPaymentInformationBankObj = new Ptsv2paymentsPaymentInformationBank - { - RoutingNumber = "071923284" - }; - v2paymentsPaymentInformationBankObj.Account = v2paymentsPaymentInformationBankAccountObj; - v2PaymentsPaymentInformationObj.Bank = v2paymentsPaymentInformationBankObj; - requestObj.PaymentInformation = v2PaymentsPaymentInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new CreditApi(clientConfig); - - var result = apiInstance.CreateCredit(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ServiceFees/ProcessAuthorizationReversalWithServiceFee.cs b/src/Samples/Payments/ServiceFees/ProcessAuthorizationReversalWithServiceFee.cs deleted file mode 100644 index a18d255..0000000 --- a/src/Samples/Payments/ServiceFees/ProcessAuthorizationReversalWithServiceFee.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Model; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class ProcessAuthorizationReversalWithServiceFee - { - public static PtsV2PaymentsReversalsPost201Response Run() - { - var processPaymentId = ProcessPaymentWithServiceFee.Run().Id; - var requestBody = new AuthReversalRequest(); - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("TC50171_3"); - requestBody.ClientReferenceInformation = clientReferenceInformationObj; - var v2paymentsidreversalsReversalInformationObj = new Ptsv2paymentsidreversalsReversalInformation - { - Reason = "34" - }; - var v2paymentsidreversalsReversalInformationAmountDetailsobj = new Ptsv2paymentsidreversalsReversalInformationAmountDetails - { - TotalAmount = "2325.00" - }; - v2paymentsidreversalsReversalInformationObj.AmountDetails = v2paymentsidreversalsReversalInformationAmountDetailsobj; - requestBody.ReversalInformation = v2paymentsidreversalsReversalInformationObj; - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReversalApi(clientConfig); - - var result = apiInstance.AuthReversal(processPaymentId, requestBody); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ServiceFees/ProcessEcheckCreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/ProcessEcheckCreditWithServiceFee.cs deleted file mode 100644 index c1e15f9..0000000 --- a/src/Samples/Payments/ServiceFees/ProcessEcheckCreditWithServiceFee.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class ProcessEcheckCreditWithServiceFee - { - public static void Run() - { - var echeckPaymentWithServiceFeecapturePaymentId = ProcessEcheckPaymentWithServiceFee.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation("test_refund_capture"); - - var amountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails("102.21", "USD"); - - var billToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - var orderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(amountDetailsObj, billToObj); - - var bankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - CheckNumber = "123456" - }; - - var bankObj = new Ptsv2paymentsPaymentInformationBank - { - Account = bankAccountObj - }; - bankObj.RoutingNumber = "071923284"; - - var paymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - paymentInformationObj.Bank = bankObj; - - var requestBody = new RefundCaptureRequest(clientReferenceInformationObj, null, paymentInformationObj, orderInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new RefundApi(clientConfig); - - var result = apiInstance.RefundCapture(requestBody, echeckPaymentWithServiceFeecapturePaymentId); - - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} \ No newline at end of file diff --git a/src/Samples/Payments/ServiceFees/ProcessEcheckPaymentWithServiceFee.cs b/src/Samples/Payments/ServiceFees/ProcessEcheckPaymentWithServiceFee.cs deleted file mode 100644 index 8f8e7f4..0000000 --- a/src/Samples/Payments/ServiceFees/ProcessEcheckPaymentWithServiceFee.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class ProcessEcheckPaymentWithServiceFee - { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - - public static PtsV2PaymentsPost201Response Run() - { - var processingInformationObj = new Ptsv2paymentsProcessingInformation() { CommerceIndicator = "internet" }; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation { Code = "test_payment" }; - - var orderInformationObj = new Ptsv2paymentsOrderInformation(); - - var billToObj = new Ptsv2paymentsOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - orderInformationObj.BillTo = billToObj; - - var amountDetailsObj = new Ptsv2paymentsOrderInformationAmountDetails - { - TotalAmount = "2325.00", - ServiceFeeAmount = "30.00", - Currency = "USD", - }; - - orderInformationObj.AmountDetails = amountDetailsObj; - - var bankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - }; - - var bankObj = new Ptsv2paymentsPaymentInformationBank - { - Account = bankAccountObj, - RoutingNumber = "071923284", - }; - - var paymentInformationObj = new Ptsv2paymentsPaymentInformation(); - paymentInformationObj.Bank = bankObj; - - var requestObj = new CreatePaymentRequest - { - ProcessingInformation = processingInformationObj, - PaymentInformation = paymentInformationObj, - ClientReferenceInformation = clientReferenceInformationObj, - OrderInformation = orderInformationObj - }; - - if (CaptureTrueForProcessPayment) - { - requestObj.ProcessingInformation.Capture = true; - } - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentsApi(clientConfig); - - var result = apiInstance.CreatePayment(requestObj); - - Console.WriteLine(result); - - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ServiceFees/ProcessPaymentWithServiceFee.cs b/src/Samples/Payments/ServiceFees/ProcessPaymentWithServiceFee.cs deleted file mode 100644 index 47c1d6a..0000000 --- a/src/Samples/Payments/ServiceFees/ProcessPaymentWithServiceFee.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class ProcessPaymentWithServiceFee - { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - - public static PtsV2PaymentsPost201Response Run() - { - var processingInformationObj = new Ptsv2paymentsProcessingInformation() { CommerceIndicator = "internet" }; - - var clientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation { Code = "test_payment" }; - - var billToObj = new Ptsv2paymentsOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "San Francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - - var amountDetailsObj = new Ptsv2paymentsOrderInformationAmountDetails - { - TotalAmount = "2325.00", - Currency = "USD", - ServiceFeeAmount = "30.00" - }; - - var orderInformationObj = new Ptsv2paymentsOrderInformation(); - orderInformationObj.BillTo = billToObj; - orderInformationObj.AmountDetails = amountDetailsObj; - - var cardObj = new Ptsv2paymentsPaymentInformationCard - { - ExpirationYear = "2031", - Number = "4111111111111111", - ExpirationMonth = "12" - }; - - var paymentInformationObj = new Ptsv2paymentsPaymentInformation(); - paymentInformationObj.Card = cardObj; - - var serviceFeeDescriptorObj = new Ptsv2paymentsMerchantInformationServiceFeeDescriptor - { - Name = "CyberSource Service Fee", - Contact = "800-999-9999", - State = "CA", - - }; - - var merchantInformationObj = new Ptsv2paymentsMerchantInformation(); - merchantInformationObj.ServiceFeeDescriptor = serviceFeeDescriptorObj; - - var requestObj = new CreatePaymentRequest - { - ProcessingInformation = processingInformationObj, - PaymentInformation = paymentInformationObj, - ClientReferenceInformation = clientReferenceInformationObj, - OrderInformation = orderInformationObj, - MerchantInformation = merchantInformationObj - }; - - if (CaptureTrueForProcessPayment) - { - requestObj.ProcessingInformation.Capture = true; - } - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentsApi(clientConfig); - - var result = apiInstance.CreatePayment(requestObj); - - Console.WriteLine(result); - - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ServiceFees/VoidCreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/VoidCreditWithServiceFee.cs deleted file mode 100644 index 11dc9b6..0000000 --- a/src/Samples/Payments/ServiceFees/VoidCreditWithServiceFee.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class VoidCreditWithServiceFee - { - public static void Run() - { - var creditWithServiceFeeId = CreditWithServiceFee.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_credit_void"); - var requestBody = new VoidCreditRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - - var result = apiInstance.VoidCredit(requestBody, creditWithServiceFeeId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/ServiceFees/VoidStandaloneEcheckCreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/VoidStandaloneEcheckCreditWithServiceFee.cs deleted file mode 100644 index 978932d..0000000 --- a/src/Samples/Payments/ServiceFees/VoidStandaloneEcheckCreditWithServiceFee.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class VoidStandaloneEcheckCreditWithServiceFee - { - public static void Run() - { - var eCheckStandaloneCreditWithServiceFeeId = ECheckStandaloneCreditWithServiceFee.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_credit_void"); - var requestBody = new VoidCreditRequest(clientReferenceInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new VoidApi(clientConfig); - - var result = apiInstance.VoidCredit(requestBody, eCheckStandaloneCreditWithServiceFeeId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payments/Void/VoidCapture.cs b/src/Samples/Payments/Void/VoidCapture.cs new file mode 100644 index 0000000..55b2f11 --- /dev/null +++ b/src/Samples/Payments/Void/VoidCapture.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class VoidCapture + { + public static PtsV2PaymentsVoidsPost201Response Run() + { + var id = CapturePayment.Run().Id; + string clientReferenceInformationCode = "test_void"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + var requestObj = new VoidCaptureRequest( + ClientReferenceInformation: clientReferenceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VoidApi(clientConfig); + PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidCapture(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Void/VoidCredit.cs b/src/Samples/Payments/Void/VoidCredit.cs new file mode 100644 index 0000000..3e36066 --- /dev/null +++ b/src/Samples/Payments/Void/VoidCredit.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class VoidCredit + { + public static PtsV2PaymentsVoidsPost201Response Run() + { + var id = Credit.Run().Id; + + string clientReferenceInformationCode = "test_void"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + var requestObj = new VoidCreditRequest( + ClientReferenceInformation: clientReferenceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VoidApi(clientConfig); + PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidCredit(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Void/VoidPayment.cs b/src/Samples/Payments/Void/VoidPayment.cs new file mode 100644 index 0000000..490b6ba --- /dev/null +++ b/src/Samples/Payments/Void/VoidPayment.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class VoidPayment + { + public static PtsV2PaymentsVoidsPost201Response Run() + { + SimpleAuthorizationInternet.CaptureTrueForProcessPayment = true; + var id = SimpleAuthorizationInternet.Run().Id; + + string clientReferenceInformationCode = "test_void"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + var requestObj = new VoidPaymentRequest( + ClientReferenceInformation: clientReferenceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VoidApi(clientConfig); + PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidPayment(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Void/VoidRefund.cs b/src/Samples/Payments/Void/VoidRefund.cs new file mode 100644 index 0000000..aae3571 --- /dev/null +++ b/src/Samples/Payments/Void/VoidRefund.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class VoidRefund + { + public static PtsV2PaymentsVoidsPost201Response Run() + { + var id = RefundPayment.Run().Id; + + string clientReferenceInformationCode = "test_void"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + var requestObj = new VoidRefundRequest( + ClientReferenceInformation: clientReferenceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VoidApi(clientConfig); + PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidRefund(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payouts/CoreServices/ProcessPayout.cs b/src/Samples/Payouts/CoreServices/ProcessPayout.cs deleted file mode 100644 index 47435a5..0000000 --- a/src/Samples/Payouts/CoreServices/ProcessPayout.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payouts.CoreServices -{ - public class ProcessPayout - { - public static void Run() - { - var requestObj = new OctCreatePaymentRequest(); - - var clientReferenceInformationObj = new PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation - { - Code = "33557799" - }; - - requestObj.ClientReferenceInformation = clientReferenceInformationObj; - - var senderInformationObj = new Ptsv2payoutsSenderInformation - { - ReferenceNumber = "1234567890", - Address1 = "900 Metro Center Blvd.900", - CountryCode = "US", - Locality = "San Francisco", - Name = "Thomas Jefferson", - AdministrativeArea = "CA" - }; - - var accountObj = new Ptsv2payoutsSenderInformationAccount - { - Number = "1234567890123456789012345678901234", - FundsSource = "01" - }; - - senderInformationObj.Account = accountObj; - - requestObj.SenderInformation = senderInformationObj; - - var processingInformationObj = new Ptsv2payoutsProcessingInformation - { - CommerceIndicator = "internet", - BusinessApplicationId = "FD", - NetworkRoutingOrder = "ECG" - }; - - requestObj.ProcessingInformation = processingInformationObj; - - var orderInformationObj = new Ptsv2payoutsOrderInformation(); - - var amountDetailsObj = new Ptsv2payoutsOrderInformationAmountDetails - { - TotalAmount = "100.00", - Currency = "USD" - }; - - orderInformationObj.AmountDetails = amountDetailsObj; - - requestObj.OrderInformation = orderInformationObj; - - var merchantInformationObj = new Ptsv2payoutsMerchantInformation - { - CategoryCode = 123 - }; - - var merchantDescriptorObj = new Ptsv2payoutsMerchantInformationMerchantDescriptor - { - Country = "US", - PostalCode = "94440", - Locality = "FC", - Name = "Thomas", - AdministrativeArea = "CA" - }; - - merchantInformationObj.MerchantDescriptor = merchantDescriptorObj; - - requestObj.MerchantInformation = merchantInformationObj; - - var paymentInformationObj = new Ptsv2payoutsPaymentInformation(); - - var cardObj = new Ptsv2payoutsPaymentInformationCard - { - ExpirationYear = "2025", - Number = "4111111111111111", - ExpirationMonth = "12", - Type = "001", - SourceAccountType = "CH" - }; - - paymentInformationObj.Card = cardObj; - - requestObj.PaymentInformation = paymentInformationObj; - - var recipientInformationObj = new Ptsv2payoutsRecipientInformation - { - FirstName = "John", - LastName = "Doe", - Address1 = "Paseo Padre Boulevard", - Locality = "San Francisco", - AdministrativeArea = "CA", - PostalCode = "94400", - PhoneNumber = "6504320556", - DateOfBirth = "19801009", - Country = "US" - }; - - requestObj.RecipientInformation = recipientInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PayoutsApi(clientConfig); - - var result = apiInstance.OctCreatePaymentWithHttpInfo(requestObj); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Payouts/PayoutCardNotToken.cs b/src/Samples/Payouts/PayoutCardNotToken.cs new file mode 100644 index 0000000..e881d68 --- /dev/null +++ b/src/Samples/Payouts/PayoutCardNotToken.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payouts +{ + public class PayoutCardNotToken + { + public static PtsV2PayoutsPost201Response Run() + { + string clientReferenceInformationCode = "33557799"; + PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation clientReferenceInformation = new PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2payoutsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2payoutsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2payoutsOrderInformation orderInformation = new Ptsv2payoutsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string merchantInformationMerchantDescriptorName = "Sending Company Name"; + string merchantInformationMerchantDescriptorLocality = "FC"; + string merchantInformationMerchantDescriptorCountry = "US"; + string merchantInformationMerchantDescriptorAdministrativeArea = "CA"; + string merchantInformationMerchantDescriptorPostalCode = "94440"; + Ptsv2payoutsMerchantInformationMerchantDescriptor merchantInformationMerchantDescriptor = new Ptsv2payoutsMerchantInformationMerchantDescriptor( + Name: merchantInformationMerchantDescriptorName, + Locality: merchantInformationMerchantDescriptorLocality, + Country: merchantInformationMerchantDescriptorCountry, + AdministrativeArea: merchantInformationMerchantDescriptorAdministrativeArea, + PostalCode: merchantInformationMerchantDescriptorPostalCode + ); + + Ptsv2payoutsMerchantInformation merchantInformation = new Ptsv2payoutsMerchantInformation( + MerchantDescriptor: merchantInformationMerchantDescriptor + ); + + string recipientInformationFirstName = "John"; + string recipientInformationLastName = "Doe"; + string recipientInformationAddress1 = "Paseo Padre Boulevard"; + string recipientInformationLocality = "Foster City"; + string recipientInformationAdministrativeArea = "CA"; + string recipientInformationCountry = "US"; + string recipientInformationPostalCode = "94400"; + string recipientInformationPhoneNumber = "6504320556"; + Ptsv2payoutsRecipientInformation recipientInformation = new Ptsv2payoutsRecipientInformation( + FirstName: recipientInformationFirstName, + LastName: recipientInformationLastName, + Address1: recipientInformationAddress1, + Locality: recipientInformationLocality, + AdministrativeArea: recipientInformationAdministrativeArea, + Country: recipientInformationCountry, + PostalCode: recipientInformationPostalCode, + PhoneNumber: recipientInformationPhoneNumber + ); + + string senderInformationReferenceNumber = "1234567890"; + string senderInformationAccountFundsSource = "05"; + Ptsv2payoutsSenderInformationAccount senderInformationAccount = new Ptsv2payoutsSenderInformationAccount( + FundsSource: senderInformationAccountFundsSource + ); + + string senderInformationName = "Company Name"; + string senderInformationAddress1 = "900 Metro Center Blvd.900"; + string senderInformationLocality = "Foster City"; + string senderInformationAdministrativeArea = "CA"; + string senderInformationCountryCode = "US"; + Ptsv2payoutsSenderInformation senderInformation = new Ptsv2payoutsSenderInformation( + ReferenceNumber: senderInformationReferenceNumber, + Account: senderInformationAccount, + Name: senderInformationName, + Address1: senderInformationAddress1, + Locality: senderInformationLocality, + AdministrativeArea: senderInformationAdministrativeArea, + CountryCode: senderInformationCountryCode + ); + + string processingInformationBusinessApplicationId = "FD"; + string processingInformationNetworkRoutingOrder = "V8"; + string processingInformationCommerceIndicator = "internet"; + Ptsv2payoutsProcessingInformation processingInformation = new Ptsv2payoutsProcessingInformation( + BusinessApplicationId: processingInformationBusinessApplicationId, + NetworkRoutingOrder: processingInformationNetworkRoutingOrder, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardType = "001"; + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + Ptsv2payoutsPaymentInformationCard paymentInformationCard = new Ptsv2payoutsPaymentInformationCard( + Type: paymentInformationCardType, + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2payoutsPaymentInformation paymentInformation = new Ptsv2payoutsPaymentInformation( + Card: paymentInformationCard + ); + + var requestObj = new OctCreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation, + RecipientInformation: recipientInformation, + SenderInformation: senderInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayoutsApi(clientConfig); + PtsV2PayoutsPost201Response result = apiInstance.OctCreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payouts/PayoutToken.cs b/src/Samples/Payouts/PayoutToken.cs new file mode 100644 index 0000000..76abb97 --- /dev/null +++ b/src/Samples/Payouts/PayoutToken.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payouts +{ + public class PayoutToken + { + public static PtsV2PayoutsPost201Response Run() + { + string clientReferenceInformationCode = "111111113"; + PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation clientReferenceInformation = new PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "111.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2payoutsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2payoutsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2payoutsOrderInformation orderInformation = new Ptsv2payoutsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string merchantInformationMerchantDescriptorName = "Sending Company Name"; + string merchantInformationMerchantDescriptorLocality = "FC"; + string merchantInformationMerchantDescriptorCountry = "US"; + string merchantInformationMerchantDescriptorAdministrativeArea = "CA"; + string merchantInformationMerchantDescriptorPostalCode = "94440"; + Ptsv2payoutsMerchantInformationMerchantDescriptor merchantInformationMerchantDescriptor = new Ptsv2payoutsMerchantInformationMerchantDescriptor( + Name: merchantInformationMerchantDescriptorName, + Locality: merchantInformationMerchantDescriptorLocality, + Country: merchantInformationMerchantDescriptorCountry, + AdministrativeArea: merchantInformationMerchantDescriptorAdministrativeArea, + PostalCode: merchantInformationMerchantDescriptorPostalCode + ); + + Ptsv2payoutsMerchantInformation merchantInformation = new Ptsv2payoutsMerchantInformation( + MerchantDescriptor: merchantInformationMerchantDescriptor + ); + + string recipientInformationFirstName = "John"; + string recipientInformationLastName = "Doe"; + string recipientInformationAddress1 = "Paseo Padre Boulevard"; + string recipientInformationLocality = "Foster City"; + string recipientInformationAdministrativeArea = "CA"; + string recipientInformationCountry = "US"; + string recipientInformationPostalCode = "94400"; + string recipientInformationPhoneNumber = "6504320556"; + Ptsv2payoutsRecipientInformation recipientInformation = new Ptsv2payoutsRecipientInformation( + FirstName: recipientInformationFirstName, + LastName: recipientInformationLastName, + Address1: recipientInformationAddress1, + Locality: recipientInformationLocality, + AdministrativeArea: recipientInformationAdministrativeArea, + Country: recipientInformationCountry, + PostalCode: recipientInformationPostalCode, + PhoneNumber: recipientInformationPhoneNumber + ); + + string senderInformationReferenceNumber = "1234567890"; + string senderInformationAccountFundsSource = "05"; + string senderInformationAccountNumber = "1234567890123456789012345678901234"; + Ptsv2payoutsSenderInformationAccount senderInformationAccount = new Ptsv2payoutsSenderInformationAccount( + FundsSource: senderInformationAccountFundsSource, + Number: senderInformationAccountNumber + ); + + string senderInformationName = "Company Name"; + string senderInformationAddress1 = "900 Metro Center Blvd.900"; + string senderInformationLocality = "Foster City"; + string senderInformationAdministrativeArea = "CA"; + string senderInformationCountryCode = "US"; + Ptsv2payoutsSenderInformation senderInformation = new Ptsv2payoutsSenderInformation( + ReferenceNumber: senderInformationReferenceNumber, + Account: senderInformationAccount, + Name: senderInformationName, + Address1: senderInformationAddress1, + Locality: senderInformationLocality, + AdministrativeArea: senderInformationAdministrativeArea, + CountryCode: senderInformationCountryCode + ); + + string processingInformationBusinessApplicationId = "FD"; + string processingInformationNetworkRoutingOrder = "V8"; + string processingInformationCommerceIndicator = "internet"; + Ptsv2payoutsProcessingInformation processingInformation = new Ptsv2payoutsProcessingInformation( + BusinessApplicationId: processingInformationBusinessApplicationId, + NetworkRoutingOrder: processingInformationNetworkRoutingOrder, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCustomerCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + CustomerId: paymentInformationCustomerCustomerId + ); + + Ptsv2payoutsPaymentInformation paymentInformation = new Ptsv2payoutsPaymentInformation( + Customer: paymentInformationCustomer + ); + + var requestObj = new OctCreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation, + RecipientInformation: recipientInformation, + SenderInformation: senderInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayoutsApi(clientConfig); + PtsV2PayoutsPost201Response result = apiInstance.OctCreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs b/src/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs new file mode 100644 index 0000000..5202b27 --- /dev/null +++ b/src/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetConversionDetailTransactions + { + public static ReportingV3ConversionDetailsGet200Response Run() + { + var startTime = DateTime.ParseExact("2019-03-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2019-03-21T23:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + string organizationId = "testrest"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ConversionDetailsApi(clientConfig); + ReportingV3ConversionDetailsGet200Response result = apiInstance.GetConversionDetail(startTime, endTime, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/CoreServices/CreateAdhocReport.cs b/src/Samples/Reporting/CoreServices/CreateAdhocReport.cs deleted file mode 100644 index d6e5570..0000000 --- a/src/Samples/Reporting/CoreServices/CreateAdhocReport.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class CreateAdhocReport - { - public static void Run() - { - try - { - var requestObj = new CreateAdhocReportRequest - { - ReportDefinitionName = "TransactionRequestClass", - ReportFields = new List() - { - "Request.RequestID", - "Request.TransactionDate", - "Request.MerchantID" - }, - ReportMimeType = "application/xml", - ReportName = Utilities.RandomString(17), - Timezone = "GMT", - ReportStartTime = DateTime.ParseExact("2018-09-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture), - ReportEndTime = DateTime.ParseExact("2018-09-02T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture) - }; - - var reportPreferencesObj = new Reportingv3reportsReportPreferences() - { - SignedAmounts = true, - FieldNameConvention = "SOAPI" - }; - - requestObj.ReportPreferences = reportPreferencesObj; - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportsApi(clientConfig); - - apiInstance.CreateReport(requestObj); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/CreateReportSubscriptionForReportNameByOrganization.cs b/src/Samples/Reporting/CoreServices/CreateReportSubscriptionForReportNameByOrganization.cs deleted file mode 100644 index 6429546..0000000 --- a/src/Samples/Reporting/CoreServices/CreateReportSubscriptionForReportNameByOrganization.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class CreateReportSubscriptionForReportNameByOrganization - { - public static void Run() - { - const string reportName = "testrest_subcription_v1"; - - var request = new CreateReportSubscriptionRequest( - ReportDefinitionName: "TransactionRequestClass", - ReportMimeType: "application/xml", - ReportFields: new List() {"Request.RequestID", "Request.TransactionDate", "Request.MerchantID"}, - ReportName: reportName, - ReportFrequency: "WEEKLY", - Timezone: "GMT", - StartTime: "0115", - StartDay: 1); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportSubscriptionsApi(clientConfig); - - apiInstance.CreateSubscription(request); - - DeleteSubscriptionOfReportNameByOrganization.ReportNameToDelete = reportName; - DeleteSubscriptionOfReportNameByOrganization.Run(); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetConversionDetailTransactions.cs b/src/Samples/Reporting/CoreServices/GetConversionDetailTransactions.cs deleted file mode 100644 index 60894a7..0000000 --- a/src/Samples/Reporting/CoreServices/GetConversionDetailTransactions.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using CyberSource.Api; -using System.Globalization; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetConversionDetailTransactions - { - public static void Run() - { - DateTime startTime = DateTime.ParseExact("2019-03-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - DateTime endTime = DateTime.ParseExact("2019-03-21T23:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ConversionDetailsApi(clientConfig); - string organizationId = null; // "testrest"; - - var result = apiInstance.GetConversionDetail(startTime, endTime, organizationId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetNetfundingInformationForAccountOrMerchant.cs b/src/Samples/Reporting/CoreServices/GetNetfundingInformationForAccountOrMerchant.cs deleted file mode 100644 index 40368c4..0000000 --- a/src/Samples/Reporting/CoreServices/GetNetfundingInformationForAccountOrMerchant.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Globalization; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetNetfundingInformationForAccountOrMerchant - { - public static void Run() - { - try - { - var startTime = DateTime.ParseExact("2019-03-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2019-03-21T23:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var groupName = "testName"; - var organizationId = "testrest"; - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new NetFundingsApi(clientConfig); - - var result = apiInstance.GetNetFundingDetails(startTime, endTime, organizationId, groupName); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetNotificationOfChanges.cs b/src/Samples/Reporting/CoreServices/GetNotificationOfChanges.cs deleted file mode 100644 index 1b4b1bd..0000000 --- a/src/Samples/Reporting/CoreServices/GetNotificationOfChanges.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetNotificationOfChanges - { - public static void Run() - { - var startTime = DateTime.Parse("2019-03-01T12:00:00-05:00"); - var endTime = DateTime.Parse("2019-03-30T12:00:00-05:00"); - - //var startTime = DateTime.Parse("2018-09-01T12:00:00.000Z"); - //var endTime = DateTime.Parse("2018-09-30T12:00:00.000Z"); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new NotificationOfChangesApi(clientConfig); - - var result = apiInstance.GetNotificationOfChangeReport(startTime, endTime); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetPurchaseAndRefundDetails.cs b/src/Samples/Reporting/CoreServices/GetPurchaseAndRefundDetails.cs deleted file mode 100644 index b206615..0000000 --- a/src/Samples/Reporting/CoreServices/GetPurchaseAndRefundDetails.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetPurchaseAndRefundDetails - { - public static void Run() - { - const string organizationId = "testrest"; - var startTime = DateTime.Parse("2018-05-01T12:00:00-05:00"); - var endTime = DateTime.Parse("2018-05-30T12:00:00-05:00"); - const string paymentSubtype = "VI"; - const string viewBy = "requestDate"; - const string groupName = "groupName"; - const int offset = 20; - const int limit = 2000; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PurchaseAndRefundDetailsApi(clientConfig); - - var result = apiInstance.GetPurchaseAndRefundDetails(startTime, endTime, organizationId, paymentSubtype, - viewBy, groupName, offset, limit); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetReportBasedOnReportid.cs b/src/Samples/Reporting/CoreServices/GetReportBasedOnReportid.cs deleted file mode 100644 index bb2e508..0000000 --- a/src/Samples/Reporting/CoreServices/GetReportBasedOnReportid.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetReportBasedOnReportid - { - public static void Run() - { - const string reportId = "79642c43-2368-0cd5-e053-a2588e0a7b3c"; - const string organizationId = "testrest"; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportsApi(clientConfig); - - var result = apiInstance.GetReportByReportId(reportId, organizationId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetReportDefinition.cs b/src/Samples/Reporting/CoreServices/GetReportDefinition.cs deleted file mode 100644 index e32ab14..0000000 --- a/src/Samples/Reporting/CoreServices/GetReportDefinition.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetReportDefinition - { - public static void Run() - { - const string reportDefinitionName = "SubscriptionDetailClass"; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportDefinitionsApi(clientConfig); - - var result = apiInstance.GetResourceInfoByReportDefinition(reportDefinitionName); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs b/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs deleted file mode 100644 index 6d14aa8..0000000 --- a/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetReportingResourceInformation - { - public static void Run() - { - const string organizationId = "testrest"; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportDefinitionsApi(clientConfig); - - var result = apiInstance.GetResourceV2Info(organizationId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/RetrieveAvailableReports.cs b/src/Samples/Reporting/CoreServices/RetrieveAvailableReports.cs deleted file mode 100644 index 7cdf80c..0000000 --- a/src/Samples/Reporting/CoreServices/RetrieveAvailableReports.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Globalization; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class RetrieveAvailableReports - { - public static void Run() - { - try - { - var startTime = DateTime.ParseExact("2018-10-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2018-10-30T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var timeQueryType = "executedTime"; - var organizationId = "testrest"; - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportsApi(clientConfig); - - var result = apiInstance.SearchReports(startTime, endTime, timeQueryType, organizationId); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs b/src/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs new file mode 100644 index 0000000..a2d57e1 --- /dev/null +++ b/src/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetNetfundingInformationForAccountOrMerchant + { + public static ReportingV3NetFundingsGet200Response Run() + { + var startTime = DateTime.ParseExact("2019-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2019-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + string organizationId = "testrest"; + string groupName = null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new NetFundingsApi(clientConfig); + ReportingV3NetFundingsGet200Response result = apiInstance.GetNetFundingDetails(startTime, endTime, organizationId, groupName); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs b/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs new file mode 100644 index 0000000..302b850 --- /dev/null +++ b/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetNotificationOfChanges + { + public static ReportingV3NotificationofChangesGet200Response Run() + { + var startTime = DateTime.ParseExact("2020-03-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-03-10T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new NotificationOfChangesApi(clientConfig); + ReportingV3NotificationofChangesGet200Response result = apiInstance.GetNotificationOfChangeReport(startTime, endTime); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/CoreServices/GetPaymentBatchSummaryData.cs b/src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs similarity index 67% rename from src/Samples/Reporting/CoreServices/GetPaymentBatchSummaryData.cs rename to src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs index d55105c..14ec009 100644 --- a/src/Samples/Reporting/CoreServices/GetPaymentBatchSummaryData.cs +++ b/src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs @@ -1,35 +1,37 @@ -// Code Generated: getPaymentBatchSummary[Get payment batch summary data] - using System; using System.Collections.Generic; using System.Globalization; + using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetPaymentBatchSummaryData { - public static void Run() + public static ReportingV3PaymentBatchSummariesGet200Response Run() { var startTime = DateTime.ParseExact("2019-05-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); var endTime = DateTime.ParseExact("2019-08-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; - + string rollUp = null; + string breakdown = null; + int? startDayOfWeek = (int?)null; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentBatchSummariesApi(clientConfig); - var result = apiInstance.GetPaymentBatchSummary(startTime, endTime, organizationId); + ReportingV3PaymentBatchSummariesGet200Response result = apiInstance.GetPaymentBatchSummary(startTime, endTime, organizationId, rollUp, breakdown, startDayOfWeek); Console.WriteLine(result); - + return result; } catch (Exception e) { Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } -} \ No newline at end of file +} diff --git a/src/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs b/src/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs new file mode 100644 index 0000000..07816cd --- /dev/null +++ b/src/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetPurchaseAndRefundDetails + { + public static ReportingV3PurchaseRefundDetailsGet200Response Run() + { + var startTime = DateTime.ParseExact("2020-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-01-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + string organizationId = "testrest"; + string paymentSubtype = "VI"; + string viewBy = "requestDate"; + string groupName = "groupName"; + int? offset = 20; + int? limit = 2000; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PurchaseAndRefundDetailsApi(clientConfig); + ReportingV3PurchaseRefundDetailsGet200Response result = apiInstance.GetPurchaseAndRefundDetails(startTime, endTime, organizationId, paymentSubtype, viewBy, groupName, offset, limit); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs b/src/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs new file mode 100644 index 0000000..cd7d8d5 --- /dev/null +++ b/src/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetReportDefinition + { + public static ReportingV3ReportDefinitionsNameGet200Response Run() + { + string reportDefinitionName = "SubscriptionDetailClass"; + string subscriptionType = null; + string reportMimeType = null; + string organizationId = "testrest"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReportDefinitionsApi(clientConfig); + ReportingV3ReportDefinitionsNameGet200Response result = apiInstance.GetResourceInfoByReportDefinition(reportDefinitionName, subscriptionType, reportMimeType, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs b/src/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs new file mode 100644 index 0000000..3a40839 --- /dev/null +++ b/src/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetReportingResourceInformation + { + public static ReportingV3ReportDefinitionsGet200Response Run() + { + string subscriptionType = null; + string organizationId = "testrest"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReportDefinitionsApi(clientConfig); + ReportingV3ReportDefinitionsGet200Response result = apiInstance.GetResourceV2Info(subscriptionType, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/CoreServices/DownloadReport.cs b/src/Samples/Reporting/ReportDownloads/DownloadReport.cs similarity index 56% rename from src/Samples/Reporting/CoreServices/DownloadReport.cs rename to src/Samples/Reporting/ReportDownloads/DownloadReport.cs index d2ac934..74c7bac 100644 --- a/src/Samples/Reporting/CoreServices/DownloadReport.cs +++ b/src/Samples/Reporting/ReportDownloads/DownloadReport.cs @@ -1,67 +1,67 @@ -using System; +using System; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Xml; using System.Xml.Serialization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class DownloadReport { public static void Run() { - // File will be created with the Data received in the Response Body - - // Provide the File Name - const string fileName = "DownloadReport.csv"; - - // Provide the path where the file needs to be downloaded - // This can be either a relative path or an absolute path + const string fileName = "DownloadedReport.csv"; const string downloadFilePath = @".\Resource\" + fileName; - - const string organizationId = "testrest"; - const string reportName = "testrest_subcription_v2989"; - var reportDate = DateTime.ParseExact("2019-09-05", "yyyy-MM-dd", CultureInfo.InvariantCulture); - + string organizationId = "testrest"; + var reportDate = DateTime.ParseExact("2018-09-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); + string reportName = "testrest_subcription_v2989"; + string reportTime = "00:00:00Z"; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportDownloadsApi(clientConfig); - var content = apiInstance.DownloadReportWithHttpInfo(reportDate, reportName, organizationId); + var apiInstance = new ReportDownloadsApi(clientConfig); + var content = apiInstance.DownloadReportWithHttpInfo(reportDate, reportName, organizationId, reportTime); + // START : FILE DOWNLOAD FUNCTIONALITY File.WriteAllText(downloadFilePath, CreateXml(content.Data)); - Console.WriteLine("\nFile downloaded at the below location:"); + Console.WriteLine("\nFile Downloaded at the following location : "); Console.WriteLine($"{Path.GetFullPath(downloadFilePath)}\n"); + // END : FILE DOWNLOAD FUNCTIONALITY } catch (FileNotFoundException) { - Console.WriteLine("File Not Found: Kindly verify the path"); + Console.WriteLine("File Not Found : Kindly verify the path."); } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); } } + // START : STREAM SERIALIZER METHOD private static string CreateXml(object obj) { - var xmlDoc = new XmlDocument(); // Represents an XML document - var xmlSerializer = new XmlSerializer(obj.GetType()); // Initializes a new instance of the XmlDocument class. + var xmlDoc = new XmlDocument(); // Represents an XML Document + var xmlSerializer = new XmlSerializer(obj.GetType()); // Initializes a new instance of the XmlDocument class - // Creates a stream whose backing store is memory. + // Creates a stream whose backing store is memory using (var xmlStream = new MemoryStream()) { xmlSerializer.Serialize(xmlStream, obj); xmlStream.Position = 0; - // Loads the XML document from the specified string. + // Loads the XML document from the specified string xmlDoc.Load(xmlStream); return xmlDoc.InnerText; } } + // END : STREAM SERIALIZER METHOD } } diff --git a/src/Samples/Reporting/CoreServices/CreateStandardOrClassicSubscription.cs b/src/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs similarity index 94% rename from src/Samples/Reporting/CoreServices/CreateStandardOrClassicSubscription.cs rename to src/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs index 6e9b5cd..9b06f0e 100644 --- a/src/Samples/Reporting/CoreServices/CreateStandardOrClassicSubscription.cs +++ b/src/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Reporting { - public class CreateStandardOrClassicSubscription + public class CreateClassicStandardReportSubscription { public static void Run() { diff --git a/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs b/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs new file mode 100644 index 0000000..8acba84 --- /dev/null +++ b/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class CreateReportSubscription + { + public static void Run() + { + string reportDefinitionName = "TransactionRequestClass"; + + List reportFields = new List (); + reportFields.Add("Request.RequestID"); + reportFields.Add("Request.TransactionDate"); + reportFields.Add("Request.MerchantID"); + string reportMimeType = "application/xml"; + string reportFrequency = "WEEKLY"; + string reportName = "testrest_subcription_v1"; + string timezone = "GMT"; + string startTime = "0900"; + int startDay = 1; + var requestObj = new CreateReportSubscriptionRequest( + ReportDefinitionName: reportDefinitionName, + ReportFields: reportFields, + ReportMimeType: reportMimeType, + ReportFrequency: reportFrequency, + ReportName: reportName, + Timezone: timezone, + StartTime: startTime, + StartDay: startDay + ); + + string organizationId = null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReportSubscriptionsApi(clientConfig); + apiInstance.CreateSubscription(requestObj, organizationId); + + DeleteSubscriptionOfReportNameByOrganization.ReportNameToDelete = reportName; + DeleteSubscriptionOfReportNameByOrganization.Run(); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/src/Samples/Reporting/CoreServices/DeleteSubscriptionOfReportNameByOrganization.cs b/src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs similarity index 68% rename from src/Samples/Reporting/CoreServices/DeleteSubscriptionOfReportNameByOrganization.cs rename to src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs index ebf4b17..5ecec96 100644 --- a/src/Samples/Reporting/CoreServices/DeleteSubscriptionOfReportNameByOrganization.cs +++ b/src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs @@ -1,7 +1,11 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class DeleteSubscriptionOfReportNameByOrganization { @@ -14,19 +18,21 @@ public static void Run() ReportNameToDelete = "testrest_subcription_v1"; } + string reportName = ReportNameToDelete; + try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportSubscriptionsApi(clientConfig); - apiInstance.DeleteSubscription(ReportNameToDelete); + var apiInstance = new ReportSubscriptionsApi(clientConfig); + apiInstance.DeleteSubscription(reportName); ReportNameToDelete = null; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); } } } -} \ No newline at end of file +} diff --git a/src/Samples/Reporting/CoreServices/GetAllSubscriptions.cs b/src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs similarity index 51% rename from src/Samples/Reporting/CoreServices/GetAllSubscriptions.cs rename to src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs index 655160d..3b4a34b 100644 --- a/src/Samples/Reporting/CoreServices/GetAllSubscriptions.cs +++ b/src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs @@ -1,24 +1,30 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetAllSubscriptions { - public static void Run() + public static ReportingV3ReportSubscriptionsGet200Response Run() { try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportSubscriptionsApi(clientConfig); - var result = apiInstance.GetAllSubscriptions(); + var apiInstance = new ReportSubscriptionsApi(clientConfig); + ReportingV3ReportSubscriptionsGet200Response result = apiInstance.GetAllSubscriptions(); Console.WriteLine(result); + return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } diff --git a/src/Samples/Reporting/CoreServices/GetSubscriptionForReportName.cs b/src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs similarity index 52% rename from src/Samples/Reporting/CoreServices/GetSubscriptionForReportName.cs rename to src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs index 027ba59..ba61be2 100644 --- a/src/Samples/Reporting/CoreServices/GetSubscriptionForReportName.cs +++ b/src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs @@ -1,11 +1,15 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetSubscriptionForReportName { - public static void Run() + public static ReportingV3ReportSubscriptionsGet200ResponseSubscriptions Run() { var reportName = "testrest_subcription_v1"; @@ -13,14 +17,16 @@ public static void Run() { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportSubscriptionsApi(clientConfig); - var result = apiInstance.GetSubscription(reportName); + var apiInstance = new ReportSubscriptionsApi(clientConfig); + ReportingV3ReportSubscriptionsGet200ResponseSubscriptions result = apiInstance.GetSubscription(reportName); Console.WriteLine(result); + return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } diff --git a/src/Samples/Reporting/Reports/CreateAdhocReport.cs b/src/Samples/Reporting/Reports/CreateAdhocReport.cs new file mode 100644 index 0000000..8e87808 --- /dev/null +++ b/src/Samples/Reporting/Reports/CreateAdhocReport.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class CreateAdhocReport + { + public static void Run() + { + string reportDefinitionName = "TransactionRequestClass"; + + List reportFields = new List (); + reportFields.Add("Request.RequestID"); + reportFields.Add("Request.TransactionDate"); + reportFields.Add("Request.MerchantID"); + string reportMimeType = "application/xml"; + string reportName = "testrest_v2"; + string timezone = "GMT"; + var reportStartTime = DateTime.Parse("2020-03-01T12:30:00.000+05:30"); + var reportEndTime = DateTime.Parse("2020-03-02T12:30:00.000+05:30"); + bool reportPreferencesSignedAmounts = true; + string reportPreferencesFieldNameConvention = "SOAPI"; + Reportingv3reportsReportPreferences reportPreferences = new Reportingv3reportsReportPreferences( + SignedAmounts: reportPreferencesSignedAmounts, + FieldNameConvention: reportPreferencesFieldNameConvention + ); + + var requestObj = new CreateAdhocReportRequest( + ReportDefinitionName: reportDefinitionName, + ReportFields: reportFields, + ReportMimeType: reportMimeType, + ReportName: reportName, + Timezone: timezone, + ReportStartTime: reportStartTime, + ReportEndTime: reportEndTime, + ReportPreferences: reportPreferences + ); + + string organizationId = "testrest"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReportsApi(clientConfig); + apiInstance.CreateReport(requestObj, organizationId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/src/Samples/Reporting/Reports/GetReportBasedOnReportId.cs b/src/Samples/Reporting/Reports/GetReportBasedOnReportId.cs new file mode 100644 index 0000000..776e0f1 --- /dev/null +++ b/src/Samples/Reporting/Reports/GetReportBasedOnReportId.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetReportBasedOnReportId + { + public static ReportingV3ReportsIdGet200Response Run() + { + string reportId = "79642c43-2368-0cd5-e053-a2588e0a7b3c"; + string organizationId = "testrest"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReportsApi(clientConfig); + ReportingV3ReportsIdGet200Response result = apiInstance.GetReportByReportId(reportId, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs b/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs new file mode 100644 index 0000000..2089793 --- /dev/null +++ b/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class RetrieveAvailableReports + { + public static ReportingV3ReportsGet200Response Run() + { + string organizationId = null; + var startTime = DateTime.ParseExact("2018-10-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2018-10-30T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + string timeQueryType = "executedTime"; + string reportMimeType = "application/xml"; + string reportFrequency = null; + string reportName = null; + int? reportDefinitionId = (int?)null; + string reportStatus = null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReportsApi(clientConfig); + ReportingV3ReportsGet200Response result = apiInstance.SearchReports(startTime, endTime, timeQueryType, organizationId, reportMimeType, reportFrequency, reportName, reportDefinitionId, reportStatus); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs b/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs deleted file mode 100644 index c46045e..0000000 --- a/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class CreateDecisionManagerCase - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs deleted file mode 100644 index cf28630..0000000 --- a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class DecisionProfileReject - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - var riskInformation = new Riskv1decisionsRiskInformation(); - - var profile = new Riskv1decisionsRiskInformationProfile(); - - profile.Name = "profile2"; - riskInformation.Profile = profile; - - requestObj.RiskInformation = riskInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs deleted file mode 100644 index 4c6e5f6..0000000 --- a/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class DmWithBuyerInformation - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - var buyerInformation = new Riskv1decisionsBuyerInformation(); - - buyerInformation.HashedPassword = ""; - buyerInformation.DateOfBirth = "1998-05-05"; - var personalIdentification = new List(); - - var personalIdentification0 = new Ptsv2paymentsBuyerInformationPersonalIdentification(); - personalIdentification0.Type = "CPF"; - personalIdentification0.Id = "1a23apwe98"; - personalIdentification.Add(personalIdentification0); - - requestObj.BuyerInformation = buyerInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs deleted file mode 100644 index b2f7c79..0000000 --- a/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class DmWithDeviceInformation - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - var deviceInformation = new Riskv1decisionsDeviceInformation(); - - deviceInformation.CookiesAccepted = "yes"; - deviceInformation.IpAddress = "64.124.61.215"; - deviceInformation.HostName = "host.com"; - deviceInformation.HttpBrowserEmail = "xyz@gmail.com"; - deviceInformation.UserAgent = "Chrome"; - requestObj.DeviceInformation = deviceInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs deleted file mode 100644 index 1b6f423..0000000 --- a/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class DmWithMerchantDefinedInformation - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - var merchantDefinedInformation = new List(); - - var merchantDefinedInformation0 = new Riskv1decisionsMerchantDefinedInformation(); - merchantDefinedInformation0.Key = "1"; - merchantDefinedInformation0.Value = "Test"; - merchantDefinedInformation.Add(merchantDefinedInformation0); - - var merchantDefinedInformation1 = new Riskv1decisionsMerchantDefinedInformation(); - merchantDefinedInformation1.Key = "2"; - merchantDefinedInformation1.Value = "Test2"; - merchantDefinedInformation.Add(merchantDefinedInformation1); - - requestObj.MerchantDefinedInformation = merchantDefinedInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs deleted file mode 100644 index c12a993..0000000 --- a/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class DmWithShippingInformation - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var shipTo = new Riskv1decisionsOrderInformationShipTo(); - - shipTo.Address1 = "96, powers street"; - shipTo.Address2 = ""; - shipTo.AdministrativeArea = "KA"; - shipTo.Country = "INDIA"; - shipTo.Locality = "Clearwater milford"; - shipTo.FirstName = "James"; - shipTo.LastName = "Smith"; - shipTo.PhoneNumber = "7606160717"; - shipTo.PostalCode = "560056"; - orderInformation.ShipTo = shipTo; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs deleted file mode 100644 index 37c2968..0000000 --- a/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class DmWithTravelInformation - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - var travelInformation = new Riskv1decisionsTravelInformation(); - - travelInformation.CompleteRoute = "SFO-JFK:JFK-BLR"; - travelInformation.DepartureTime = "2011-03-20 11:30pm GMT"; - travelInformation.JourneyType = "One way"; - var legs = new List(); - - var legs0 = new Riskv1decisionsTravelInformationLegs(); - legs0.Origination = "SFO"; - legs0.Destination = "JFK"; - legs.Add(legs0); - - var legs1 = new Riskv1decisionsTravelInformationLegs(); - legs1.Origination = "JFK"; - legs1.Destination = "BLR"; - legs.Add(legs1); - - travelInformation.Legs = legs; - - requestObj.TravelInformation = travelInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs b/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs deleted file mode 100644 index ed42031..0000000 --- a/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class ScoreExceedsThreshold - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var shipTo = new Riskv1decisionsOrderInformationShipTo(); - - shipTo.Address1 = "96, powers street"; - shipTo.Address2 = ""; - shipTo.AdministrativeArea = "KA"; - shipTo.Country = "INDIA"; - shipTo.Locality = "Clearwater milford"; - shipTo.FirstName = "James"; - shipTo.LastName = "Smith"; - shipTo.PhoneNumber = "7606160717"; - shipTo.PostalCode = "560056"; - orderInformation.ShipTo = shipTo; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/ListManagement.cs b/src/Samples/RiskManagement/DecisionManager/AddDataToList.cs similarity index 92% rename from src/Samples/RiskManagement/CoreServices/ListManagement.cs rename to src/Samples/RiskManagement/DecisionManager/AddDataToList.cs index bbad0e7..61aa65b 100644 --- a/src/Samples/RiskManagement/CoreServices/ListManagement.cs +++ b/src/Samples/RiskManagement/DecisionManager/AddDataToList.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { - public class ListManagement + public class AddDataToList { public static RiskV1UpdatePost201Response Run() { @@ -27,8 +27,12 @@ public static RiskV1UpdatePost201Response Run() PostalCode: orderInformationAddressPostalCode ); + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; string orderInformationBillToEmail = "test@example.com"; Riskv1liststypeentriesOrderInformationBillTo orderInformationBillTo = new Riskv1liststypeentriesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, Email: orderInformationBillToEmail ); diff --git a/src/Samples/RiskManagement/CoreServices/AddDuplicateInformation.cs b/src/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/AddDuplicateInformation.cs rename to src/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs diff --git a/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs b/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs new file mode 100644 index 0000000..cd3cbe5 --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class BasicDMTransaction + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs new file mode 100644 index 0000000..fe724d6 --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class DMWithBuyerInformation + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string buyerInformationHashedPassword = ""; + string buyerInformationDateOfBirth = "19980505"; + + List buyerInformationPersonalIdentification = new List (); + string buyerInformationPersonalIdentificationType1 = "CPF"; + string buyerInformationPersonalIdentificationId1 = "1a23apwe98"; + buyerInformationPersonalIdentification.Add(new Ptsv2paymentsBuyerInformationPersonalIdentification( + Type: buyerInformationPersonalIdentificationType1, + Id: buyerInformationPersonalIdentificationId1 + )); + + Riskv1decisionsBuyerInformation buyerInformation = new Riskv1decisionsBuyerInformation( + HashedPassword: buyerInformationHashedPassword, + DateOfBirth: buyerInformationDateOfBirth, + PersonalIdentification: buyerInformationPersonalIdentification + ); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs b/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs new file mode 100644 index 0000000..bc3b2e3 --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class DMWithDecisionProfileRejectResponse + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string riskInformationProfileName = "profile2"; + Riskv1decisionsRiskInformationProfile riskInformationProfile = new Riskv1decisionsRiskInformationProfile( + Name: riskInformationProfileName + ); + + Riskv1decisionsRiskInformation riskInformation = new Riskv1decisionsRiskInformation( + Profile: riskInformationProfile + ); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + RiskInformation: riskInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs new file mode 100644 index 0000000..f4444f5 --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class DMWithDeviceInformation + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string deviceInformationCookiesAccepted = "yes"; + string deviceInformationIpAddress = "64.124.61.215"; + string deviceInformationHostName = "host.com"; + string deviceInformationHttpBrowserEmail = "xyz@gmail.com"; + string deviceInformationUserAgent = "Chrome"; + Riskv1decisionsDeviceInformation deviceInformation = new Riskv1decisionsDeviceInformation( + CookiesAccepted: deviceInformationCookiesAccepted, + IpAddress: deviceInformationIpAddress, + HostName: deviceInformationHostName, + HttpBrowserEmail: deviceInformationHttpBrowserEmail, + UserAgent: deviceInformationUserAgent + ); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + DeviceInformation: deviceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs new file mode 100644 index 0000000..5ee9d98 --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class DMWithMerchantDefinedInformation + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + + List merchantDefinedInformation = new List (); + string merchantDefinedInformationKey1 = "1"; + string merchantDefinedInformationValue1 = "Test"; + merchantDefinedInformation.Add(new Riskv1decisionsMerchantDefinedInformation( + Key: merchantDefinedInformationKey1, + Value: merchantDefinedInformationValue1 + )); + + string merchantDefinedInformationKey2 = "2"; + string merchantDefinedInformationValue2 = "Test2"; + merchantDefinedInformation.Add(new Riskv1decisionsMerchantDefinedInformation( + Key: merchantDefinedInformationKey2, + Value: merchantDefinedInformationValue2 + )); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantDefinedInformation: merchantDefinedInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs b/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs new file mode 100644 index 0000000..a5644ba --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class DMWithScoreExceedsThresholdResponse + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationShipToAddress1 = "96, powers street"; + string orderInformationShipToAddress2 = ""; + string orderInformationShipToAdministrativeArea = "KA"; + string orderInformationShipToCountry = "IN"; + string orderInformationShipToLocality = "Clearwater milford"; + string orderInformationShipToFirstName = "James"; + string orderInformationShipToLastName = "Smith"; + string orderInformationShipToPhoneNumber = "7606160717"; + string orderInformationShipToPostalCode = "560056"; + Riskv1decisionsOrderInformationShipTo orderInformationShipTo = new Riskv1decisionsOrderInformationShipTo( + Address1: orderInformationShipToAddress1, + Address2: orderInformationShipToAddress2, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Country: orderInformationShipToCountry, + Locality: orderInformationShipToLocality, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + PhoneNumber: orderInformationShipToPhoneNumber, + PostalCode: orderInformationShipToPostalCode + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + ShipTo: orderInformationShipTo, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs new file mode 100644 index 0000000..328de82 --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class DMWithShippingInformation + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationShipToAddress1 = "96, powers street"; + string orderInformationShipToAddress2 = ""; + string orderInformationShipToAdministrativeArea = "KA"; + string orderInformationShipToCountry = "IN"; + string orderInformationShipToLocality = "Clearwater milford"; + string orderInformationShipToFirstName = "James"; + string orderInformationShipToLastName = "Smith"; + string orderInformationShipToPhoneNumber = "7606160717"; + string orderInformationShipToPostalCode = "560056"; + Riskv1decisionsOrderInformationShipTo orderInformationShipTo = new Riskv1decisionsOrderInformationShipTo( + Address1: orderInformationShipToAddress1, + Address2: orderInformationShipToAddress2, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Country: orderInformationShipToCountry, + Locality: orderInformationShipToLocality, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + PhoneNumber: orderInformationShipToPhoneNumber, + PostalCode: orderInformationShipToPostalCode + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + ShipTo: orderInformationShipTo, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs new file mode 100644 index 0000000..9aafcbe --- /dev/null +++ b/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement +{ + public class DMWithTravelInformation + { + public static RiskV1DecisionsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Riskv1decisionsPaymentInformation paymentInformation = new Riskv1decisionsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "144.14"; + Riskv1decisionsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1decisionsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToPhoneNumber = "7606160717"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPostalCode = "03055"; + Riskv1decisionsOrderInformationBillTo orderInformationBillTo = new Riskv1decisionsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1decisionsOrderInformation orderInformation = new Riskv1decisionsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string travelInformationCompleteRoute = "SFO-JFK:JFK-BLR"; + string travelInformationDepartureTime = "2011-03-20 11:30pm GMT"; + string travelInformationJourneyType = "One way"; + + List travelInformationLegs = new List (); + string travelInformationLegsOrigination1 = "SFO"; + string travelInformationLegsDestination1 = "JFK"; + travelInformationLegs.Add(new Riskv1decisionsTravelInformationLegs( + Origination: travelInformationLegsOrigination1, + Destination: travelInformationLegsDestination1 + )); + + string travelInformationLegsOrigination2 = "JFK"; + string travelInformationLegsDestination2 = "BLR"; + travelInformationLegs.Add(new Riskv1decisionsTravelInformationLegs( + Origination: travelInformationLegsOrigination2, + Destination: travelInformationLegsDestination2 + )); + + Riskv1decisionsTravelInformation travelInformation = new Riskv1decisionsTravelInformation( + CompleteRoute: travelInformationCompleteRoute, + DepartureTime: travelInformationDepartureTime, + JourneyType: travelInformationJourneyType, + Legs: travelInformationLegs + ); + + var requestObj = new CreateDecisionManagerCaseRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + TravelInformation: travelInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new DecisionManagerApi(clientConfig); + RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/RiskManagement/CoreServices/FraudMarking.cs b/src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs similarity index 98% rename from src/Samples/RiskManagement/CoreServices/FraudMarking.cs rename to src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs index 672c990..81834ca 100644 --- a/src/Samples/RiskManagement/CoreServices/FraudMarking.cs +++ b/src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { - public class FraudMarking + public class MarkAsSuspect { public static RiskV1UpdatePost201Response Run() { diff --git a/src/Samples/RiskManagement/CoreServices/RemoveFromHistory.cs b/src/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/RemoveFromHistory.cs rename to src/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs diff --git a/src/Samples/RiskManagement/CoreServices/AddressMatchNotFound.cs b/src/Samples/RiskManagement/Verification/AddressMatchNotFound.cs similarity index 99% rename from src/Samples/RiskManagement/CoreServices/AddressMatchNotFound.cs rename to src/Samples/RiskManagement/Verification/AddressMatchNotFound.cs index 8633569..7b940bd 100644 --- a/src/Samples/RiskManagement/CoreServices/AddressMatchNotFound.cs +++ b/src/Samples/RiskManagement/Verification/AddressMatchNotFound.cs @@ -20,7 +20,7 @@ public static RiskV1AddressVerificationsPost201Response Run() string orderInformationBillToAddress1 = "Apt C "; string orderInformationBillToAddress2 = ""; - string orderInformationBillToAdministrativeArea = "California"; + string orderInformationBillToAdministrativeArea = "CA"; string orderInformationBillToCountry = "US"; string orderInformationBillToLocality = "Glendale"; string orderInformationBillToPostalCode = "91204"; diff --git a/src/Samples/RiskManagement/CoreServices/ApartmentNumberMissingOrNotFound.cs b/src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/ApartmentNumberMissingOrNotFound.cs rename to src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs diff --git a/src/Samples/RiskManagement/CoreServices/CanadianBillingDetails.cs b/src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/CanadianBillingDetails.cs rename to src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs diff --git a/src/Samples/RiskManagement/CoreServices/ComplianceStatusCompleted.cs b/src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/ComplianceStatusCompleted.cs rename to src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs diff --git a/src/Samples/RiskManagement/CoreServices/ValidateExportCompliance.cs b/src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs similarity index 98% rename from src/Samples/RiskManagement/CoreServices/ValidateExportCompliance.cs rename to src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs index 8907247..faf774f 100644 --- a/src/Samples/RiskManagement/CoreServices/ValidateExportCompliance.cs +++ b/src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { - public class ValidateExportCompliance + public class CustomerMatchDeniedPartiesList { public static RiskV1ExportComplianceInquiriesPost201Response Run() { diff --git a/src/Samples/RiskManagement/CoreServices/ExportComplianceInformationProvided.cs b/src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/ExportComplianceInformationProvided.cs rename to src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs diff --git a/src/Samples/RiskManagement/CoreServices/MultipleLineItems.cs b/src/Samples/RiskManagement/Verification/MultipleLineItems.cs similarity index 99% rename from src/Samples/RiskManagement/CoreServices/MultipleLineItems.cs rename to src/Samples/RiskManagement/Verification/MultipleLineItems.cs index 0347fb4..3c38e0a 100644 --- a/src/Samples/RiskManagement/CoreServices/MultipleLineItems.cs +++ b/src/Samples/RiskManagement/Verification/MultipleLineItems.cs @@ -41,7 +41,7 @@ public static RiskV1AddressVerificationsPost201Response Run() string orderInformationShipToAddress2 = ""; string orderInformationShipToAddress3 = ""; string orderInformationShipToAddress4 = ""; - string orderInformationShipToAdministrativeArea = "California"; + string orderInformationShipToAdministrativeArea = "CA"; string orderInformationShipToCountry = "US"; string orderInformationShipToLocality = "San Jose"; string orderInformationShipToPostalCode = "95132"; diff --git a/src/Samples/RiskManagement/CoreServices/MultipleSanctionLists.cs b/src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/MultipleSanctionLists.cs rename to src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs diff --git a/src/Samples/RiskManagement/CoreServices/NoCompanyName.cs b/src/Samples/RiskManagement/Verification/NoCompanyName.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/NoCompanyName.cs rename to src/Samples/RiskManagement/Verification/NoCompanyName.cs diff --git a/src/Samples/RiskManagement/CoreServices/ShippingDetailsNotUSOrCanada.cs b/src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs similarity index 100% rename from src/Samples/RiskManagement/CoreServices/ShippingDetailsNotUSOrCanada.cs rename to src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs diff --git a/src/Samples/RiskManagement/CoreServices/VerifyCustomerAddress.cs b/src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs similarity index 98% rename from src/Samples/RiskManagement/CoreServices/VerifyCustomerAddress.cs rename to src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs index e2a6d89..01779cc 100644 --- a/src/Samples/RiskManagement/CoreServices/VerifyCustomerAddress.cs +++ b/src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { - public class VerifyCustomerAddress + public class VerboseRequestWithAllFields { public static RiskV1AddressVerificationsPost201Response Run() { diff --git a/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs b/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs deleted file mode 100644 index 260acca..0000000 --- a/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Globalization; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.SecureFileShare.CoreServices -{ - public class GetListOfFiles - { - public static void Run() - { - try - { - var startDate = DateTime.ParseExact("2018-10-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); - var endDate = DateTime.ParseExact("2018-10-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); - var organizationId = "testrest"; - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new SecureFileShareApi(clientConfig); - var result = apiInstance.GetFileDetail(startDate, endDate, organizationId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs b/src/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs similarity index 56% rename from src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs rename to src/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs index f06c364..f7bbca4 100644 --- a/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs +++ b/src/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs @@ -1,65 +1,65 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Xml; using System.Xml.Serialization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.SecureFileShare.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.SecureFileShare { public class DownloadFileWithFileIdentifier { public static void Run() { + var fileId = "QmF0Y2hGaWxlc0RldGFpbFJlcG9ydC5jc3YtMjAyMC0wMS0zMA=="; + const string fileName = "DownloadedFileWithFileID.csv"; + const string downloadFilePath = @".\Resource\" + fileName; + string organizationId = "testrest"; try { - // File will be created with the Data received in the Response Body - - // Provide the File Name - const string fileName = "DownloadFileWithFileIdentifier.csv"; - - // Provide the path where the file needs to be downloaded - // This can be either a relative path or an absolute path - const string downloadFilePath = @".\Resource\" + fileName; - - var fileId = "dGVzdHJlc3Rfc3ViY3JpcHRpb25fdjI5ODktOTMwYWU5MmItOTcxMy00N2U4LWUwNTMtYTI1ODhlMGFjZDNjLnhtbC0yMDE5LTA5LTMw"; - var organizationId = "testrest"; - var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new SecureFileShareApi(clientConfig); + var apiInstance = new SecureFileShareApi(clientConfig); var content = apiInstance.GetFileWithHttpInfo(fileId, organizationId); + // START : FILE DOWNLOAD FUNCTIONALITY File.WriteAllText(downloadFilePath, CreateXml(content.Data)); - Console.WriteLine("\nFile downloaded at the below location:"); + Console.WriteLine("\nFile Downloaded at the following location : "); Console.WriteLine($"{Path.GetFullPath(downloadFilePath)}\n"); + // END : FILE DOWNLOAD FUNCTIONALITY } catch (FileNotFoundException) { - Console.WriteLine("File Not Found: Kindly verify the path"); + Console.WriteLine("File Not Found : Kindly verify the path."); } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); } } + // START : STREAM SERIALIZER METHOD private static string CreateXml(object obj) { - var xmlDoc = new XmlDocument(); // Represents an XML document - var xmlSerializer = new XmlSerializer(obj.GetType()); // Initializes a new instance of the XmlDocument class. + var xmlDoc = new XmlDocument(); // Represents an XML Document + var xmlSerializer = new XmlSerializer(obj.GetType()); // Initializes a new instance of the XmlDocument class - // Creates a stream whose backing store is memory. + // Creates a stream whose backing store is memory using (var xmlStream = new MemoryStream()) { xmlSerializer.Serialize(xmlStream, obj); xmlStream.Position = 0; - // Loads the XML document from the specified string. + // Loads the XML document from the specified string xmlDoc.Load(xmlStream); return xmlDoc.InnerText; } } + // END : STREAM SERIALIZER METHOD } } diff --git a/src/Samples/SecureFileShare/GetListOfFiles.cs b/src/Samples/SecureFileShare/GetListOfFiles.cs new file mode 100644 index 0000000..acfe6ae --- /dev/null +++ b/src/Samples/SecureFileShare/GetListOfFiles.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.SecureFileShare +{ + public class GetListOfFiles + { + public static V1FileDetailsGet200Response Run() + { + var startDate = DateTime.ParseExact("2020-01-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var endDate = DateTime.ParseExact("2020-01-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); + string organizationId = "testrest"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SecureFileShareApi(clientConfig); + V1FileDetailsGet200Response result = apiInstance.GetFileDetail(startDate, endDate, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TMS/CoreServices/CreatePaymentInstrument.cs b/src/Samples/TMS/CoreServices/CreatePaymentInstrument.cs deleted file mode 100644 index 9248f83..0000000 --- a/src/Samples/TMS/CoreServices/CreatePaymentInstrument.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices -{ - public class CreatePaymentInstrument - { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() - { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var requestObj = new CreatePaymentInstrumentRequest(); - - var cardObj = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard - ( - ExpirationMonth: "09", - ExpirationYear: "2022", - Type: "visa" - ); - - requestObj.Card = cardObj; - - var billToObj = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo - { - FirstName = "John", - LastName = "Smith", - Company = "CyberSource", - Address1 = "12 Main Street", - Address2 = "20 My Street", - Locality = "San Francisco", - AdministrativeArea = "CA", - PostalCode = "90200", - Country = "US", - Email = "john.smith@example.com", - PhoneNumber = "555123456" - }; - - requestObj.BillTo = billToObj; - - var instrumentIdentifierObj = new Tmsv1paymentinstrumentsInstrumentIdentifier(); - - var cardObj2 = new TmsV1InstrumentIdentifiersPost200ResponseCard - { - Number = "4111111111111111" - }; - - instrumentIdentifierObj.Card = cardObj2; - - requestObj.InstrumentIdentifier = instrumentIdentifierObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentInstrumentApi(clientConfig); - - var result = apiInstance.CreatePaymentInstrument(profileId, requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/TMS/CoreServices/RetrieveAllPaymentInstruments.cs b/src/Samples/TMS/CoreServices/RetrieveAllPaymentInstruments.cs deleted file mode 100644 index 216d4ab..0000000 --- a/src/Samples/TMS/CoreServices/RetrieveAllPaymentInstruments.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices -{ - public class RetrieveAllPaymentInstruments - { - public static void Run() - { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = "7010000000016241111"; // CreateInstrumentIdentifier.Run().Id; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new InstrumentIdentifierApi(clientConfig); - - var result = apiInstance.GetAllPaymentInstruments(profileId, tokenId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/TMS/CoreServices/RetrieveInstrumentIdentifier.cs b/src/Samples/TMS/CoreServices/RetrieveInstrumentIdentifier.cs deleted file mode 100644 index beb4a44..0000000 --- a/src/Samples/TMS/CoreServices/RetrieveInstrumentIdentifier.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices -{ - public class RetrieveInstrumentIdentifier - { - public static void Run() - { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreateInstrumentIdentifier.Run().Id; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new InstrumentIdentifierApi(clientConfig); - - var result = apiInstance.GetInstrumentIdentifier(profileId, tokenId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/TMS/CoreServices/RetrievePaymentInstrument.cs b/src/Samples/TMS/CoreServices/RetrievePaymentInstrument.cs deleted file mode 100644 index ab3e925..0000000 --- a/src/Samples/TMS/CoreServices/RetrievePaymentInstrument.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices -{ - public class RetrievePaymentInstrument - { - public static void Run() - { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreatePaymentInstrument.Run().Id; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentInstrumentApi(clientConfig); - - var result = apiInstance.GetPaymentInstrument(profileId, tokenId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/TMS/CoreServices/UpdateInstrumentIdentifier.cs b/src/Samples/TMS/CoreServices/UpdateInstrumentIdentifier.cs deleted file mode 100644 index 362954a..0000000 --- a/src/Samples/TMS/CoreServices/UpdateInstrumentIdentifier.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices -{ - public class UpdateInstrumentIdentifier - { - public static void Run() - { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreateInstrumentIdentifier.Run().Id; - - var requestObj = new UpdateInstrumentIdentifierRequest(); - - var processingInformationObj = new TmsV1InstrumentIdentifiersPost200ResponseProcessingInformation(); - - var authorizationOptionsObj = new TmsV1InstrumentIdentifiersPost200ResponseProcessingInformationAuthorizationOptions(); - - var initiatorObj = new TmsV1InstrumentIdentifiersPost200ResponseProcessingInformationAuthorizationOptionsInitiator(); - - var merchantInitiatedTransactionObj = - new TmsV1InstrumentIdentifiersPost200ResponseProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction - { - PreviousTransactionId = "123456789012345" - }; - - initiatorObj.MerchantInitiatedTransaction = merchantInitiatedTransactionObj; - - authorizationOptionsObj.Initiator = initiatorObj; - - processingInformationObj.AuthorizationOptions = authorizationOptionsObj; - - requestObj.ProcessingInformation = processingInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new InstrumentIdentifierApi(clientConfig); - - var result = apiInstance.UpdateInstrumentIdentifier(profileId, tokenId, requestObj); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/TMS/CoreServices/UpdatePaymentInstrument.cs b/src/Samples/TMS/CoreServices/UpdatePaymentInstrument.cs deleted file mode 100644 index d844cf4..0000000 --- a/src/Samples/TMS/CoreServices/UpdatePaymentInstrument.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices -{ - public class UpdatePaymentInstrument - { - public static void Run() - { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreatePaymentInstrument.Run().Id; - - var requestObj = new UpdatePaymentInstrumentRequest(); - - var cardObj = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard - ( - ExpirationMonth: "09", - ExpirationYear: "2022", - Type: "visa" - ); - - requestObj.Card = cardObj; - - var billToObj = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo - { - FirstName = "John", - LastName = "Smith", - Company = "CyberSource", - Address1 = "12 Main Street", - Address2 = "20 My Street", - Locality = "San Francisco", - AdministrativeArea = "CA", - PostalCode = "90200", - Country = "US", - Email = "john.smith@example.com", - PhoneNumber = "555123456" - }; - - requestObj.BillTo = billToObj; - - var instrumentIdentifierObj = new Tmsv1paymentinstrumentsInstrumentIdentifier(); - - var cardObj2 = new TmsV1InstrumentIdentifiersPost200ResponseCard - { - Number = "4111111111111111" - }; - - instrumentIdentifierObj.Card = cardObj2; - - requestObj.InstrumentIdentifier = instrumentIdentifierObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentInstrumentApi(clientConfig); - - var result = apiInstance.UpdatePaymentInstrument(profileId, tokenId, requestObj); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs new file mode 100644 index 0000000..7eac846 --- /dev/null +++ b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateInstrumentIdentifierBankAccount + { + public static TmsV1InstrumentIdentifiersPost200Response Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + string bankAccountNumber = "4100"; + string bankAccountRoutingNumber = "071923284"; + Tmsv1instrumentidentifiersBankAccount bankAccount = new Tmsv1instrumentidentifiersBankAccount( + Number: bankAccountNumber, + RoutingNumber: bankAccountRoutingNumber + ); + + var requestObj = new CreateInstrumentIdentifierRequest( + BankAccount: bankAccount + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InstrumentIdentifierApi(clientConfig); + TmsV1InstrumentIdentifiersPost200Response result = apiInstance.CreateInstrumentIdentifier(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs new file mode 100644 index 0000000..c903279 --- /dev/null +++ b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateInstrumentIdentifierCard + { + public static TmsV1InstrumentIdentifiersPost200Response Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + string cardNumber = "411111111111111"; + Tmsv1instrumentidentifiersCard card = new Tmsv1instrumentidentifiersCard( + Number: cardNumber + ); + + var requestObj = new CreateInstrumentIdentifierRequest( + Card: card + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InstrumentIdentifierApi(clientConfig); + TmsV1InstrumentIdentifiersPost200Response result = apiInstance.CreateInstrumentIdentifier(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs new file mode 100644 index 0000000..b79eba0 --- /dev/null +++ b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateInstrumentIdentifierCardEnrollForNetworkToken + { + public static TmsV1InstrumentIdentifiersPost200Response Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + string type = "enrollable card"; + string cardNumber = "4622943127013705"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2022"; + string cardSecurityCode = "838"; + Tmsv1instrumentidentifiersCard card = new Tmsv1instrumentidentifiersCard( + Number: cardNumber, + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + SecurityCode: cardSecurityCode + ); + + string billToAddress1 = "8310 Capital of Texas Highway North"; + string billToAddress2 = "Bluffstone Drive"; + string billToLocality = "Austin"; + string billToAdministrativeArea = "TX"; + string billToPostalCode = "78731"; + string billToCountry = "US"; + Tmsv1instrumentidentifiersBillTo billTo = new Tmsv1instrumentidentifiersBillTo( + Address1: billToAddress1, + Address2: billToAddress2, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry + ); + + var requestObj = new CreateInstrumentIdentifierRequest( + Type: type, + Card: card, + BillTo: billTo + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InstrumentIdentifierApi(clientConfig); + TmsV1InstrumentIdentifiersPost200Response result = apiInstance.CreateInstrumentIdentifier(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TMS/CoreServices/DeleteInstrumentIdentifier.cs b/src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs similarity index 54% rename from src/Samples/TMS/CoreServices/DeleteInstrumentIdentifier.cs rename to src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs index f46cabb..3d585c1 100644 --- a/src/Samples/TMS/CoreServices/DeleteInstrumentIdentifier.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs @@ -1,26 +1,29 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class DeleteInstrumentIdentifier { public static void Run() { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreateInstrumentIdentifier.Run().Id; - + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + var tokenId = CreateInstrumentIdentifierCard.Run().Id; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new InstrumentIdentifierApi(clientConfig); - apiInstance.DeleteInstrumentIdentifier(profileId, tokenId); + var apiInstance = new InstrumentIdentifierApi(clientConfig); + apiInstance.DeleteInstrumentIdentifier(profileid, tokenId); } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); } } } diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveAllPaymentInstruments.cs b/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveAllPaymentInstruments.cs new file mode 100644 index 0000000..addc9da --- /dev/null +++ b/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveAllPaymentInstruments.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class RetrieveAllPaymentInstruments + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200Response Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + var tokenId = "7010000000016241111"; // CreateInstrumentIdentifierCard.Run().Id; + + long? offset = (long?)null; + long? limit = (long?)null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InstrumentIdentifierApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200Response result = apiInstance.GetAllPaymentInstruments(profileid, tokenId, offset, limit); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TMS/CoreServices/CreateInstrumentIdentifier.cs b/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs similarity index 52% rename from src/Samples/TMS/CoreServices/CreateInstrumentIdentifier.cs rename to src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs index 58191b3..66f4fb3 100644 --- a/src/Samples/TMS/CoreServices/CreateInstrumentIdentifier.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs @@ -1,35 +1,31 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { - public class CreateInstrumentIdentifier + public class RetrieveInstrumentIdentifier { public static TmsV1InstrumentIdentifiersPost200Response Run() { - var requestObj = new CreateInstrumentIdentifierRequest(); - - var cardObj = new Tmsv1instrumentidentifiersCard - { - Number = "1234567123487456" - }; - - requestObj.Card = cardObj; - + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + var tokenId = CreateInstrumentIdentifierCard.Run().Id; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new InstrumentIdentifierApi(clientConfig); - var result = apiInstance.CreateInstrumentIdentifier("93B32398-AD51-4CC2-A682-EA3E93614EB1", requestObj); + var apiInstance = new InstrumentIdentifierApi(clientConfig); + TmsV1InstrumentIdentifiersPost200Response result = apiInstance.GetInstrumentIdentifier(profileid, tokenId); Console.WriteLine(result); return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); return null; } } diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs new file mode 100644 index 0000000..a98055e --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreatePaymentInstrumentBankAccount + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + + string bankAccountType = "savings"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBankAccount bankAccount = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBankAccount( + Type: bankAccountType + ); + + string buyerInformationCompanyTaxID = "12345"; + string buyerInformationCurrency = "USD"; + string buyerInformationDateOfBirth = "2000-12-13"; + + List buyerInformationPersonalIdentification = new List (); + string buyerInformationPersonalIdentificationId1 = "57684432111321"; + string buyerInformationPersonalIdentificationType1 = "driver license"; + string buyerInformationPersonalIdentificationIssuedByAdministrativeArea1 = "CA"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformationIssuedBy buyerInformationPersonalIdentificationIssuedBy1 = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformationIssuedBy( + AdministrativeArea: buyerInformationPersonalIdentificationIssuedByAdministrativeArea1 + ); + + buyerInformationPersonalIdentification.Add(new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformationPersonalIdentification( + Id: buyerInformationPersonalIdentificationId1, + Type: buyerInformationPersonalIdentificationType1, + IssuedBy: buyerInformationPersonalIdentificationIssuedBy1 + )); + + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( + CompanyTaxID: buyerInformationCompanyTaxID, + Currency: buyerInformationCurrency, + DateOfBirth: buyerInformationDateOfBirth, + PersonalIdentification: buyerInformationPersonalIdentification + ); + + string billToFirstName = "John"; + string billToLastName = "Smith"; + string billToCompany = "Cybersource"; + string billToAddress1 = "8310 Capital of Texas Highwas North"; + string billToAddress2 = "Bluffstone Drive"; + string billToLocality = "Austin"; + string billToAdministrativeArea = "TX"; + string billToPostalCode = "78731"; + string billToCountry = "US"; + string billToEmail = "john.smith@test.com"; + string billToPhoneNumber = "+44 2890447951"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Address2: billToAddress2, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + bool processingInformationBillPaymentProgramEnabled = true; + string processingInformationBankTransferOptionsSeCCode = "WEB"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformationBankTransferOptions processingInformationBankTransferOptions = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformationBankTransferOptions( + SECCode: processingInformationBankTransferOptionsSeCCode + ); + + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( + BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled, + BankTransferOptions: processingInformationBankTransferOptions + ); + + string merchantInformationMerchantDescriptorAlternateName = "Branch Name"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformationMerchantDescriptor merchantInformationMerchantDescriptor = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformationMerchantDescriptor( + AlternateName: merchantInformationMerchantDescriptorAlternateName + ); + + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformation merchantInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformation( + MerchantDescriptor: merchantInformationMerchantDescriptor + ); + + string instrumentIdentifierBankAccountNumber = "4100"; + string instrumentIdentifierBankAccountRoutingNumber = "071923284"; + Tmsv1instrumentidentifiersBankAccount instrumentIdentifierBankAccount = new Tmsv1instrumentidentifiersBankAccount( + Number: instrumentIdentifierBankAccountNumber, + RoutingNumber: instrumentIdentifierBankAccountRoutingNumber + ); + + Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( + BankAccount: instrumentIdentifierBankAccount + ); + + var requestObj = new CreatePaymentInstrumentRequest( + BankAccount: bankAccount, + BuyerInformation: buyerInformation, + BillTo: billTo, + ProcessingInformation: processingInformation, + MerchantInformation: merchantInformation, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs new file mode 100644 index 0000000..9df316a --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreatePaymentInstrumentCard + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + + string cardExpirationMonth = "09"; + string cardExpirationYear = "2017"; + string cardType = "visa"; + string cardIssueNumber = "01"; + string cardStartMonth = "01"; + string cardStartYear = "2016"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType, + IssueNumber: cardIssueNumber, + StartMonth: cardStartMonth, + StartYear: cardStartYear + ); + + string buyerInformationCompanyTaxID = "12345"; + string buyerInformationCurrency = "USD"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( + CompanyTaxID: buyerInformationCompanyTaxID, + Currency: buyerInformationCurrency + ); + + string billToFirstName = "John"; + string billToLastName = "Smith"; + string billToCompany = "Cybersource"; + string billToAddress1 = "8310 Capital of Texas Highwas North"; + string billToAddress2 = "Bluffstone Drive"; + string billToLocality = "Austin"; + string billToAdministrativeArea = "TX"; + string billToPostalCode = "78731"; + string billToCountry = "US"; + string billToEmail = "john.smith@test.com"; + string billToPhoneNumber = "+44 2890447951"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Address2: billToAddress2, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + bool processingInformationBillPaymentProgramEnabled = true; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( + BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled + ); + + string instrumentIdentifierCardNumber = "411111111111112"; + TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( + Number: instrumentIdentifierCardNumber + ); + + Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( + Card: instrumentIdentifierCard + ); + + var requestObj = new CreatePaymentInstrumentRequest( + Card: card, + BuyerInformation: buyerInformation, + BillTo: billTo, + ProcessingInformation: processingInformation, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs new file mode 100644 index 0000000..3b957dd --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreatePaymentInstrumentCardEnrollForNetworkToken + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + + string cardExpirationMonth = "09"; + string cardExpirationYear = "2017"; + string cardType = "visa"; + string cardIssueNumber = "01"; + string cardStartMonth = "01"; + string cardStartYear = "2016"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType, + IssueNumber: cardIssueNumber, + StartMonth: cardStartMonth, + StartYear: cardStartYear + ); + + string buyerInformationCompanyTaxID = "12345"; + string buyerInformationCurrency = "USD"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( + CompanyTaxID: buyerInformationCompanyTaxID, + Currency: buyerInformationCurrency + ); + + string billToFirstName = "John"; + string billToLastName = "Smith"; + string billToCompany = "Cybersource"; + string billToAddress1 = "8310 Capital of Texas Highwas North"; + string billToAddress2 = "Bluffstone Drive"; + string billToLocality = "Austin"; + string billToAdministrativeArea = "TX"; + string billToPostalCode = "78731"; + string billToCountry = "US"; + string billToEmail = "john.smith@test.com"; + string billToPhoneNumber = "+44 2890447951"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Address2: billToAddress2, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + bool processingInformationBillPaymentProgramEnabled = true; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( + BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled + ); + + string instrumentIdentifierCardNumber = "4622943127013705"; + TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( + Number: instrumentIdentifierCardNumber + ); + + Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( + Card: instrumentIdentifierCard + ); + + var requestObj = new CreatePaymentInstrumentRequest( + Card: card, + BuyerInformation: buyerInformation, + BillTo: billTo, + ProcessingInformation: processingInformation, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs new file mode 100644 index 0000000..3930c22 --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreatePaymentInstrumentCardWithInstrumentIdentifierId + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + + string cardExpirationMonth = "09"; + string cardExpirationYear = "2017"; + string cardType = "visa"; + string cardIssueNumber = "01"; + string cardStartMonth = "01"; + string cardStartYear = "2016"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType, + IssueNumber: cardIssueNumber, + StartMonth: cardStartMonth, + StartYear: cardStartYear + ); + + string buyerInformationCompanyTaxID = "12345"; + string buyerInformationCurrency = "USD"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( + CompanyTaxID: buyerInformationCompanyTaxID, + Currency: buyerInformationCurrency + ); + + string billToFirstName = "John"; + string billToLastName = "Smith"; + string billToCompany = "Cybersource"; + string billToAddress1 = "8310 Capital of Texas Highwas North"; + string billToAddress2 = "Bluffstone Drive"; + string billToLocality = "Austin"; + string billToAdministrativeArea = "TX"; + string billToPostalCode = "78731"; + string billToCountry = "US"; + string billToEmail = "john.smith@test.com"; + string billToPhoneNumber = "+44 2890447951"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Address2: billToAddress2, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + bool processingInformationBillPaymentProgramEnabled = true; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( + BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled + ); + + string instrumentIdentifierId = "7020000000001061135"; + Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( + Id: instrumentIdentifierId + ); + + var requestObj = new CreatePaymentInstrumentRequest( + Card: card, + BuyerInformation: buyerInformation, + BillTo: billTo, + ProcessingInformation: processingInformation, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs new file mode 100644 index 0000000..1e75160 --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreatePaymentInstrumentPinlessDebit + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + + string cardExpirationMonth = "09"; + string cardExpirationYear = "2017"; + string cardType = "visa"; + string cardIssueNumber = "01"; + string cardStartMonth = "01"; + string cardStartYear = "2016"; + string cardUseAs = "pinless debit"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType, + IssueNumber: cardIssueNumber, + StartMonth: cardStartMonth, + StartYear: cardStartYear, + UseAs: cardUseAs + ); + + string buyerInformationCompanyTaxID = "12345"; + string buyerInformationCurrency = "USD"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( + CompanyTaxID: buyerInformationCompanyTaxID, + Currency: buyerInformationCurrency + ); + + string billToFirstName = "John"; + string billToLastName = "Smith"; + string billToCompany = "Cybersource"; + string billToAddress1 = "8310 Capital of Texas Highwas North"; + string billToAddress2 = "Bluffstone Drive"; + string billToLocality = "Austin"; + string billToAdministrativeArea = "TX"; + string billToPostalCode = "78731"; + string billToCountry = "US"; + string billToEmail = "john.smith@test.com"; + string billToPhoneNumber = "+44 2890447951"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Address2: billToAddress2, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + bool processingInformationBillPaymentProgramEnabled = true; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( + BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled + ); + + string instrumentIdentifierCardNumber = "411111111111111"; + TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( + Number: instrumentIdentifierCardNumber + ); + + Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( + Card: instrumentIdentifierCard + ); + + var requestObj = new CreatePaymentInstrumentRequest( + Card: card, + BuyerInformation: buyerInformation, + BillTo: billTo, + ProcessingInformation: processingInformation, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs new file mode 100644 index 0000000..60583b1 --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreatePaymentInstrumentTokenizedCard + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + + string cardExpirationMonth = "09"; + string cardExpirationYear = "2017"; + string cardType = "visa"; + string cardIssueNumber = "01"; + string cardStartMonth = "01"; + string cardStartYear = "2016"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType, + IssueNumber: cardIssueNumber, + StartMonth: cardStartMonth, + StartYear: cardStartYear + ); + + string buyerInformationCompanyTaxID = "12345"; + string buyerInformationCurrency = "USD"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( + CompanyTaxID: buyerInformationCompanyTaxID, + Currency: buyerInformationCurrency + ); + + string billToFirstName = "John"; + string billToLastName = "Smith"; + string billToCompany = "Cybersource"; + string billToAddress1 = "8310 Capital of Texas Highwas North"; + string billToAddress2 = "Bluffstone Drive"; + string billToLocality = "Austin"; + string billToAdministrativeArea = "TX"; + string billToPostalCode = "78731"; + string billToCountry = "US"; + string billToEmail = "john.smith@test.com"; + string billToPhoneNumber = "+44 2890447951"; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Address2: billToAddress2, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + bool processingInformationBillPaymentProgramEnabled = true; + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( + BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled + ); + + string instrumentIdentifierCardNumber = "411111111111112"; + TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( + Number: instrumentIdentifierCardNumber + ); + + Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( + Card: instrumentIdentifierCard + ); + + var requestObj = new CreatePaymentInstrumentRequest( + Card: card, + BuyerInformation: buyerInformation, + BillTo: billTo, + ProcessingInformation: processingInformation, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TMS/CoreServices/DeletePaymentInstrument.cs b/src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs similarity index 53% rename from src/Samples/TMS/CoreServices/DeletePaymentInstrument.cs rename to src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs index 6f12746..e0620b0 100644 --- a/src/Samples/TMS/CoreServices/DeletePaymentInstrument.cs +++ b/src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs @@ -1,26 +1,30 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.TMS.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class DeletePaymentInstrument { public static void Run() { - var profileId = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreatePaymentInstrument.Run().Id; + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + var tokenId = CreatePaymentInstrumentCard.Run().Id; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentInstrumentApi(clientConfig); - apiInstance.DeletePaymentInstrument(profileId, tokenId); + var apiInstance = new PaymentInstrumentApi(clientConfig); + apiInstance.DeletePaymentInstrument(profileid, tokenId); } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); } } } diff --git a/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs b/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs new file mode 100644 index 0000000..1d4a8ed --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class RetrievePaymentInstrument + { + public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + var tokenId = CreatePaymentInstrumentCard.Run().Id; + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.GetPaymentInstrument(profileid, tokenId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TransactionBatches/CoreServices/GetListOfBatchFiles.cs b/src/Samples/TransactionBatches/CoreServices/GetListOfBatchFiles.cs deleted file mode 100644 index ec1e98e..0000000 --- a/src/Samples/TransactionBatches/CoreServices/GetListOfBatchFiles.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Globalization; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches.CoreServices -{ - public class GetListOfBatchFiles - { - public static void Run() - { - try - { - var startTime = DateTime.ParseExact("2019-08-11T22:47:57Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2019-08-29T22:47:57Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new TransactionBatchesApi(clientConfig); - - var result = apiInstance.GetTransactionBatches(startTime, endTime); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} \ No newline at end of file diff --git a/src/Samples/TransactionBatches/CoreServices/GetIndividualBatchFile.cs b/src/Samples/TransactionBatches/GetIndividualBatchFile.cs similarity index 59% rename from src/Samples/TransactionBatches/CoreServices/GetIndividualBatchFile.cs rename to src/Samples/TransactionBatches/GetIndividualBatchFile.cs index adb975d..e473dfe 100644 --- a/src/Samples/TransactionBatches/CoreServices/GetIndividualBatchFile.cs +++ b/src/Samples/TransactionBatches/GetIndividualBatchFile.cs @@ -1,11 +1,15 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches { public class GetIndividualBatchFile { - public static void Run() + public static PtsV1TransactionBatchesIdGet200Response Run() { try { @@ -13,15 +17,17 @@ public static void Run() var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new TransactionBatchesApi(clientConfig); - var result = apiInstance.GetTransactionBatchId(id); + var apiInstance = new TransactionBatchesApi(clientConfig); + PtsV1TransactionBatchesIdGet200Response result = apiInstance.GetTransactionBatchId(id); Console.WriteLine(result); + return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } -} \ No newline at end of file +} diff --git a/src/Samples/TransactionBatches/GetListOfBatchFiles.cs b/src/Samples/TransactionBatches/GetListOfBatchFiles.cs new file mode 100644 index 0000000..100a885 --- /dev/null +++ b/src/Samples/TransactionBatches/GetListOfBatchFiles.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches +{ + public class GetListOfBatchFiles + { + public static PtsV1TransactionBatchesGet200Response Run() + { + var startTime = DateTime.ParseExact("2020-02-22T01:47:57Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-02-22T22:47:57Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TransactionBatchesApi(clientConfig); + PtsV1TransactionBatchesGet200Response result = apiInstance.GetTransactionBatches(startTime, endTime); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TransactionBatches/CoreServices/GetTransactionDetailsForGivenBatchId.cs b/src/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs similarity index 67% rename from src/Samples/TransactionBatches/CoreServices/GetTransactionDetailsForGivenBatchId.cs rename to src/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs index 56dd179..f6aebf2 100644 --- a/src/Samples/TransactionBatches/CoreServices/GetTransactionDetailsForGivenBatchId.cs +++ b/src/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs @@ -1,15 +1,14 @@ -// Code Generated: getTransactionBatchDetails[Get transaction details for a given batch id] - using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Xml; using System.Xml.Serialization; + using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches { public class GetTransactionDetailsForGivenBatchId { @@ -17,25 +16,28 @@ public static void Run() { var id = "12345"; - // Provide the File Name const string fileName = "BatchDetailsReport.csv"; - - // Provide the path where the file needs to be downloaded - // This can be either a relative path or an absolute path const string downloadFilePath = @".\Resource\" + fileName; - + var uploadDate = DateTime.ParseExact("2019-08-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); + string status = "Rejected"; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new TransactionBatchesApi(clientConfig); - var content = apiInstance.GetTransactionBatchDetailsWithHttpInfo(id); + var content = apiInstance.GetTransactionBatchDetailsWithHttpInfo(id, uploadDate, status); + // START : FILE DOWNLOAD FUNCTIONALITY File.WriteAllText(downloadFilePath, CreateXml(content.Data)); - Console.WriteLine("\nDetails downloaded at the below location:"); + Console.WriteLine("\nFile Downloaded at the following location : "); Console.WriteLine($"{Path.GetFullPath(downloadFilePath)}\n"); + // END : FILE DOWNLOAD FUNCTIONALITY + } + catch (FileNotFoundException) + { + Console.WriteLine("File Not Found : Kindly verify the path."); } catch (Exception e) { @@ -43,21 +45,23 @@ public static void Run() } } + // START : STREAM SERIALIZER METHOD private static string CreateXml(object obj) { - var xmlDoc = new XmlDocument(); // Represents an XML document - var xmlSerializer = new XmlSerializer(obj.GetType()); // Initializes a new instance of the XmlDocument class. + var xmlDoc = new XmlDocument(); // Represents an XML Document + var xmlSerializer = new XmlSerializer(obj.GetType()); // Initializes a new instance of the XmlDocument class - // Creates a stream whose backing store is memory. + // Creates a stream whose backing store is memory using (var xmlStream = new MemoryStream()) { xmlSerializer.Serialize(xmlStream, obj); xmlStream.Position = 0; - // Loads the XML document from the specified string. + // Loads the XML document from the specified string xmlDoc.Load(xmlStream); return xmlDoc.InnerText; } } + // END : STREAM SERIALIZER METHOD } -} \ No newline at end of file +} diff --git a/src/Samples/TransactionDetails/CoreServices/RetrieveTransaction.cs b/src/Samples/TransactionDetails/RetrieveTransaction.cs similarity index 56% rename from src/Samples/TransactionDetails/CoreServices/RetrieveTransaction.cs rename to src/Samples/TransactionDetails/RetrieveTransaction.cs index 3341cfe..26c73de 100644 --- a/src/Samples/TransactionDetails/CoreServices/RetrieveTransaction.cs +++ b/src/Samples/TransactionDetails/RetrieveTransaction.cs @@ -1,26 +1,32 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.TransactionDetails.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.TransactionDetails { public class RetrieveTransaction { - public static void Run() + public static TssV2TransactionsGet200Response Run() { - const string id = "5698452335976950303001"; + string id = "5843582801906488504004"; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new TransactionDetailsApi(clientConfig); - var result = apiInstance.GetTransaction(id); + var apiInstance = new TransactionDetailsApi(clientConfig); + TssV2TransactionsGet200Response result = apiInstance.GetTransaction(id); Console.WriteLine(result); + return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } diff --git a/src/Samples/TransactionSearch/CoreServices/CreateSearchRequest.cs b/src/Samples/TransactionSearch/CoreServices/CreateSearchRequest.cs deleted file mode 100644 index 3bd18fd..0000000 --- a/src/Samples/TransactionSearch/CoreServices/CreateSearchRequest.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.TransactionSearch.CoreServices -{ - public class CreateSearchRequest - { - public static void Run() - { - try - { - var requestObj = new CyberSource.Model.CreateSearchRequest() - { - Save = false, - Name = "TSS search", - Timezone = "America/Chicago", - Query = "clientReferenceInformation.code:TC50171_3 AND submitTimeUtc:[NOW/DAY-7DAYS TO NOW/DAY+1DAY}", - Offset = 0, - Limit = 10, - Sort = "id:asc, submitTimeUtc:asc" - }; - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new SearchTransactionsApi(clientConfig); - - var result = apiInstance.CreateSearch(requestObj); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/TransactionSearch/CreateSearchRequest.cs b/src/Samples/TransactionSearch/CreateSearchRequest.cs new file mode 100644 index 0000000..2c88a41 --- /dev/null +++ b/src/Samples/TransactionSearch/CreateSearchRequest.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TransactionSearch +{ + public class CreateSearchRequest + { + public static TssV2TransactionsPost201Response Run() + { + bool save = false; + string name = "MRN"; + string timezone = "America/Chicago"; + string query = "clientReferenceInformation.code:TC50171_3 AND submitTimeUtc:[NOW/DAY-7DAYS TO NOW/DAY+1DAY}"; + int offset = 0; + int limit = 100; + string sort = "id:asc,submitTimeUtc:asc"; + var requestObj = new CyberSource.Model.CreateSearchRequest( + Save: save, + Name: name, + Timezone: timezone, + Query: query, + Offset: offset, + Limit: limit, + Sort: sort + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SearchTransactionsApi(clientConfig); + TssV2TransactionsPost201Response result = apiInstance.CreateSearch(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TransactionSearch/CoreServices/GetSearchResults.cs b/src/Samples/TransactionSearch/GetSearchResults.cs similarity index 55% rename from src/Samples/TransactionSearch/CoreServices/GetSearchResults.cs rename to src/Samples/TransactionSearch/GetSearchResults.cs index 555ab3c..93d4951 100644 --- a/src/Samples/TransactionSearch/CoreServices/GetSearchResults.cs +++ b/src/Samples/TransactionSearch/GetSearchResults.cs @@ -1,27 +1,33 @@ -using System; +using System; +using System.Collections.Generic; +using System.Globalization; + using CyberSource.Api; +using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.TransactionSearch.CoreServices +namespace Cybersource_rest_samples_dotnet.Samples.TransactionSearch { public class GetSearchResults { - public static void Run() + public static TssV2TransactionsPost201Response Run() { - var id = "cd46194f-b41f-4084-990a-7ea1f28aa831"; + var searchId = CreateSearchRequest.Run().SearchId; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new SearchTransactionsApi(clientConfig); - var result = apiInstance.GetSearch(id); + var apiInstance = new SearchTransactionsApi(clientConfig); + TssV2TransactionsPost201Response result = apiInstance.GetSearch(searchId); Console.WriteLine(result); + return result; } catch (Exception e) { - Console.WriteLine("Exception on calling the API: " + e.Message); + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } -} \ No newline at end of file +} diff --git a/src/Samples/UserManagement/CoreServices/GetUserInformation.cs b/src/Samples/UserManagement/CoreServices/GetUserInformation.cs deleted file mode 100644 index f702e9c..0000000 --- a/src/Samples/UserManagement/CoreServices/GetUserInformation.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.UserManagement.CoreServices -{ - public class GetUserInformation - { - public static void Run() - { - try - { - var organizationId = "testrest"; - var permissionId = "CustomerProfileViewPermission"; - var roleId = "admin"; - var username = "testrest"; - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new UserManagementApi(clientConfig); - - var result = apiInstance.GetUsers(organizationId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs b/src/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs new file mode 100644 index 0000000..fd3ea71 --- /dev/null +++ b/src/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.UserManagement +{ + public class GetUserInformationDeprecated + { + public static UmsV1UsersGet200Response Run() + { + string organizationId = "testrest"; + string userName = null; + string permissionId = "CustomerProfileViewPermission"; + string roleId = null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new UserManagementApi(clientConfig); + UmsV1UsersGet200Response result = apiInstance.GetUsers(organizationId, userName, permissionId, roleId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From b2aac87c1151fa162707f83d4337f4130d7b0f35 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 28 Apr 2020 12:33:40 +0530 Subject: [PATCH 010/161] Updated version of dependencies --- src/SampleCode.csproj | 4 ++-- src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs | 2 -- .../ServiceFees/ECheckStandaloneCreditWithServiceFee.cs | 2 -- src/Samples/Payouts/CoreServices/ProcessPayout.cs | 2 +- .../Reporting/CoreServices/GetReportingResourceInformation.cs | 2 +- .../RiskManagement/CoreServices/DecisionProfileReject.cs | 2 +- src/packages.config | 4 ++-- 7 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 2b66ae4..333bc98 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -40,10 +40,10 @@ lib\ApiSdk.dll - ..\packages\CyberSource.Authentication.0.0.0.6\lib\AuthenticationSdk.dll + ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll - ..\packages\CyberSource.Rest.Client.0.0.1.2\lib\cybersource-rest-client-dotnet.dll + ..\packages\CyberSource.Rest.Client.0.0.1.3\lib\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs index 687978a..ffb4e74 100644 --- a/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs +++ b/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs @@ -22,7 +22,6 @@ public static PtsV2CreditsPost201Response Run() requestObj.ClientReferenceInformation = v2PaymentsClientReferenceInformationObj; var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - var v2paymentsOrderInformationBillToCompany = "Visa"; var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo { Country = "US", @@ -35,7 +34,6 @@ public static PtsV2CreditsPost201Response Run() AdministrativeArea = "CA", Email = "test@cybs.com" }; - v2PaymentsOrderInformationBillToObj.Company = v2paymentsOrderInformationBillToCompany; v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails diff --git a/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs index 8f67e1f..786fffe 100644 --- a/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs +++ b/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs @@ -26,7 +26,6 @@ public static PtsV2CreditsPost201Response Run() requestObj.ProcessingInformation = processingInformation; var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - var v2paymentsOrderInformationBillToCompany = "Visa"; var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo { Country = "US", @@ -39,7 +38,6 @@ public static PtsV2CreditsPost201Response Run() AdministrativeArea = "CA", Email = "test@cybs.com" }; - v2PaymentsOrderInformationBillToObj.Company = v2paymentsOrderInformationBillToCompany; v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails diff --git a/src/Samples/Payouts/CoreServices/ProcessPayout.cs b/src/Samples/Payouts/CoreServices/ProcessPayout.cs index 47435a5..8d5dbea 100644 --- a/src/Samples/Payouts/CoreServices/ProcessPayout.cs +++ b/src/Samples/Payouts/CoreServices/ProcessPayout.cs @@ -10,7 +10,7 @@ public static void Run() { var requestObj = new OctCreatePaymentRequest(); - var clientReferenceInformationObj = new PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation + var clientReferenceInformationObj = new Ptsv2payoutsClientReferenceInformation { Code = "33557799" }; diff --git a/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs b/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs index 6d14aa8..b8f93ab 100644 --- a/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs +++ b/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs @@ -15,7 +15,7 @@ public static void Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new ReportDefinitionsApi(clientConfig); - var result = apiInstance.GetResourceV2Info(organizationId); + var result = apiInstance.GetResourceV2Info(organizationId: organizationId); Console.WriteLine(result); } catch (Exception e) diff --git a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs index cf28630..3933204 100644 --- a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs +++ b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs @@ -55,7 +55,7 @@ public static RiskV1DecisionsPost201Response Run() var riskInformation = new Riskv1decisionsRiskInformation(); - var profile = new Riskv1decisionsRiskInformationProfile(); + var profile = new Ptsv2paymentsRiskInformationProfile(); profile.Name = "profile2"; riskInformation.Profile = profile; diff --git a/src/packages.config b/src/packages.config index a4406d6..186cca5 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - - + + From 431017ff5b29b7ea0dd8cb5f5d82d771cd6ce0cc Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 30 Apr 2020 14:25:55 +0530 Subject: [PATCH 011/161] Added PayerAuthentication Sample Codes --- src/SampleCode.csproj | 16 +- .../AuthenticationWithNORedirect.cs | 92 +++++++++++ .../AuthenticationWithNewAccount.cs | 118 ++++++++++++++ .../EnrollWithPendingAuthentication.cs | 104 ++++++++++++ .../EnrollWithTravelInformation.cs | 148 ++++++++++++++++++ .../PendingAuthenticationWithUnknownPath.cs | 92 +++++++++++ .../ValidateAuthenticationResults.cs | 88 +++++++++++ src/Samples/Payouts/PayoutCardNotToken.cs | 2 +- src/Samples/Payouts/PayoutToken.cs | 2 +- .../ReportDownloads/DownloadReport.cs | 4 +- .../DMWithDecisionProfileRejectResponse.cs | 2 +- src/packages.config | 4 +- 12 files changed, 661 insertions(+), 11 deletions(-) create mode 100644 src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNORedirect.cs create mode 100644 src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNewAccount.cs create mode 100644 src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithPendingAuthentication.cs create mode 100644 src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs create mode 100644 src/Samples/PayerAuthentication/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs create mode 100644 src/Samples/PayerAuthentication/PayerAuthentication/ValidateAuthenticationResults.cs diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 1312bed..3e87ca0 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -39,11 +39,13 @@ False lib\ApiSdk.dll - - ..\packages\CyberSource.Authentication.0.0.0.6\lib\AuthenticationSdk.dll + + False + ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll - - ..\packages\CyberSource.Rest.Client.0.0.1.2\lib\cybersource-rest-client-dotnet.dll + + False + ..\packages\CyberSource.Rest.Client.0.0.1.3\lib\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -94,6 +96,12 @@ + + + + + + diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNORedirect.cs b/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNORedirect.cs new file mode 100644 index 0000000..204868e --- /dev/null +++ b/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNORedirect.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class AuthenticationWithNORedirect + { + public static RiskV1AuthenticationsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "10.99"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToPhoneNumber = "4158880000"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPostalCode = "94105"; + Riskv1authenticationsOrderInformationBillTo orderInformationBillTo = new Riskv1authenticationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1authenticationsOrderInformation orderInformation = new Riskv1authenticationsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string paymentInformationCardType = "001"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + string paymentInformationCardNumber = "4000990000000004"; + Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Type: paymentInformationCardType, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Number: paymentInformationCardNumber + ); + + Riskv1authenticationsPaymentInformation paymentInformation = new Riskv1authenticationsPaymentInformation( + Card: paymentInformationCard + ); + + var requestObj = new CheckPayerAuthEnrollmentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNewAccount.cs b/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNewAccount.cs new file mode 100644 index 0000000..9a59f7b --- /dev/null +++ b/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNewAccount.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class AuthenticationWithNewAccount + { + public static RiskV1AuthenticationsPost201Response Run() + { + string clientReferenceInformationCode = "New Account"; + Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "10.99"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToPhoneNumber = "4158880000"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPostalCode = "94105"; + Riskv1authenticationsOrderInformationBillTo orderInformationBillTo = new Riskv1authenticationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1authenticationsOrderInformation orderInformation = new Riskv1authenticationsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string paymentInformationCardType = "001"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + string paymentInformationCardNumber = "4000990000000004"; + Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Type: paymentInformationCardType, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Number: paymentInformationCardNumber + ); + + Riskv1authenticationsPaymentInformation paymentInformation = new Riskv1authenticationsPaymentInformation( + Card: paymentInformationCard + ); + + string consumerAuthenticationInformationTransactionMode = "MOTO"; + Riskv1authenticationsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationsConsumerAuthenticationInformation( + TransactionMode: consumerAuthenticationInformationTransactionMode + ); + + string riskInformationBuyerHistoryCustomerAccountCreationHistory = "NEW_ACCOUNT"; + Ptsv2paymentsRiskInformationBuyerHistoryCustomerAccount riskInformationBuyerHistoryCustomerAccount = new Ptsv2paymentsRiskInformationBuyerHistoryCustomerAccount( + CreationHistory: riskInformationBuyerHistoryCustomerAccountCreationHistory + ); + + bool riskInformationBuyerHistoryAccountHistoryFirstUseOfShippingAddress = false; + Ptsv2paymentsRiskInformationBuyerHistoryAccountHistory riskInformationBuyerHistoryAccountHistory = new Ptsv2paymentsRiskInformationBuyerHistoryAccountHistory( + FirstUseOfShippingAddress: riskInformationBuyerHistoryAccountHistoryFirstUseOfShippingAddress + ); + + Ptsv2paymentsRiskInformationBuyerHistory riskInformationBuyerHistory = new Ptsv2paymentsRiskInformationBuyerHistory( + CustomerAccount: riskInformationBuyerHistoryCustomerAccount, + AccountHistory: riskInformationBuyerHistoryAccountHistory + ); + + Riskv1authenticationsRiskInformation riskInformation = new Riskv1authenticationsRiskInformation( + BuyerHistory: riskInformationBuyerHistory + ); + + var requestObj = new CheckPayerAuthEnrollmentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + PaymentInformation: paymentInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation, + RiskInformation: riskInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithPendingAuthentication.cs b/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithPendingAuthentication.cs new file mode 100644 index 0000000..69afff3 --- /dev/null +++ b/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithPendingAuthentication.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class EnrollWithPendingAuthentication + { + public static RiskV1AuthenticationsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "10.99"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToPhoneNumber = "4158880000"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPostalCode = "94105"; + Riskv1authenticationsOrderInformationBillTo orderInformationBillTo = new Riskv1authenticationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1authenticationsOrderInformation orderInformation = new Riskv1authenticationsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string paymentInformationCardType = "001"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + string paymentInformationCardNumber = "4000000000000101"; + Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Type: paymentInformationCardType, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Number: paymentInformationCardNumber + ); + + Riskv1authenticationsPaymentInformation paymentInformation = new Riskv1authenticationsPaymentInformation( + Card: paymentInformationCard + ); + + int buyerInformationMobilePhone = 1245789632; + Riskv1authenticationsBuyerInformation buyerInformation = new Riskv1authenticationsBuyerInformation( + MobilePhone: buyerInformationMobilePhone + ); + + string consumerAuthenticationInformationTransactionMode = "MOTO"; + Riskv1authenticationsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationsConsumerAuthenticationInformation( + TransactionMode: consumerAuthenticationInformationTransactionMode + ); + + var requestObj = new CheckPayerAuthEnrollmentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + PaymentInformation: paymentInformation, + BuyerInformation: buyerInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs b/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs new file mode 100644 index 0000000..5c42a89 --- /dev/null +++ b/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class EnrollWithTravelInformation + { + public static RiskV1AuthenticationsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "10.99"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToPhoneNumber = "4158880000"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPostalCode = "94105"; + Riskv1authenticationsOrderInformationBillTo orderInformationBillTo = new Riskv1authenticationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1authenticationsOrderInformation orderInformation = new Riskv1authenticationsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string paymentInformationCardType = "002"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + string paymentInformationCardNumber = "5200340000000015"; + Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Type: paymentInformationCardType, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Number: paymentInformationCardNumber + ); + + Riskv1authenticationsPaymentInformation paymentInformation = new Riskv1authenticationsPaymentInformation( + Card: paymentInformationCard + ); + + int buyerInformationMobilePhone = 1245789632; + Riskv1authenticationsBuyerInformation buyerInformation = new Riskv1authenticationsBuyerInformation( + MobilePhone: buyerInformationMobilePhone + ); + + string consumerAuthenticationInformationTransactionMode = "MOTO"; + Riskv1authenticationsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationsConsumerAuthenticationInformation( + TransactionMode: consumerAuthenticationInformationTransactionMode + ); + + + List travelInformationLegs = new List (); + string travelInformationLegsDestination1 = "DEFGH"; + string travelInformationLegsCarrierCode1 = "UA"; + string travelInformationLegsDepartureDate1 = "2019-01-01"; + travelInformationLegs.Add(new Riskv1authenticationsTravelInformationLegs( + Destination: travelInformationLegsDestination1, + CarrierCode: travelInformationLegsCarrierCode1, + DepartureDate: travelInformationLegsDepartureDate1 + )); + + string travelInformationLegsDestination2 = "RESD"; + string travelInformationLegsCarrierCode2 = "AS"; + string travelInformationLegsDepartureDate2 = "2019-02-21"; + travelInformationLegs.Add(new Riskv1authenticationsTravelInformationLegs( + Destination: travelInformationLegsDestination2, + CarrierCode: travelInformationLegsCarrierCode2, + DepartureDate: travelInformationLegsDepartureDate2 + )); + + int travelInformationNumberOfPassengers = 2; + + List travelInformationPassengers = new List (); + string travelInformationPassengersFirstName1 = "Raj"; + string travelInformationPassengersLastName1 = "Charles"; + travelInformationPassengers.Add(new Riskv1authenticationsTravelInformationPassengers( + FirstName: travelInformationPassengersFirstName1, + LastName: travelInformationPassengersLastName1 + )); + + string travelInformationPassengersFirstName2 = "Potter"; + string travelInformationPassengersLastName2 = "Suhember"; + travelInformationPassengers.Add(new Riskv1authenticationsTravelInformationPassengers( + FirstName: travelInformationPassengersFirstName2, + LastName: travelInformationPassengersLastName2 + )); + + Riskv1authenticationsTravelInformation travelInformation = new Riskv1authenticationsTravelInformation( + Legs: travelInformationLegs, + NumberOfPassengers: travelInformationNumberOfPassengers, + Passengers: travelInformationPassengers + ); + + var requestObj = new CheckPayerAuthEnrollmentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + PaymentInformation: paymentInformation, + BuyerInformation: buyerInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation, + TravelInformation: travelInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs b/src/Samples/PayerAuthentication/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs new file mode 100644 index 0000000..4150db6 --- /dev/null +++ b/src/Samples/PayerAuthentication/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class PendingAuthenticationWithUnknownPath + { + public static RiskV1AuthenticationsPost201Response Run() + { + string clientReferenceInformationCode = "UNKNOWN"; + Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "10.99"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToPhoneNumber = "4158880000"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPostalCode = "94105"; + Riskv1authenticationsOrderInformationBillTo orderInformationBillTo = new Riskv1authenticationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1authenticationsOrderInformation orderInformation = new Riskv1authenticationsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string paymentInformationCardType = "001"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + string paymentInformationCardNumber = "4012001037490014"; + Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Type: paymentInformationCardType, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Number: paymentInformationCardNumber + ); + + Riskv1authenticationsPaymentInformation paymentInformation = new Riskv1authenticationsPaymentInformation( + Card: paymentInformationCard + ); + + var requestObj = new CheckPayerAuthEnrollmentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/ValidateAuthenticationResults.cs b/src/Samples/PayerAuthentication/PayerAuthentication/ValidateAuthenticationResults.cs new file mode 100644 index 0000000..d772925 --- /dev/null +++ b/src/Samples/PayerAuthentication/PayerAuthentication/ValidateAuthenticationResults.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class ValidateAuthenticationResults + { + public static RiskV1AuthenticationResultsPost201Response Run() + { + string clientReferenceInformationCode = "pavalidatecheck"; + Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "200.00"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsUnitPrice1 = "10"; + int orderInformationLineItemsQuantity1 = 2; + string orderInformationLineItemsTaxAmount1 = "32.40"; + orderInformationLineItems.Add(new Riskv1authenticationresultsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + TaxAmount: orderInformationLineItemsTaxAmount1 + )); + + Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( + AmountDetails: orderInformationAmountDetails, + LineItems: orderInformationLineItems + ); + + string paymentInformationCardType = "002"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + string paymentInformationCardNumber = "5200000000000007"; + Riskv1authenticationresultsPaymentInformationCard paymentInformationCard = new Riskv1authenticationresultsPaymentInformationCard( + Type: paymentInformationCardType, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Number: paymentInformationCardNumber + ); + + Riskv1authenticationresultsPaymentInformation paymentInformation = new Riskv1authenticationresultsPaymentInformation( + Card: paymentInformationCard + ); + + string consumerAuthenticationInformationAuthenticationTransactionId = "PYffv9G3sa1e0CQr5fV0"; + string consumerAuthenticationInformationSignedPares = "eNqdmFmT4jgSgN+J4D90zD4yMz45PEFVhHzgA2zwjXnzhQ984Nvw61dAV1"; + Riskv1authenticationresultsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationresultsConsumerAuthenticationInformation( + AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId, + SignedPares: consumerAuthenticationInformationSignedPares + ); + + var requestObj = new ValidateRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + PaymentInformation: paymentInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationResultsPost201Response result = apiInstance.ValidateAuthenticationResults(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payouts/PayoutCardNotToken.cs b/src/Samples/Payouts/PayoutCardNotToken.cs index e881d68..da8c3d8 100644 --- a/src/Samples/Payouts/PayoutCardNotToken.cs +++ b/src/Samples/Payouts/PayoutCardNotToken.cs @@ -12,7 +12,7 @@ public class PayoutCardNotToken public static PtsV2PayoutsPost201Response Run() { string clientReferenceInformationCode = "33557799"; - PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation clientReferenceInformation = new PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation( + Ptsv2payoutsClientReferenceInformation clientReferenceInformation = new Ptsv2payoutsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/src/Samples/Payouts/PayoutToken.cs b/src/Samples/Payouts/PayoutToken.cs index 76abb97..1240b33 100644 --- a/src/Samples/Payouts/PayoutToken.cs +++ b/src/Samples/Payouts/PayoutToken.cs @@ -12,7 +12,7 @@ public class PayoutToken public static PtsV2PayoutsPost201Response Run() { string clientReferenceInformationCode = "111111113"; - PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation clientReferenceInformation = new PtsV2IncrementalAuthorizationPatch201ResponseClientReferenceInformation( + Ptsv2payoutsClientReferenceInformation clientReferenceInformation = new Ptsv2payoutsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/src/Samples/Reporting/ReportDownloads/DownloadReport.cs b/src/Samples/Reporting/ReportDownloads/DownloadReport.cs index 74c7bac..dbb52a0 100644 --- a/src/Samples/Reporting/ReportDownloads/DownloadReport.cs +++ b/src/Samples/Reporting/ReportDownloads/DownloadReport.cs @@ -19,14 +19,14 @@ public static void Run() string organizationId = "testrest"; var reportDate = DateTime.ParseExact("2018-09-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); string reportName = "testrest_subcription_v2989"; - string reportTime = "00:00:00Z"; + try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new ReportDownloadsApi(clientConfig); - var content = apiInstance.DownloadReportWithHttpInfo(reportDate, reportName, organizationId, reportTime); + var content = apiInstance.DownloadReportWithHttpInfo(reportDate, reportName, organizationId); // START : FILE DOWNLOAD FUNCTIONALITY File.WriteAllText(downloadFilePath, CreateXml(content.Data)); diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs b/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs index bc3b2e3..fa94d89 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs @@ -63,7 +63,7 @@ public static RiskV1DecisionsPost201Response Run() ); string riskInformationProfileName = "profile2"; - Riskv1decisionsRiskInformationProfile riskInformationProfile = new Riskv1decisionsRiskInformationProfile( + Ptsv2paymentsRiskInformationProfile riskInformationProfile = new Ptsv2paymentsRiskInformationProfile( Name: riskInformationProfileName ); diff --git a/src/packages.config b/src/packages.config index a4406d6..186cca5 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - - + + From d2cf1b8d9caad28bf4008edcb790036e99d8c8ff Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 30 Apr 2020 16:09:43 +0530 Subject: [PATCH 012/161] Updated dates for report search --- src/Samples/Reporting/Reports/RetrieveAvailableReports.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs b/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs index 2089793..33019b0 100644 --- a/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs +++ b/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs @@ -12,8 +12,8 @@ public class RetrieveAvailableReports public static ReportingV3ReportsGet200Response Run() { string organizationId = null; - var startTime = DateTime.ParseExact("2018-10-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2018-10-30T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2020-04-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-04-03T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string timeQueryType = "executedTime"; string reportMimeType = "application/xml"; string reportFrequency = null; From a20fc26c51390852285d174d666d3d2ecef8aa7b Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 30 Apr 2020 16:19:20 +0530 Subject: [PATCH 013/161] Corrected travel leg --- .../PayerAuthentication/EnrollWithTravelInformation.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs b/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs index 5c42a89..ee28d45 100644 --- a/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs +++ b/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs @@ -78,7 +78,7 @@ public static RiskV1AuthenticationsPost201Response Run() List travelInformationLegs = new List (); - string travelInformationLegsDestination1 = "DEFGH"; + string travelInformationLegsDestination1 = "DEF"; string travelInformationLegsCarrierCode1 = "UA"; string travelInformationLegsDepartureDate1 = "2019-01-01"; travelInformationLegs.Add(new Riskv1authenticationsTravelInformationLegs( @@ -87,7 +87,7 @@ public static RiskV1AuthenticationsPost201Response Run() DepartureDate: travelInformationLegsDepartureDate1 )); - string travelInformationLegsDestination2 = "RESD"; + string travelInformationLegsDestination2 = "RES"; string travelInformationLegsCarrierCode2 = "AS"; string travelInformationLegsDepartureDate2 = "2019-02-21"; travelInformationLegs.Add(new Riskv1authenticationsTravelInformationLegs( From 4299043c8444326303f0d6038d8a14c7e2d00e6a Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 30 Apr 2020 17:51:44 +0530 Subject: [PATCH 014/161] Removed extra level of directory --- .../{PayerAuthentication => }/AuthenticationWithNORedirect.cs | 0 .../{PayerAuthentication => }/AuthenticationWithNewAccount.cs | 0 .../{PayerAuthentication => }/EnrollWithPendingAuthentication.cs | 0 .../{PayerAuthentication => }/EnrollWithTravelInformation.cs | 0 .../PendingAuthenticationWithUnknownPath.cs | 0 .../{PayerAuthentication => }/ValidateAuthenticationResults.cs | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename src/Samples/PayerAuthentication/{PayerAuthentication => }/AuthenticationWithNORedirect.cs (100%) rename src/Samples/PayerAuthentication/{PayerAuthentication => }/AuthenticationWithNewAccount.cs (100%) rename src/Samples/PayerAuthentication/{PayerAuthentication => }/EnrollWithPendingAuthentication.cs (100%) rename src/Samples/PayerAuthentication/{PayerAuthentication => }/EnrollWithTravelInformation.cs (100%) rename src/Samples/PayerAuthentication/{PayerAuthentication => }/PendingAuthenticationWithUnknownPath.cs (100%) rename src/Samples/PayerAuthentication/{PayerAuthentication => }/ValidateAuthenticationResults.cs (100%) diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNORedirect.cs b/src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs similarity index 100% rename from src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNORedirect.cs rename to src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNewAccount.cs b/src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs similarity index 100% rename from src/Samples/PayerAuthentication/PayerAuthentication/AuthenticationWithNewAccount.cs rename to src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithPendingAuthentication.cs b/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs similarity index 100% rename from src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithPendingAuthentication.cs rename to src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs b/src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs similarity index 100% rename from src/Samples/PayerAuthentication/PayerAuthentication/EnrollWithTravelInformation.cs rename to src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs b/src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs similarity index 100% rename from src/Samples/PayerAuthentication/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs rename to src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs diff --git a/src/Samples/PayerAuthentication/PayerAuthentication/ValidateAuthenticationResults.cs b/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs similarity index 100% rename from src/Samples/PayerAuthentication/PayerAuthentication/ValidateAuthenticationResults.cs rename to src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs From ea663269531879f5446b0b37008efa3b575bb578 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 15 May 2020 19:25:30 +0530 Subject: [PATCH 015/161] Mid-May 2020 Release (Generation) --- src/SampleCode.csproj | 54 ++++++++++++++++++- .../CoreServices/CreateDecisionManagerCase.cs | 4 +- .../CoreServices/DecisionProfileReject.cs | 4 +- .../CoreServices/DmWithBuyerInformation.cs | 4 +- .../CoreServices/DmWithDeviceInformation.cs | 4 +- .../DmWithMerchantDefinedInformation.cs | 4 +- .../CoreServices/DmWithShippingInformation.cs | 4 +- .../CoreServices/DmWithTravelInformation.cs | 4 +- .../CoreServices/ScoreExceedsThreshold.cs | 4 +- .../DownloadFileWithFileIdentifier.cs | 3 +- .../CoreServices/GetListOfFiles.cs | 4 +- 11 files changed, 72 insertions(+), 21 deletions(-) diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 333bc98..146a3b3 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -42,8 +42,9 @@ ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll - - ..\packages\CyberSource.Rest.Client.0.0.1.3\lib\cybersource-rest-client-dotnet.dll + + False + ..\..\cybersource-rest-client-dotnet\bin\Release\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -92,6 +93,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs b/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs index c46045e..5ac9438 100644 --- a/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs +++ b/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs @@ -12,7 +12,7 @@ public class CreateDecisionManagerCase { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -59,7 +59,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs index 3933204..3382d50 100644 --- a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs +++ b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs @@ -12,7 +12,7 @@ public class DecisionProfileReject { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -68,7 +68,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs index 4c6e5f6..7ec8bee 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs @@ -12,7 +12,7 @@ public class DmWithBuyerInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -72,7 +72,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs index b2f7c79..2fd8552 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs @@ -12,7 +12,7 @@ public class DmWithDeviceInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -68,7 +68,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs index 1b6f423..bbab996 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs @@ -12,7 +12,7 @@ public class DmWithMerchantDefinedInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -73,7 +73,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs index c12a993..b9e3809 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs @@ -12,7 +12,7 @@ public class DmWithShippingInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -72,7 +72,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs index 37c2968..6655789 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs @@ -12,7 +12,7 @@ public class DmWithTravelInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -80,7 +80,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs b/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs index ed42031..deb029e 100644 --- a/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs +++ b/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs @@ -12,7 +12,7 @@ public class ScoreExceedsThreshold { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateDecisionManagerCaseRequest(); + var requestObj = new CreateBundledDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -72,7 +72,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateDecisionManagerCase(requestObj); + var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs b/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs index f06c364..5ac491a 100644 --- a/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs +++ b/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs @@ -21,12 +21,13 @@ public static void Run() // This can be either a relative path or an absolute path const string downloadFilePath = @".\Resource\" + fileName; - var fileId = "dGVzdHJlc3Rfc3ViY3JpcHRpb25fdjI5ODktOTMwYWU5MmItOTcxMy00N2U4LWUwNTMtYTI1ODhlMGFjZDNjLnhtbC0yMDE5LTA5LTMw"; + var fileId = "dGVzdHJlc3Rfc3ViY3JpcHRpb25fdjI5ODktYTM3ZmI2ZjUtM2QzYi0wOGVhLWUwNTMtYTI1ODhlMGFkOTJjLnhtbC0yMDIwLTA0LTMw"; var organizationId = "testrest"; var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new SecureFileShareApi(clientConfig); + apiInstance.Configuration.ApiClient.AcceptHeader = "text/csv"; var content = apiInstance.GetFileWithHttpInfo(fileId, organizationId); diff --git a/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs b/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs index 260acca..9ecd901 100644 --- a/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs +++ b/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs @@ -10,8 +10,8 @@ public static void Run() { try { - var startDate = DateTime.ParseExact("2018-10-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); - var endDate = DateTime.ParseExact("2018-10-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var startDate = DateTime.ParseExact("2020-04-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var endDate = DateTime.ParseExact("2020-04-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); var organizationId = "testrest"; var configDictionary = new Configuration().GetConfiguration(); From 5815365e534769617193adc0d25c241dc33a6c06 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 15 May 2020 19:28:11 +0530 Subject: [PATCH 016/161] Mid-May 2020 Release (Generation) --- ...AmericanExpressDirectEMVWithContactRead.cs | 108 +++++++++++++++ ...SkipDecisionManagerForSingleTransaction.cs | 100 ++++++++++++++ .../AuthorizationUsingSwipedTrackData.cs | 86 ++++++++++++ .../AuthorizationWithCaptureSale.cs | 94 +++++++++++++ .../AuthorizationWithDMAcceptPAEnroll.cs | 102 ++++++++++++++ .../AuthorizationWithDMRejectPAEnroll.cs | 102 ++++++++++++++ .../AuthorizationWithDMReviewPAEnroll.cs | 102 ++++++++++++++ .../AuthorizationWithDecisionManager.cs | 96 +++++++++++++ ...tionWithDecisionManagerBuyerInformation.cs | 106 +++++++++++++++ ...orizationWithDecisionManagerCustomSetup.cs | 100 ++++++++++++++ ...ionWithDecisionManagerDeviceInformation.cs | 100 ++++++++++++++ ...cisionManagerMerchantDefinedInformation.cs | 105 +++++++++++++++ ...nWithDecisionManagerShippingInformation.cs | 108 +++++++++++++++ ...ionWithDecisionManagerTravelInformation.cs | 92 +++++++++++++ ...izationWithPAEnrollAuthenticationNeeded.cs | 108 +++++++++++++++ .../AuthorizationWithPayerAuthValidation.cs | 98 ++++++++++++++ ...eOfAuthorizationThatUsedSwipedTrackData.cs | 60 +++++++++ .../CoreServices/CyberSourceMPOSEMV.cs | 114 ++++++++++++++++ .../CoreServices/DigitalPaymentGooglePay.cs | 102 ++++++++++++++ .../CoreServices/DigitalPaymentsApplePay.cs | 102 ++++++++++++++ .../CoreServices/ElectronicCheckDebits.cs | 96 +++++++++++++ .../ElectronicCheckStandAloneCredits.cs | 100 ++++++++++++++ .../Payments/CoreServices/LevelIIData.cs | 106 +++++++++++++++ .../Payments/CoreServices/LevelIIIData.cs | 126 ++++++++++++++++++ .../CoreServices/PartialAuthorization.cs | 106 +++++++++++++++ .../PaymentNetworkTokenization.cs | 106 +++++++++++++++ .../PaymentWithPaymentInstrumentToken.cs | 84 ++++++++++++ .../CoreServices/RestaurantAuthorization.cs | 86 ++++++++++++ .../RestaurantCaptureWithGratuity.cs | 68 ++++++++++ ...UsingEMVTechnologyWithContactReadForCTV.cs | 92 +++++++++++++ ...TechnologyWithContactReadOneForAcquirer.cs | 80 +++++++++++ ...TechnologyWithContactReadTwoForAcquirer.cs | 108 +++++++++++++++ ...EMVTechnologyWithContactlessForAcquirer.cs | 80 +++++++++++ ...echnologyWithContactlessReadForAcquirer.cs | 108 +++++++++++++++ ...gEMVTechnologyWithContactlessReadForCTV.cs | 92 +++++++++++++ .../SaleUsingKeyedDataForAcquirer.cs | 84 ++++++++++++ .../CoreServices/SaleUsingKeyedDataForCTV.cs | 94 +++++++++++++ .../SaleUsingKeyedDataWithBalanceInquiry.cs | 100 ++++++++++++++ .../SaleUsingSwipedTrackDataForAcquirer.cs | 70 ++++++++++ .../SaleUsingSwipedTrackDataForCTV.cs | 80 +++++++++++ .../ServiceFeesWithCreditCardTransaction.cs | 114 ++++++++++++++++ .../SimpleAuthorizationInternet.cs | 88 ++++++++++++ src/Samples/Payments/CoreServices/Swiped.cs | 70 ++++++++++ .../CoreServices/ZeroDollarAuthorization.cs | 98 ++++++++++++++ 44 files changed, 4221 insertions(+) create mode 100644 src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs create mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs create mode 100644 src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs create mode 100644 src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs create mode 100644 src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs create mode 100644 src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs create mode 100644 src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs create mode 100644 src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs create mode 100644 src/Samples/Payments/CoreServices/LevelIIData.cs create mode 100644 src/Samples/Payments/CoreServices/LevelIIIData.cs create mode 100644 src/Samples/Payments/CoreServices/PartialAuthorization.cs create mode 100644 src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs create mode 100644 src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs create mode 100644 src/Samples/Payments/CoreServices/RestaurantAuthorization.cs create mode 100644 src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs create mode 100644 src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs create mode 100644 src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs create mode 100644 src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs create mode 100644 src/Samples/Payments/CoreServices/Swiped.cs create mode 100644 src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs diff --git a/src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs b/src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs new file mode 100644 index 0000000..24e1d1a --- /dev/null +++ b/src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AmericanExpressDirectEMVWithContactRead + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + + List pointOfSaleInformationCardholderVerificationMethod = new List (); + pointOfSaleInformationCardholderVerificationMethod.Add("pin"); + pointOfSaleInformationCardholderVerificationMethod.Add("signature"); + + List pointOfSaleInformationTerminalInputCapability = new List (); + pointOfSaleInformationTerminalInputCapability.Add("contact"); + pointOfSaleInformationTerminalInputCapability.Add("contactless"); + pointOfSaleInformationTerminalInputCapability.Add("keyed"); + pointOfSaleInformationTerminalInputCapability.Add("swiped"); + string pointOfSaleInformationTerminalCardCaptureCapability = "1"; + string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; + string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData, + CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, + TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, + TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, + DeviceId: pointOfSaleInformationDeviceId, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs b/src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs new file mode 100644 index 0000000..d115e4f --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationSkipDecisionManagerForSingleTransaction + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_16"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("DECISION_SKIP"); + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "11"; + string paymentInformationCardExpirationYear = "2025"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs b/src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs new file mode 100644 index 0000000..8155510 --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationUsingSwipedTrackData + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "ABC123"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs b/src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs new file mode 100644 index 0000000..80a52d0 --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithCaptureSale + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs new file mode 100644 index 0000000..bb357fa --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDMAcceptPAEnroll + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "cbys_test"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "340000000001007"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "1234"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "1.00"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "accept@cybersource.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs new file mode 100644 index 0000000..7187539 --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDMRejectPAEnroll + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "372425119311008"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "1234"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "reject@domain.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs new file mode 100644 index 0000000..86481bb --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDMReviewPAEnroll + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "372425119311008"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "1234"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "review@domain.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs new file mode 100644 index 0000000..5a08dbd --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDecisionManager + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TSYS_Eh_FE_01"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "11"; + string paymentInformationCardExpirationYear = "2025"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "JSON"; + string orderInformationBillToLastName = "RTS"; + string orderInformationBillToAddress1 = "201 S. Division St._1"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "beforeauth@cybersource.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs new file mode 100644 index 0000000..e95d212 --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDecisionManagerBuyerInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string buyerInformationDateOfBirth = "19980505"; + + List buyerInformationPersonalIdentification = new List (); + string buyerInformationPersonalIdentificationType1 = "CPF"; + string buyerInformationPersonalIdentificationId1 = "1a23apwe98"; + buyerInformationPersonalIdentification.Add(new Ptsv2paymentsBuyerInformationPersonalIdentification( + Type: buyerInformationPersonalIdentificationType1, + Id: buyerInformationPersonalIdentificationId1 + )); + + string buyerInformationHashedPassword = ""; + Ptsv2paymentsBuyerInformation buyerInformation = new Ptsv2paymentsBuyerInformation( + DateOfBirth: buyerInformationDateOfBirth, + PersonalIdentification: buyerInformationPersonalIdentification, + HashedPassword: buyerInformationHashedPassword + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs new file mode 100644 index 0000000..a0a37cc --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDecisionManagerCustomSetup + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_16"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("DECISION"); + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "11"; + string paymentInformationCardExpirationYear = "2025"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs new file mode 100644 index 0000000..5527719 --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDecisionManagerDeviceInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string deviceInformationHostName = "host.com"; + string deviceInformationIpAddress = "64.124.61.215"; + string deviceInformationUserAgent = "Chrome"; + string deviceInformationHttpBrowserEmail = "xyz@gmail.com"; + Ptsv2paymentsDeviceInformation deviceInformation = new Ptsv2paymentsDeviceInformation( + HostName: deviceInformationHostName, + IpAddress: deviceInformationIpAddress, + UserAgent: deviceInformationUserAgent, + HttpBrowserEmail: deviceInformationHttpBrowserEmail + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + DeviceInformation: deviceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs new file mode 100644 index 0000000..9f878d3 --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDecisionManagerMerchantDefinedInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + + List merchantDefinedInformation = new List (); + string merchantDefinedInformationKey1 = "1"; + string merchantDefinedInformationValue1 = "Test"; + merchantDefinedInformation.Add(new Ptsv2paymentsMerchantDefinedInformation( + Key: merchantDefinedInformationKey1, + Value: merchantDefinedInformationValue1 + )); + + string merchantDefinedInformationKey2 = "2"; + string merchantDefinedInformationValue2 = "Test2"; + merchantDefinedInformation.Add(new Ptsv2paymentsMerchantDefinedInformation( + Key: merchantDefinedInformationKey2, + Value: merchantDefinedInformationValue2 + )); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantDefinedInformation: merchantDefinedInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs new file mode 100644 index 0000000..94c5c3e --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDecisionManagerShippingInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "James"; + string orderInformationShipToLastName = "Smith"; + string orderInformationShipToAddress1 = "96, powers street"; + string orderInformationShipToLocality = "Clearwater milford"; + string orderInformationShipToAdministrativeArea = "KA"; + string orderInformationShipToPostalCode = "560056"; + string orderInformationShipToCountry = "IN"; + string orderInformationShipToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry, + PhoneNumber: orderInformationShipToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs new file mode 100644 index 0000000..4896725 --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithDecisionManagerTravelInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + Ptsv2paymentsTravelInformation travelInformation = new Ptsv2paymentsTravelInformation( + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + TravelInformation: travelInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs b/src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs new file mode 100644 index 0000000..ee908aa --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithPAEnrollAuthenticationNeeded + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4000000000001091"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2023"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "201 S. Division St._1"; + string orderInformationBillToAddress2 = "Suite 500"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "accept@cybersource.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationRequestorId = "123123197675"; + string consumerAuthenticationInformationReferenceId = "CybsCruiseTester-8ac0b02f"; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + RequestorId: consumerAuthenticationInformationRequestorId, + ReferenceId: consumerAuthenticationInformationReferenceId + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs new file mode 100644 index 0000000..dd3b51a --- /dev/null +++ b/src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class AuthorizationWithPayerAuthValidation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("VALIDATE_CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4000000000001091"; + string paymentInformationCardExpirationMonth = "01"; + string paymentInformationCardExpirationYear = "2023"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "201 S. Division St._1"; + string orderInformationBillToAddress2 = "Suite 500"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "accept@cybs.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationAuthenticationTransactionId = "OiCtXA1j1AxtSNDh5lt1"; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs b/src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs new file mode 100644 index 0000000..0471f50 --- /dev/null +++ b/src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class CaptureOfAuthorizationThatUsedSwipedTrackData + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + var processPaymentId = AuthorizationUsingSwipedTrackData.Run().Id; + string clientReferenceInformationCode = "1234567890"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + + var result = apiInstance.CapturePayment(requestObj, processPaymentId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs b/src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs new file mode 100644 index 0000000..49be980 --- /dev/null +++ b/src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class CyberSourceMPOSEMV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_16"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + string processingInformationPaymentSolution = "011"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PaymentSolution: processingInformationPaymentSolution + ); + + string paymentInformationFluidDataDescriptor = "EMV.PAYMENT.AnywhereCommerce.Walker"; + string paymentInformationFluidDataValue = "ewogICJkYXRhIiA6ICJOZmNwRURiK1dLdzBnQkpsaTRcL1hlWm1ITzdUSng0bnRoMnc2Mk9ITVJQK3hCRlFPdFE0WWpRcnY0RmFkOHh6VExqT2VFQm5iNHFzeGZMYTNyNXcxVEdXblFGQnNzMWtPYnA0XC95alNtVE1JSGVjbGc5OFROaEhNb0VRcjJkRkFqYVpBTFAxSlBsdVhKSVwvbTZKSmVwNGh3VHRWZE16Z2laSUhnaWFCYzNXZVd1ZnYzc1l0cGRaZDZYZENEUFdLeXFkYjBJdUtkdkpBPT0iLAogICJzaWduYXR1cmUiIDogIkFxck1pKzc0cm1GeVBKVE9HN3NuN2p5K1YxTlpBZUNJVE56TW01N1B5cmc9IiwKICAic2lnbmF0dXJlQWxnSW5mbyIgOiAiSE1BQ3dpdGhTSEEyNTYiLAogICJoZWFkZXIiIDogewogICAgInRyYW5zYWN0aW9uSWQiIDogIjE1MTU2MjI2NjIuMTcyMjIwIiwKICAgICJwdWJsaWNLZXlIYXNoIiA6ICJcLzdmdldqRVhMazJPRWpcL3Z5bk1jeEZvMmRWSTlpRXVoT2Nab0tHQnpGTmM9IiwKICAgICJhcHBsaWNhdGlvbkRhdGEiIDogIkN5YmVyU291cmNlLlZNcG9zS2l0IiwKICAgICJlcGhlbWVyYWxQdWJsaWNLZXkiIDogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRW1JN0tScnRNN2NNelk5Zmw2UWt2NEQzdE9jU0NYR1hoOFwvK2R4K2s5c1Zrbk05UFQrOXRqMzk2YWF6QjRcL0hYaWlLRW9DXC9jUzdoSzF6UFk3MVwvN0pUUT09IgogIH0sCiAgInZlcnNpb24iIDogIjEuMCIKfQ=="; + Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( + Descriptor: paymentInformationFluidDataDescriptor, + Value: paymentInformationFluidDataValue + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + FluidData: paymentInformationFluidData + ); + + string orderInformationAmountDetailsTotalAmount = "15.0"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 1; + bool pointOfSaleInformationEmvFallback = true; + int pointOfSaleInformationEmvFallbackCondition = 1; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Fallback: pointOfSaleInformationEmvFallback, + FallbackCondition: pointOfSaleInformationEmvFallbackCondition + ); + + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs b/src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs new file mode 100644 index 0000000..c21360b --- /dev/null +++ b/src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class DigitalPaymentGooglePay + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC_1231223"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + string processingInformationPaymentSolution = "012"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PaymentSolution: processingInformationPaymentSolution + ); + + string paymentInformationTokenizedCardNumber = "4111111111111111"; + string paymentInformationTokenizedCardExpirationMonth = "12"; + string paymentInformationTokenizedCardExpirationYear = "2020"; + string paymentInformationTokenizedCardCryptogram = "EHuWW9PiBkWvqE5juRwDzAUFBAk="; + string paymentInformationTokenizedCardTransactionType = "1"; + Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( + Number: paymentInformationTokenizedCardNumber, + ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, + ExpirationYear: paymentInformationTokenizedCardExpirationYear, + Cryptogram: paymentInformationTokenizedCardCryptogram, + TransactionType: paymentInformationTokenizedCardTransactionType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + TokenizedCard: paymentInformationTokenizedCard + ); + + string orderInformationAmountDetailsTotalAmount = "20"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "901 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs b/src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs new file mode 100644 index 0000000..5647de9 --- /dev/null +++ b/src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class DigitalPaymentsApplePay + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC_1231223"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + string processingInformationPaymentSolution = "001"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PaymentSolution: processingInformationPaymentSolution + ); + + string paymentInformationTokenizedCardNumber = "4111111111111111"; + string paymentInformationTokenizedCardExpirationMonth = "12"; + string paymentInformationTokenizedCardExpirationYear = "2031"; + string paymentInformationTokenizedCardCryptogram = "AceY+igABPs3jdwNaDg3MAACAAA="; + string paymentInformationTokenizedCardTransactionType = "1"; + Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( + Number: paymentInformationTokenizedCardNumber, + ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, + ExpirationYear: paymentInformationTokenizedCardExpirationYear, + Cryptogram: paymentInformationTokenizedCardCryptogram, + TransactionType: paymentInformationTokenizedCardTransactionType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + TokenizedCard: paymentInformationTokenizedCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "901 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs b/src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs new file mode 100644 index 0000000..7a1bbe6 --- /dev/null +++ b/src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class ElectronicCheckDebits + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationBankAccountType = "C"; + string paymentInformationBankAccountNumber = "4100"; + Ptsv2paymentsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsPaymentInformationBankAccount( + Type: paymentInformationBankAccountType, + Number: paymentInformationBankAccountNumber + ); + + string paymentInformationBankRoutingNumber = "071923284"; + Ptsv2paymentsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsPaymentInformationBank( + Account: paymentInformationBankAccount, + RoutingNumber: paymentInformationBankRoutingNumber + ); + + string paymentInformationPaymentTypeName = "CHECK"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Bank: paymentInformationBank, + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs b/src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs new file mode 100644 index 0000000..feacf07 --- /dev/null +++ b/src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class ElectronicCheckStandAloneCredits + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "TC46125-1"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationBankAccountType = "C"; + string paymentInformationBankAccountNumber = "4100"; + string paymentInformationBankAccountCheckNumber = "123456"; + Ptsv2paymentsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsPaymentInformationBankAccount( + Type: paymentInformationBankAccountType, + Number: paymentInformationBankAccountNumber, + CheckNumber: paymentInformationBankAccountCheckNumber + ); + + string paymentInformationBankRoutingNumber = "071923284"; + Ptsv2paymentsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsPaymentInformationBank( + Account: paymentInformationBankAccount, + RoutingNumber: paymentInformationBankRoutingNumber + ); + + string paymentInformationPaymentTypeName = "CHECK"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Bank: paymentInformationBank, + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/LevelIIData.cs b/src/Samples/Payments/CoreServices/LevelIIData.cs new file mode 100644 index 0000000..d742351 --- /dev/null +++ b/src/Samples/Payments/CoreServices/LevelIIData.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class LevelIIData + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_12"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "112.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationInvoiceDetailsPurchaseOrderNumber = "LevelII Auth Po"; + Ptsv2paymentsOrderInformationInvoiceDetails orderInformationInvoiceDetails = new Ptsv2paymentsOrderInformationInvoiceDetails( + PurchaseOrderNumber: orderInformationInvoiceDetailsPurchaseOrderNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + InvoiceDetails: orderInformationInvoiceDetails + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/LevelIIIData.cs b/src/Samples/Payments/CoreServices/LevelIIIData.cs new file mode 100644 index 0000000..f3b6ad9 --- /dev/null +++ b/src/Samples/Payments/CoreServices/LevelIIIData.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class LevelIIIData + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_14"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + string processingInformationPurchaseLevel = "3"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PurchaseLevel: processingInformationPurchaseLevel + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsProductCode1 = "default"; + int orderInformationLineItemsQuantity1 = 10; + string orderInformationLineItemsUnitPrice1 = "10.00"; + string orderInformationLineItemsTotalAmount1 = "100"; + bool orderInformationLineItemsAmountIncludesTax1 = false; + bool orderInformationLineItemsDiscountApplied1 = false; + orderInformationLineItems.Add(new Ptsv2paymentsOrderInformationLineItems( + ProductCode: orderInformationLineItemsProductCode1, + Quantity: orderInformationLineItemsQuantity1, + UnitPrice: orderInformationLineItemsUnitPrice1, + TotalAmount: orderInformationLineItemsTotalAmount1, + AmountIncludesTax: orderInformationLineItemsAmountIncludesTax1, + DiscountApplied: orderInformationLineItemsDiscountApplied1 + )); + + string orderInformationInvoiceDetailsPurchaseOrderNumber = "LevelIII Auth Po"; + Ptsv2paymentsOrderInformationInvoiceDetails orderInformationInvoiceDetails = new Ptsv2paymentsOrderInformationInvoiceDetails( + PurchaseOrderNumber: orderInformationInvoiceDetailsPurchaseOrderNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + LineItems: orderInformationLineItems, + InvoiceDetails: orderInformationInvoiceDetails + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/PartialAuthorization.cs b/src/Samples/Payments/CoreServices/PartialAuthorization.cs new file mode 100644 index 0000000..61c3d9a --- /dev/null +++ b/src/Samples/Payments/CoreServices/PartialAuthorization.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class PartialAuthorization + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "1234567890"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "7012.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 6; + int pointOfSaleInformationTerminalCapability = 4; + bool pointOfSaleInformationEmvFallback = false; + int pointOfSaleInformationEmvFallbackCondition = 1; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Fallback: pointOfSaleInformationEmvFallback, + FallbackCondition: pointOfSaleInformationEmvFallbackCondition + ); + + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs b/src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs new file mode 100644 index 0000000..65bdf28 --- /dev/null +++ b/src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class PaymentNetworkTokenization + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC_123122"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "vbv"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationTokenizedCardNumber = "4111111111111111"; + string paymentInformationTokenizedCardExpirationMonth = "12"; + string paymentInformationTokenizedCardExpirationYear = "2031"; + string paymentInformationTokenizedCardTransactionType = "1"; + Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( + Number: paymentInformationTokenizedCardNumber, + ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, + ExpirationYear: paymentInformationTokenizedCardExpirationYear, + TransactionType: paymentInformationTokenizedCardTransactionType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + TokenizedCard: paymentInformationTokenizedCard + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationCavv = "AAABCSIIAAAAAAACcwgAEMCoNh+="; + string consumerAuthenticationInformationXid = "T1Y0OVcxMVJJdkI0WFlBcXptUzE="; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + Cavv: consumerAuthenticationInformationCavv, + Xid: consumerAuthenticationInformationXid + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs b/src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs new file mode 100644 index 0000000..1e322de --- /dev/null +++ b/src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class PaymentWithPaymentInstrumentToken + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCustomerCustomerId = "A583044E29B4592DE05340588D0A9CB9"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + CustomerId: paymentInformationCustomerCustomerId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Customer: paymentInformationCustomer + ); + + string orderInformationAmountDetailsTotalAmount = "22"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/RestaurantAuthorization.cs b/src/Samples/Payments/CoreServices/RestaurantAuthorization.cs new file mode 100644 index 0000000..827f357 --- /dev/null +++ b/src/Samples/Payments/CoreServices/RestaurantAuthorization.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class RestaurantAuthorization + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "demomerchant"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs b/src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs new file mode 100644 index 0000000..a7a6de5 --- /dev/null +++ b/src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class RestaurantCaptureWithGratuity + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + var processPaymentId = RestaurantAuthorization.Run().Id; + string clientReferenceInformationCode = "1234567890"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + string processingInformationIndustryDataType = "restaurant"; + Ptsv2paymentsidcapturesProcessingInformation processingInformation = new Ptsv2paymentsidcapturesProcessingInformation( + IndustryDataType: processingInformationIndustryDataType + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsGratuityAmount = "11.50"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + GratuityAmount: orderInformationAmountDetailsGratuityAmount + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + + var result = apiInstance.CapturePayment(requestObj, processPaymentId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs new file mode 100644 index 0000000..9014603 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingEMVTechnologyWithContactReadForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs new file mode 100644 index 0000000..ec96199 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactReadOneForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 1; + string pointOfSaleInformationEmvCardSequenceNumber = "0"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs new file mode 100644 index 0000000..8739f4d --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactReadTwoForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + + List pointOfSaleInformationCardholderVerificationMethod = new List (); + pointOfSaleInformationCardholderVerificationMethod.Add("pin"); + pointOfSaleInformationCardholderVerificationMethod.Add("signature"); + + List pointOfSaleInformationTerminalInputCapability = new List (); + pointOfSaleInformationTerminalInputCapability.Add("contact"); + pointOfSaleInformationTerminalInputCapability.Add("contactless"); + pointOfSaleInformationTerminalInputCapability.Add("keyed"); + pointOfSaleInformationTerminalInputCapability.Add("swiped"); + string pointOfSaleInformationTerminalCardCaptureCapability = "1"; + string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; + string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData, + CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, + TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, + TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, + DeviceId: pointOfSaleInformationDeviceId, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs new file mode 100644 index 0000000..c5e81fa --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingEMVTechnologyWithContactlessForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 2; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "999"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs new file mode 100644 index 0000000..d83a838 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingEMVTechnologyWithContactlessReadForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 5; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + + List pointOfSaleInformationCardholderVerificationMethod = new List (); + pointOfSaleInformationCardholderVerificationMethod.Add("pin"); + pointOfSaleInformationCardholderVerificationMethod.Add("signature"); + + List pointOfSaleInformationTerminalInputCapability = new List (); + pointOfSaleInformationTerminalInputCapability.Add("contact"); + pointOfSaleInformationTerminalInputCapability.Add("contactless"); + pointOfSaleInformationTerminalInputCapability.Add("keyed"); + pointOfSaleInformationTerminalInputCapability.Add("swiped"); + string pointOfSaleInformationTerminalCardCaptureCapability = "1"; + string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; + string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData, + CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, + TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, + TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, + DeviceId: pointOfSaleInformationDeviceId, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs new file mode 100644 index 0000000..85ca588 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingEMVTechnologyWithContactlessReadForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 2; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 5; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs new file mode 100644 index 0000000..c37aee4 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingKeyedDataForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs new file mode 100644 index 0000000..3b2a12e --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingKeyedDataForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; + bool processingInformationAuthorizationOptionsIgnoreCvResult = true; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs new file mode 100644 index 0000000..e5de4f9 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingKeyedDataWithBalanceInquiry + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; + bool processingInformationAuthorizationOptionsIgnoreCvResult = true; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs new file mode 100644 index 0000000..c20f5ca --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingSwipedTrackDataForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs new file mode 100644 index 0000000..39220b0 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SaleUsingSwipedTrackDataForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs b/src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs new file mode 100644 index 0000000..e721cec --- /dev/null +++ b/src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class ServiceFeesWithCreditCardTransaction + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "2325.00"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsServiceFeeAmount = "30.0"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + ServiceFeeAmount: orderInformationAmountDetailsServiceFeeAmount + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string merchantInformationServiceFeeDescriptorName = "Vacations Service Fee"; + string merchantInformationServiceFeeDescriptorContact = "8009999999"; + string merchantInformationServiceFeeDescriptorState = "CA"; + Ptsv2paymentsMerchantInformationServiceFeeDescriptor merchantInformationServiceFeeDescriptor = new Ptsv2paymentsMerchantInformationServiceFeeDescriptor( + Name: merchantInformationServiceFeeDescriptorName, + Contact: merchantInformationServiceFeeDescriptorContact, + State: merchantInformationServiceFeeDescriptorState + ); + + Ptsv2paymentsMerchantInformation merchantInformation = new Ptsv2paymentsMerchantInformation( + ServiceFeeDescriptor: merchantInformationServiceFeeDescriptor + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs b/src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs new file mode 100644 index 0000000..dec3d93 --- /dev/null +++ b/src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class SimpleAuthorizationInternet + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/Swiped.cs b/src/Samples/Payments/CoreServices/Swiped.cs new file mode 100644 index 0000000..cc9ce74 --- /dev/null +++ b/src/Samples/Payments/CoreServices/Swiped.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class Swiped + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs b/src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs new file mode 100644 index 0000000..5adb5f4 --- /dev/null +++ b/src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices +{ + public class ZeroDollarAuthorization + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "1234567890"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "5555555555554444"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "0"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From d1c948a2fba1b0e49a7e50c47cffdcac1e020ed3 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 15 May 2020 20:03:57 +0530 Subject: [PATCH 017/161] Update to latest version of SDK --- src/SampleCode.csproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 146a3b3..4776192 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -42,6 +42,9 @@ ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll + + ..\packages\CyberSource.Rest.Client.0.0.1.4\lib\cybersource-rest-client-dotnet.dll + False ..\..\cybersource-rest-client-dotnet\bin\Release\cybersource-rest-client-dotnet.dll From 4e475126a03bdb3af8fb04b95df16e1d67202bb4 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Mon, 18 May 2020 14:46:33 +0530 Subject: [PATCH 018/161] Update to latest version of SDK --- src/packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packages.config b/src/packages.config index 186cca5..d8bce03 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - + From 393b75d16b64bd0d319d1ff1c24ec4306f25f9ff Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Mon, 18 May 2020 14:52:28 +0530 Subject: [PATCH 019/161] Remove missing files from project --- src/SampleCode.csproj | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 4776192..59ac856 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -98,8 +98,6 @@ - - @@ -115,13 +113,10 @@ - - - From 8ba56194296644df3d7335c98793dab977421652 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Mon, 18 May 2020 20:21:37 +0530 Subject: [PATCH 020/161] Rollback --- src/SampleCode.csproj | 51 +------ ...AmericanExpressDirectEMVWithContactRead.cs | 108 --------------- ...SkipDecisionManagerForSingleTransaction.cs | 100 -------------- .../AuthorizationUsingSwipedTrackData.cs | 86 ------------ .../AuthorizationWithCaptureSale.cs | 94 ------------- .../AuthorizationWithDMAcceptPAEnroll.cs | 102 -------------- .../AuthorizationWithDMRejectPAEnroll.cs | 102 -------------- .../AuthorizationWithDMReviewPAEnroll.cs | 102 -------------- .../AuthorizationWithDecisionManager.cs | 96 ------------- ...tionWithDecisionManagerBuyerInformation.cs | 106 --------------- ...orizationWithDecisionManagerCustomSetup.cs | 100 -------------- ...ionWithDecisionManagerDeviceInformation.cs | 100 -------------- ...cisionManagerMerchantDefinedInformation.cs | 105 --------------- ...nWithDecisionManagerShippingInformation.cs | 108 --------------- ...ionWithDecisionManagerTravelInformation.cs | 92 ------------- ...izationWithPAEnrollAuthenticationNeeded.cs | 108 --------------- .../AuthorizationWithPayerAuthValidation.cs | 98 -------------- ...eOfAuthorizationThatUsedSwipedTrackData.cs | 60 --------- .../CoreServices/CyberSourceMPOSEMV.cs | 114 ---------------- .../CoreServices/DigitalPaymentGooglePay.cs | 102 -------------- .../CoreServices/DigitalPaymentsApplePay.cs | 102 -------------- .../CoreServices/ElectronicCheckDebits.cs | 96 ------------- .../ElectronicCheckStandAloneCredits.cs | 100 -------------- .../Payments/CoreServices/LevelIIData.cs | 106 --------------- .../Payments/CoreServices/LevelIIIData.cs | 126 ------------------ .../CoreServices/PartialAuthorization.cs | 106 --------------- .../PaymentNetworkTokenization.cs | 106 --------------- .../PaymentWithPaymentInstrumentToken.cs | 84 ------------ .../CoreServices/RestaurantAuthorization.cs | 86 ------------ .../RestaurantCaptureWithGratuity.cs | 68 ---------- ...UsingEMVTechnologyWithContactReadForCTV.cs | 92 ------------- ...TechnologyWithContactReadOneForAcquirer.cs | 80 ----------- ...TechnologyWithContactReadTwoForAcquirer.cs | 108 --------------- ...EMVTechnologyWithContactlessForAcquirer.cs | 80 ----------- ...echnologyWithContactlessReadForAcquirer.cs | 108 --------------- ...gEMVTechnologyWithContactlessReadForCTV.cs | 92 ------------- .../SaleUsingKeyedDataForAcquirer.cs | 84 ------------ .../CoreServices/SaleUsingKeyedDataForCTV.cs | 94 ------------- .../SaleUsingKeyedDataWithBalanceInquiry.cs | 100 -------------- .../SaleUsingSwipedTrackDataForAcquirer.cs | 70 ---------- .../SaleUsingSwipedTrackDataForCTV.cs | 80 ----------- .../ServiceFeesWithCreditCardTransaction.cs | 114 ---------------- .../SimpleAuthorizationInternet.cs | 88 ------------ src/Samples/Payments/CoreServices/Swiped.cs | 70 ---------- .../CoreServices/ZeroDollarAuthorization.cs | 98 -------------- .../CoreServices/CreateDecisionManagerCase.cs | 4 +- .../CoreServices/DecisionProfileReject.cs | 4 +- .../CoreServices/DmWithBuyerInformation.cs | 4 +- .../CoreServices/DmWithDeviceInformation.cs | 4 +- .../DmWithMerchantDefinedInformation.cs | 4 +- .../CoreServices/DmWithShippingInformation.cs | 4 +- .../CoreServices/DmWithTravelInformation.cs | 4 +- .../CoreServices/ScoreExceedsThreshold.cs | 4 +- .../DownloadFileWithFileIdentifier.cs | 3 +- src/packages.config | 2 +- 55 files changed, 20 insertions(+), 4289 deletions(-) delete mode 100644 src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs delete mode 100644 src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs delete mode 100644 src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs delete mode 100644 src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs delete mode 100644 src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs delete mode 100644 src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs delete mode 100644 src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs delete mode 100644 src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs delete mode 100644 src/Samples/Payments/CoreServices/LevelIIData.cs delete mode 100644 src/Samples/Payments/CoreServices/LevelIIIData.cs delete mode 100644 src/Samples/Payments/CoreServices/PartialAuthorization.cs delete mode 100644 src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs delete mode 100644 src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs delete mode 100644 src/Samples/Payments/CoreServices/RestaurantAuthorization.cs delete mode 100644 src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs delete mode 100644 src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs delete mode 100644 src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs delete mode 100644 src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs delete mode 100644 src/Samples/Payments/CoreServices/Swiped.cs delete mode 100644 src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 59ac856..d4cb437 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -42,12 +42,9 @@ ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll - - ..\packages\CyberSource.Rest.Client.0.0.1.4\lib\cybersource-rest-client-dotnet.dll - False - ..\..\cybersource-rest-client-dotnet\bin\Release\cybersource-rest-client-dotnet.dll + ..\packages\CyberSource.Rest.Client.0.0.1.3\lib\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -96,50 +93,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -165,7 +119,6 @@ - diff --git a/src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs b/src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs deleted file mode 100644 index 24e1d1a..0000000 --- a/src/Samples/Payments/CoreServices/AmericanExpressDirectEMVWithContactRead.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AmericanExpressDirectEMVWithContactRead - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contact"; - int pointOfSaleInformationTerminalCapability = 4; - string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; - int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; - string pointOfSaleInformationEmvCardSequenceNumber = "1"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Tags: pointOfSaleInformationEmvTags, - CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - - List pointOfSaleInformationCardholderVerificationMethod = new List (); - pointOfSaleInformationCardholderVerificationMethod.Add("pin"); - pointOfSaleInformationCardholderVerificationMethod.Add("signature"); - - List pointOfSaleInformationTerminalInputCapability = new List (); - pointOfSaleInformationTerminalInputCapability.Add("contact"); - pointOfSaleInformationTerminalInputCapability.Add("contactless"); - pointOfSaleInformationTerminalInputCapability.Add("keyed"); - pointOfSaleInformationTerminalInputCapability.Add("swiped"); - string pointOfSaleInformationTerminalCardCaptureCapability = "1"; - string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; - string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData, - CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, - TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, - TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, - DeviceId: pointOfSaleInformationDeviceId, - EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs b/src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs deleted file mode 100644 index d115e4f..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationSkipDecisionManagerForSingleTransaction.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationSkipDecisionManagerForSingleTransaction - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_16"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("DECISION_SKIP"); - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "11"; - string paymentInformationCardExpirationYear = "2025"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "10"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs b/src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs deleted file mode 100644 index 8155510..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationUsingSwipedTrackData.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationUsingSwipedTrackData - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "ABC123"; - string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "swiped"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs b/src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs deleted file mode 100644 index 80a52d0..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithCaptureSale.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithCaptureSale - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = true; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "102.21"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs deleted file mode 100644 index bb357fa..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDMAcceptPAEnroll.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDMAcceptPAEnroll - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "cbys_test"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "340000000001007"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "1234"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "1.00"; - string orderInformationAmountDetailsCurrency = "usd"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "accept@cybersource.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs deleted file mode 100644 index 7187539..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDMRejectPAEnroll.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDMRejectPAEnroll - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "372425119311008"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "1234"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "102.21"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "reject@domain.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs deleted file mode 100644 index 86481bb..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDMReviewPAEnroll.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDMReviewPAEnroll - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "372425119311008"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "1234"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "102.21"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "review@domain.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs deleted file mode 100644 index 5a08dbd..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManager.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDecisionManager - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TSYS_Eh_FE_01"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "11"; - string paymentInformationCardExpirationYear = "2025"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "10"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "JSON"; - string orderInformationBillToLastName = "RTS"; - string orderInformationBillToAddress1 = "201 S. Division St._1"; - string orderInformationBillToLocality = "Foster City"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94404"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "beforeauth@cybersource.com"; - string orderInformationBillToPhoneNumber = "6504327113"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs deleted file mode 100644 index e95d212..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerBuyerInformation.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDecisionManagerBuyerInformation - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "54323007"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCardNumber = "4444444444444448"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "144.14"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "James"; - string orderInformationBillToLastName = "Smith"; - string orderInformationBillToAddress1 = "96, powers street"; - string orderInformationBillToLocality = "Clearwater milford"; - string orderInformationBillToAdministrativeArea = "NH"; - string orderInformationBillToPostalCode = "03055"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@visa.com"; - string orderInformationBillToPhoneNumber = "7606160717"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - string buyerInformationDateOfBirth = "19980505"; - - List buyerInformationPersonalIdentification = new List (); - string buyerInformationPersonalIdentificationType1 = "CPF"; - string buyerInformationPersonalIdentificationId1 = "1a23apwe98"; - buyerInformationPersonalIdentification.Add(new Ptsv2paymentsBuyerInformationPersonalIdentification( - Type: buyerInformationPersonalIdentificationType1, - Id: buyerInformationPersonalIdentificationId1 - )); - - string buyerInformationHashedPassword = ""; - Ptsv2paymentsBuyerInformation buyerInformation = new Ptsv2paymentsBuyerInformation( - DateOfBirth: buyerInformationDateOfBirth, - PersonalIdentification: buyerInformationPersonalIdentification, - HashedPassword: buyerInformationHashedPassword - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - BuyerInformation: buyerInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs deleted file mode 100644 index a0a37cc..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerCustomSetup.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDecisionManagerCustomSetup - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_16"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("DECISION"); - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "11"; - string paymentInformationCardExpirationYear = "2025"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "10"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs deleted file mode 100644 index 5527719..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerDeviceInformation.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDecisionManagerDeviceInformation - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "54323007"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCardNumber = "4444444444444448"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "144.14"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "James"; - string orderInformationBillToLastName = "Smith"; - string orderInformationBillToAddress1 = "96, powers street"; - string orderInformationBillToLocality = "Clearwater milford"; - string orderInformationBillToAdministrativeArea = "NH"; - string orderInformationBillToPostalCode = "03055"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@visa.com"; - string orderInformationBillToPhoneNumber = "7606160717"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - string deviceInformationHostName = "host.com"; - string deviceInformationIpAddress = "64.124.61.215"; - string deviceInformationUserAgent = "Chrome"; - string deviceInformationHttpBrowserEmail = "xyz@gmail.com"; - Ptsv2paymentsDeviceInformation deviceInformation = new Ptsv2paymentsDeviceInformation( - HostName: deviceInformationHostName, - IpAddress: deviceInformationIpAddress, - UserAgent: deviceInformationUserAgent, - HttpBrowserEmail: deviceInformationHttpBrowserEmail - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - DeviceInformation: deviceInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs deleted file mode 100644 index 9f878d3..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDecisionManagerMerchantDefinedInformation - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "54323007"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCardNumber = "4444444444444448"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "144.14"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "James"; - string orderInformationBillToLastName = "Smith"; - string orderInformationBillToAddress1 = "96, powers street"; - string orderInformationBillToLocality = "Clearwater milford"; - string orderInformationBillToAdministrativeArea = "NH"; - string orderInformationBillToPostalCode = "03055"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@visa.com"; - string orderInformationBillToPhoneNumber = "7606160717"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - - List merchantDefinedInformation = new List (); - string merchantDefinedInformationKey1 = "1"; - string merchantDefinedInformationValue1 = "Test"; - merchantDefinedInformation.Add(new Ptsv2paymentsMerchantDefinedInformation( - Key: merchantDefinedInformationKey1, - Value: merchantDefinedInformationValue1 - )); - - string merchantDefinedInformationKey2 = "2"; - string merchantDefinedInformationValue2 = "Test2"; - merchantDefinedInformation.Add(new Ptsv2paymentsMerchantDefinedInformation( - Key: merchantDefinedInformationKey2, - Value: merchantDefinedInformationValue2 - )); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - MerchantDefinedInformation: merchantDefinedInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs deleted file mode 100644 index 94c5c3e..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerShippingInformation.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDecisionManagerShippingInformation - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "54323007"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCardNumber = "4444444444444448"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "144.14"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "James"; - string orderInformationBillToLastName = "Smith"; - string orderInformationBillToAddress1 = "96, powers street"; - string orderInformationBillToLocality = "Clearwater milford"; - string orderInformationBillToAdministrativeArea = "NH"; - string orderInformationBillToPostalCode = "03055"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@visa.com"; - string orderInformationBillToPhoneNumber = "7606160717"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - string orderInformationShipToFirstName = "James"; - string orderInformationShipToLastName = "Smith"; - string orderInformationShipToAddress1 = "96, powers street"; - string orderInformationShipToLocality = "Clearwater milford"; - string orderInformationShipToAdministrativeArea = "KA"; - string orderInformationShipToPostalCode = "560056"; - string orderInformationShipToCountry = "IN"; - string orderInformationShipToPhoneNumber = "7606160717"; - Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( - FirstName: orderInformationShipToFirstName, - LastName: orderInformationShipToLastName, - Address1: orderInformationShipToAddress1, - Locality: orderInformationShipToLocality, - AdministrativeArea: orderInformationShipToAdministrativeArea, - PostalCode: orderInformationShipToPostalCode, - Country: orderInformationShipToCountry, - PhoneNumber: orderInformationShipToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo, - ShipTo: orderInformationShipTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs deleted file mode 100644 index 4896725..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithDecisionManagerTravelInformation.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithDecisionManagerTravelInformation - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "54323007"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCardNumber = "4444444444444448"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "144.14"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "James"; - string orderInformationBillToLastName = "Smith"; - string orderInformationBillToAddress1 = "96, powers street"; - string orderInformationBillToLocality = "Clearwater milford"; - string orderInformationBillToAdministrativeArea = "NH"; - string orderInformationBillToPostalCode = "03055"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@visa.com"; - string orderInformationBillToPhoneNumber = "7606160717"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - Ptsv2paymentsTravelInformation travelInformation = new Ptsv2paymentsTravelInformation( - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - TravelInformation: travelInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs b/src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs deleted file mode 100644 index ee908aa..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithPAEnrollAuthenticationNeeded.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithPAEnrollAuthenticationNeeded - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); - bool processingInformationCapture = false; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - Capture: processingInformationCapture - ); - - string paymentInformationCardNumber = "4000000000001091"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2023"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "usd"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Smith"; - string orderInformationBillToAddress1 = "201 S. Division St._1"; - string orderInformationBillToAddress2 = "Suite 500"; - string orderInformationBillToLocality = "Foster City"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94404"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "accept@cybersource.com"; - string orderInformationBillToPhoneNumber = "6504327113"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Address2: orderInformationBillToAddress2, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - string consumerAuthenticationInformationRequestorId = "123123197675"; - string consumerAuthenticationInformationReferenceId = "CybsCruiseTester-8ac0b02f"; - Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( - RequestorId: consumerAuthenticationInformationRequestorId, - ReferenceId: consumerAuthenticationInformationReferenceId - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - ConsumerAuthenticationInformation: consumerAuthenticationInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs b/src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs deleted file mode 100644 index dd3b51a..0000000 --- a/src/Samples/Payments/CoreServices/AuthorizationWithPayerAuthValidation.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class AuthorizationWithPayerAuthValidation - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("VALIDATE_CONSUMER_AUTHENTICATION"); - bool processingInformationCapture = false; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - Capture: processingInformationCapture - ); - - string paymentInformationCardNumber = "4000000000001091"; - string paymentInformationCardExpirationMonth = "01"; - string paymentInformationCardExpirationYear = "2023"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Smith"; - string orderInformationBillToAddress1 = "201 S. Division St._1"; - string orderInformationBillToAddress2 = "Suite 500"; - string orderInformationBillToLocality = "Foster City"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94404"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "accept@cybs.com"; - string orderInformationBillToPhoneNumber = "6504327113"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Address2: orderInformationBillToAddress2, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - BillTo: orderInformationBillTo - ); - - string consumerAuthenticationInformationAuthenticationTransactionId = "OiCtXA1j1AxtSNDh5lt1"; - Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( - AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - ConsumerAuthenticationInformation: consumerAuthenticationInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs b/src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs deleted file mode 100644 index 0471f50..0000000 --- a/src/Samples/Payments/CoreServices/CaptureOfAuthorizationThatUsedSwipedTrackData.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class CaptureOfAuthorizationThatUsedSwipedTrackData - { - public static PtsV2PaymentsCapturesPost201Response Run() - { - var processPaymentId = AuthorizationUsingSwipedTrackData.Run().Id; - string clientReferenceInformationCode = "1234567890"; - string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - string orderInformationAmountDetailsTotalAmount = "100"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - var requestObj = new CapturePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new CaptureApi(clientConfig); - - var result = apiInstance.CapturePayment(requestObj, processPaymentId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs b/src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs deleted file mode 100644 index 49be980..0000000 --- a/src/Samples/Payments/CoreServices/CyberSourceMPOSEMV.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class CyberSourceMPOSEMV - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_16"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - string processingInformationPaymentSolution = "011"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - PaymentSolution: processingInformationPaymentSolution - ); - - string paymentInformationFluidDataDescriptor = "EMV.PAYMENT.AnywhereCommerce.Walker"; - string paymentInformationFluidDataValue = "ewogICJkYXRhIiA6ICJOZmNwRURiK1dLdzBnQkpsaTRcL1hlWm1ITzdUSng0bnRoMnc2Mk9ITVJQK3hCRlFPdFE0WWpRcnY0RmFkOHh6VExqT2VFQm5iNHFzeGZMYTNyNXcxVEdXblFGQnNzMWtPYnA0XC95alNtVE1JSGVjbGc5OFROaEhNb0VRcjJkRkFqYVpBTFAxSlBsdVhKSVwvbTZKSmVwNGh3VHRWZE16Z2laSUhnaWFCYzNXZVd1ZnYzc1l0cGRaZDZYZENEUFdLeXFkYjBJdUtkdkpBPT0iLAogICJzaWduYXR1cmUiIDogIkFxck1pKzc0cm1GeVBKVE9HN3NuN2p5K1YxTlpBZUNJVE56TW01N1B5cmc9IiwKICAic2lnbmF0dXJlQWxnSW5mbyIgOiAiSE1BQ3dpdGhTSEEyNTYiLAogICJoZWFkZXIiIDogewogICAgInRyYW5zYWN0aW9uSWQiIDogIjE1MTU2MjI2NjIuMTcyMjIwIiwKICAgICJwdWJsaWNLZXlIYXNoIiA6ICJcLzdmdldqRVhMazJPRWpcL3Z5bk1jeEZvMmRWSTlpRXVoT2Nab0tHQnpGTmM9IiwKICAgICJhcHBsaWNhdGlvbkRhdGEiIDogIkN5YmVyU291cmNlLlZNcG9zS2l0IiwKICAgICJlcGhlbWVyYWxQdWJsaWNLZXkiIDogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRW1JN0tScnRNN2NNelk5Zmw2UWt2NEQzdE9jU0NYR1hoOFwvK2R4K2s5c1Zrbk05UFQrOXRqMzk2YWF6QjRcL0hYaWlLRW9DXC9jUzdoSzF6UFk3MVwvN0pUUT09IgogIH0sCiAgInZlcnNpb24iIDogIjEuMCIKfQ=="; - Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( - Descriptor: paymentInformationFluidDataDescriptor, - Value: paymentInformationFluidDataValue - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - FluidData: paymentInformationFluidData - ); - - string orderInformationAmountDetailsTotalAmount = "15.0"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contact"; - int pointOfSaleInformationTerminalCapability = 1; - bool pointOfSaleInformationEmvFallback = true; - int pointOfSaleInformationEmvFallbackCondition = 1; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Fallback: pointOfSaleInformationEmvFallback, - FallbackCondition: pointOfSaleInformationEmvFallbackCondition - ); - - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs b/src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs deleted file mode 100644 index c21360b..0000000 --- a/src/Samples/Payments/CoreServices/DigitalPaymentGooglePay.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class DigitalPaymentGooglePay - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC_1231223"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - string processingInformationPaymentSolution = "012"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - PaymentSolution: processingInformationPaymentSolution - ); - - string paymentInformationTokenizedCardNumber = "4111111111111111"; - string paymentInformationTokenizedCardExpirationMonth = "12"; - string paymentInformationTokenizedCardExpirationYear = "2020"; - string paymentInformationTokenizedCardCryptogram = "EHuWW9PiBkWvqE5juRwDzAUFBAk="; - string paymentInformationTokenizedCardTransactionType = "1"; - Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( - Number: paymentInformationTokenizedCardNumber, - ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, - ExpirationYear: paymentInformationTokenizedCardExpirationYear, - Cryptogram: paymentInformationTokenizedCardCryptogram, - TransactionType: paymentInformationTokenizedCardTransactionType - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - TokenizedCard: paymentInformationTokenizedCard - ); - - string orderInformationAmountDetailsTotalAmount = "20"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Deo"; - string orderInformationBillToAddress1 = "901 Metro Center Blvd"; - string orderInformationBillToLocality = "Foster City"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94404"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "6504327113"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs b/src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs deleted file mode 100644 index 5647de9..0000000 --- a/src/Samples/Payments/CoreServices/DigitalPaymentsApplePay.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class DigitalPaymentsApplePay - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC_1231223"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - string processingInformationPaymentSolution = "001"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - PaymentSolution: processingInformationPaymentSolution - ); - - string paymentInformationTokenizedCardNumber = "4111111111111111"; - string paymentInformationTokenizedCardExpirationMonth = "12"; - string paymentInformationTokenizedCardExpirationYear = "2031"; - string paymentInformationTokenizedCardCryptogram = "AceY+igABPs3jdwNaDg3MAACAAA="; - string paymentInformationTokenizedCardTransactionType = "1"; - Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( - Number: paymentInformationTokenizedCardNumber, - ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, - ExpirationYear: paymentInformationTokenizedCardExpirationYear, - Cryptogram: paymentInformationTokenizedCardCryptogram, - TransactionType: paymentInformationTokenizedCardTransactionType - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - TokenizedCard: paymentInformationTokenizedCard - ); - - string orderInformationAmountDetailsTotalAmount = "10"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Deo"; - string orderInformationBillToAddress1 = "901 Metro Center Blvd"; - string orderInformationBillToLocality = "Foster City"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94404"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "6504327113"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs b/src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs deleted file mode 100644 index 7a1bbe6..0000000 --- a/src/Samples/Payments/CoreServices/ElectronicCheckDebits.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class ElectronicCheckDebits - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationBankAccountType = "C"; - string paymentInformationBankAccountNumber = "4100"; - Ptsv2paymentsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsPaymentInformationBankAccount( - Type: paymentInformationBankAccountType, - Number: paymentInformationBankAccountNumber - ); - - string paymentInformationBankRoutingNumber = "071923284"; - Ptsv2paymentsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsPaymentInformationBank( - Account: paymentInformationBankAccount, - RoutingNumber: paymentInformationBankRoutingNumber - ); - - string paymentInformationPaymentTypeName = "CHECK"; - Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( - Name: paymentInformationPaymentTypeName - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Bank: paymentInformationBank, - PaymentType: paymentInformationPaymentType - ); - - string orderInformationAmountDetailsTotalAmount = "100"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs b/src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs deleted file mode 100644 index feacf07..0000000 --- a/src/Samples/Payments/CoreServices/ElectronicCheckStandAloneCredits.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class ElectronicCheckStandAloneCredits - { - public static PtsV2CreditsPost201Response Run() - { - string clientReferenceInformationCode = "TC46125-1"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationBankAccountType = "C"; - string paymentInformationBankAccountNumber = "4100"; - string paymentInformationBankAccountCheckNumber = "123456"; - Ptsv2paymentsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsPaymentInformationBankAccount( - Type: paymentInformationBankAccountType, - Number: paymentInformationBankAccountNumber, - CheckNumber: paymentInformationBankAccountCheckNumber - ); - - string paymentInformationBankRoutingNumber = "071923284"; - Ptsv2paymentsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsPaymentInformationBank( - Account: paymentInformationBankAccount, - RoutingNumber: paymentInformationBankRoutingNumber - ); - - string paymentInformationPaymentTypeName = "CHECK"; - Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( - Name: paymentInformationPaymentTypeName - ); - - Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( - Bank: paymentInformationBank, - PaymentType: paymentInformationPaymentType - ); - - string orderInformationAmountDetailsTotalAmount = "100"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreateCreditRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new CreditApi(clientConfig); - PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/LevelIIData.cs b/src/Samples/Payments/CoreServices/LevelIIData.cs deleted file mode 100644 index d742351..0000000 --- a/src/Samples/Payments/CoreServices/LevelIIData.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class LevelIIData - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_12"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardType = "001"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - Type: paymentInformationCardType, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "112.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - string orderInformationInvoiceDetailsPurchaseOrderNumber = "LevelII Auth Po"; - Ptsv2paymentsOrderInformationInvoiceDetails orderInformationInvoiceDetails = new Ptsv2paymentsOrderInformationInvoiceDetails( - PurchaseOrderNumber: orderInformationInvoiceDetailsPurchaseOrderNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo, - InvoiceDetails: orderInformationInvoiceDetails - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/LevelIIIData.cs b/src/Samples/Payments/CoreServices/LevelIIIData.cs deleted file mode 100644 index f3b6ad9..0000000 --- a/src/Samples/Payments/CoreServices/LevelIIIData.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class LevelIIIData - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_14"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - string processingInformationPurchaseLevel = "3"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - PurchaseLevel: processingInformationPurchaseLevel - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardType = "001"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - Type: paymentInformationCardType, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - - List orderInformationLineItems = new List (); - string orderInformationLineItemsProductCode1 = "default"; - int orderInformationLineItemsQuantity1 = 10; - string orderInformationLineItemsUnitPrice1 = "10.00"; - string orderInformationLineItemsTotalAmount1 = "100"; - bool orderInformationLineItemsAmountIncludesTax1 = false; - bool orderInformationLineItemsDiscountApplied1 = false; - orderInformationLineItems.Add(new Ptsv2paymentsOrderInformationLineItems( - ProductCode: orderInformationLineItemsProductCode1, - Quantity: orderInformationLineItemsQuantity1, - UnitPrice: orderInformationLineItemsUnitPrice1, - TotalAmount: orderInformationLineItemsTotalAmount1, - AmountIncludesTax: orderInformationLineItemsAmountIncludesTax1, - DiscountApplied: orderInformationLineItemsDiscountApplied1 - )); - - string orderInformationInvoiceDetailsPurchaseOrderNumber = "LevelIII Auth Po"; - Ptsv2paymentsOrderInformationInvoiceDetails orderInformationInvoiceDetails = new Ptsv2paymentsOrderInformationInvoiceDetails( - PurchaseOrderNumber: orderInformationInvoiceDetailsPurchaseOrderNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo, - LineItems: orderInformationLineItems, - InvoiceDetails: orderInformationInvoiceDetails - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/PartialAuthorization.cs b/src/Samples/Payments/CoreServices/PartialAuthorization.cs deleted file mode 100644 index 61c3d9a..0000000 --- a/src/Samples/Payments/CoreServices/PartialAuthorization.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class PartialAuthorization - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "1234567890"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "7012.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - int pointOfSaleInformationCatLevel = 6; - int pointOfSaleInformationTerminalCapability = 4; - bool pointOfSaleInformationEmvFallback = false; - int pointOfSaleInformationEmvFallbackCondition = 1; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Fallback: pointOfSaleInformationEmvFallback, - FallbackCondition: pointOfSaleInformationEmvFallbackCondition - ); - - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs b/src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs deleted file mode 100644 index 65bdf28..0000000 --- a/src/Samples/Payments/CoreServices/PaymentNetworkTokenization.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class PaymentNetworkTokenization - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC_123122"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "vbv"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationTokenizedCardNumber = "4111111111111111"; - string paymentInformationTokenizedCardExpirationMonth = "12"; - string paymentInformationTokenizedCardExpirationYear = "2031"; - string paymentInformationTokenizedCardTransactionType = "1"; - Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( - Number: paymentInformationTokenizedCardNumber, - ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, - ExpirationYear: paymentInformationTokenizedCardExpirationYear, - TransactionType: paymentInformationTokenizedCardTransactionType - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - TokenizedCard: paymentInformationTokenizedCard - ); - - string orderInformationAmountDetailsTotalAmount = "100"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - string consumerAuthenticationInformationCavv = "AAABCSIIAAAAAAACcwgAEMCoNh+="; - string consumerAuthenticationInformationXid = "T1Y0OVcxMVJJdkI0WFlBcXptUzE="; - Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( - Cavv: consumerAuthenticationInformationCavv, - Xid: consumerAuthenticationInformationXid - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - ConsumerAuthenticationInformation: consumerAuthenticationInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs b/src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs deleted file mode 100644 index 1e322de..0000000 --- a/src/Samples/Payments/CoreServices/PaymentWithPaymentInstrumentToken.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class PaymentWithPaymentInstrumentToken - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCustomerCustomerId = "A583044E29B4592DE05340588D0A9CB9"; - Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( - CustomerId: paymentInformationCustomerCustomerId - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Customer: paymentInformationCustomer - ); - - string orderInformationAmountDetailsTotalAmount = "22"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/RestaurantAuthorization.cs b/src/Samples/Payments/CoreServices/RestaurantAuthorization.cs deleted file mode 100644 index 827f357..0000000 --- a/src/Samples/Payments/CoreServices/RestaurantAuthorization.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class RestaurantAuthorization - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "demomerchant"; - string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "swiped"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs b/src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs deleted file mode 100644 index a7a6de5..0000000 --- a/src/Samples/Payments/CoreServices/RestaurantCaptureWithGratuity.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class RestaurantCaptureWithGratuity - { - public static PtsV2PaymentsCapturesPost201Response Run() - { - var processPaymentId = RestaurantAuthorization.Run().Id; - string clientReferenceInformationCode = "1234567890"; - string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - string processingInformationIndustryDataType = "restaurant"; - Ptsv2paymentsidcapturesProcessingInformation processingInformation = new Ptsv2paymentsidcapturesProcessingInformation( - IndustryDataType: processingInformationIndustryDataType - ); - - string orderInformationAmountDetailsTotalAmount = "100"; - string orderInformationAmountDetailsCurrency = "USD"; - string orderInformationAmountDetailsGratuityAmount = "11.50"; - Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency, - GratuityAmount: orderInformationAmountDetailsGratuityAmount - ); - - Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - var requestObj = new CapturePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new CaptureApi(clientConfig); - - var result = apiInstance.CapturePayment(requestObj, processPaymentId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs deleted file mode 100644 index 9014603..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadForCTV.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingEMVTechnologyWithContactReadForCTV - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contact"; - int pointOfSaleInformationTerminalCapability = 4; - string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; - string pointOfSaleInformationEmvCardSequenceNumber = "1"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Tags: pointOfSaleInformationEmvTags, - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs deleted file mode 100644 index ec96199..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SaleUsingEMVTechnologyWithContactReadOneForAcquirer - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contact"; - int pointOfSaleInformationTerminalCapability = 1; - string pointOfSaleInformationEmvCardSequenceNumber = "0"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs deleted file mode 100644 index 8739f4d..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SaleUsingEMVTechnologyWithContactReadTwoForAcquirer - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contact"; - int pointOfSaleInformationTerminalCapability = 4; - string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; - int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; - string pointOfSaleInformationEmvCardSequenceNumber = "1"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Tags: pointOfSaleInformationEmvTags, - CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - - List pointOfSaleInformationCardholderVerificationMethod = new List (); - pointOfSaleInformationCardholderVerificationMethod.Add("pin"); - pointOfSaleInformationCardholderVerificationMethod.Add("signature"); - - List pointOfSaleInformationTerminalInputCapability = new List (); - pointOfSaleInformationTerminalInputCapability.Add("contact"); - pointOfSaleInformationTerminalInputCapability.Add("contactless"); - pointOfSaleInformationTerminalInputCapability.Add("keyed"); - pointOfSaleInformationTerminalInputCapability.Add("swiped"); - string pointOfSaleInformationTerminalCardCaptureCapability = "1"; - string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; - string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData, - CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, - TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, - TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, - DeviceId: pointOfSaleInformationDeviceId, - EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs deleted file mode 100644 index c5e81fa..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingEMVTechnologyWithContactlessForAcquirer - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 2; - string pointOfSaleInformationEntryMode = "contactless"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationEmvCardSequenceNumber = "999"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs deleted file mode 100644 index d83a838..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingEMVTechnologyWithContactlessReadForAcquirer - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contactless"; - int pointOfSaleInformationTerminalCapability = 5; - string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; - int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; - string pointOfSaleInformationEmvCardSequenceNumber = "1"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Tags: pointOfSaleInformationEmvTags, - CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - - List pointOfSaleInformationCardholderVerificationMethod = new List (); - pointOfSaleInformationCardholderVerificationMethod.Add("pin"); - pointOfSaleInformationCardholderVerificationMethod.Add("signature"); - - List pointOfSaleInformationTerminalInputCapability = new List (); - pointOfSaleInformationTerminalInputCapability.Add("contact"); - pointOfSaleInformationTerminalInputCapability.Add("contactless"); - pointOfSaleInformationTerminalInputCapability.Add("keyed"); - pointOfSaleInformationTerminalInputCapability.Add("swiped"); - string pointOfSaleInformationTerminalCardCaptureCapability = "1"; - string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; - string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData, - CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, - TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, - TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, - DeviceId: pointOfSaleInformationDeviceId, - EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs deleted file mode 100644 index 85ca588..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingEMVTechnologyWithContactlessReadForCTV - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 2; - string pointOfSaleInformationEntryMode = "contactless"; - int pointOfSaleInformationTerminalCapability = 5; - string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; - string pointOfSaleInformationEmvCardSequenceNumber = "1"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Tags: pointOfSaleInformationEmvTags, - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs deleted file mode 100644 index c37aee4..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForAcquirer.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingKeyedDataForAcquirer - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "keyed"; - int pointOfSaleInformationTerminalCapability = 2; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs deleted file mode 100644 index 3b2a12e..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataForCTV.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingKeyedDataForCTV - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; - bool processingInformationAuthorizationOptionsIgnoreCvResult = true; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "keyed"; - int pointOfSaleInformationTerminalCapability = 2; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs b/src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs deleted file mode 100644 index e5de4f9..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingKeyedDataWithBalanceInquiry.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingKeyedDataWithBalanceInquiry - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; - bool processingInformationAuthorizationOptionsIgnoreCvResult = true; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "keyed"; - int pointOfSaleInformationTerminalCapability = 2; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs b/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs deleted file mode 100644 index c20f5ca..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForAcquirer.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingSwipedTrackDataForAcquirer - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "swiped"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs b/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs deleted file mode 100644 index 39220b0..0000000 --- a/src/Samples/Payments/CoreServices/SaleUsingSwipedTrackDataForCTV.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SaleUsingSwipedTrackDataForCTV - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "swiped"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs b/src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs deleted file mode 100644 index e721cec..0000000 --- a/src/Samples/Payments/CoreServices/ServiceFeesWithCreditCardTransaction.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class ServiceFeesWithCreditCardTransaction - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "2325.00"; - string orderInformationAmountDetailsCurrency = "USD"; - string orderInformationAmountDetailsServiceFeeAmount = "30.0"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency, - ServiceFeeAmount: orderInformationAmountDetailsServiceFeeAmount - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - string merchantInformationServiceFeeDescriptorName = "Vacations Service Fee"; - string merchantInformationServiceFeeDescriptorContact = "8009999999"; - string merchantInformationServiceFeeDescriptorState = "CA"; - Ptsv2paymentsMerchantInformationServiceFeeDescriptor merchantInformationServiceFeeDescriptor = new Ptsv2paymentsMerchantInformationServiceFeeDescriptor( - Name: merchantInformationServiceFeeDescriptorName, - Contact: merchantInformationServiceFeeDescriptorContact, - State: merchantInformationServiceFeeDescriptorState - ); - - Ptsv2paymentsMerchantInformation merchantInformation = new Ptsv2paymentsMerchantInformation( - ServiceFeeDescriptor: merchantInformationServiceFeeDescriptor - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - MerchantInformation: merchantInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs b/src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs deleted file mode 100644 index dec3d93..0000000 --- a/src/Samples/Payments/CoreServices/SimpleAuthorizationInternet.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class SimpleAuthorizationInternet - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "102.21"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/Swiped.cs b/src/Samples/Payments/CoreServices/Swiped.cs deleted file mode 100644 index cc9ce74..0000000 --- a/src/Samples/Payments/CoreServices/Swiped.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class Swiped - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "swiped"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs b/src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs deleted file mode 100644 index 5adb5f4..0000000 --- a/src/Samples/Payments/CoreServices/ZeroDollarAuthorization.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.CoreServices -{ - public class ZeroDollarAuthorization - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "1234567890"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "5555555555554444"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "0"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs b/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs index 5ac9438..c46045e 100644 --- a/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs +++ b/src/Samples/RiskManagement/CoreServices/CreateDecisionManagerCase.cs @@ -12,7 +12,7 @@ public class CreateDecisionManagerCase { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -59,7 +59,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs index 3382d50..3933204 100644 --- a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs +++ b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs @@ -12,7 +12,7 @@ public class DecisionProfileReject { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -68,7 +68,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs index 7ec8bee..4c6e5f6 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithBuyerInformation.cs @@ -12,7 +12,7 @@ public class DmWithBuyerInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -72,7 +72,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs index 2fd8552..b2f7c79 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithDeviceInformation.cs @@ -12,7 +12,7 @@ public class DmWithDeviceInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -68,7 +68,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs index bbab996..1b6f423 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithMerchantDefinedInformation.cs @@ -12,7 +12,7 @@ public class DmWithMerchantDefinedInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -73,7 +73,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs index b9e3809..c12a993 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithShippingInformation.cs @@ -12,7 +12,7 @@ public class DmWithShippingInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -72,7 +72,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs b/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs index 6655789..37c2968 100644 --- a/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs +++ b/src/Samples/RiskManagement/CoreServices/DmWithTravelInformation.cs @@ -12,7 +12,7 @@ public class DmWithTravelInformation { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -80,7 +80,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs b/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs index deb029e..ed42031 100644 --- a/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs +++ b/src/Samples/RiskManagement/CoreServices/ScoreExceedsThreshold.cs @@ -12,7 +12,7 @@ public class ScoreExceedsThreshold { public static RiskV1DecisionsPost201Response Run() { - var requestObj = new CreateBundledDecisionManagerCaseRequest(); + var requestObj = new CreateDecisionManagerCaseRequest(); var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); @@ -72,7 +72,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - var result = apiInstance.CreateBundledDecisionManagerCase(requestObj); + var result = apiInstance.CreateDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs b/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs index 5ac491a..0a89720 100644 --- a/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs +++ b/src/Samples/SecureFileShare/CoreServices/DownloadFileWithFileIdentifier.cs @@ -27,8 +27,7 @@ public static void Run() var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new SecureFileShareApi(clientConfig); - apiInstance.Configuration.ApiClient.AcceptHeader = "text/csv"; - + var content = apiInstance.GetFileWithHttpInfo(fileId, organizationId); File.WriteAllText(downloadFilePath, CreateXml(content.Data)); diff --git a/src/packages.config b/src/packages.config index d8bce03..186cca5 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - + From 6c0bf8cba2a2aef590ef5e8d0a13e6c64445063d Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 27 May 2020 14:20:21 +0530 Subject: [PATCH 021/161] Adding sample codes for Incremental Authorization, Timeout Reversal, Timeout Void and Invoicing --- src/Configuration.cs | 25 ++ src/SampleCode.csproj | 26 +- .../InvoiceSettings/GetInvoiceSettings.cs | 31 ++ .../InvoiceSettings/UpdateInvoiceSettings.cs | 54 ++++ .../CreateAndSendInvoiceImmediately.cs | 108 +++++++ .../Invoicing/Invoices/CreateDraftInvoice.cs | 108 +++++++ ...InvoiceAndAssignItSpecificInvoiceNumber.cs | 110 ++++++++ .../Invoices/CreateInvoiceWithoutSendingIt.cs | 110 ++++++++ .../Invoicing/Invoices/GetInvoiceDetails.cs | 32 +++ .../AuthorizationCaptureForTimeoutVoidFlow.cs | 100 +++++++ ...rizationForIncrementalAuthorizationFlow.cs | 267 ++++++++++++++++++ .../AuthorizationForTimeoutReversalFlow.cs | 106 +++++++ .../Payments/IncrementalAuthorization.cs | 85 ++++++ .../Payments/Reversal/TimeoutReversal.cs | 57 ++++ src/Samples/Payments/Void/TimeoutVoid.cs | 43 +++ 15 files changed, 1256 insertions(+), 6 deletions(-) create mode 100644 src/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs create mode 100644 src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs create mode 100644 src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs create mode 100644 src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs create mode 100644 src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs create mode 100644 src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs create mode 100644 src/Samples/Invoicing/Invoices/GetInvoiceDetails.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs create mode 100644 src/Samples/Payments/Payments/IncrementalAuthorization.cs create mode 100644 src/Samples/Payments/Reversal/TimeoutReversal.cs create mode 100644 src/Samples/Payments/Void/TimeoutVoid.cs diff --git a/src/Configuration.cs b/src/Configuration.cs index c5082d5..491264c 100644 --- a/src/Configuration.cs +++ b/src/Configuration.cs @@ -29,6 +29,31 @@ public Dictionary GetConfiguration() // _configurationDictionary.Add("proxyPassword", string.Empty); + return _configurationDictionary; + } + + public Dictionary GetAlternativeConfiguration() + { + _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); + _configurationDictionary.Add("merchantID", "testrest_cpctv"); + _configurationDictionary.Add("merchantsecretKey", "JXm4dqKYIxWofM1TIbtYY9HuYo7Cg1HPHxn29f6waRo="); + _configurationDictionary.Add("merchantKeyId", "e547c3d3-16e4-444c-9313-2a08784b906a"); + _configurationDictionary.Add("keysDirectory", "Resource"); + _configurationDictionary.Add("keyFilename", "testrest_cpctv"); + _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + _configurationDictionary.Add("keyAlias", "testrest_cpctv"); + _configurationDictionary.Add("keyPass", "testrest_cpctv"); + _configurationDictionary.Add("enableLog", "FALSE"); + _configurationDictionary.Add("logDirectory", string.Empty); + _configurationDictionary.Add("logFileName", string.Empty); + _configurationDictionary.Add("logFileMaxSize", "5242880"); + _configurationDictionary.Add("timeout", "300000"); + // _configurationDictionary.Add("proxyAddress", string.Empty); + // _configurationDictionary.Add("proxyPort", string.Empty); + // _configurationDictionary.Add("proxyUsername", string.Empty); + // _configurationDictionary.Add("proxyPassword", string.Empty); + + return _configurationDictionary; } } diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 3e87ca0..d9a5951 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -96,21 +96,32 @@ - - - - - - + + + + + + + + + + + + + + + + + @@ -124,6 +135,8 @@ + + @@ -218,6 +231,7 @@ + diff --git a/src/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs b/src/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs new file mode 100644 index 0000000..beda487 --- /dev/null +++ b/src/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class GetInvoiceSettings + { + public static InvoicingV2InvoiceSettingsGet200Response Run() + { + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoiceSettingsApi(clientConfig); + InvoicingV2InvoiceSettingsGet200Response result = apiInstance.GetInvoiceSettings(); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs b/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs new file mode 100644 index 0000000..8704e22 --- /dev/null +++ b/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class UpdateInvoiceSettings + { + public static InvoicingV2InvoiceSettingsGet200Response Run() + { + string invoiceSettingsInformationMerchantLogo = "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"; + string invoiceSettingsInformationMerchantDisplayName = "Custom Merchant Display Name"; + string invoiceSettingsInformationCustomEmailMessage = "Custom merchant email message"; + bool invoiceSettingsInformationEnableReminders = true; + string invoiceSettingsInformationHeaderStyleFontColor = "#000001"; + string invoiceSettingsInformationHeaderStyleBackgroundColor = "#FFFFFF"; + InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformationHeaderStyle invoiceSettingsInformationHeaderStyle = new InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformationHeaderStyle( + FontColor: invoiceSettingsInformationHeaderStyleFontColor, + BackgroundColor: invoiceSettingsInformationHeaderStyleBackgroundColor + ); + + InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformation invoiceSettingsInformation = new InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformation( + MerchantLogo: invoiceSettingsInformationMerchantLogo, + MerchantDisplayName: invoiceSettingsInformationMerchantDisplayName, + CustomEmailMessage: invoiceSettingsInformationCustomEmailMessage, + EnableReminders: invoiceSettingsInformationEnableReminders, + HeaderStyle: invoiceSettingsInformationHeaderStyle + ); + + var requestObj = new InvoiceSettingsRequest( + InvoiceSettingsInformation: invoiceSettingsInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoiceSettingsApi(clientConfig); + InvoicingV2InvoiceSettingsGet200Response result = apiInstance.UpdateInvoiceSettings(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs b/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs new file mode 100644 index 0000000..8c39268 --- /dev/null +++ b/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class CreateAndSendInvoiceImmediately + { + public static InvoicingV2InvoicesPost201Response Run() + { + string customerInformationName = "Tanya Lee"; + string customerInformationEmail = "tanya.lee@my-email.world"; + Invoicingv2invoicesCustomerInformation customerInformation = new Invoicingv2invoicesCustomerInformation( + Name: customerInformationName, + Email: customerInformationEmail + ); + + string invoiceInformationDescription = "This is a test invoice"; + DateTime invoiceInformationDueDate = DateTime.Parse("2019-07-11"); + bool invoiceInformationSendImmediately = true; + bool invoiceInformationAllowPartialPayments = true; + string invoiceInformationDeliveryMode = "email"; + Invoicingv2invoicesInvoiceInformation invoiceInformation = new Invoicingv2invoicesInvoiceInformation( + Description: invoiceInformationDescription, + DueDate: invoiceInformationDueDate, + SendImmediately: invoiceInformationSendImmediately, + AllowPartialPayments: invoiceInformationAllowPartialPayments, + DeliveryMode: invoiceInformationDeliveryMode + ); + + string orderInformationAmountDetailsTotalAmount = "2623.64"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsDiscountAmount = "126.08"; + decimal orderInformationAmountDetailsDiscountPercent = 5.00M; + decimal orderInformationAmountDetailsSubAmount = 2749.72M; + decimal orderInformationAmountDetailsMinimumPartialAmount = 20.00M; + string orderInformationAmountDetailsTaxDetailsType = "State Tax"; + string orderInformationAmountDetailsTaxDetailsAmount = "208.04"; + string orderInformationAmountDetailsTaxDetailsRate = "8.25"; + Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails orderInformationAmountDetailsTaxDetails = new Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails( + Type: orderInformationAmountDetailsTaxDetailsType, + Amount: orderInformationAmountDetailsTaxDetailsAmount, + Rate: orderInformationAmountDetailsTaxDetailsRate + ); + + string orderInformationAmountDetailsFreightAmount = "20.00"; + bool orderInformationAmountDetailsFreightTaxable = true; + Invoicingv2invoicesOrderInformationAmountDetailsFreight orderInformationAmountDetailsFreight = new Invoicingv2invoicesOrderInformationAmountDetailsFreight( + Amount: orderInformationAmountDetailsFreightAmount, + Taxable: orderInformationAmountDetailsFreightTaxable + ); + + Invoicingv2invoicesOrderInformationAmountDetails orderInformationAmountDetails = new Invoicingv2invoicesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + DiscountAmount: orderInformationAmountDetailsDiscountAmount, + DiscountPercent: orderInformationAmountDetailsDiscountPercent, + SubAmount: orderInformationAmountDetailsSubAmount, + MinimumPartialAmount: orderInformationAmountDetailsMinimumPartialAmount, + TaxDetails: orderInformationAmountDetailsTaxDetails, + Freight: orderInformationAmountDetailsFreight + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsProductSku1 = "P653727383"; + string orderInformationLineItemsProductName1 = "First line item's name"; + int orderInformationLineItemsQuantity1 = 21; + string orderInformationLineItemsUnitPrice1 = "120.08"; + orderInformationLineItems.Add(new Invoicingv2invoicesOrderInformationLineItems( + ProductSku: orderInformationLineItemsProductSku1, + ProductName: orderInformationLineItemsProductName1, + Quantity: orderInformationLineItemsQuantity1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + Invoicingv2invoicesOrderInformation orderInformation = new Invoicingv2invoicesOrderInformation( + AmountDetails: orderInformationAmountDetails, + LineItems: orderInformationLineItems + ); + + var requestObj = new CreateInvoiceRequest( + CustomerInformation: customerInformation, + InvoiceInformation: invoiceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs b/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs new file mode 100644 index 0000000..e4395c0 --- /dev/null +++ b/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class CreateDraftInvoice + { + public static InvoicingV2InvoicesPost201Response Run() + { + string customerInformationName = "Tanya Lee"; + string customerInformationEmail = "tanya.lee@my-email.world"; + Invoicingv2invoicesCustomerInformation customerInformation = new Invoicingv2invoicesCustomerInformation( + Name: customerInformationName, + Email: customerInformationEmail + ); + + string invoiceInformationDescription = "This is a test invoice"; + DateTime invoiceInformationDueDate = DateTime.Parse("2019-07-11"); + bool invoiceInformationSendImmediately = false; + bool invoiceInformationAllowPartialPayments = true; + string invoiceInformationDeliveryMode = "none"; + Invoicingv2invoicesInvoiceInformation invoiceInformation = new Invoicingv2invoicesInvoiceInformation( + Description: invoiceInformationDescription, + DueDate: invoiceInformationDueDate, + SendImmediately: invoiceInformationSendImmediately, + AllowPartialPayments: invoiceInformationAllowPartialPayments, + DeliveryMode: invoiceInformationDeliveryMode + ); + + string orderInformationAmountDetailsTotalAmount = "2623.64"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsDiscountAmount = "126.08"; + decimal orderInformationAmountDetailsDiscountPercent = 5.00M; + decimal orderInformationAmountDetailsSubAmount = 2749.72M; + decimal orderInformationAmountDetailsMinimumPartialAmount = 20.00M; + string orderInformationAmountDetailsTaxDetailsType = "State Tax"; + string orderInformationAmountDetailsTaxDetailsAmount = "208.00"; + string orderInformationAmountDetailsTaxDetailsRate = "8.25"; + Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails orderInformationAmountDetailsTaxDetails = new Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails( + Type: orderInformationAmountDetailsTaxDetailsType, + Amount: orderInformationAmountDetailsTaxDetailsAmount, + Rate: orderInformationAmountDetailsTaxDetailsRate + ); + + string orderInformationAmountDetailsFreightAmount = "20.00"; + bool orderInformationAmountDetailsFreightTaxable = true; + Invoicingv2invoicesOrderInformationAmountDetailsFreight orderInformationAmountDetailsFreight = new Invoicingv2invoicesOrderInformationAmountDetailsFreight( + Amount: orderInformationAmountDetailsFreightAmount, + Taxable: orderInformationAmountDetailsFreightTaxable + ); + + Invoicingv2invoicesOrderInformationAmountDetails orderInformationAmountDetails = new Invoicingv2invoicesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + DiscountAmount: orderInformationAmountDetailsDiscountAmount, + DiscountPercent: orderInformationAmountDetailsDiscountPercent, + SubAmount: orderInformationAmountDetailsSubAmount, + MinimumPartialAmount: orderInformationAmountDetailsMinimumPartialAmount, + TaxDetails: orderInformationAmountDetailsTaxDetails, + Freight: orderInformationAmountDetailsFreight + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsProductSku1 = "P653727383"; + string orderInformationLineItemsProductName1 = "First line item's name"; + int orderInformationLineItemsQuantity1 = 21; + string orderInformationLineItemsUnitPrice1 = "120.08"; + orderInformationLineItems.Add(new Invoicingv2invoicesOrderInformationLineItems( + ProductSku: orderInformationLineItemsProductSku1, + ProductName: orderInformationLineItemsProductName1, + Quantity: orderInformationLineItemsQuantity1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + Invoicingv2invoicesOrderInformation orderInformation = new Invoicingv2invoicesOrderInformation( + AmountDetails: orderInformationAmountDetails, + LineItems: orderInformationLineItems + ); + + var requestObj = new CreateInvoiceRequest( + CustomerInformation: customerInformation, + InvoiceInformation: invoiceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs b/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs new file mode 100644 index 0000000..a9ad705 --- /dev/null +++ b/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class CreateInvoiceAndAssignItSpecificInvoiceNumber + { + public static InvoicingV2InvoicesPost201Response Run() + { + string customerInformationName = "Tanya Lee"; + string customerInformationEmail = "tanya.lee@my-email.world"; + Invoicingv2invoicesCustomerInformation customerInformation = new Invoicingv2invoicesCustomerInformation( + Name: customerInformationName, + Email: customerInformationEmail + ); + + string invoiceInformationInvoiceNumber = "A123"; + string invoiceInformationDescription = "This is a test invoice"; + DateTime invoiceInformationDueDate = DateTime.Parse("2019-07-11"); + bool invoiceInformationSendImmediately = true; + bool invoiceInformationAllowPartialPayments = true; + string invoiceInformationDeliveryMode = "email"; + Invoicingv2invoicesInvoiceInformation invoiceInformation = new Invoicingv2invoicesInvoiceInformation( + InvoiceNumber: invoiceInformationInvoiceNumber, + Description: invoiceInformationDescription, + DueDate: invoiceInformationDueDate, + SendImmediately: invoiceInformationSendImmediately, + AllowPartialPayments: invoiceInformationAllowPartialPayments, + DeliveryMode: invoiceInformationDeliveryMode + ); + + string orderInformationAmountDetailsTotalAmount = "2623.64"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsDiscountAmount = "126.08"; + decimal orderInformationAmountDetailsDiscountPercent = 5.00M; + decimal orderInformationAmountDetailsSubAmount = 2749.72M; + decimal orderInformationAmountDetailsMinimumPartialAmount = 20.00M; + string orderInformationAmountDetailsTaxDetailsType = "State Tax"; + string orderInformationAmountDetailsTaxDetailsAmount = "208.04"; + string orderInformationAmountDetailsTaxDetailsRate = "8.25"; + Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails orderInformationAmountDetailsTaxDetails = new Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails( + Type: orderInformationAmountDetailsTaxDetailsType, + Amount: orderInformationAmountDetailsTaxDetailsAmount, + Rate: orderInformationAmountDetailsTaxDetailsRate + ); + + string orderInformationAmountDetailsFreightAmount = "20.00"; + bool orderInformationAmountDetailsFreightTaxable = true; + Invoicingv2invoicesOrderInformationAmountDetailsFreight orderInformationAmountDetailsFreight = new Invoicingv2invoicesOrderInformationAmountDetailsFreight( + Amount: orderInformationAmountDetailsFreightAmount, + Taxable: orderInformationAmountDetailsFreightTaxable + ); + + Invoicingv2invoicesOrderInformationAmountDetails orderInformationAmountDetails = new Invoicingv2invoicesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + DiscountAmount: orderInformationAmountDetailsDiscountAmount, + DiscountPercent: orderInformationAmountDetailsDiscountPercent, + SubAmount: orderInformationAmountDetailsSubAmount, + MinimumPartialAmount: orderInformationAmountDetailsMinimumPartialAmount, + TaxDetails: orderInformationAmountDetailsTaxDetails, + Freight: orderInformationAmountDetailsFreight + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsProductSku1 = "P653727383"; + string orderInformationLineItemsProductName1 = "First line item's name"; + int orderInformationLineItemsQuantity1 = 21; + string orderInformationLineItemsUnitPrice1 = "120.08"; + orderInformationLineItems.Add(new Invoicingv2invoicesOrderInformationLineItems( + ProductSku: orderInformationLineItemsProductSku1, + ProductName: orderInformationLineItemsProductName1, + Quantity: orderInformationLineItemsQuantity1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + Invoicingv2invoicesOrderInformation orderInformation = new Invoicingv2invoicesOrderInformation( + AmountDetails: orderInformationAmountDetails, + LineItems: orderInformationLineItems + ); + + var requestObj = new CreateInvoiceRequest( + CustomerInformation: customerInformation, + InvoiceInformation: invoiceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs b/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs new file mode 100644 index 0000000..1cbeef0 --- /dev/null +++ b/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class CreateInvoiceWithoutSendingIt + { + public static InvoicingV2InvoicesPost201Response Run() + { + string customerInformationName = "Tanya Lee"; + string customerInformationEmail = "tanya.lee@my-email.world"; + Invoicingv2invoicesCustomerInformation customerInformation = new Invoicingv2invoicesCustomerInformation( + Name: customerInformationName, + Email: customerInformationEmail + ); + + string invoiceInformationInvoiceNumber = "A123"; + string invoiceInformationDescription = "This is a test invoice"; + DateTime invoiceInformationDueDate = DateTime.Parse("2019-07-11"); + bool invoiceInformationSendImmediately = true; + bool invoiceInformationAllowPartialPayments = true; + string invoiceInformationDeliveryMode = "none"; + Invoicingv2invoicesInvoiceInformation invoiceInformation = new Invoicingv2invoicesInvoiceInformation( + InvoiceNumber: invoiceInformationInvoiceNumber, + Description: invoiceInformationDescription, + DueDate: invoiceInformationDueDate, + SendImmediately: invoiceInformationSendImmediately, + AllowPartialPayments: invoiceInformationAllowPartialPayments, + DeliveryMode: invoiceInformationDeliveryMode + ); + + string orderInformationAmountDetailsTotalAmount = "2623.64"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsDiscountAmount = "126.08"; + decimal orderInformationAmountDetailsDiscountPercent = 5.00M; + decimal orderInformationAmountDetailsSubAmount = 2749.72M; + decimal orderInformationAmountDetailsMinimumPartialAmount = 20.00M; + string orderInformationAmountDetailsTaxDetailsType = "State Tax"; + string orderInformationAmountDetailsTaxDetailsAmount = "208.04"; + string orderInformationAmountDetailsTaxDetailsRate = "8.25"; + Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails orderInformationAmountDetailsTaxDetails = new Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails( + Type: orderInformationAmountDetailsTaxDetailsType, + Amount: orderInformationAmountDetailsTaxDetailsAmount, + Rate: orderInformationAmountDetailsTaxDetailsRate + ); + + string orderInformationAmountDetailsFreightAmount = "20.00"; + bool orderInformationAmountDetailsFreightTaxable = true; + Invoicingv2invoicesOrderInformationAmountDetailsFreight orderInformationAmountDetailsFreight = new Invoicingv2invoicesOrderInformationAmountDetailsFreight( + Amount: orderInformationAmountDetailsFreightAmount, + Taxable: orderInformationAmountDetailsFreightTaxable + ); + + Invoicingv2invoicesOrderInformationAmountDetails orderInformationAmountDetails = new Invoicingv2invoicesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + DiscountAmount: orderInformationAmountDetailsDiscountAmount, + DiscountPercent: orderInformationAmountDetailsDiscountPercent, + SubAmount: orderInformationAmountDetailsSubAmount, + MinimumPartialAmount: orderInformationAmountDetailsMinimumPartialAmount, + TaxDetails: orderInformationAmountDetailsTaxDetails, + Freight: orderInformationAmountDetailsFreight + ); + + + List orderInformationLineItems = new List (); + string orderInformationLineItemsProductSku1 = "P653727383"; + string orderInformationLineItemsProductName1 = "First line item's name"; + int orderInformationLineItemsQuantity1 = 21; + string orderInformationLineItemsUnitPrice1 = "120.08"; + orderInformationLineItems.Add(new Invoicingv2invoicesOrderInformationLineItems( + ProductSku: orderInformationLineItemsProductSku1, + ProductName: orderInformationLineItemsProductName1, + Quantity: orderInformationLineItemsQuantity1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + Invoicingv2invoicesOrderInformation orderInformation = new Invoicingv2invoicesOrderInformation( + AmountDetails: orderInformationAmountDetails, + LineItems: orderInformationLineItems + ); + + var requestObj = new CreateInvoiceRequest( + CustomerInformation: customerInformation, + InvoiceInformation: invoiceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Invoicing/Invoices/GetInvoiceDetails.cs b/src/Samples/Invoicing/Invoices/GetInvoiceDetails.cs new file mode 100644 index 0000000..3523b2d --- /dev/null +++ b/src/Samples/Invoicing/Invoices/GetInvoiceDetails.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class GetInvoiceDetails + { + public static InvoicingV2InvoicesGet200Response Run() + { + string id = CreateDraftInvoice.Run().Id; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesGet200Response result = apiInstance.GetInvoice(id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs b/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs new file mode 100644 index 0000000..a8222ed --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs @@ -0,0 +1,100 @@ +using System; +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationCaptureForTimeoutVoidFlow + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + string clientReferenceInformationTransactionId = "879564132897"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + TransactionId: clientReferenceInformationTransactionId + ); + + bool processingInformationCapture = true; + + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs b/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs new file mode 100644 index 0000000..5c670c5 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs @@ -0,0 +1,267 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationForIncrementalAuthorizationFlow + { + public static PtsV2PaymentsPost201Response Run() + { + bool processingInformationCapture = false; + string processingInformationIndustryDataType = "lodging"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + IndustryDataType: processingInformationIndustryDataType + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2021"; + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + string paymentInformationTokenizedCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Ptsv2paymentsPaymentInformationTokenizedCard( + SecurityCode: paymentInformationTokenizedCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + TokenizedCard: paymentInformationTokenizedCard + ); + + string orderInformationAmountDetailsTotalAmount = "20"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "201 S. Division St."; + string orderInformationBillToAddress2 = "Suite 500"; + string orderInformationBillToLocality = "Ann Arbor"; + string orderInformationBillToAdministrativeArea = "MI"; + string orderInformationBillToPostalCode = "12345"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "null@cybersource.com"; + string orderInformationBillToPhoneNumber = "514-670-8700"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "Olivia"; + string orderInformationShipToLastName = "White"; + string orderInformationShipToAddress1 = "1295 Charleston Rd"; + string orderInformationShipToAddress2 = "Cube 2386"; + string orderInformationShipToLocality = "Mountain View"; + string orderInformationShipToAdministrativeArea = "CA"; + string orderInformationShipToPostalCode = "94041"; + string orderInformationShipToCountry = "AE"; + string orderInformationShipToPhoneNumber = "650-965-6000"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Address2: orderInformationShipToAddress2, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry, + PhoneNumber: orderInformationShipToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + string merchantInformationMerchantDescriptorContact = "965-6000"; + Ptsv2paymentsMerchantInformationMerchantDescriptor merchantInformationMerchantDescriptor = new Ptsv2paymentsMerchantInformationMerchantDescriptor( + Contact: merchantInformationMerchantDescriptorContact + ); + + Ptsv2paymentsMerchantInformation merchantInformation = new Ptsv2paymentsMerchantInformation( + MerchantDescriptor: merchantInformationMerchantDescriptor + ); + + string consumerAuthenticationInformationCavv = "ABCDEabcde12345678900987654321abcdeABCDE"; + string consumerAuthenticationInformationXid = "12345678909876543210ABCDEabcdeABCDEF1234"; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + Cavv: consumerAuthenticationInformationCavv, + Xid: consumerAuthenticationInformationXid + ); + + string installmentInformationAmount = "1200"; + string installmentInformationFrequency = "W"; + int installmentInformationSequence = 34; + string installmentInformationTotalAmount = "2000"; + int installmentInformationTotalCount = 12; + Ptsv2paymentsInstallmentInformation installmentInformation = new Ptsv2paymentsInstallmentInformation( + Amount: installmentInformationAmount, + Frequency: installmentInformationFrequency, + Sequence: installmentInformationSequence, + TotalAmount: installmentInformationTotalAmount, + TotalCount: installmentInformationTotalCount + ); + + string travelInformationDuration = "3"; + string travelInformationLodgingCheckInDate = "11062019"; + string travelInformationLodgingCheckOutDate = "11092019"; + + List travelInformationLodgingRoom = new List (); + string travelInformationLodgingRoomDailyRate1 = "1.50"; + int travelInformationLodgingRoomNumberOfNights1 = 5; + travelInformationLodgingRoom.Add(new Ptsv2paymentsTravelInformationLodgingRoom( + DailyRate: travelInformationLodgingRoomDailyRate1, + NumberOfNights: travelInformationLodgingRoomNumberOfNights1 + )); + + string travelInformationLodgingRoomDailyRate2 = "11.50"; + int travelInformationLodgingRoomNumberOfNights2 = 5; + travelInformationLodgingRoom.Add(new Ptsv2paymentsTravelInformationLodgingRoom( + DailyRate: travelInformationLodgingRoomDailyRate2, + NumberOfNights: travelInformationLodgingRoomNumberOfNights2 + )); + + string travelInformationLodgingSmokingPreference = "yes"; + int travelInformationLodgingNumberOfRooms = 1; + int travelInformationLodgingNumberOfGuests = 3; + string travelInformationLodgingRoomBedType = "king"; + string travelInformationLodgingRoomTaxType = "tourist"; + string travelInformationLodgingRoomRateType = "sr citizen"; + string travelInformationLodgingGuestName = "Tulasi"; + string travelInformationLodgingCustomerServicePhoneNumber = "+13304026334"; + string travelInformationLodgingCorporateClientCode = "HDGGASJDGSUY"; + string travelInformationLodgingAdditionalDiscountAmount = "99.123456781"; + string travelInformationLodgingRoomLocation = "seaview"; + string travelInformationLodgingSpecialProgramCode = "2"; + string travelInformationLodgingTotalTaxAmount = "99.1234567891"; + string travelInformationLodgingPrepaidCost = "9999999999.99"; + string travelInformationLodgingFoodAndBeverageCost = "9999999999.99"; + string travelInformationLodgingRoomTaxAmount = "9999999999.99"; + string travelInformationLodgingAdjustmentAmount = "9999999999.99"; + string travelInformationLodgingPhoneCost = "9999999999.99"; + string travelInformationLodgingRestaurantCost = "9999999999.99"; + string travelInformationLodgingRoomServiceCost = "9999999999.99"; + string travelInformationLodgingMiniBarCost = "9999999999.99"; + string travelInformationLodgingLaundryCost = "9999999999.99"; + string travelInformationLodgingMiscellaneousCost = "9999999999.99"; + string travelInformationLodgingGiftShopCost = "9999999999.99"; + string travelInformationLodgingMovieCost = "9999999999.99"; + string travelInformationLodgingHealthClubCost = "9999999999.99"; + string travelInformationLodgingValetParkingCost = "9999999999.99"; + string travelInformationLodgingCashDisbursementCost = "9999999999.99"; + string travelInformationLodgingNonRoomCost = "9999999999.99"; + string travelInformationLodgingBusinessCenterCost = "9999999999.99"; + string travelInformationLodgingLoungeBarCost = "9999999999.99"; + string travelInformationLodgingTransportationCost = "9999999999.99"; + string travelInformationLodgingGratuityAmount = "9999999999.99"; + string travelInformationLodgingConferenceRoomCost = "9999999999.99"; + string travelInformationLodgingAudioVisualCost = "9999999999.99"; + string travelInformationLodgingNonRoomTaxAmount = "9999999999.99"; + string travelInformationLodgingEarlyCheckOutCost = "9999999999.99"; + string travelInformationLodgingInternetAccessCost = "9999999999.99"; + Ptsv2paymentsTravelInformationLodging travelInformationLodging = new Ptsv2paymentsTravelInformationLodging( + CheckInDate: travelInformationLodgingCheckInDate, + CheckOutDate: travelInformationLodgingCheckOutDate, + Room: travelInformationLodgingRoom, + SmokingPreference: travelInformationLodgingSmokingPreference, + NumberOfRooms: travelInformationLodgingNumberOfRooms, + NumberOfGuests: travelInformationLodgingNumberOfGuests, + RoomBedType: travelInformationLodgingRoomBedType, + RoomTaxType: travelInformationLodgingRoomTaxType, + RoomRateType: travelInformationLodgingRoomRateType, + GuestName: travelInformationLodgingGuestName, + CustomerServicePhoneNumber: travelInformationLodgingCustomerServicePhoneNumber, + CorporateClientCode: travelInformationLodgingCorporateClientCode, + AdditionalDiscountAmount: travelInformationLodgingAdditionalDiscountAmount, + RoomLocation: travelInformationLodgingRoomLocation, + SpecialProgramCode: travelInformationLodgingSpecialProgramCode, + TotalTaxAmount: travelInformationLodgingTotalTaxAmount, + PrepaidCost: travelInformationLodgingPrepaidCost, + FoodAndBeverageCost: travelInformationLodgingFoodAndBeverageCost, + RoomTaxAmount: travelInformationLodgingRoomTaxAmount, + AdjustmentAmount: travelInformationLodgingAdjustmentAmount, + PhoneCost: travelInformationLodgingPhoneCost, + RestaurantCost: travelInformationLodgingRestaurantCost, + RoomServiceCost: travelInformationLodgingRoomServiceCost, + MiniBarCost: travelInformationLodgingMiniBarCost, + LaundryCost: travelInformationLodgingLaundryCost, + MiscellaneousCost: travelInformationLodgingMiscellaneousCost, + GiftShopCost: travelInformationLodgingGiftShopCost, + MovieCost: travelInformationLodgingMovieCost, + HealthClubCost: travelInformationLodgingHealthClubCost, + ValetParkingCost: travelInformationLodgingValetParkingCost, + CashDisbursementCost: travelInformationLodgingCashDisbursementCost, + NonRoomCost: travelInformationLodgingNonRoomCost, + BusinessCenterCost: travelInformationLodgingBusinessCenterCost, + LoungeBarCost: travelInformationLodgingLoungeBarCost, + TransportationCost: travelInformationLodgingTransportationCost, + GratuityAmount: travelInformationLodgingGratuityAmount, + ConferenceRoomCost: travelInformationLodgingConferenceRoomCost, + AudioVisualCost: travelInformationLodgingAudioVisualCost, + NonRoomTaxAmount: travelInformationLodgingNonRoomTaxAmount, + EarlyCheckOutCost: travelInformationLodgingEarlyCheckOutCost, + InternetAccessCost: travelInformationLodgingInternetAccessCost + ); + + Ptsv2paymentsTravelInformation travelInformation = new Ptsv2paymentsTravelInformation( + Duration: travelInformationDuration, + Lodging: travelInformationLodging + ); + + string promotionInformationAdditionalCode = "9999999999.99"; + Ptsv2paymentsPromotionInformation promotionInformation = new Ptsv2paymentsPromotionInformation( + AdditionalCode: promotionInformationAdditionalCode + ); + + var requestObj = new CreatePaymentRequest( + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation, + InstallmentInformation: installmentInformation, + TravelInformation: travelInformation, + PromotionInformation: promotionInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs b/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs new file mode 100644 index 0000000..b1d025d --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs @@ -0,0 +1,106 @@ +using System; +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationForTimeoutReversalFlow + { + public static bool CaptureTrueForProcessPayment { get; set; } = false; + + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + string clientReferenceInformationTransactionId = "231465978312"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + TransactionId: clientReferenceInformationTransactionId + ); + + bool processingInformationCapture = false; + if (CaptureTrueForProcessPayment) + { + processingInformationCapture = true; + } + + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/src/Samples/Payments/Payments/IncrementalAuthorization.cs b/src/Samples/Payments/Payments/IncrementalAuthorization.cs new file mode 100644 index 0000000..16e8a6e --- /dev/null +++ b/src/Samples/Payments/Payments/IncrementalAuthorization.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class IncrementalAuthorization + { + public static PtsV2IncrementalAuthorizationPatch201Response Run() + { + string id = AuthorizationForIncrementalAuthorizationFlow.Run().Id; + string clientReferenceInformationPartnerOriginalTransactionId = "12345"; + string clientReferenceInformationPartnerDeveloperId = "12345"; + string clientReferenceInformationPartnerSolutionId = "12345"; + Ptsv2paymentsidClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsidClientReferenceInformationPartner( + OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId, + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Ptsv2paymentsidClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidClientReferenceInformation( + Partner: clientReferenceInformationPartner + ); + + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator( + StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed + ); + + Ptsv2paymentsidProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsidProcessingInformationAuthorizationOptions( + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Ptsv2paymentsidProcessingInformation processingInformation = new Ptsv2paymentsidProcessingInformation( + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsAdditionalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidOrderInformationAmountDetails( + AdditionalAmount: orderInformationAmountDetailsAdditionalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidOrderInformation orderInformation = new Ptsv2paymentsidOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + Ptsv2paymentsidMerchantInformation merchantInformation = new Ptsv2paymentsidMerchantInformation( + ); + + string travelInformationDuration = "3"; + Ptsv2paymentsidTravelInformation travelInformation = new Ptsv2paymentsidTravelInformation( + Duration: travelInformationDuration + ); + + var requestObj = new IncrementAuthRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation, + TravelInformation: travelInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2IncrementalAuthorizationPatch201Response result = apiInstance.IncrementAuth(id, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Reversal/TimeoutReversal.cs b/src/Samples/Payments/Reversal/TimeoutReversal.cs new file mode 100644 index 0000000..e784f9d --- /dev/null +++ b/src/Samples/Payments/Reversal/TimeoutReversal.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class TimeoutReversal + { + public static PtsV2PaymentsReversalsPost201Response Run() + { + AuthorizationForTimeoutReversalFlow.Run(); + var clientReferenceInformationTransactionId = "231465978312"; + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + TransactionId: clientReferenceInformationTransactionId + ); + + string reversalInformationAmountDetailsTotalAmount = "102.21"; + + Ptsv2paymentsidreversalsReversalInformationAmountDetails reversalInformationAmountDetails = new Ptsv2paymentsidreversalsReversalInformationAmountDetails( + TotalAmount: reversalInformationAmountDetailsTotalAmount + ); + + string reversalInformationReason = "Testing"; + + Ptsv2paymentsidreversalsReversalInformation reversalInformation = new Ptsv2paymentsidreversalsReversalInformation( + AmountDetails: reversalInformationAmountDetails, + Reason: reversalInformationReason + ); + + var requestObj = new MitReversalRequest( + ClientReferenceInformation: clientReferenceInformation, + ReversalInformation: reversalInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ReversalApi(clientConfig); + PtsV2PaymentsReversalsPost201Response result = apiInstance.MitReversal(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Void/TimeoutVoid.cs b/src/Samples/Payments/Void/TimeoutVoid.cs new file mode 100644 index 0000000..0f2dd6a --- /dev/null +++ b/src/Samples/Payments/Void/TimeoutVoid.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class TimeoutVoid + { + public static PtsV2PaymentsVoidsPost201Response Run() + { + AuthorizationCaptureForTimeoutVoidFlow.Run(); + string clientReferenceInformationCode = "TC50171_3"; + string clientReferenceInformationTransactionId = "879564132897"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + TransactionId: clientReferenceInformationTransactionId + ); + + var requestObj = new MitVoidRequest( + ClientReferenceInformation: clientReferenceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VoidApi(clientConfig); + PtsV2PaymentsVoidsPost201Response result = apiInstance.MitVoid(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From 3cb39a0def3f138de4744173d6023889ad506fc3 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 27 May 2020 18:02:13 +0530 Subject: [PATCH 022/161] Added p12 certificate for alternative merchant --- src/Resource/testrest_cpctv.p12 | Bin 0 -> 3585 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Resource/testrest_cpctv.p12 diff --git a/src/Resource/testrest_cpctv.p12 b/src/Resource/testrest_cpctv.p12 new file mode 100644 index 0000000000000000000000000000000000000000..9bb718b0db2072b41e99593cd669d3965e572c95 GIT binary patch literal 3585 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 Date: Wed, 3 Jun 2020 18:06:07 +0530 Subject: [PATCH 023/161] Removing old folders and files --- .../ServiceFees/CreditWithServiceFee.cs | 80 ----------- .../ECheckStandaloneCreditWithServiceFee.cs | 86 ------------ .../Payouts/CoreServices/ProcessPayout.cs | 124 ------------------ .../GetReportingResourceInformation.cs | 27 ---- .../CoreServices/DecisionProfileReject.cs | 82 ------------ .../CoreServices/GetListOfFiles.cs | 29 ---- 6 files changed, 428 deletions(-) delete mode 100644 src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs delete mode 100644 src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs delete mode 100644 src/Samples/Payouts/CoreServices/ProcessPayout.cs delete mode 100644 src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs delete mode 100644 src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs delete mode 100644 src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs diff --git a/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs deleted file mode 100644 index dcaca6c..0000000 --- a/src/Samples/Payments/ServiceFees/CreditWithServiceFee.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Model; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class CreditWithServiceFee - { - public static PtsV2CreditsPost201Response Run() - { - var requestObj = new CreateCreditRequest(); - - var v2PaymentsClientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation - { - Code = "12345678" - }; - - requestObj.ClientReferenceInformation = v2PaymentsClientReferenceInformationObj; - - var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - PhoneNumber = "4158880000", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "san francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; - - var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "2325.00", - Currency = "usd", - ServiceFeeAmount = "30.00" - }; - - v2PaymentsOrderInformationObj.AmountDetails = v2PaymentsOrderInformationAmountDetailsObj; - - requestObj.OrderInformation = v2PaymentsOrderInformationObj; - - var v2PaymentsPaymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - - var v2PaymentsPaymentInformationCardObj = new Ptsv2paymentsidrefundsPaymentInformationCard - { - ExpirationYear = "2031", - Number = "4111111111111111", - ExpirationMonth = "03" - }; - - v2PaymentsPaymentInformationObj.Card = v2PaymentsPaymentInformationCardObj; - - requestObj.PaymentInformation = v2PaymentsPaymentInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new CreditApi(clientConfig); - - var result = apiInstance.CreateCredit(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs b/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs deleted file mode 100644 index a92f965..0000000 --- a/src/Samples/Payments/ServiceFees/ECheckStandaloneCreditWithServiceFee.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments.ServiceFees -{ - public class ECheckStandaloneCreditWithServiceFee - { - public static PtsV2CreditsPost201Response Run() - { - var requestObj = new CreateCreditRequest(); - - var v2PaymentsClientReferenceInformationObj = new Ptsv2paymentsClientReferenceInformation - { - Code = "TC46125-1" - }; - requestObj.ClientReferenceInformation = v2PaymentsClientReferenceInformationObj; - var processingInformation = new Ptsv2creditsProcessingInformation - { - CommerceIndicator = "internet" - }; - requestObj.ProcessingInformation = processingInformation; - - var v2PaymentsOrderInformationObj = new Ptsv2paymentsidrefundsOrderInformation(); - var v2PaymentsOrderInformationBillToObj = new Ptsv2paymentsidcapturesOrderInformationBillTo - { - Country = "US", - FirstName = "John", - LastName = "Doe", - PhoneNumber = "4158880000", - Address1 = "1 Market St", - PostalCode = "94105", - Locality = "san francisco", - AdministrativeArea = "CA", - Email = "test@cybs.com" - }; - v2PaymentsOrderInformationObj.BillTo = v2PaymentsOrderInformationBillToObj; - - var v2PaymentsOrderInformationAmountDetailsObj = new Ptsv2paymentsidcapturesOrderInformationAmountDetails - { - TotalAmount = "2325.00", - Currency = "usd", - ServiceFeeAmount = "30.00" - }; - - v2PaymentsOrderInformationObj.AmountDetails = v2PaymentsOrderInformationAmountDetailsObj; - - requestObj.OrderInformation = v2PaymentsOrderInformationObj; - - var v2PaymentsPaymentInformationObj = new Ptsv2paymentsidrefundsPaymentInformation(); - var v2paymentsPaymentInformationBankAccountObj = new Ptsv2paymentsPaymentInformationBankAccount - { - Number = "4100", - Type = "C", - CheckNumber = "123456" - }; - var v2paymentsPaymentInformationBankObj = new Ptsv2paymentsPaymentInformationBank - { - RoutingNumber = "071923284" - }; - v2paymentsPaymentInformationBankObj.Account = v2paymentsPaymentInformationBankAccountObj; - v2PaymentsPaymentInformationObj.Bank = v2paymentsPaymentInformationBankObj; - requestObj.PaymentInformation = v2PaymentsPaymentInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new CreditApi(clientConfig); - - var result = apiInstance.CreateCredit(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payouts/CoreServices/ProcessPayout.cs b/src/Samples/Payouts/CoreServices/ProcessPayout.cs deleted file mode 100644 index 8d5dbea..0000000 --- a/src/Samples/Payouts/CoreServices/ProcessPayout.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payouts.CoreServices -{ - public class ProcessPayout - { - public static void Run() - { - var requestObj = new OctCreatePaymentRequest(); - - var clientReferenceInformationObj = new Ptsv2payoutsClientReferenceInformation - { - Code = "33557799" - }; - - requestObj.ClientReferenceInformation = clientReferenceInformationObj; - - var senderInformationObj = new Ptsv2payoutsSenderInformation - { - ReferenceNumber = "1234567890", - Address1 = "900 Metro Center Blvd.900", - CountryCode = "US", - Locality = "San Francisco", - Name = "Thomas Jefferson", - AdministrativeArea = "CA" - }; - - var accountObj = new Ptsv2payoutsSenderInformationAccount - { - Number = "1234567890123456789012345678901234", - FundsSource = "01" - }; - - senderInformationObj.Account = accountObj; - - requestObj.SenderInformation = senderInformationObj; - - var processingInformationObj = new Ptsv2payoutsProcessingInformation - { - CommerceIndicator = "internet", - BusinessApplicationId = "FD", - NetworkRoutingOrder = "ECG" - }; - - requestObj.ProcessingInformation = processingInformationObj; - - var orderInformationObj = new Ptsv2payoutsOrderInformation(); - - var amountDetailsObj = new Ptsv2payoutsOrderInformationAmountDetails - { - TotalAmount = "100.00", - Currency = "USD" - }; - - orderInformationObj.AmountDetails = amountDetailsObj; - - requestObj.OrderInformation = orderInformationObj; - - var merchantInformationObj = new Ptsv2payoutsMerchantInformation - { - CategoryCode = 123 - }; - - var merchantDescriptorObj = new Ptsv2payoutsMerchantInformationMerchantDescriptor - { - Country = "US", - PostalCode = "94440", - Locality = "FC", - Name = "Thomas", - AdministrativeArea = "CA" - }; - - merchantInformationObj.MerchantDescriptor = merchantDescriptorObj; - - requestObj.MerchantInformation = merchantInformationObj; - - var paymentInformationObj = new Ptsv2payoutsPaymentInformation(); - - var cardObj = new Ptsv2payoutsPaymentInformationCard - { - ExpirationYear = "2025", - Number = "4111111111111111", - ExpirationMonth = "12", - Type = "001", - SourceAccountType = "CH" - }; - - paymentInformationObj.Card = cardObj; - - requestObj.PaymentInformation = paymentInformationObj; - - var recipientInformationObj = new Ptsv2payoutsRecipientInformation - { - FirstName = "John", - LastName = "Doe", - Address1 = "Paseo Padre Boulevard", - Locality = "San Francisco", - AdministrativeArea = "CA", - PostalCode = "94400", - PhoneNumber = "6504320556", - DateOfBirth = "19801009", - Country = "US" - }; - - requestObj.RecipientInformation = recipientInformationObj; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PayoutsApi(clientConfig); - - var result = apiInstance.OctCreatePaymentWithHttpInfo(requestObj); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs b/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs deleted file mode 100644 index b8f93ab..0000000 --- a/src/Samples/Reporting/CoreServices/GetReportingResourceInformation.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.Reporting.CoreServices -{ - public class GetReportingResourceInformation - { - public static void Run() - { - const string organizationId = "testrest"; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReportDefinitionsApi(clientConfig); - - var result = apiInstance.GetResourceV2Info(organizationId: organizationId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} diff --git a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs b/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs deleted file mode 100644 index 3933204..0000000 --- a/src/Samples/RiskManagement/CoreServices/DecisionProfileReject.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement.CoreServices -{ - public class DecisionProfileReject - { - public static RiskV1DecisionsPost201Response Run() - { - var requestObj = new CreateDecisionManagerCaseRequest(); - - var clientReferenceInformation = new Riskv1decisionsClientReferenceInformation(); - - clientReferenceInformation.Code = "54323007"; - requestObj.ClientReferenceInformation = clientReferenceInformation; - - var paymentInformation = new Riskv1decisionsPaymentInformation(); - - var card = new Riskv1decisionsPaymentInformationCard(); - - card.Number = "4444444444444448"; - card.ExpirationMonth = "12"; - card.ExpirationYear = "2020"; - paymentInformation.Card = card; - - requestObj.PaymentInformation = paymentInformation; - - var orderInformation = new Riskv1decisionsOrderInformation(); - - var amountDetails = new Riskv1decisionsOrderInformationAmountDetails("USD"); - - amountDetails.Currency = "USD"; - amountDetails.TotalAmount = "144.14"; - orderInformation.AmountDetails = amountDetails; - - var billTo = new Riskv1decisionsOrderInformationBillTo(); - - billTo.Address1 = "96, powers street"; - billTo.AdministrativeArea = "NH"; - billTo.Country = "US"; - billTo.Locality = "Clearwater milford"; - billTo.FirstName = "James"; - billTo.LastName = "Smith"; - billTo.PhoneNumber = "7606160717"; - billTo.Email = "test@visa.com"; - billTo.PostalCode = "03055"; - orderInformation.BillTo = billTo; - - requestObj.OrderInformation = orderInformation; - - var riskInformation = new Riskv1decisionsRiskInformation(); - - var profile = new Ptsv2paymentsRiskInformationProfile(); - - profile.Name = "profile2"; - riskInformation.Profile = profile; - - requestObj.RiskInformation = riskInformation; - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new DecisionManagerApi(clientConfig); - - var result = apiInstance.CreateDecisionManagerCase(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs b/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs deleted file mode 100644 index 9ecd901..0000000 --- a/src/Samples/SecureFileShare/CoreServices/GetListOfFiles.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Globalization; -using CyberSource.Api; - -namespace Cybersource_rest_samples_dotnet.Samples.SecureFileShare.CoreServices -{ - public class GetListOfFiles - { - public static void Run() - { - try - { - var startDate = DateTime.ParseExact("2020-04-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); - var endDate = DateTime.ParseExact("2020-04-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); - var organizationId = "testrest"; - - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new SecureFileShareApi(clientConfig); - var result = apiInstance.GetFileDetail(startDate, endDate, organizationId); - Console.WriteLine(result); - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - } - } - } -} From 02fe577a894f9736701f3926591a1313ea223f78 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 12 Jun 2020 16:05:15 +0530 Subject: [PATCH 024/161] Adding missing sample codes --- ...eOfAuthorizationThatUsedSwipedTrackData.cs | 60 ++++++++ .../Capture/RestaurantCaptureWithGratuity.cs | 68 ++++++++ .../Credit/CreditUsingBluefinPCIP2PE.cs | 110 +++++++++++++ ...mentInstrumentAndShippingAddressTokenId.cs | 74 +++++++++ .../Credit/CreditWithCustomerTokenId.cs | 62 ++++++++ .../CreditWithInstrumentIdentifierTokenId.cs | 94 ++++++++++++ ...AmericanExpressDirectEMVWithContactRead.cs | 108 +++++++++++++ ...SkipDecisionManagerForSingleTransaction.cs | 98 ++++++++++++ .../AuthorizationUsingBluefinPCIP2PE.cs | 124 +++++++++++++++ .../AuthorizationUsingSwipedTrackData.cs | 86 +++++++++++ .../Payments/AuthorizationWithCaptureSale.cs | 94 ++++++++++++ ...aymentInstrumentShippingAddressCreation.cs | 145 ++++++++++++++++++ ...mentInstrumentAndShippingAddressTokenId.cs | 74 +++++++++ .../AuthorizationWithCustomerTokenCreation.cs | 124 +++++++++++++++ .../AuthorizationWithCustomerTokenId.cs | 62 ++++++++ .../AuthorizationWithDMAcceptPAEnroll.cs | 100 ++++++++++++ .../AuthorizationWithDMRejectPAEnroll.cs | 100 ++++++++++++ .../AuthorizationWithDMReviewPAEnroll.cs | 100 ++++++++++++ .../AuthorizationWithDecisionManager.cs | 88 +++++++++++ ...tionWithDecisionManagerBuyerInformation.cs | 106 +++++++++++++ ...orizationWithDecisionManagerCustomSetup.cs | 98 ++++++++++++ ...ionWithDecisionManagerDeviceInformation.cs | 100 ++++++++++++ ...cisionManagerMerchantDefinedInformation.cs | 105 +++++++++++++ ...nWithDecisionManagerShippingInformation.cs | 108 +++++++++++++ ...ionWithDecisionManagerTravelInformation.cs | 92 +++++++++++ ...rizationWithInstrumentIdentifierTokenId.cs | 74 +++++++++ ...izationWithPAEnrollAuthenticationNeeded.cs | 108 +++++++++++++ .../AuthorizationWithPayerAuthValidation.cs | 98 ++++++++++++ ...eOfAuthorizationThatUsedSwipedTrackData.cs | 60 ++++++++ .../Payments/CreditUsingBluefinPCIP2PE.cs | 110 +++++++++++++ .../ElectronicCheckDebitsWithLegacyToken.cs | 88 +++++++++++ .../Payments/PaymentWithFlexTransientToken.cs | 84 ++++++++++ .../Payments/PaymentWithLegacyToken.cs | 84 ++++++++++ .../Payments/ProcessAuthorizationReversal.cs | 37 +++++ .../Payments/RestaurantAuthorization.cs | 86 +++++++++++ .../Payments/RestaurantCaptureWithGratuity.cs | 68 ++++++++ .../SaleUsingEMVTechnologyWithContactRead.cs | 92 +++++++++++ ...UsingEMVTechnologyWithContactReadForCTV.cs | 92 +++++++++++ ...TechnologyWithContactReadOneForAcquirer.cs | 80 ++++++++++ ...TechnologyWithContactReadTwoForAcquirer.cs | 108 +++++++++++++ .../SaleUsingEMVTechnologyWithContactless.cs | 80 ++++++++++ ...EMVTechnologyWithContactlessForAcquirer.cs | 80 ++++++++++ ...leUsingEMVTechnologyWithContactlessRead.cs | 92 +++++++++++ ...echnologyWithContactlessReadForAcquirer.cs | 108 +++++++++++++ ...gEMVTechnologyWithContactlessReadForCTV.cs | 92 +++++++++++ .../Payments/Payments/SaleUsingKeyedData.cs | 94 ++++++++++++ .../Payments/SaleUsingKeyedDataForAcquirer.cs | 84 ++++++++++ .../Payments/SaleUsingKeyedDataForCTV.cs | 94 ++++++++++++ .../SaleUsingKeyedDataWithBalanceInquiry.cs | 100 ++++++++++++ .../Payments/SaleUsingSwipedTrackData.cs | 80 ++++++++++ .../SaleUsingSwipedTrackDataForAcquirer.cs | 70 +++++++++ .../SaleUsingSwipedTrackDataForCTV.cs | 80 ++++++++++ src/Samples/Payments/Payments/Swiped.cs | 70 +++++++++ 53 files changed, 4773 insertions(+) create mode 100644 src/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs create mode 100644 src/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs create mode 100644 src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PE.cs create mode 100644 src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs create mode 100644 src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs create mode 100644 src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs create mode 100644 src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PE.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs create mode 100644 src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs create mode 100644 src/Samples/Payments/Payments/CreditUsingBluefinPCIP2PE.cs create mode 100644 src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs create mode 100644 src/Samples/Payments/Payments/PaymentWithFlexTransientToken.cs create mode 100644 src/Samples/Payments/Payments/PaymentWithLegacyToken.cs create mode 100644 src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs create mode 100644 src/Samples/Payments/Payments/RestaurantAuthorization.cs create mode 100644 src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadForCTV.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessRead.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingKeyedData.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingKeyedDataForAcquirer.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingKeyedDataForCTV.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingSwipedTrackData.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForAcquirer.cs create mode 100644 src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs create mode 100644 src/Samples/Payments/Payments/Swiped.cs diff --git a/src/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs b/src/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs new file mode 100644 index 0000000..d2543c3 --- /dev/null +++ b/src/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CaptureOfAuthorizationThatUsedSwipedTrackData + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + var processPaymentId = AuthorizationUsingSwipedTrackData.Run().Id; + string clientReferenceInformationCode = "1234567890"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + + PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs b/src/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs new file mode 100644 index 0000000..5dbb48e --- /dev/null +++ b/src/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class RestaurantCaptureWithGratuity + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + var processPaymentId = RestaurantAuthorization.Run().Id; + string clientReferenceInformationCode = "1234567890"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + string processingInformationIndustryDataType = "restaurant"; + Ptsv2paymentsidcapturesProcessingInformation processingInformation = new Ptsv2paymentsidcapturesProcessingInformation( + IndustryDataType: processingInformationIndustryDataType + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsGratuityAmount = "11.50"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + GratuityAmount: orderInformationAmountDetailsGratuityAmount + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + + PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PE.cs b/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PE.cs new file mode 100644 index 0000000..8346a6b --- /dev/null +++ b/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PE.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CreditUsingBluefinPCIP2PE + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "demomerchant"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string processingInformationCommerceIndicator = "retail"; + Ptsv2creditsProcessingInformation processingInformation = new Ptsv2creditsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2050"; + Ptsv2paymentsidrefundsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsidrefundsPaymentInformationCard( + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + string paymentInformationFluidDataDescriptor = "Ymx1ZWZpbg=="; + string paymentInformationFluidDataValue = "02d700801f3c20008383252a363031312a2a2a2a2a2a2a2a303030395e46444d53202020202020202020202020202020202020202020205e323231322a2a2a2a2a2a2a2a3f2a3b363031312a2a2a2a2a2a2a2a303030393d323231322a2a2a2a2a2a2a2a3f2a7a75ad15d25217290c54b3d9d1c3868602136c68d339d52d98423391f3e631511d548fff08b414feac9ff6c6dede8fb09bae870e4e32f6f462d6a75fa0a178c3bd18d0d3ade21bc7a0ea687a2eef64551751e502d97cb98dc53ea55162cdfa395431323439323830303762994901000001a000731a8003"; + Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( + Descriptor: paymentInformationFluidDataDescriptor, + Value: paymentInformationFluidDataValue + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Card: paymentInformationCard, + FluidData: paymentInformationFluidData + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "201 S. Division St."; + string orderInformationBillToLocality = "Ann Arbor"; + string orderInformationBillToAdministrativeArea = "MI"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "999999999"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs new file mode 100644 index 0000000..dd0580f --- /dev/null +++ b/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "12345678"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + string paymentInformationPaymentInstrumentId = "7500BB199B4270EFE05340588D0AFCPI"; + Ptsv2paymentsPaymentInformationPaymentInstrument paymentInformationPaymentInstrument = new Ptsv2paymentsPaymentInformationPaymentInstrument( + Id: paymentInformationPaymentInstrumentId + ); + + string paymentInformationShippingAddressId = "7500BB199B4270EFE05340588D0AFCSA"; + Ptsv2paymentsPaymentInformationShippingAddress paymentInformationShippingAddress = new Ptsv2paymentsPaymentInformationShippingAddress( + Id: paymentInformationShippingAddressId + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Customer: paymentInformationCustomer, + PaymentInstrument: paymentInformationPaymentInstrument, + ShippingAddress: paymentInformationShippingAddress + ); + + string orderInformationAmountDetailsTotalAmount = "200"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs b/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs new file mode 100644 index 0000000..cf21ec6 --- /dev/null +++ b/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CreditWithCustomerTokenId + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "12345678"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Customer: paymentInformationCustomer + ); + + string orderInformationAmountDetailsTotalAmount = "200"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs b/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs new file mode 100644 index 0000000..97c66d7 --- /dev/null +++ b/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CreditWithInstrumentIdentifierTokenId + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "12345678"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardExpirationMonth = "03"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsidrefundsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsidrefundsPaymentInformationCard( + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + string paymentInformationInstrumentIdentifierId = "7500BB199B4270EFE05340588D0AFCII"; + Ptsv2paymentsPaymentInformationInstrumentIdentifier paymentInformationInstrumentIdentifier = new Ptsv2paymentsPaymentInformationInstrumentIdentifier( + Id: paymentInformationInstrumentIdentifierId + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Card: paymentInformationCard, + InstrumentIdentifier: paymentInformationInstrumentIdentifier + ); + + string orderInformationAmountDetailsTotalAmount = "200"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "900 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "9321499232"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs b/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs new file mode 100644 index 0000000..084ceb8 --- /dev/null +++ b/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AmericanExpressDirectEMVWithContactRead + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + + List pointOfSaleInformationCardholderVerificationMethod = new List (); + pointOfSaleInformationCardholderVerificationMethod.Add("pin"); + pointOfSaleInformationCardholderVerificationMethod.Add("signature"); + + List pointOfSaleInformationTerminalInputCapability = new List (); + pointOfSaleInformationTerminalInputCapability.Add("contact"); + pointOfSaleInformationTerminalInputCapability.Add("contactless"); + pointOfSaleInformationTerminalInputCapability.Add("keyed"); + pointOfSaleInformationTerminalInputCapability.Add("swiped"); + string pointOfSaleInformationTerminalCardCaptureCapability = "1"; + string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; + string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData, + CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, + TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, + TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, + DeviceId: pointOfSaleInformationDeviceId, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs b/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs new file mode 100644 index 0000000..e909644 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationSkipDecisionManagerForSingleTransaction + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_16"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("DECISION_SKIP"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "11"; + string paymentInformationCardExpirationYear = "2025"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PE.cs b/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PE.cs new file mode 100644 index 0000000..686c37f --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PE.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationUsingBluefinPCIP2PE + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "demomerchant"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; + bool processingInformationAuthorizationOptionsIgnoreCvResult = true; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2050"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + string paymentInformationFluidDataDescriptor = "Ymx1ZWZpbg=="; + string paymentInformationFluidDataValue = "02d700801f3c20008383252a363031312a2a2a2a2a2a2a2a303030395e46444d53202020202020202020202020202020202020202020205e323231322a2a2a2a2a2a2a2a3f2a3b363031312a2a2a2a2a2a2a2a303030393d323231322a2a2a2a2a2a2a2a3f2a7a75ad15d25217290c54b3d9d1c3868602136c68d339d52d98423391f3e631511d548fff08b414feac9ff6c6dede8fb09bae870e4e32f6f462d6a75fa0a178c3bd18d0d3ade21bc7a0ea687a2eef64551751e502d97cb98dc53ea55162cdfa395431323439323830303762994901000001a000731a8003"; + Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( + Descriptor: paymentInformationFluidDataDescriptor, + Value: paymentInformationFluidDataValue + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + FluidData: paymentInformationFluidData + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "201 S. Division St."; + string orderInformationBillToLocality = "Ann Arbor"; + string orderInformationBillToAdministrativeArea = "MI"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToDistrict = "MI"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "999999999"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + District: orderInformationBillToDistrict, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs b/src/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs new file mode 100644 index 0000000..b6b1bf4 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationUsingSwipedTrackData + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "ABC123"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs b/src/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs new file mode 100644 index 0000000..634ac5d --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithCaptureSale + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs new file mode 100644 index 0000000..521af3a --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("TOKEN_CREATE"); + + List processingInformationActionTokenTypes = new List (); + processingInformationActionTokenTypes.Add("paymentInstrument"); + processingInformationActionTokenTypes.Add("shippingAddress"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + ActionTokenTypes: processingInformationActionTokenTypes, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + Customer: paymentInformationCustomer + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "John"; + string orderInformationShipToLastName = "Doe"; + string orderInformationShipToAddress1 = "1 Market St"; + string orderInformationShipToLocality = "san francisco"; + string orderInformationShipToAdministrativeArea = "CA"; + string orderInformationShipToPostalCode = "94105"; + string orderInformationShipToCountry = "US"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + bool tokenInformationPaymentInstrument_default = true; + Ptsv2paymentsTokenInformationPaymentInstrument tokenInformationPaymentInstrument = new Ptsv2paymentsTokenInformationPaymentInstrument( + _default: tokenInformationPaymentInstrument_default + ); + + bool tokenInformationShippingAddress_default = true; + Ptsv2paymentsTokenInformationShippingAddress tokenInformationShippingAddress = new Ptsv2paymentsTokenInformationShippingAddress( + _default: tokenInformationShippingAddress_default + ); + + Ptsv2paymentsTokenInformation tokenInformation = new Ptsv2paymentsTokenInformation( + PaymentInstrument: tokenInformationPaymentInstrument, + ShippingAddress: tokenInformationShippingAddress + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs new file mode 100644 index 0000000..5a3a9f9 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + string paymentInformationPaymentInstrumentId = "7500BB199B4270EFE05340588D0AFCPI"; + Ptsv2paymentsPaymentInformationPaymentInstrument paymentInformationPaymentInstrument = new Ptsv2paymentsPaymentInformationPaymentInstrument( + Id: paymentInformationPaymentInstrumentId + ); + + string paymentInformationShippingAddressId = "7500BB199B4270EFE05340588D0AFCSA"; + Ptsv2paymentsPaymentInformationShippingAddress paymentInformationShippingAddress = new Ptsv2paymentsPaymentInformationShippingAddress( + Id: paymentInformationShippingAddressId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Customer: paymentInformationCustomer, + PaymentInstrument: paymentInformationPaymentInstrument, + ShippingAddress: paymentInformationShippingAddress + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs new file mode 100644 index 0000000..d810c2b --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithCustomerTokenCreation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("TOKEN_CREATE"); + + List processingInformationActionTokenTypes = new List (); + processingInformationActionTokenTypes.Add("customer"); + processingInformationActionTokenTypes.Add("paymentInstrument"); + processingInformationActionTokenTypes.Add("shippingAddress"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + ActionTokenTypes: processingInformationActionTokenTypes, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "John"; + string orderInformationShipToLastName = "Doe"; + string orderInformationShipToAddress1 = "1 Market St"; + string orderInformationShipToLocality = "san francisco"; + string orderInformationShipToAdministrativeArea = "CA"; + string orderInformationShipToPostalCode = "94105"; + string orderInformationShipToCountry = "US"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs new file mode 100644 index 0000000..f516f09 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithCustomerTokenId + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Customer: paymentInformationCustomer + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs b/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs new file mode 100644 index 0000000..e95875c --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDMAcceptPAEnroll + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "cbys_test"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "340000000001007"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "1234"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "1.00"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "accept@cybersource.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs b/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs new file mode 100644 index 0000000..51280ab --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDMRejectPAEnroll + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "372425119311008"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "1234"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "reject@domain.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs b/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs new file mode 100644 index 0000000..cec2bf5 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDMReviewPAEnroll + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "372425119311008"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "1234"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "review@domain.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs new file mode 100644 index 0000000..6c094b9 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDecisionManager + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TSYS_Eh_FE_01"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "11"; + string paymentInformationCardExpirationYear = "2025"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "JSON"; + string orderInformationBillToLastName = "RTS"; + string orderInformationBillToAddress1 = "201 S. Division St._1"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "beforeauth@cybersource.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs new file mode 100644 index 0000000..3fc6d48 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDecisionManagerBuyerInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string buyerInformationDateOfBirth = "19980505"; + + List buyerInformationPersonalIdentification = new List (); + string buyerInformationPersonalIdentificationType1 = "CPF"; + string buyerInformationPersonalIdentificationId1 = "1a23apwe98"; + buyerInformationPersonalIdentification.Add(new Ptsv2paymentsBuyerInformationPersonalIdentification( + Type: buyerInformationPersonalIdentificationType1, + Id: buyerInformationPersonalIdentificationId1 + )); + + string buyerInformationHashedPassword = ""; + Ptsv2paymentsBuyerInformation buyerInformation = new Ptsv2paymentsBuyerInformation( + DateOfBirth: buyerInformationDateOfBirth, + PersonalIdentification: buyerInformationPersonalIdentification, + HashedPassword: buyerInformationHashedPassword + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + BuyerInformation: buyerInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs new file mode 100644 index 0000000..297493d --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDecisionManagerCustomSetup + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_16"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("DECISION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "11"; + string paymentInformationCardExpirationYear = "2025"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "10"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs new file mode 100644 index 0000000..d694722 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDecisionManagerDeviceInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string deviceInformationHostName = "host.com"; + string deviceInformationIpAddress = "64.124.61.215"; + string deviceInformationUserAgent = "Chrome"; + string deviceInformationHttpBrowserEmail = "xyz@gmail.com"; + Ptsv2paymentsDeviceInformation deviceInformation = new Ptsv2paymentsDeviceInformation( + HostName: deviceInformationHostName, + IpAddress: deviceInformationIpAddress, + UserAgent: deviceInformationUserAgent, + HttpBrowserEmail: deviceInformationHttpBrowserEmail + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + DeviceInformation: deviceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs new file mode 100644 index 0000000..fada704 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDecisionManagerMerchantDefinedInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + + List merchantDefinedInformation = new List (); + string merchantDefinedInformationKey1 = "1"; + string merchantDefinedInformationValue1 = "Test"; + merchantDefinedInformation.Add(new Ptsv2paymentsMerchantDefinedInformation( + Key: merchantDefinedInformationKey1, + Value: merchantDefinedInformationValue1 + )); + + string merchantDefinedInformationKey2 = "2"; + string merchantDefinedInformationValue2 = "Test2"; + merchantDefinedInformation.Add(new Ptsv2paymentsMerchantDefinedInformation( + Key: merchantDefinedInformationKey2, + Value: merchantDefinedInformationValue2 + )); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantDefinedInformation: merchantDefinedInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs new file mode 100644 index 0000000..fb943f1 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDecisionManagerShippingInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "James"; + string orderInformationShipToLastName = "Smith"; + string orderInformationShipToAddress1 = "96, powers street"; + string orderInformationShipToLocality = "Clearwater milford"; + string orderInformationShipToAdministrativeArea = "KA"; + string orderInformationShipToPostalCode = "560056"; + string orderInformationShipToCountry = "IN"; + string orderInformationShipToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry, + PhoneNumber: orderInformationShipToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs new file mode 100644 index 0000000..cb4a6c9 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithDecisionManagerTravelInformation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "54323007"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4444444444444448"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2020"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "144.14"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "James"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "96, powers street"; + string orderInformationBillToLocality = "Clearwater milford"; + string orderInformationBillToAdministrativeArea = "NH"; + string orderInformationBillToPostalCode = "03055"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@visa.com"; + string orderInformationBillToPhoneNumber = "7606160717"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + Ptsv2paymentsTravelInformation travelInformation = new Ptsv2paymentsTravelInformation( + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + TravelInformation: travelInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs b/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs new file mode 100644 index 0000000..f02d117 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithInstrumentIdentifierTokenId + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "200"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "900 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "9321499232"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs b/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs new file mode 100644 index 0000000..f20cf9f --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithPAEnrollAuthenticationNeeded + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4000000000001091"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2023"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "201 S. Division St._1"; + string orderInformationBillToAddress2 = "Suite 500"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "accept@cybersource.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationRequestorId = "123123197675"; + string consumerAuthenticationInformationReferenceId = "CybsCruiseTester-8ac0b02f"; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + RequestorId: consumerAuthenticationInformationRequestorId, + ReferenceId: consumerAuthenticationInformationReferenceId + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs b/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs new file mode 100644 index 0000000..532f5b3 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithPayerAuthValidation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("VALIDATE_CONSUMER_AUTHENTICATION"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4000000000001091"; + string paymentInformationCardExpirationMonth = "01"; + string paymentInformationCardExpirationYear = "2023"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Smith"; + string orderInformationBillToAddress1 = "201 S. Division St._1"; + string orderInformationBillToAddress2 = "Suite 500"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94404"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "accept@cybs.com"; + string orderInformationBillToPhoneNumber = "6504327113"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationAuthenticationTransactionId = "OiCtXA1j1AxtSNDh5lt1"; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs b/src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs new file mode 100644 index 0000000..d2543c3 --- /dev/null +++ b/src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CaptureOfAuthorizationThatUsedSwipedTrackData + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + var processPaymentId = AuthorizationUsingSwipedTrackData.Run().Id; + string clientReferenceInformationCode = "1234567890"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + + PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/CreditUsingBluefinPCIP2PE.cs b/src/Samples/Payments/Payments/CreditUsingBluefinPCIP2PE.cs new file mode 100644 index 0000000..8346a6b --- /dev/null +++ b/src/Samples/Payments/Payments/CreditUsingBluefinPCIP2PE.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class CreditUsingBluefinPCIP2PE + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "demomerchant"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string processingInformationCommerceIndicator = "retail"; + Ptsv2creditsProcessingInformation processingInformation = new Ptsv2creditsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2050"; + Ptsv2paymentsidrefundsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsidrefundsPaymentInformationCard( + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + string paymentInformationFluidDataDescriptor = "Ymx1ZWZpbg=="; + string paymentInformationFluidDataValue = "02d700801f3c20008383252a363031312a2a2a2a2a2a2a2a303030395e46444d53202020202020202020202020202020202020202020205e323231322a2a2a2a2a2a2a2a3f2a3b363031312a2a2a2a2a2a2a2a303030393d323231322a2a2a2a2a2a2a2a3f2a7a75ad15d25217290c54b3d9d1c3868602136c68d339d52d98423391f3e631511d548fff08b414feac9ff6c6dede8fb09bae870e4e32f6f462d6a75fa0a178c3bd18d0d3ade21bc7a0ea687a2eef64551751e502d97cb98dc53ea55162cdfa395431323439323830303762994901000001a000731a8003"; + Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( + Descriptor: paymentInformationFluidDataDescriptor, + Value: paymentInformationFluidDataValue + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Card: paymentInformationCard, + FluidData: paymentInformationFluidData + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "201 S. Division St."; + string orderInformationBillToLocality = "Ann Arbor"; + string orderInformationBillToAdministrativeArea = "MI"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "999999999"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs b/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs new file mode 100644 index 0000000..f21c2e9 --- /dev/null +++ b/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ElectronicCheckDebitsWithLegacyToken + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationLegacyTokenId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationLegacyToken paymentInformationLegacyToken = new Ptsv2paymentsPaymentInformationLegacyToken( + Id: paymentInformationLegacyTokenId + ); + + string paymentInformationPaymentTypeName = "CHECK"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + LegacyToken: paymentInformationLegacyToken, + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/PaymentWithFlexTransientToken.cs b/src/Samples/Payments/Payments/PaymentWithFlexTransientToken.cs new file mode 100644 index 0000000..c3364b6 --- /dev/null +++ b/src/Samples/Payments/Payments/PaymentWithFlexTransientToken.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PaymentWithFlexTransientToken + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "RTS"; + string orderInformationBillToLastName = "VDP"; + string orderInformationBillToAddress1 = "201 S. Division St."; + string orderInformationBillToLocality = "Ann Arbor"; + string orderInformationBillToAdministrativeArea = "MI"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToDistrict = "MI"; + string orderInformationBillToBuildingNumber = "123"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "999999999"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + District: orderInformationBillToDistrict, + BuildingNumber: orderInformationBillToBuildingNumber, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string tokenInformationTransientTokenJwt = "eyJraWQiOiIwN0JwSE9abkhJM3c3UVAycmhNZkhuWE9XQlhwa1ZHTiIsImFsZyI6IlJTMjU2In0.eyJkYXRhIjp7ImV4cGlyYXRpb25ZZWFyIjoiMjAyMCIsIm51bWJlciI6IjQxMTExMVhYWFhYWDExMTEiLCJleHBpcmF0aW9uTW9udGgiOiIxMCIsInR5cGUiOiIwMDEifSwiaXNzIjoiRmxleC8wNyIsImV4cCI6MTU5MTc0NjAyNCwidHlwZSI6Im1mLTAuMTEuMCIsImlhdCI6MTU5MTc0NTEyNCwianRpIjoiMUMzWjdUTkpaVjI4OVM5MTdQM0JHSFM1T0ZQNFNBRERCUUtKMFFKMzMzOEhRR0MwWTg0QjVFRTAxREU4NEZDQiJ9.cfwzUMJf115K2T9-wE_A_k2jZptXlovls8-fKY0muO8YzGatE5fu9r6aC4q7n0YOvEU6G7XdH4ASG32mWnYu-kKlqN4IY_cquRJeUvV89ZPZ5WTttyrgVH17LSTE2EvwMawKNYnjh0lJwqYJ51cLnJiVlyqTdEAv3DJ3vInXP1YeQjLX5_vF-OWEuZfJxahHfUdsjeGhGaaOGVMUZJSkzpTu9zDLTvpb1px3WGGPu8FcHoxrcCGGpcKk456AZgYMBSHNjr-pPkRr3Dnd7XgNF6shfzIPbcXeWDYPTpS4PNY8ZsWKx8nFQIeROMWCSxIZOmu3Wt71KN9iK6DfOPro7w"; + Ptsv2paymentsTokenInformation tokenInformation = new Ptsv2paymentsTokenInformation( + TransientTokenJwt: tokenInformationTransientTokenJwt + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/PaymentWithLegacyToken.cs b/src/Samples/Payments/Payments/PaymentWithLegacyToken.cs new file mode 100644 index 0000000..9621eec --- /dev/null +++ b/src/Samples/Payments/Payments/PaymentWithLegacyToken.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PaymentWithLegacyToken + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationLegacyTokenId = "7500BB199B4270EFE05340588D0AFCAD"; + Ptsv2paymentsPaymentInformationLegacyToken paymentInformationLegacyToken = new Ptsv2paymentsPaymentInformationLegacyToken( + Id: paymentInformationLegacyTokenId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + LegacyToken: paymentInformationLegacyToken + ); + + string orderInformationAmountDetailsTotalAmount = "22"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs b/src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs new file mode 100644 index 0000000..3ca2d91 --- /dev/null +++ b/src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ProcessAuthorizationReversal + { + public static PtsV2PaymentsReversalsPost201Response Run() + { + var processPaymentId = ProcessPayment.Run().Id; + + var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_reversal"); + var amount = new Ptsv2paymentsidreversalsOrderInformationLineItems(null, "102.21"); + var amountDetailsObj = new List { amount }; + var orderInformationObj = new Ptsv2paymentsidreversalsOrderInformation(null, amountDetailsObj); + var requestBody = new AuthReversalRequest(clientReferenceInformationObj, null, null, orderInformationObj); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + var apiInstance = new ReversalApi(clientConfig); + + var result = apiInstance.AuthReversal(processPaymentId, requestBody); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API: " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/RestaurantAuthorization.cs b/src/Samples/Payments/Payments/RestaurantAuthorization.cs new file mode 100644 index 0000000..3395082 --- /dev/null +++ b/src/Samples/Payments/Payments/RestaurantAuthorization.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class RestaurantAuthorization + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "demomerchant"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs b/src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs new file mode 100644 index 0000000..5dbb48e --- /dev/null +++ b/src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class RestaurantCaptureWithGratuity + { + public static PtsV2PaymentsCapturesPost201Response Run() + { + var processPaymentId = RestaurantAuthorization.Run().Id; + string clientReferenceInformationCode = "1234567890"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + string processingInformationIndustryDataType = "restaurant"; + Ptsv2paymentsidcapturesProcessingInformation processingInformation = new Ptsv2paymentsidcapturesProcessingInformation( + IndustryDataType: processingInformationIndustryDataType + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsGratuityAmount = "11.50"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + GratuityAmount: orderInformationAmountDetailsGratuityAmount + ); + + Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CapturePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CaptureApi(clientConfig); + + PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs new file mode 100644 index 0000000..f4c3e4c --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactRead + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadForCTV.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadForCTV.cs new file mode 100644 index 0000000..3e61fc6 --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadForCTV.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactReadForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs new file mode 100644 index 0000000..ec96199 --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactReadOneForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 1; + string pointOfSaleInformationEmvCardSequenceNumber = "0"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs new file mode 100644 index 0000000..8739f4d --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactReadTwoForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contact"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + + List pointOfSaleInformationCardholderVerificationMethod = new List (); + pointOfSaleInformationCardholderVerificationMethod.Add("pin"); + pointOfSaleInformationCardholderVerificationMethod.Add("signature"); + + List pointOfSaleInformationTerminalInputCapability = new List (); + pointOfSaleInformationTerminalInputCapability.Add("contact"); + pointOfSaleInformationTerminalInputCapability.Add("contactless"); + pointOfSaleInformationTerminalInputCapability.Add("keyed"); + pointOfSaleInformationTerminalInputCapability.Add("swiped"); + string pointOfSaleInformationTerminalCardCaptureCapability = "1"; + string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; + string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData, + CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, + TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, + TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, + DeviceId: pointOfSaleInformationDeviceId, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs new file mode 100644 index 0000000..2434e28 --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactless + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 2; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "999"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs new file mode 100644 index 0000000..968025d --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactlessForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 2; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "999"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessRead.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessRead.cs new file mode 100644 index 0000000..a8e6de4 --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessRead.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactlessRead + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 2; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 5; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs new file mode 100644 index 0000000..c8a5c1c --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactlessReadForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerOriginalTransactionId = "510be4aef90711e6acbc7d88388d803d"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 5; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + int pointOfSaleInformationEmvCardholderVerificationMethodUsed = 2; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardholderVerificationMethodUsed: pointOfSaleInformationEmvCardholderVerificationMethodUsed, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; + + List pointOfSaleInformationCardholderVerificationMethod = new List (); + pointOfSaleInformationCardholderVerificationMethod.Add("pin"); + pointOfSaleInformationCardholderVerificationMethod.Add("signature"); + + List pointOfSaleInformationTerminalInputCapability = new List (); + pointOfSaleInformationTerminalInputCapability.Add("contact"); + pointOfSaleInformationTerminalInputCapability.Add("contactless"); + pointOfSaleInformationTerminalInputCapability.Add("keyed"); + pointOfSaleInformationTerminalInputCapability.Add("swiped"); + string pointOfSaleInformationTerminalCardCaptureCapability = "1"; + string pointOfSaleInformationDeviceId = "123lkjdIOBK34981slviLI39bj"; + string pointOfSaleInformationEncryptedKeySerialNumber = "01043191"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData, + CardholderVerificationMethod: pointOfSaleInformationCardholderVerificationMethod, + TerminalInputCapability: pointOfSaleInformationTerminalInputCapability, + TerminalCardCaptureCapability: pointOfSaleInformationTerminalCardCaptureCapability, + DeviceId: pointOfSaleInformationDeviceId, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs new file mode 100644 index 0000000..f7d7b45 --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingEMVTechnologyWithContactlessReadForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int pointOfSaleInformationCatLevel = 2; + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 5; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedData.cs b/src/Samples/Payments/Payments/SaleUsingKeyedData.cs new file mode 100644 index 0000000..575aafd --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingKeyedData.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingKeyedData + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; + bool processingInformationAuthorizationOptionsIgnoreCvResult = true; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingKeyedDataForAcquirer.cs new file mode 100644 index 0000000..dcb8ccf --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingKeyedDataForAcquirer.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingKeyedDataForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataForCTV.cs b/src/Samples/Payments/Payments/SaleUsingKeyedDataForCTV.cs new file mode 100644 index 0000000..8fd53d9 --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingKeyedDataForCTV.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingKeyedDataForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; + bool processingInformationAuthorizationOptionsIgnoreCvResult = true; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs b/src/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs new file mode 100644 index 0000000..9f2173f --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingKeyedDataWithBalanceInquiry + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; + Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( + ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber + ); + + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; + bool processingInformationAuthorizationOptionsIgnoreCvResult = true; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackData.cs b/src/Samples/Payments/Payments/SaleUsingSwipedTrackData.cs new file mode 100644 index 0000000..3ca5d3a --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingSwipedTrackData.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingSwipedTrackData + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForAcquirer.cs new file mode 100644 index 0000000..59e2d2c --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForAcquirer.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingSwipedTrackDataForAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs new file mode 100644 index 0000000..a313322 --- /dev/null +++ b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class SaleUsingSwipedTrackDataForCTV + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = true; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/Swiped.cs b/src/Samples/Payments/Payments/Swiped.cs new file mode 100644 index 0000000..f26c4a2 --- /dev/null +++ b/src/Samples/Payments/Payments/Swiped.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class Swiped + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "123456"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 2; + string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From ebaeb757fc289f7515e68e0c3cce84a4b4a1a73a Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Sat, 13 Jun 2020 15:55:25 +0530 Subject: [PATCH 025/161] Removing unnecessary file --- .../Payments/ProcessAuthorizationReversal.cs | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs diff --git a/src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs b/src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs deleted file mode 100644 index 3ca2d91..0000000 --- a/src/Samples/Payments/Payments/ProcessAuthorizationReversal.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class ProcessAuthorizationReversal - { - public static PtsV2PaymentsReversalsPost201Response Run() - { - var processPaymentId = ProcessPayment.Run().Id; - - var clientReferenceInformationObj = new Ptsv2paymentsidreversalsClientReferenceInformation("test_reversal"); - var amount = new Ptsv2paymentsidreversalsOrderInformationLineItems(null, "102.21"); - var amountDetailsObj = new List { amount }; - var orderInformationObj = new Ptsv2paymentsidreversalsOrderInformation(null, amountDetailsObj); - var requestBody = new AuthReversalRequest(clientReferenceInformationObj, null, null, orderInformationObj); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ReversalApi(clientConfig); - - var result = apiInstance.AuthReversal(processPaymentId, requestBody); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API: " + e.Message); - return null; - } - } - } -} From 5c1d676c9f83c53c7249c195810523dad9aababb Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 30 Jun 2020 10:58:46 +0530 Subject: [PATCH 026/161] Updated folder name for Flex Microform --- src/Samples/Flex/KeyGeneration/GenerateKey.cs | 36 -------- .../Flex/Tokenization/FlexTokenizeCard.cs | 83 ------------------- 2 files changed, 119 deletions(-) delete mode 100644 src/Samples/Flex/KeyGeneration/GenerateKey.cs delete mode 100644 src/Samples/Flex/Tokenization/FlexTokenizeCard.cs diff --git a/src/Samples/Flex/KeyGeneration/GenerateKey.cs b/src/Samples/Flex/KeyGeneration/GenerateKey.cs deleted file mode 100644 index df56ca3..0000000 --- a/src/Samples/Flex/KeyGeneration/GenerateKey.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Flex -{ - public class GenerateKey - { - public static FlexV1KeysPost200Response Run() - { - string encryptionType = "None"; - var requestObj = new GeneratePublicKeyRequest( - EncryptionType: encryptionType - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new KeyGenerationApi(clientConfig); - FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Flex/Tokenization/FlexTokenizeCard.cs b/src/Samples/Flex/Tokenization/FlexTokenizeCard.cs deleted file mode 100644 index df4320d..0000000 --- a/src/Samples/Flex/Tokenization/FlexTokenizeCard.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; -using CyberSource.Utilities.Flex.Model; -using CyberSource.Utilities.Flex.TokenVerification; - -namespace Cybersource_rest_samples_dotnet.Samples.Flex -{ - public class FlexTokenizeCard - { - public static FlexV1TokensPost200Response Run() - { - var generateKeyResult = GenerateKey.Run(); - string keyId = generateKeyResult.KeyId; - var derFormat = generateKeyResult.Der.Format; - var derAlgo = generateKeyResult.Der.Algorithm; - var derPublicKey = generateKeyResult.Der.PublicKey; - - string cardInfoCardNumber = "4111111111111111"; - string cardInfoCardExpirationMonth = "12"; - string cardInfoCardExpirationYear = "2031"; - string cardInfoCardType = "001"; - Flexv1tokensCardInfo cardInfo = new Flexv1tokensCardInfo( - CardNumber: cardInfoCardNumber, - CardExpirationMonth: cardInfoCardExpirationMonth, - CardExpirationYear: cardInfoCardExpirationYear, - CardType: cardInfoCardType - ); - - var requestObj = new TokenizeRequest( - KeyId: keyId, - CardInfo: cardInfo - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new TokenizationApi(clientConfig); - FlexV1TokensPost200Response result = apiInstance.Tokenize(requestObj); - Console.WriteLine(result); - - TokenVerificationUtility tokenVerifier = new TokenVerificationUtility(); - - var flexPublicKey = new FlexPublicKey(keyId, new FlexDerPublicKey(derFormat, derAlgo, derPublicKey), null); - var flexToken = new FlexToken() - { - keyId = result.KeyId, - token = result.Token, - maskedPan = result.MaskedPan, - cardType = result.CardType, - timestamp = (long)result.Timestamp, - signedFields = result.SignedFields, - signature = result.Signature, - discoverableServices = result.DiscoverableServices - }; - - IDictionary postParameters = new Dictionary(); - postParameters["signedFields"] = flexToken.signedFields; - postParameters["signature"] = flexToken.signature; - postParameters["cardType"] = flexToken.cardType; - postParameters["keyId"] = flexToken.keyId; - postParameters["maskedPan"] = flexToken.maskedPan; - postParameters["token"] = flexToken.token; - postParameters["timestamp"] = Convert.ToString(flexToken.timestamp); - - var tokenVerificationResult = tokenVerifier.Verify(flexPublicKey, postParameters); - Console.WriteLine("TOKEN VERIFICATION : " + tokenVerificationResult); - - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} From 7326591b2db1b6a38a93b169d37fcf18184d2954 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 30 Jun 2020 10:59:59 +0530 Subject: [PATCH 027/161] Restructure Flex Microform --- src/Samples/Flex/FlexTokenizeCard.cs | 83 ++++++++++++++++++++++++++++ src/Samples/Flex/GenerateKey.cs | 36 ++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 src/Samples/Flex/FlexTokenizeCard.cs create mode 100644 src/Samples/Flex/GenerateKey.cs diff --git a/src/Samples/Flex/FlexTokenizeCard.cs b/src/Samples/Flex/FlexTokenizeCard.cs new file mode 100644 index 0000000..df4320d --- /dev/null +++ b/src/Samples/Flex/FlexTokenizeCard.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; +using CyberSource.Utilities.Flex.Model; +using CyberSource.Utilities.Flex.TokenVerification; + +namespace Cybersource_rest_samples_dotnet.Samples.Flex +{ + public class FlexTokenizeCard + { + public static FlexV1TokensPost200Response Run() + { + var generateKeyResult = GenerateKey.Run(); + string keyId = generateKeyResult.KeyId; + var derFormat = generateKeyResult.Der.Format; + var derAlgo = generateKeyResult.Der.Algorithm; + var derPublicKey = generateKeyResult.Der.PublicKey; + + string cardInfoCardNumber = "4111111111111111"; + string cardInfoCardExpirationMonth = "12"; + string cardInfoCardExpirationYear = "2031"; + string cardInfoCardType = "001"; + Flexv1tokensCardInfo cardInfo = new Flexv1tokensCardInfo( + CardNumber: cardInfoCardNumber, + CardExpirationMonth: cardInfoCardExpirationMonth, + CardExpirationYear: cardInfoCardExpirationYear, + CardType: cardInfoCardType + ); + + var requestObj = new TokenizeRequest( + KeyId: keyId, + CardInfo: cardInfo + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TokenizationApi(clientConfig); + FlexV1TokensPost200Response result = apiInstance.Tokenize(requestObj); + Console.WriteLine(result); + + TokenVerificationUtility tokenVerifier = new TokenVerificationUtility(); + + var flexPublicKey = new FlexPublicKey(keyId, new FlexDerPublicKey(derFormat, derAlgo, derPublicKey), null); + var flexToken = new FlexToken() + { + keyId = result.KeyId, + token = result.Token, + maskedPan = result.MaskedPan, + cardType = result.CardType, + timestamp = (long)result.Timestamp, + signedFields = result.SignedFields, + signature = result.Signature, + discoverableServices = result.DiscoverableServices + }; + + IDictionary postParameters = new Dictionary(); + postParameters["signedFields"] = flexToken.signedFields; + postParameters["signature"] = flexToken.signature; + postParameters["cardType"] = flexToken.cardType; + postParameters["keyId"] = flexToken.keyId; + postParameters["maskedPan"] = flexToken.maskedPan; + postParameters["token"] = flexToken.token; + postParameters["timestamp"] = Convert.ToString(flexToken.timestamp); + + var tokenVerificationResult = tokenVerifier.Verify(flexPublicKey, postParameters); + Console.WriteLine("TOKEN VERIFICATION : " + tokenVerificationResult); + + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Flex/GenerateKey.cs b/src/Samples/Flex/GenerateKey.cs new file mode 100644 index 0000000..df56ca3 --- /dev/null +++ b/src/Samples/Flex/GenerateKey.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Flex +{ + public class GenerateKey + { + public static FlexV1KeysPost200Response Run() + { + string encryptionType = "None"; + var requestObj = new GeneratePublicKeyRequest( + EncryptionType: encryptionType + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new KeyGenerationApi(clientConfig); + FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From 436113af4020c24602999903d8812d9a7a340c48 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 30 Jun 2020 11:00:54 +0530 Subject: [PATCH 028/161] Updated folder name for Flex Microform --- src/Samples/{Flex => FlexMicroform}/FlexTokenizeCard.cs | 0 src/Samples/{Flex => FlexMicroform}/GenerateKey.cs | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/Samples/{Flex => FlexMicroform}/FlexTokenizeCard.cs (100%) rename src/Samples/{Flex => FlexMicroform}/GenerateKey.cs (100%) diff --git a/src/Samples/Flex/FlexTokenizeCard.cs b/src/Samples/FlexMicroform/FlexTokenizeCard.cs similarity index 100% rename from src/Samples/Flex/FlexTokenizeCard.cs rename to src/Samples/FlexMicroform/FlexTokenizeCard.cs diff --git a/src/Samples/Flex/GenerateKey.cs b/src/Samples/FlexMicroform/GenerateKey.cs similarity index 100% rename from src/Samples/Flex/GenerateKey.cs rename to src/Samples/FlexMicroform/GenerateKey.cs From 05ab4e3c3d37a61e7a0a71d25d6260556e03f1e7 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 31 Jul 2020 10:20:09 +0530 Subject: [PATCH 029/161] July 2020 Release --- src/SampleCode.cs | 4 + src/SampleCode.csproj | 90 +++++++++-- src/Samples/FlexMicroform/FlexTokenizeCard.cs | 83 ---------- src/Samples/FlexMicroform/GenerateKey.cs | 9 +- .../InvoiceSettings/UpdateInvoiceSettings.cs | 6 +- .../CreateAndSendInvoiceImmediately.cs | 2 +- .../Invoicing/Invoices/CreateDraftInvoice.cs | 2 +- ...InvoiceAndAssignItSpecificInvoiceNumber.cs | 2 +- .../Invoices/CreateInvoiceWithoutSendingIt.cs | 2 +- .../AuthenticationWithNORedirect.cs | 2 +- .../AuthenticationWithNewAccount.cs | 4 +- ...rollWithCustomerIdAsPaymentInformation.cs} | 87 +++++----- .../EnrollWithPendingAuthentication.cs | 6 +- .../EnrollWithTransientToken.cs | 82 ++++++++++ .../EnrollWithTravelInformation.cs | 16 +- .../PendingAuthenticationWithUnknownPath.cs | 2 +- .../SetupCompletionWithCardNumber.cs | 56 +++++++ .../SetupCompletionWithFlexTransientToken.cs | 46 ++++++ ...ionWithFluidDataValueAndPaymentSolution.cs | 56 +++++++ .../SetupCompletionWithSecureStorageToken.cs | 50 ++++++ .../SetupCompletionWithTMSToken.cs | 50 ++++++ .../SetupCompletionWithTokenizedCard.cs | 58 +++++++ .../ValidateAuthenticationResults.cs | 6 +- ...inPCIP2PEForCardPresentEnabledAcquirer.cs} | 2 +- ...gBluefinPCIP2PEWithVisaPlatformConnect.cs} | 2 +- ...mentInstrumentAndShippingAddressTokenId.cs | 6 +- .../Credit/CreditWithCustomerTokenId.cs | 2 +- .../CreditWithInstrumentIdentifierTokenId.cs | 2 +- .../ElectronicCheckStandAloneCredits.cs | 14 +- ...AmericanExpressDirectEMVWithContactRead.cs | 4 +- .../AuthorizationCaptureForTimeoutVoidFlow.cs | 4 +- ...rizationForIncrementalAuthorizationFlow.cs | 2 +- .../AuthorizationForTimeoutReversalFlow.cs | 4 +- ...SkipDecisionManagerForSingleTransaction.cs | 2 +- ...gBluefinPCIP2PEWithVisaPlatformConnect.cs} | 2 +- ...aymentInstrumentShippingAddressCreation.cs | 145 ----------------- ...mentInstrumentAndShippingAddressTokenId.cs | 6 +- .../AuthorizationWithCustomerTokenCreation.cs | 4 +- .../AuthorizationWithCustomerTokenId.cs | 2 +- .../AuthorizationWithDMAcceptPAEnroll.cs | 2 +- .../AuthorizationWithDMRejectPAEnroll.cs | 2 +- .../AuthorizationWithDMReviewPAEnroll.cs | 2 +- ...tionWithDecisionManagerBuyerInformation.cs | 2 +- ...orizationWithDecisionManagerCustomSetup.cs | 2 +- ...cisionManagerMerchantDefinedInformation.cs | 2 +- ...rizationWithInstrumentIdentifierTokenId.cs | 74 --------- ...ken.cs => AuthorizationWithLegacyToken.cs} | 4 +- ...izationWithPAEnrollAuthenticationNeeded.cs | 2 +- .../AuthorizationWithPayerAuthValidation.cs | 2 +- ...eOfAuthorizationThatUsedSwipedTrackData.cs | 60 ------- .../Payments/Payments/CyberSourceMPOSEMV.cs | 123 --------------- .../Payments/DigitalPaymentGooglePay.cs | 2 - .../Payments/DigitalPaymentsApplePay.cs | 4 - .../Payments/ElectronicCheckDebits.cs | 21 +-- .../ElectronicCheckDebitsWithLegacyToken.cs | 2 +- .../Payments/IncrementalAuthorization.cs | 18 +-- src/Samples/Payments/Payments/LevelIIData.cs | 4 +- src/Samples/Payments/Payments/LevelIIIData.cs | 4 +- .../Payments/PaymentNetworkTokenization.cs | 2 +- ...nsientToken.cs => PaymentWithFlexToken.cs} | 2 +- .../Payments/RestaurantCaptureWithGratuity.cs | 68 -------- .../SaleUsingEMVTechnologyWithContactRead.cs | 92 ----------- ...ctReadOneForCardPresentEnabledAcquirer.cs} | 2 +- ...ctReadTwoForCardPresentEnabledAcquirer.cs} | 6 +- ...WithContactReadWithVisaPlatformConnect.cs} | 2 +- ...EMVTechnologyWithContactlessForAcquirer.cs | 80 ---------- ...gEMVTechnologyWithContactlessReadForCTV.cs | 92 ----------- ...tlessReadForCardPresentEnabledAcquirer.cs} | 6 +- ...ContactlessReadWithVisaPlatformConnect.cs} | 2 +- .../Payments/Payments/SaleUsingKeyedData.cs | 94 ----------- ...KeyedDataForCardPresentEnabledAcquirer.cs} | 2 +- ...eUsingKeyedDataWithVisaPlatformConnect.cs} | 2 +- .../SaleUsingSwipedTrackDataForCTV.cs | 80 ---------- ...TrackDataForCardPresentEnabledAcquirer.cs} | 2 +- ...SwipedTrackDataWithVisaPlatformConnect.cs} | 2 +- .../ServiceFeesWithCreditCardTransaction.cs | 4 +- .../Payments/SimpleAuthorizationInternet.cs | 10 +- .../Payments/SimpleAuthorizationRetail.cs | 118 -------------- .../Payments/ZeroDollarAuthorization.cs | 4 +- .../Payments/Reversal/TimeoutReversal.cs | 4 +- src/Samples/Payments/Void/TimeoutVoid.cs | 4 +- .../ReportDownloads/DownloadReport.cs | 2 +- .../CreateReportSubscription.cs | 2 +- ...eSubscriptionOfReportNameByOrganization.cs | 4 +- .../GetAllSubscriptions.cs | 3 +- .../GetSubscriptionForReportName.cs | 4 +- .../Reporting/Reports/CreateAdhocReport.cs | 6 +- .../DecisionManager/BasicDMTransaction.cs | 4 +- .../DecisionManager/DMWithBuyerInformation.cs | 6 +- .../DMWithDecisionProfileRejectResponse.cs | 4 +- .../DMWithDeviceInformation.cs | 4 +- .../DMWithMerchantDefinedInformation.cs | 6 +- .../DMWithScoreExceedsThresholdResponse.cs | 4 +- .../DMWithShippingInformation.cs | 4 +- .../DMWithTravelInformation.cs | 6 +- .../DecisionManager/MarkAsSuspect.cs | 2 +- .../ApartmentNumberMissingOrNotFound.cs | 2 +- .../Verification/CanadianBillingDetails.cs | 2 +- .../Verification/ComplianceStatusCompleted.cs | 4 +- .../CustomerMatchDeniedPartiesList.cs | 2 +- .../ExportComplianceInformationProvided.cs | 4 +- .../Verification/MultipleLineItems.cs | 2 +- .../Verification/MultipleSanctionLists.cs | 4 +- .../Verification/NoCompanyName.cs | 2 +- .../ShippingDetailsNotUSOrCanada.cs | 2 +- .../VerboseRequestWithAllFields.cs | 2 +- src/Samples/SecureFileShare/GetListOfFiles.cs | 7 +- .../Customer/CreateCustomer.cs | 58 +++++++ .../Customer/DeleteCustomer.cs | 29 ++++ .../Customer/RetrieveCustomer.cs | 32 ++++ .../Customer/UpdateCustomer.cs | 59 +++++++ ...UpdateCustomersDefaultPaymentInstrument.cs | 41 +++++ .../UpdateCustomersDefaultShippingAddress.cs | 41 +++++ ...ateCustomerPaymentInstrumentBankAccount.cs | 107 +++++++++++++ .../CreateCustomerPaymentInstrumentCard.cs | 75 +++++++++ ...teCustomerPaymentInstrumentPinlessDebit.cs | 83 ++++++++++ .../DeleteCustomerPaymentInstrument.cs | 30 ++++ .../ListPaymentInstrumentsForCustomer.cs | 35 +++++ .../RetrieveCustomerPaymentInstrument.cs | 33 ++++ .../CreateShippingAddress.cs | 59 +++++++ .../DeleteCustomerShippingAddress.cs | 30 ++++ .../ListShippingAddressesForCustomer.cs | 35 +++++ .../RetrieveCustomerShippingAddress.cs | 33 ++++ .../CreateInstrumentIdentifierBankAccount.cs | 8 +- .../CreateInstrumentIdentifierCard.cs | 8 +- ...mentIdentifierCardEnrollForNetworkToken.cs | 26 ++- .../DeleteInstrumentIdentifier.cs | 2 +- ...mentInstrumentsForInstrumentIdentifier.cs} | 11 +- .../RetrieveInstrumentIdentifier.cs | 6 +- ...strumentIdentifierPreviousTransactionId.cs | 50 ++++++ .../CreatePaymentInstrumentBankAccount.cs | 66 +++----- .../CreatePaymentInstrumentCard.cs | 63 +++----- ...mentInstrumentCardEnrollForNetworkToken.cs | 102 ------------ ...nstrumentCardWithInstrumentIdentifierId.cs | 98 ------------ .../CreatePaymentInstrumentPinlessDebit.cs | 57 +++---- .../CreatePaymentInstrumentTokenizedCard.cs | 102 ------------ .../DeletePaymentInstrument.cs | 2 +- .../RetrievePaymentInstrument.cs | 6 +- .../BasicTaxCalculationRequest.cs | 112 +++++++++++++ .../CommittedTaxCallRequest.cs | 146 +++++++++++++++++ .../CommittedTaxRefundCallRequest.cs | 148 ++++++++++++++++++ .../ValueAddedService/TaxRefundRequest.cs | 146 +++++++++++++++++ .../ValueAddedService/VoidCommittedTaxCall.cs | 41 +++++ src/packages.config | 2 +- 144 files changed, 2197 insertions(+), 1815 deletions(-) delete mode 100644 src/Samples/FlexMicroform/FlexTokenizeCard.cs rename src/Samples/{Payments/Payments/PaymentWithPaymentInstrumentToken.cs => PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs} (52%) create mode 100644 src/Samples/PayerAuthentication/EnrollWithTransientToken.cs create mode 100644 src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs create mode 100644 src/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs create mode 100644 src/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs create mode 100644 src/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs create mode 100644 src/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs create mode 100644 src/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs rename src/Samples/Payments/{Payments/CreditUsingBluefinPCIP2PE.cs => Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs} (98%) rename src/Samples/Payments/Credit/{CreditUsingBluefinPCIP2PE.cs => CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs} (98%) rename src/Samples/Payments/Payments/{AuthorizationUsingBluefinPCIP2PE.cs => AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs} (98%) delete mode 100644 src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs delete mode 100644 src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs rename src/Samples/Payments/Payments/{PaymentWithLegacyToken.cs => AuthorizationWithLegacyToken.cs} (96%) delete mode 100644 src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs delete mode 100644 src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs rename src/Samples/Payments/Payments/{PaymentWithFlexTransientToken.cs => PaymentWithFlexToken.cs} (98%) delete mode 100644 src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs delete mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs rename src/Samples/Payments/Payments/{SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs => SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs} (97%) rename src/Samples/Payments/Payments/{SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs => SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs} (95%) rename src/Samples/Payments/Payments/{SaleUsingEMVTechnologyWithContactReadForCTV.cs => SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs} (98%) delete mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs delete mode 100644 src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs rename src/Samples/Payments/Payments/{SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs => SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs} (95%) rename src/Samples/Payments/Payments/{SaleUsingEMVTechnologyWithContactlessRead.cs => SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs} (98%) delete mode 100644 src/Samples/Payments/Payments/SaleUsingKeyedData.cs rename src/Samples/Payments/Payments/{SaleUsingKeyedDataForAcquirer.cs => SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs} (98%) rename src/Samples/Payments/Payments/{SaleUsingKeyedDataForCTV.cs => SaleUsingKeyedDataWithVisaPlatformConnect.cs} (98%) delete mode 100644 src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs rename src/Samples/Payments/Payments/{SaleUsingSwipedTrackDataForAcquirer.cs => SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs} (97%) rename src/Samples/Payments/Payments/{SaleUsingSwipedTrackData.cs => SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs} (98%) delete mode 100644 src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs create mode 100644 src/Samples/TokenManagement/Customer/CreateCustomer.cs create mode 100644 src/Samples/TokenManagement/Customer/DeleteCustomer.cs create mode 100644 src/Samples/TokenManagement/Customer/RetrieveCustomer.cs create mode 100644 src/Samples/TokenManagement/Customer/UpdateCustomer.cs create mode 100644 src/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs create mode 100644 src/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs create mode 100644 src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs create mode 100644 src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentCard.cs create mode 100644 src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs create mode 100644 src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs create mode 100644 src/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs create mode 100644 src/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs create mode 100644 src/Samples/TokenManagement/CustomerShippingAddress/CreateShippingAddress.cs create mode 100644 src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs create mode 100644 src/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs create mode 100644 src/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs rename src/Samples/TokenManagement/InstrumentIdentifier/{RetrieveAllPaymentInstruments.cs => ListPaymentInstrumentsForInstrumentIdentifier.cs} (65%) create mode 100644 src/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs delete mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs delete mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs delete mode 100644 src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs create mode 100644 src/Samples/ValueAddedService/BasicTaxCalculationRequest.cs create mode 100644 src/Samples/ValueAddedService/CommittedTaxCallRequest.cs create mode 100644 src/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs create mode 100644 src/Samples/ValueAddedService/TaxRefundRequest.cs create mode 100644 src/Samples/ValueAddedService/VoidCommittedTaxCall.cs diff --git a/src/SampleCode.cs b/src/SampleCode.cs index a379c1c..d6a082f 100644 --- a/src/SampleCode.cs +++ b/src/SampleCode.cs @@ -29,6 +29,10 @@ public class SampleCode // NLog Logger object private static Logger logger; + public static string TimeoutVoidTransactionId { get; set; } + + public static string TimeoutReversalTransactionId { get; set; } + public static void Main(string[] args) { // initializing logger object diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index d9a5951..58dc455 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -43,9 +43,9 @@ False ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll - + False - ..\packages\CyberSource.Rest.Client.0.0.1.3\lib\cybersource-rest-client-dotnet.dll + ..\packages\CyberSource.Rest.Client.0.0.1.5\lib\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -82,6 +82,7 @@ + @@ -94,8 +95,7 @@ - - + @@ -105,31 +105,80 @@ + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + - + @@ -184,18 +233,32 @@ + + + + + + + + + + + + + + + + - + + - - - @@ -208,6 +271,11 @@ + + + + + diff --git a/src/Samples/FlexMicroform/FlexTokenizeCard.cs b/src/Samples/FlexMicroform/FlexTokenizeCard.cs deleted file mode 100644 index df4320d..0000000 --- a/src/Samples/FlexMicroform/FlexTokenizeCard.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; -using CyberSource.Utilities.Flex.Model; -using CyberSource.Utilities.Flex.TokenVerification; - -namespace Cybersource_rest_samples_dotnet.Samples.Flex -{ - public class FlexTokenizeCard - { - public static FlexV1TokensPost200Response Run() - { - var generateKeyResult = GenerateKey.Run(); - string keyId = generateKeyResult.KeyId; - var derFormat = generateKeyResult.Der.Format; - var derAlgo = generateKeyResult.Der.Algorithm; - var derPublicKey = generateKeyResult.Der.PublicKey; - - string cardInfoCardNumber = "4111111111111111"; - string cardInfoCardExpirationMonth = "12"; - string cardInfoCardExpirationYear = "2031"; - string cardInfoCardType = "001"; - Flexv1tokensCardInfo cardInfo = new Flexv1tokensCardInfo( - CardNumber: cardInfoCardNumber, - CardExpirationMonth: cardInfoCardExpirationMonth, - CardExpirationYear: cardInfoCardExpirationYear, - CardType: cardInfoCardType - ); - - var requestObj = new TokenizeRequest( - KeyId: keyId, - CardInfo: cardInfo - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new TokenizationApi(clientConfig); - FlexV1TokensPost200Response result = apiInstance.Tokenize(requestObj); - Console.WriteLine(result); - - TokenVerificationUtility tokenVerifier = new TokenVerificationUtility(); - - var flexPublicKey = new FlexPublicKey(keyId, new FlexDerPublicKey(derFormat, derAlgo, derPublicKey), null); - var flexToken = new FlexToken() - { - keyId = result.KeyId, - token = result.Token, - maskedPan = result.MaskedPan, - cardType = result.CardType, - timestamp = (long)result.Timestamp, - signedFields = result.SignedFields, - signature = result.Signature, - discoverableServices = result.DiscoverableServices - }; - - IDictionary postParameters = new Dictionary(); - postParameters["signedFields"] = flexToken.signedFields; - postParameters["signature"] = flexToken.signature; - postParameters["cardType"] = flexToken.cardType; - postParameters["keyId"] = flexToken.keyId; - postParameters["maskedPan"] = flexToken.maskedPan; - postParameters["token"] = flexToken.token; - postParameters["timestamp"] = Convert.ToString(flexToken.timestamp); - - var tokenVerificationResult = tokenVerifier.Verify(flexPublicKey, postParameters); - Console.WriteLine("TOKEN VERIFICATION : " + tokenVerificationResult); - - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/FlexMicroform/GenerateKey.cs b/src/Samples/FlexMicroform/GenerateKey.cs index df56ca3..9190690 100644 --- a/src/Samples/FlexMicroform/GenerateKey.cs +++ b/src/Samples/FlexMicroform/GenerateKey.cs @@ -11,18 +11,21 @@ public class GenerateKey { public static FlexV1KeysPost200Response Run() { - string encryptionType = "None"; + string encryptionType = "RsaOaep"; + string targetOrigin = "https://www.test.com"; var requestObj = new GeneratePublicKeyRequest( - EncryptionType: encryptionType + EncryptionType: encryptionType, + TargetOrigin: targetOrigin ); + string format = "JWT"; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new KeyGenerationApi(clientConfig); - FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(requestObj); + FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(format, requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs b/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs index 8704e22..6505a57 100644 --- a/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs +++ b/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs @@ -22,12 +22,16 @@ public static InvoicingV2InvoiceSettingsGet200Response Run() BackgroundColor: invoiceSettingsInformationHeaderStyleBackgroundColor ); + string invoiceSettingsInformationDeliveryLanguage = "en-US"; + string invoiceSettingsInformationDefaultCurrencyCode = "USD"; InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformation invoiceSettingsInformation = new InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformation( MerchantLogo: invoiceSettingsInformationMerchantLogo, MerchantDisplayName: invoiceSettingsInformationMerchantDisplayName, CustomEmailMessage: invoiceSettingsInformationCustomEmailMessage, EnableReminders: invoiceSettingsInformationEnableReminders, - HeaderStyle: invoiceSettingsInformationHeaderStyle + HeaderStyle: invoiceSettingsInformationHeaderStyle, + DeliveryLanguage: invoiceSettingsInformationDeliveryLanguage, + DefaultCurrencyCode: invoiceSettingsInformationDefaultCurrencyCode ); var requestObj = new InvoiceSettingsRequest( diff --git a/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs b/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs index 8c39268..9e07337 100644 --- a/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs +++ b/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs @@ -65,7 +65,7 @@ public static InvoicingV2InvoicesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsProductSku1 = "P653727383"; string orderInformationLineItemsProductName1 = "First line item's name"; int orderInformationLineItemsQuantity1 = 21; diff --git a/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs b/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs index e4395c0..d2580df 100644 --- a/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs +++ b/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs @@ -65,7 +65,7 @@ public static InvoicingV2InvoicesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsProductSku1 = "P653727383"; string orderInformationLineItemsProductName1 = "First line item's name"; int orderInformationLineItemsQuantity1 = 21; diff --git a/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs b/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs index a9ad705..753d691 100644 --- a/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs +++ b/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs @@ -67,7 +67,7 @@ public static InvoicingV2InvoicesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsProductSku1 = "P653727383"; string orderInformationLineItemsProductName1 = "First line item's name"; int orderInformationLineItemsQuantity1 = 21; diff --git a/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs b/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs index 1cbeef0..9ee9ffa 100644 --- a/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs +++ b/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs @@ -67,7 +67,7 @@ public static InvoicingV2InvoicesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsProductSku1 = "P653727383"; string orderInformationLineItemsProductName1 = "First line item's name"; int orderInformationLineItemsQuantity1 = 21; diff --git a/src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs b/src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs index 204868e..9a77b9f 100644 --- a/src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs +++ b/src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs @@ -12,7 +12,7 @@ public class AuthenticationWithNORedirect public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs b/src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs index 9a59f7b..7f651f6 100644 --- a/src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs +++ b/src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs @@ -12,7 +12,7 @@ public class AuthenticationWithNewAccount public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "New Account"; - Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -67,7 +67,7 @@ public static RiskV1AuthenticationsPost201Response Run() ); string consumerAuthenticationInformationTransactionMode = "MOTO"; - Riskv1authenticationsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationsConsumerAuthenticationInformation( + Riskv1decisionsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1decisionsConsumerAuthenticationInformation( TransactionMode: consumerAuthenticationInformationTransactionMode ); diff --git a/src/Samples/Payments/Payments/PaymentWithPaymentInstrumentToken.cs b/src/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs similarity index 52% rename from src/Samples/Payments/Payments/PaymentWithPaymentInstrumentToken.cs rename to src/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs index be56f54..6d05410 100644 --- a/src/Samples/Payments/Payments/PaymentWithPaymentInstrumentToken.cs +++ b/src/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs @@ -5,78 +5,65 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { - public class PaymentWithPaymentInstrumentToken + public class EnrollWithCustomerIdAsPaymentInformation { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - - public static PtsV2PaymentsPost201Response Run() + public static RiskV1AuthenticationsPost201Response Run() { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + string clientReferenceInformationCode = "UNKNOWN"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); - bool processingInformationCapture = false; - if (CaptureTrueForProcessPayment) - { - processingInformationCapture = true; - } - - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCustomerCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; - Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( - CustomerId: paymentInformationCustomerCustomerId - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Customer: paymentInformationCustomer - ); - - string orderInformationAmountDetailsTotalAmount = "22"; string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency + string orderInformationAmountDetailsTotalAmount = "10.99"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount ); - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAddress2 = "Address 2"; string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPostalCode = "94105"; + Riskv1authenticationsOrderInformationBillTo orderInformationBillTo = new Riskv1authenticationsOrderInformationBillTo( Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, + Address2: orderInformationBillToAddress2, AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber + PostalCode: orderInformationBillToPostalCode ); - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + Riskv1authenticationsOrderInformation orderInformation = new Riskv1authenticationsOrderInformation( AmountDetails: orderInformationAmountDetails, BillTo: orderInformationBillTo ); - var requestObj = new CreatePaymentRequest( + string paymentInformationCustomerCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + CustomerId: paymentInformationCustomerCustomerId + ); + + Riskv1authenticationsPaymentInformation paymentInformation = new Riskv1authenticationsPaymentInformation( + Customer: paymentInformationCustomer + ); + + var requestObj = new CheckPayerAuthEnrollmentRequest( ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation + OrderInformation: orderInformation, + PaymentInformation: paymentInformation ); try @@ -84,8 +71,8 @@ public static PtsV2PaymentsPost201Response Run() var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs b/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs index 69afff3..7813ba4 100644 --- a/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs +++ b/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs @@ -12,7 +12,7 @@ public class EnrollWithPendingAuthentication public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -71,8 +71,10 @@ public static RiskV1AuthenticationsPost201Response Run() MobilePhone: buyerInformationMobilePhone ); + string consumerAuthenticationInformationReturnUrl = "http://localhost:8189/cart/enterprise/collect-term"; string consumerAuthenticationInformationTransactionMode = "MOTO"; - Riskv1authenticationsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationsConsumerAuthenticationInformation( + Riskv1decisionsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1decisionsConsumerAuthenticationInformation( + ReturnUrl: consumerAuthenticationInformationReturnUrl, TransactionMode: consumerAuthenticationInformationTransactionMode ); diff --git a/src/Samples/PayerAuthentication/EnrollWithTransientToken.cs b/src/Samples/PayerAuthentication/EnrollWithTransientToken.cs new file mode 100644 index 0000000..1205a75 --- /dev/null +++ b/src/Samples/PayerAuthentication/EnrollWithTransientToken.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class EnrollWithTransientToken + { + public static RiskV1AuthenticationsPost201Response Run() + { + string clientReferenceInformationCode = "UNKNOWN"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsTotalAmount = "10.99"; + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + TotalAmount: orderInformationAmountDetailsTotalAmount + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToAddress2 = "Address 2"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToPhoneNumber = "4158880000"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPostalCode = "94105"; + Riskv1authenticationsOrderInformationBillTo orderInformationBillTo = new Riskv1authenticationsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + AdministrativeArea: orderInformationBillToAdministrativeArea, + Country: orderInformationBillToCountry, + Locality: orderInformationBillToLocality, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + PhoneNumber: orderInformationBillToPhoneNumber, + Email: orderInformationBillToEmail, + PostalCode: orderInformationBillToPostalCode + ); + + Riskv1authenticationsOrderInformation orderInformation = new Riskv1authenticationsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string tokenInformationTransientToken = "1D5ZX4HMOV20FKEBE3IO240JWYJ0NJ90B4V9XQ6SCK4BDN0W96E65E2A39052056"; + Riskv1authenticationsetupsTokenInformation tokenInformation = new Riskv1authenticationsetupsTokenInformation( + TransientToken: tokenInformationTransientToken + ); + + var requestObj = new CheckPayerAuthEnrollmentRequest( + ClientReferenceInformation: clientReferenceInformation, + OrderInformation: orderInformation, + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs b/src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs index ee28d45..f8728bf 100644 --- a/src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs +++ b/src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs @@ -12,7 +12,7 @@ public class EnrollWithTravelInformation public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -72,16 +72,16 @@ public static RiskV1AuthenticationsPost201Response Run() ); string consumerAuthenticationInformationTransactionMode = "MOTO"; - Riskv1authenticationsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationsConsumerAuthenticationInformation( + Riskv1decisionsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1decisionsConsumerAuthenticationInformation( TransactionMode: consumerAuthenticationInformationTransactionMode ); - List travelInformationLegs = new List (); + List travelInformationLegs = new List(); string travelInformationLegsDestination1 = "DEF"; string travelInformationLegsCarrierCode1 = "UA"; string travelInformationLegsDepartureDate1 = "2019-01-01"; - travelInformationLegs.Add(new Riskv1authenticationsTravelInformationLegs( + travelInformationLegs.Add(new Riskv1decisionsTravelInformationLegs( Destination: travelInformationLegsDestination1, CarrierCode: travelInformationLegsCarrierCode1, DepartureDate: travelInformationLegsDepartureDate1 @@ -90,7 +90,7 @@ public static RiskV1AuthenticationsPost201Response Run() string travelInformationLegsDestination2 = "RES"; string travelInformationLegsCarrierCode2 = "AS"; string travelInformationLegsDepartureDate2 = "2019-02-21"; - travelInformationLegs.Add(new Riskv1authenticationsTravelInformationLegs( + travelInformationLegs.Add(new Riskv1decisionsTravelInformationLegs( Destination: travelInformationLegsDestination2, CarrierCode: travelInformationLegsCarrierCode2, DepartureDate: travelInformationLegsDepartureDate2 @@ -98,17 +98,17 @@ public static RiskV1AuthenticationsPost201Response Run() int travelInformationNumberOfPassengers = 2; - List travelInformationPassengers = new List (); + List travelInformationPassengers = new List(); string travelInformationPassengersFirstName1 = "Raj"; string travelInformationPassengersLastName1 = "Charles"; - travelInformationPassengers.Add(new Riskv1authenticationsTravelInformationPassengers( + travelInformationPassengers.Add(new Riskv1decisionsTravelInformationPassengers( FirstName: travelInformationPassengersFirstName1, LastName: travelInformationPassengersLastName1 )); string travelInformationPassengersFirstName2 = "Potter"; string travelInformationPassengersLastName2 = "Suhember"; - travelInformationPassengers.Add(new Riskv1authenticationsTravelInformationPassengers( + travelInformationPassengers.Add(new Riskv1decisionsTravelInformationPassengers( FirstName: travelInformationPassengersFirstName2, LastName: travelInformationPassengersLastName2 )); diff --git a/src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs b/src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs index 4150db6..70bab11 100644 --- a/src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs +++ b/src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs @@ -12,7 +12,7 @@ public class PendingAuthenticationWithUnknownPath public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; - Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs b/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs new file mode 100644 index 0000000..314fc33 --- /dev/null +++ b/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class SetupCompletionWithCardNumber + { + public static RiskV1AuthenticationSetupsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardType = "001"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2025"; + string paymentInformationCardNumber = "4111111111111111"; + Riskv1authenticationsetupsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsetupsPaymentInformationCard( + Type: paymentInformationCardType, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Number: paymentInformationCardNumber + ); + + Riskv1authenticationsetupsPaymentInformation paymentInformation = new Riskv1authenticationsetupsPaymentInformation( + Card: paymentInformationCard + ); + + var requestObj = new PayerAuthSetupRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs b/src/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs new file mode 100644 index 0000000..e0e12b5 --- /dev/null +++ b/src/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class SetupCompletionWithFlexTransientToken + { + public static RiskV1AuthenticationSetupsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string tokenInformationTransientToken = "1D5ZX4HMOV20FKEBE3IO240JWYJ0NJ90B4V9XQ6SCK4BDN0W96E65E2A39052056"; + Riskv1authenticationsetupsTokenInformation tokenInformation = new Riskv1authenticationsetupsTokenInformation( + TransientToken: tokenInformationTransientToken + ); + + var requestObj = new PayerAuthSetupRequest( + ClientReferenceInformation: clientReferenceInformation, + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs b/src/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs new file mode 100644 index 0000000..a1318cc --- /dev/null +++ b/src/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class SetupCompletionWithFluidDataValueAndPaymentSolution + { + public static RiskV1AuthenticationSetupsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationFluidDataValue = "eyJkYXRhIjoiOFJTK2o1a2ZLRjZkTnkzNVwvOTluR3ZEVis0WUVlaStBb2VmUUNMXC9SNTN0TnVMeHJxTzh4b1g2SnBScm9WWUVUOUNvUkhIWFZMRjJNSVNIZlVtM25UczltdGFPTUdqcW1oeWdjTFpWVWI3OHhxYVVUT2JwWUxLelY0dFR1QmhvRkV4UVJ1d2lvTmo2bXJsRlRjUm5LNzdcL2lCR01yYVlZcXZTVnhGK3ViK1JXK3BGeTRDNUVUOVhmcHBkS2xHYXVpODdzcTBtYVlYVk9qOGFaNTFMWjZvS1NKZkR1clhvWEtLNHRqd1wvaDVRK1dcL0x2dnJxSUhmZmVhK21MZXVRY3RHK0k3UUN6MTRpVmdROUFEMW1oWFUrbVdwZXRUQWZ5WXhoVituZlh1NlpISGRDWFV1cUp6djQydHg4UlwvN0lvdld5OWx6Z0N3YnpuclVsY3pUcThkb3JtV3A4eXhYQklDNnJHRTdlTVJrS3oxZFwvUFFDXC9DS2J1NDhNK0R4XC9VejNoUFwvZ1NnRGoxakJNcUllUUZiRWFzcTRWTUV1ZG9FNUh1UjBcLzRQMXJmdG9EVlpwNnhFdnF1STY5dkt2YnZHcXpmTkpUNjVnPT0iLCJ2ZXJzaW9uIjoiRUNfdjEiLCJoZWFkZXIiOnsiYXBwbGljYXRpb25EYXRhIjoiNzQ2NTczNzQ2MTcwNzA2QzY5NjM2MTc0Njk2RjZFNjQ2MTc0NjEiLCJ0cmFuc2FjdGlvbklkIjoiNzQ2NTczNzQ3NDcyNjE2RTczNjE2Mzc0Njk2RjZFNjk2NCIsImVwaGVtZXJhbFB1YmxpY0tleSI6Ik1JSUJTekNDQVFNR0J5cUdTTTQ5QWdFd2dmY0NBUUV3TEFZSEtvWkl6ajBCQVFJaEFQXC9cL1wvXC84QUFBQUJBQUFBQUFBQUFBQUFBQUFBXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9NRnNFSVBcL1wvXC9cLzhBQUFBQkFBQUFBQUFBQUFBQUFBQUFcL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC84QkNCYXhqWFlxanFUNTdQcnZWVjJtSWE4WlIwR3NNeFRzUFk3emp3K0o5SmdTd01WQU1TZE5naUc1d1NUYW1aNDRST2RKcmVCbjM2UUJFRUVheGZSOHVFc1FrZjR2T2JsWTZSQThuY0RmWUV0NnpPZzlLRTVSZGlZd3BaUDQwTGlcL2hwXC9tNDduNjBwOEQ1NFdLODR6VjJzeFhzN0x0a0JvTjc5UjlRSWhBUFwvXC9cL1wvOEFBQUFBXC9cL1wvXC9cL1wvXC9cL1wvXC8rODV2cXRweGVlaFBPNXlzTDhZeVZSQWdFQkEwSUFCQmJHK2xtTHJIWWtKSVwvSUUwcTU3dEN0bE5jK2pBWHNudVMrSnFlOFVcLzc0cSs5NVRnbzVFRjBZNks3b01LTUt5cTMwY3VQbmtIenkwMjVpU1BGdWczRT0iLCJwdWJsaWNLZXlIYXNoIjoieCtQbUhHMzdUNjdBWUFIenVqbGJyaW1JdzZZaFlYaVpjYjV3WnJCNGpRdz0ifSwic2lnbmF0dXJlIjoiTUlJRFFnWUpLb1pJaHZjTkFRY0NvSUlETXpDQ0F5OENBUUV4Q3pBSkJnVXJEZ01DR2dVQU1Bc0dDU3FHU0liM0RRRUhBYUNDQWlzd2dnSW5NSUlCbEtBREFnRUNBaEJjbCtQZjMrVTRwazEzblZEOW53UVFNQWtHQlNzT0F3SWRCUUF3SnpFbE1DTUdBMVVFQXg0Y0FHTUFhQUJ0QUdFQWFRQkFBSFlBYVFCekFHRUFMZ0JqQUc4QWJUQWVGdzB4TkRBeE1ERXdOakF3TURCYUZ3MHlOREF4TURFd05qQXdNREJhTUNjeEpUQWpCZ05WQkFNZUhBQmpBR2dBYlFCaEFHa0FRQUIyQUdrQWN3QmhBQzRBWXdCdkFHMHdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTkM4K2tndGdtdldGMU96amdETnJqVEVCUnVvXC81TUt2bE0xNDZwQWY3R3g0MWJsRTl3NGZJWEpBRDdGZk83UUtqSVhZTnQzOXJMeXk3eER3YlwvNUlrWk02MFRaMmlJMXBqNTVVYzhmZDRmek9wazNmdFphUUdYTkxZcHRHMWQ5VjdJUzgyT3VwOU1NbzFCUFZyWFRQSE5jc005OUVQVW5QcWRiZUdjODdtMHJBZ01CQUFHalhEQmFNRmdHQTFVZEFRUlJNRStBRUhaV1ByV3RKZDdZWjQzMWhDZzdZRlNoS1RBbk1TVXdJd1lEVlFRREhod0FZd0JvQUcwQVlRQnBBRUFBZGdCcEFITUFZUUF1QUdNQWJ3QnRnaEJjbCtQZjMrVTRwazEzblZEOW53UVFNQWtHQlNzT0F3SWRCUUFEZ1lFQWJVS1lDa3VJS1M5UVEybUZjTVlSRUltMmwrWGc4XC9KWHYrR0JWUUprT0tvc2NZNGlOREZBXC9iUWxvZ2Y5TExVODRUSHdOUm5zdlYzUHJ2N1JUWTgxZ3EwZHRDOHpZY0FhQWtDSElJM3lxTW5KNEFPdTZFT1c5a0prMjMyZ1NFN1dsQ3RIYmZMU0tmdVNnUVg4S1hRWXVaTGsyUnI2M044QXBYc1h3QkwzY0oweGdlQXdnZDBDQVFFd096QW5NU1V3SXdZRFZRUURIaHdBWXdCb0FHMEFZUUJwQUVBQWRnQnBBSE1BWVFBdUFHTUFid0J0QWhCY2wrUGYzK1U0cGsxM25WRDlud1FRTUFrR0JTc09Bd0lhQlFBd0RRWUpLb1pJaHZjTkFRRUJCUUFFZ1lBMG9MXC9KSWFTN0tra1RFNG1pOGRmU2tQVVwvdlp2cVwva2NYZ1pUdGJZbENtTFM4YzNuS2VZNVE0c2s4MXJnZkI1ampBMWJRZldhUHBKc05tVWNSS3gzS0FGUEtpNzE0WWVYdGUrcmc2V1k4MnVxcnlwRERiTkhqSWVpNjVqV0dvcGRZUEx6TEk5c1Z3NDh5OHlqSXY3SjFaQVlycnp6YjBwNzUzcUJUQ0ZEN1p3PT0ifQ=="; + Riskv1authenticationsetupsPaymentInformationFluidData paymentInformationFluidData = new Riskv1authenticationsetupsPaymentInformationFluidData( + Value: paymentInformationFluidDataValue + ); + + Riskv1authenticationsetupsPaymentInformation paymentInformation = new Riskv1authenticationsetupsPaymentInformation( + FluidData: paymentInformationFluidData + ); + + string processingInformationPaymentSolution = "001"; + Riskv1authenticationsetupsProcessingInformation processingInformation = new Riskv1authenticationsetupsProcessingInformation( + PaymentSolution: processingInformationPaymentSolution + ); + + var requestObj = new PayerAuthSetupRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + ProcessingInformation: processingInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs b/src/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs new file mode 100644 index 0000000..511440c --- /dev/null +++ b/src/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class SetupCompletionWithSecureStorageToken + { + public static RiskV1AuthenticationSetupsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCustomerCustomerId = "5795045921830181636348"; + Riskv1authenticationsetupsPaymentInformationCustomer paymentInformationCustomer = new Riskv1authenticationsetupsPaymentInformationCustomer( + CustomerId: paymentInformationCustomerCustomerId + ); + + Riskv1authenticationsetupsPaymentInformation paymentInformation = new Riskv1authenticationsetupsPaymentInformation( + Customer: paymentInformationCustomer + ); + + var requestObj = new PayerAuthSetupRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs b/src/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs new file mode 100644 index 0000000..a04439c --- /dev/null +++ b/src/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class SetupCompletionWithTMSToken + { + public static RiskV1AuthenticationSetupsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCustomerCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; + Riskv1authenticationsetupsPaymentInformationCustomer paymentInformationCustomer = new Riskv1authenticationsetupsPaymentInformationCustomer( + CustomerId: paymentInformationCustomerCustomerId + ); + + Riskv1authenticationsetupsPaymentInformation paymentInformation = new Riskv1authenticationsetupsPaymentInformation( + Customer: paymentInformationCustomer + ); + + var requestObj = new PayerAuthSetupRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs b/src/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs new file mode 100644 index 0000000..3105e5a --- /dev/null +++ b/src/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication +{ + public class SetupCompletionWithTokenizedCard + { + public static RiskV1AuthenticationSetupsPost201Response Run() + { + string clientReferenceInformationCode = "cybs_test"; + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationTokenizedCardTransactionType = "1"; + string paymentInformationTokenizedCardType = "001"; + string paymentInformationTokenizedCardExpirationMonth = "11"; + string paymentInformationTokenizedCardExpirationYear = "2025"; + string paymentInformationTokenizedCardNumber = "4111111111111111"; + Riskv1authenticationsetupsPaymentInformationTokenizedCard paymentInformationTokenizedCard = new Riskv1authenticationsetupsPaymentInformationTokenizedCard( + TransactionType: paymentInformationTokenizedCardTransactionType, + Type: paymentInformationTokenizedCardType, + ExpirationMonth: paymentInformationTokenizedCardExpirationMonth, + ExpirationYear: paymentInformationTokenizedCardExpirationYear, + Number: paymentInformationTokenizedCardNumber + ); + + Riskv1authenticationsetupsPaymentInformation paymentInformation = new Riskv1authenticationsetupsPaymentInformation( + TokenizedCard: paymentInformationTokenizedCard + ); + + var requestObj = new PayerAuthSetupRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PayerAuthenticationApi(clientConfig); + RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index d772925..899c327 100644 --- a/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -12,7 +12,7 @@ public class ValidateAuthenticationResults public static RiskV1AuthenticationResultsPost201Response Run() { string clientReferenceInformationCode = "pavalidatecheck"; - Riskv1authenticationsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -24,7 +24,7 @@ public static RiskV1AuthenticationResultsPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "10"; int orderInformationLineItemsQuantity1 = 2; string orderInformationLineItemsTaxAmount1 = "32.40"; @@ -55,9 +55,11 @@ public static RiskV1AuthenticationResultsPost201Response Run() ); string consumerAuthenticationInformationAuthenticationTransactionId = "PYffv9G3sa1e0CQr5fV0"; + string consumerAuthenticationInformationResponseAccessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5YTAwYTYzMC0zNzFhLTExZTYtYTU5Ni1kZjQwZjUwMjAwNmMiLCJpYXQiOjE0NjY0NDk4MDcsImlzcyI6Ik1pZGFzLU5vRFYtS2V5IiwiUGF5bG9hZCI6eyJPcmRlckRldGFpbHMiOnsiT3JkZXJOdW1iZXIiOjE1NTc4MjAyMzY3LCJBbW91bnQiOiIxNTAwIiwiQ3VycmVudENvZGUiOiI4NDAiLCJUcmFuc2FjdGlvbklkIjoiOVVzaGVoRFFUcWh1SFk5SElqZTAifX0sIk9yZ1VuaXRJZCI6IjU2NGNkY2JjYjlmNjNmMGM0OGQ2Mzg3ZiIsIk9iamVjdGlmeVBheWxvYWQiOnRydWV9.eaU8LZJnMtY3mPl4vBXVCVUuyeSeAp8zoNaEOmKS4XY"; string consumerAuthenticationInformationSignedPares = "eNqdmFmT4jgSgN+J4D90zD4yMz45PEFVhHzgA2zwjXnzhQ984Nvw61dAV1"; Riskv1authenticationresultsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationresultsConsumerAuthenticationInformation( AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId, + ResponseAccessToken: consumerAuthenticationInformationResponseAccessToken, SignedPares: consumerAuthenticationInformationSignedPares ); diff --git a/src/Samples/Payments/Payments/CreditUsingBluefinPCIP2PE.cs b/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs similarity index 98% rename from src/Samples/Payments/Payments/CreditUsingBluefinPCIP2PE.cs rename to src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs index 8346a6b..9225fdd 100644 --- a/src/Samples/Payments/Payments/CreditUsingBluefinPCIP2PE.cs +++ b/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class CreditUsingBluefinPCIP2PE + public class CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer { public static PtsV2CreditsPost201Response Run() { diff --git a/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PE.cs b/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs similarity index 98% rename from src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PE.cs rename to src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs index 8346a6b..9c6c3e4 100644 --- a/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PE.cs +++ b/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class CreditUsingBluefinPCIP2PE + public class CreditUsingBluefinPCIP2PEWithVisaPlatformConnect { public static PtsV2CreditsPost201Response Run() { diff --git a/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs index dd0580f..0f379fb 100644 --- a/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs +++ b/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs @@ -16,17 +16,17 @@ public static PtsV2CreditsPost201Response Run() Code: clientReferenceInformationCode ); - string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + string paymentInformationCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( Id: paymentInformationCustomerId ); - string paymentInformationPaymentInstrumentId = "7500BB199B4270EFE05340588D0AFCPI"; + string paymentInformationPaymentInstrumentId = "AB6A54B982A6FCB6E05341588E0A3935"; Ptsv2paymentsPaymentInformationPaymentInstrument paymentInformationPaymentInstrument = new Ptsv2paymentsPaymentInformationPaymentInstrument( Id: paymentInformationPaymentInstrumentId ); - string paymentInformationShippingAddressId = "7500BB199B4270EFE05340588D0AFCSA"; + string paymentInformationShippingAddressId = "AB6A54B97C00FCB6E05341588E0A3935"; Ptsv2paymentsPaymentInformationShippingAddress paymentInformationShippingAddress = new Ptsv2paymentsPaymentInformationShippingAddress( Id: paymentInformationShippingAddressId ); diff --git a/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs b/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs index cf21ec6..ed78eaa 100644 --- a/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs +++ b/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs @@ -16,7 +16,7 @@ public static PtsV2CreditsPost201Response Run() Code: clientReferenceInformationCode ); - string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + string paymentInformationCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( Id: paymentInformationCustomerId ); diff --git a/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs b/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs index 97c66d7..71443d6 100644 --- a/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs +++ b/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs @@ -25,7 +25,7 @@ public static PtsV2CreditsPost201Response Run() Type: paymentInformationCardType ); - string paymentInformationInstrumentIdentifierId = "7500BB199B4270EFE05340588D0AFCII"; + string paymentInformationInstrumentIdentifierId = "7010000000016241111"; Ptsv2paymentsPaymentInformationInstrumentIdentifier paymentInformationInstrumentIdentifier = new Ptsv2paymentsPaymentInformationInstrumentIdentifier( Id: paymentInformationInstrumentIdentifierId ); diff --git a/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs b/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs index b6172c5..a210993 100644 --- a/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs +++ b/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs @@ -16,11 +16,6 @@ public static PtsV2CreditsPost201Response Run() Code: clientReferenceInformationCode ); - string processingInformationCommerceIndicator = "internet"; - Ptsv2creditsProcessingInformation processingInformation = new Ptsv2creditsProcessingInformation( - CommerceIndicator: processingInformationCommerceIndicator - ); - string paymentInformationBankAccountType = "C"; string paymentInformationBankAccountNumber = "4100"; string paymentInformationBankAccountCheckNumber = "123456"; @@ -36,8 +31,14 @@ public static PtsV2CreditsPost201Response Run() RoutingNumber: paymentInformationBankRoutingNumber ); + string paymentInformationPaymentTypeName = "CHECK"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( - Bank: paymentInformationBank + Bank: paymentInformationBank, + PaymentType: paymentInformationPaymentType ); string orderInformationAmountDetailsTotalAmount = "100"; @@ -75,7 +76,6 @@ public static PtsV2CreditsPost201Response Run() var requestObj = new CreateCreditRequest( ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation ); diff --git a/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs b/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs index 084ceb8..98bcff2 100644 --- a/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs +++ b/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs @@ -56,11 +56,11 @@ public static PtsV2PaymentsPost201Response Run() string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - List pointOfSaleInformationCardholderVerificationMethod = new List (); + List pointOfSaleInformationCardholderVerificationMethod = new List(); pointOfSaleInformationCardholderVerificationMethod.Add("pin"); pointOfSaleInformationCardholderVerificationMethod.Add("signature"); - List pointOfSaleInformationTerminalInputCapability = new List (); + List pointOfSaleInformationTerminalInputCapability = new List(); pointOfSaleInformationTerminalInputCapability.Add("contact"); pointOfSaleInformationTerminalInputCapability.Add("contactless"); pointOfSaleInformationTerminalInputCapability.Add("keyed"); diff --git a/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs b/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs index a8222ed..8e40e19 100644 --- a/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs +++ b/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs @@ -1,6 +1,7 @@ using System; using CyberSource.Api; using CyberSource.Model; +using Cybersource_rest_samples_dotnet.Resource; namespace Cybersource_rest_samples_dotnet.Samples.Payments { @@ -8,8 +9,9 @@ public class AuthorizationCaptureForTimeoutVoidFlow { public static PtsV2PaymentsPost201Response Run() { + SampleCode.TimeoutVoidTransactionId = NumericUtility.LongRandom(1000, 1000000000 + 1); string clientReferenceInformationCode = "TC50171_3"; - string clientReferenceInformationTransactionId = "879564132897"; + string clientReferenceInformationTransactionId = SampleCode.TimeoutVoidTransactionId; Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( Code: clientReferenceInformationCode, TransactionId: clientReferenceInformationTransactionId diff --git a/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs b/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs index 5c670c5..432be51 100644 --- a/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs +++ b/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs @@ -129,7 +129,7 @@ public static PtsV2PaymentsPost201Response Run() string travelInformationLodgingCheckInDate = "11062019"; string travelInformationLodgingCheckOutDate = "11092019"; - List travelInformationLodgingRoom = new List (); + List travelInformationLodgingRoom = new List(); string travelInformationLodgingRoomDailyRate1 = "1.50"; int travelInformationLodgingRoomNumberOfNights1 = 5; travelInformationLodgingRoom.Add(new Ptsv2paymentsTravelInformationLodgingRoom( diff --git a/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs b/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs index b1d025d..f8e30a5 100644 --- a/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs +++ b/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs @@ -1,6 +1,7 @@ using System; using CyberSource.Api; using CyberSource.Model; +using Cybersource_rest_samples_dotnet.Resource; namespace Cybersource_rest_samples_dotnet.Samples.Payments { @@ -10,8 +11,9 @@ public class AuthorizationForTimeoutReversalFlow public static PtsV2PaymentsPost201Response Run() { + SampleCode.TimeoutReversalTransactionId = NumericUtility.LongRandom(1000, 1000000000 + 1); string clientReferenceInformationCode = "TC50171_3"; - string clientReferenceInformationTransactionId = "231465978312"; + string clientReferenceInformationTransactionId = SampleCode.TimeoutReversalTransactionId; Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( Code: clientReferenceInformationCode, TransactionId: clientReferenceInformationTransactionId diff --git a/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs b/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs index e909644..65e92e5 100644 --- a/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs +++ b/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs @@ -17,7 +17,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("DECISION_SKIP"); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( diff --git a/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PE.cs b/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs similarity index 98% rename from src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PE.cs rename to src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs index 686c37f..87d5242 100644 --- a/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PE.cs +++ b/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class AuthorizationUsingBluefinPCIP2PE + public class AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs deleted file mode 100644 index 521af3a..0000000 --- a/src/Samples/Payments/Payments/AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class AuthorizationWithCustomerDefaultPaymentInstrumentShippingAddressCreation - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - - List processingInformationActionList = new List (); - processingInformationActionList.Add("TOKEN_CREATE"); - - List processingInformationActionTokenTypes = new List (); - processingInformationActionTokenTypes.Add("paymentInstrument"); - processingInformationActionTokenTypes.Add("shippingAddress"); - bool processingInformationCapture = false; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - ActionList: processingInformationActionList, - ActionTokenTypes: processingInformationActionTokenTypes, - Capture: processingInformationCapture - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; - Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( - Id: paymentInformationCustomerId - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard, - Customer: paymentInformationCustomer - ); - - string orderInformationAmountDetailsTotalAmount = "102.21"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - string orderInformationShipToFirstName = "John"; - string orderInformationShipToLastName = "Doe"; - string orderInformationShipToAddress1 = "1 Market St"; - string orderInformationShipToLocality = "san francisco"; - string orderInformationShipToAdministrativeArea = "CA"; - string orderInformationShipToPostalCode = "94105"; - string orderInformationShipToCountry = "US"; - Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( - FirstName: orderInformationShipToFirstName, - LastName: orderInformationShipToLastName, - Address1: orderInformationShipToAddress1, - Locality: orderInformationShipToLocality, - AdministrativeArea: orderInformationShipToAdministrativeArea, - PostalCode: orderInformationShipToPostalCode, - Country: orderInformationShipToCountry - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo, - ShipTo: orderInformationShipTo - ); - - bool tokenInformationPaymentInstrument_default = true; - Ptsv2paymentsTokenInformationPaymentInstrument tokenInformationPaymentInstrument = new Ptsv2paymentsTokenInformationPaymentInstrument( - _default: tokenInformationPaymentInstrument_default - ); - - bool tokenInformationShippingAddress_default = true; - Ptsv2paymentsTokenInformationShippingAddress tokenInformationShippingAddress = new Ptsv2paymentsTokenInformationShippingAddress( - _default: tokenInformationShippingAddress_default - ); - - Ptsv2paymentsTokenInformation tokenInformation = new Ptsv2paymentsTokenInformation( - PaymentInstrument: tokenInformationPaymentInstrument, - ShippingAddress: tokenInformationShippingAddress - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - TokenInformation: tokenInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs index 5a3a9f9..43fba69 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs @@ -16,17 +16,17 @@ public static PtsV2PaymentsPost201Response Run() Code: clientReferenceInformationCode ); - string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + string paymentInformationCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( Id: paymentInformationCustomerId ); - string paymentInformationPaymentInstrumentId = "7500BB199B4270EFE05340588D0AFCPI"; + string paymentInformationPaymentInstrumentId = "AB6A54B982A6FCB6E05341588E0A3935"; Ptsv2paymentsPaymentInformationPaymentInstrument paymentInformationPaymentInstrument = new Ptsv2paymentsPaymentInformationPaymentInstrument( Id: paymentInformationPaymentInstrumentId ); - string paymentInformationShippingAddressId = "7500BB199B4270EFE05340588D0AFCSA"; + string paymentInformationShippingAddressId = "AB6A54B97C00FCB6E05341588E0A3935"; Ptsv2paymentsPaymentInformationShippingAddress paymentInformationShippingAddress = new Ptsv2paymentsPaymentInformationShippingAddress( Id: paymentInformationShippingAddressId ); diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs index d810c2b..348dac1 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs @@ -17,10 +17,10 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("TOKEN_CREATE"); - List processingInformationActionTokenTypes = new List (); + List processingInformationActionTokenTypes = new List(); processingInformationActionTokenTypes.Add("customer"); processingInformationActionTokenTypes.Add("paymentInstrument"); processingInformationActionTokenTypes.Add("shippingAddress"); diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs index f516f09..6dc1649 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs @@ -16,7 +16,7 @@ public static PtsV2PaymentsPost201Response Run() Code: clientReferenceInformationCode ); - string paymentInformationCustomerId = "7500BB199B4270EFE05340588D0AFCAD"; + string paymentInformationCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( Id: paymentInformationCustomerId ); diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs b/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs index e95875c..3439636 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs @@ -17,7 +17,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs b/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs index 51280ab..6dc91e9 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs @@ -17,7 +17,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs b/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs index cec2bf5..5da19e1 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs @@ -17,7 +17,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs index 3fc6d48..11b4ae9 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs @@ -64,7 +64,7 @@ public static PtsV2PaymentsPost201Response Run() string buyerInformationDateOfBirth = "19980505"; - List buyerInformationPersonalIdentification = new List (); + List buyerInformationPersonalIdentification = new List(); string buyerInformationPersonalIdentificationType1 = "CPF"; string buyerInformationPersonalIdentificationId1 = "1a23apwe98"; buyerInformationPersonalIdentification.Add(new Ptsv2paymentsBuyerInformationPersonalIdentification( diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs index 297493d..fd83883 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs @@ -17,7 +17,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("DECISION"); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs index fada704..7628a79 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs @@ -63,7 +63,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List merchantDefinedInformation = new List (); + List merchantDefinedInformation = new List(); string merchantDefinedInformationKey1 = "1"; string merchantDefinedInformationValue1 = "Test"; merchantDefinedInformation.Add(new Ptsv2paymentsMerchantDefinedInformation( diff --git a/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs b/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs deleted file mode 100644 index f02d117..0000000 --- a/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class AuthorizationWithInstrumentIdentifierTokenId - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - string orderInformationAmountDetailsTotalAmount = "200"; - string orderInformationAmountDetailsCurrency = "usd"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Deo"; - string orderInformationBillToAddress1 = "900 Metro Center Blvd"; - string orderInformationBillToLocality = "Foster City"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "48104-2201"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "9321499232"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/PaymentWithLegacyToken.cs b/src/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs similarity index 96% rename from src/Samples/Payments/Payments/PaymentWithLegacyToken.cs rename to src/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs index 9621eec..b931b20 100644 --- a/src/Samples/Payments/Payments/PaymentWithLegacyToken.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class PaymentWithLegacyToken + public class AuthorizationWithLegacyToken { public static PtsV2PaymentsPost201Response Run() { @@ -16,7 +16,7 @@ public static PtsV2PaymentsPost201Response Run() Code: clientReferenceInformationCode ); - string paymentInformationLegacyTokenId = "7500BB199B4270EFE05340588D0AFCAD"; + string paymentInformationLegacyTokenId = "7010000000016241111"; Ptsv2paymentsPaymentInformationLegacyToken paymentInformationLegacyToken = new Ptsv2paymentsPaymentInformationLegacyToken( Id: paymentInformationLegacyTokenId ); diff --git a/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs b/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs index f20cf9f..d66fa95 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs @@ -17,7 +17,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("CONSUMER_AUTHENTICATION"); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( diff --git a/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs b/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs index 532f5b3..57d4a1d 100644 --- a/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs +++ b/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs @@ -17,7 +17,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List processingInformationActionList = new List (); + List processingInformationActionList = new List(); processingInformationActionList.Add("VALIDATE_CONSUMER_AUTHENTICATION"); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( diff --git a/src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs b/src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs deleted file mode 100644 index d2543c3..0000000 --- a/src/Samples/Payments/Payments/CaptureOfAuthorizationThatUsedSwipedTrackData.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class CaptureOfAuthorizationThatUsedSwipedTrackData - { - public static PtsV2PaymentsCapturesPost201Response Run() - { - var processPaymentId = AuthorizationUsingSwipedTrackData.Run().Id; - string clientReferenceInformationCode = "1234567890"; - string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - string orderInformationAmountDetailsTotalAmount = "100"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - var requestObj = new CapturePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new CaptureApi(clientConfig); - - PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs b/src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs deleted file mode 100644 index 2d5b6bd..0000000 --- a/src/Samples/Payments/Payments/CyberSourceMPOSEMV.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class CyberSourceMPOSEMV - { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_16"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - if (CaptureTrueForProcessPayment) - { - processingInformationCapture = true; - } - - string processingInformationCommerceIndicator = "retail"; - string processingInformationPaymentSolution = "011"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - PaymentSolution: processingInformationPaymentSolution - ); - - string paymentInformationFluidDataDescriptor = "EMV.PAYMENT.AnywhereCommerce.Walker"; - string paymentInformationFluidDataValue = "ewogICJkYXRhIiA6ICJOZmNwRURiK1dLdzBnQkpsaTRcL1hlWm1ITzdUSng0bnRoMnc2Mk9ITVJQK3hCRlFPdFE0WWpRcnY0RmFkOHh6VExqT2VFQm5iNHFzeGZMYTNyNXcxVEdXblFGQnNzMWtPYnA0XC95alNtVE1JSGVjbGc5OFROaEhNb0VRcjJkRkFqYVpBTFAxSlBsdVhKSVwvbTZKSmVwNGh3VHRWZE16Z2laSUhnaWFCYzNXZVd1ZnYzc1l0cGRaZDZYZENEUFdLeXFkYjBJdUtkdkpBPT0iLAogICJzaWduYXR1cmUiIDogIkFxck1pKzc0cm1GeVBKVE9HN3NuN2p5K1YxTlpBZUNJVE56TW01N1B5cmc9IiwKICAic2lnbmF0dXJlQWxnSW5mbyIgOiAiSE1BQ3dpdGhTSEEyNTYiLAogICJoZWFkZXIiIDogewogICAgInRyYW5zYWN0aW9uSWQiIDogIjE1MTU2MjI2NjIuMTcyMjIwIiwKICAgICJwdWJsaWNLZXlIYXNoIiA6ICJcLzdmdldqRVhMazJPRWpcL3Z5bk1jeEZvMmRWSTlpRXVoT2Nab0tHQnpGTmM9IiwKICAgICJhcHBsaWNhdGlvbkRhdGEiIDogIkN5YmVyU291cmNlLlZNcG9zS2l0IiwKICAgICJlcGhlbWVyYWxQdWJsaWNLZXkiIDogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRW1JN0tScnRNN2NNelk5Zmw2UWt2NEQzdE9jU0NYR1hoOFwvK2R4K2s5c1Zrbk05UFQrOXRqMzk2YWF6QjRcL0hYaWlLRW9DXC9jUzdoSzF6UFk3MVwvN0pUUT09IgogIH0sCiAgInZlcnNpb24iIDogIjEuMCIKfQ=="; - Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( - Descriptor: paymentInformationFluidDataDescriptor, - Value: paymentInformationFluidDataValue - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - FluidData: paymentInformationFluidData - ); - - string orderInformationAmountDetailsTotalAmount = "15.0"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToAddress2 = "Address 2"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Address2: orderInformationBillToAddress2, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contact"; - int pointOfSaleInformationTerminalCapability = 1; - bool pointOfSaleInformationEmvFallback = true; - int pointOfSaleInformationEmvFallbackCondition = 1; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Fallback: pointOfSaleInformationEmvFallback, - FallbackCondition: pointOfSaleInformationEmvFallbackCondition - ); - - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs b/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs index 957babf..c4bfa1d 100644 --- a/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs +++ b/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs @@ -23,11 +23,9 @@ public static PtsV2PaymentsPost201Response Run() { processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; string processingInformationPaymentSolution = "012"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, PaymentSolution: processingInformationPaymentSolution ); diff --git a/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs b/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs index 41af1cb..33c2689 100644 --- a/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs +++ b/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs @@ -23,11 +23,9 @@ public static PtsV2PaymentsPost201Response Run() { processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; string processingInformationPaymentSolution = "001"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, PaymentSolution: processingInformationPaymentSolution ); @@ -58,7 +56,6 @@ public static PtsV2PaymentsPost201Response Run() string orderInformationBillToFirstName = "John"; string orderInformationBillToLastName = "Deo"; string orderInformationBillToAddress1 = "901 Metro Center Blvd"; - string orderInformationBillToAddress2 = "Desk M3-5573"; string orderInformationBillToLocality = "Foster City"; string orderInformationBillToAdministrativeArea = "CA"; string orderInformationBillToPostalCode = "94404"; @@ -69,7 +66,6 @@ public static PtsV2PaymentsPost201Response Run() FirstName: orderInformationBillToFirstName, LastName: orderInformationBillToLastName, Address1: orderInformationBillToAddress1, - Address2: orderInformationBillToAddress2, Locality: orderInformationBillToLocality, AdministrativeArea: orderInformationBillToAdministrativeArea, PostalCode: orderInformationBillToPostalCode, diff --git a/src/Samples/Payments/Payments/ElectronicCheckDebits.cs b/src/Samples/Payments/Payments/ElectronicCheckDebits.cs index 5a0ad3a..fd9222c 100644 --- a/src/Samples/Payments/Payments/ElectronicCheckDebits.cs +++ b/src/Samples/Payments/Payments/ElectronicCheckDebits.cs @@ -9,8 +9,6 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ElectronicCheckDebits { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -18,16 +16,6 @@ public static PtsV2PaymentsPost201Response Run() Code: clientReferenceInformationCode ); - bool processingInformationCapture = false; - if (CaptureTrueForProcessPayment) - { - processingInformationCapture = true; - } - string processingInformationCommerceIndicator = "internet"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); string paymentInformationBankAccountType = "C"; string paymentInformationBankAccountNumber = "4100"; @@ -42,8 +30,14 @@ public static PtsV2PaymentsPost201Response Run() RoutingNumber: paymentInformationBankRoutingNumber ); + string paymentInformationPaymentTypeName = "CHECK"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Bank: paymentInformationBank + Bank: paymentInformationBank, + PaymentType: paymentInformationPaymentType ); string orderInformationAmountDetailsTotalAmount = "100"; @@ -79,7 +73,6 @@ public static PtsV2PaymentsPost201Response Run() var requestObj = new CreatePaymentRequest( ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation ); diff --git a/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs b/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs index f21c2e9..67f5ccd 100644 --- a/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs +++ b/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs @@ -16,7 +16,7 @@ public static PtsV2PaymentsPost201Response Run() Code: clientReferenceInformationCode ); - string paymentInformationLegacyTokenId = "7500BB199B4270EFE05340588D0AFCAD"; + string paymentInformationLegacyTokenId = "AB7C01E66529EA42E05341588E0A22AD"; Ptsv2paymentsPaymentInformationLegacyToken paymentInformationLegacyToken = new Ptsv2paymentsPaymentInformationLegacyToken( Id: paymentInformationLegacyTokenId ); diff --git a/src/Samples/Payments/Payments/IncrementalAuthorization.cs b/src/Samples/Payments/Payments/IncrementalAuthorization.cs index 16e8a6e..0ae7dea 100644 --- a/src/Samples/Payments/Payments/IncrementalAuthorization.cs +++ b/src/Samples/Payments/Payments/IncrementalAuthorization.cs @@ -12,17 +12,9 @@ public class IncrementalAuthorization public static PtsV2IncrementalAuthorizationPatch201Response Run() { string id = AuthorizationForIncrementalAuthorizationFlow.Run().Id; - string clientReferenceInformationPartnerOriginalTransactionId = "12345"; - string clientReferenceInformationPartnerDeveloperId = "12345"; - string clientReferenceInformationPartnerSolutionId = "12345"; - Ptsv2paymentsidClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsidClientReferenceInformationPartner( - OriginalTransactionId: clientReferenceInformationPartnerOriginalTransactionId, - DeveloperId: clientReferenceInformationPartnerDeveloperId, - SolutionId: clientReferenceInformationPartnerSolutionId - ); - + string clientReferenceInformationCode = "TC50171_3"; Ptsv2paymentsidClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidClientReferenceInformation( - Partner: clientReferenceInformationPartner + Code: clientReferenceInformationCode ); bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; @@ -38,7 +30,7 @@ public static PtsV2IncrementalAuthorizationPatch201Response Run() AuthorizationOptions: processingInformationAuthorizationOptions ); - string orderInformationAmountDetailsAdditionalAmount = "100"; + string orderInformationAmountDetailsAdditionalAmount = "22.49"; string orderInformationAmountDetailsCurrency = "USD"; Ptsv2paymentsidOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidOrderInformationAmountDetails( AdditionalAmount: orderInformationAmountDetailsAdditionalAmount, @@ -49,10 +41,12 @@ public static PtsV2IncrementalAuthorizationPatch201Response Run() AmountDetails: orderInformationAmountDetails ); + string merchantInformationTransactionLocalDateTime = "20191002080000"; Ptsv2paymentsidMerchantInformation merchantInformation = new Ptsv2paymentsidMerchantInformation( + TransactionLocalDateTime: merchantInformationTransactionLocalDateTime ); - string travelInformationDuration = "3"; + string travelInformationDuration = "4"; Ptsv2paymentsidTravelInformation travelInformation = new Ptsv2paymentsidTravelInformation( Duration: travelInformationDuration ); diff --git a/src/Samples/Payments/Payments/LevelIIData.cs b/src/Samples/Payments/Payments/LevelIIData.cs index 82f10c4..465ee7d 100644 --- a/src/Samples/Payments/Payments/LevelIIData.cs +++ b/src/Samples/Payments/Payments/LevelIIData.cs @@ -22,10 +22,8 @@ public static PtsV2PaymentsPost201Response Run() { processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator + Capture: processingInformationCapture ); string paymentInformationCardNumber = "4111111111111111"; diff --git a/src/Samples/Payments/Payments/LevelIIIData.cs b/src/Samples/Payments/Payments/LevelIIIData.cs index 8206976..af169e4 100644 --- a/src/Samples/Payments/Payments/LevelIIIData.cs +++ b/src/Samples/Payments/Payments/LevelIIIData.cs @@ -23,11 +23,9 @@ public static PtsV2PaymentsPost201Response Run() processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; string processingInformationPurchaseLevel = "3"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, PurchaseLevel: processingInformationPurchaseLevel ); @@ -77,7 +75,7 @@ public static PtsV2PaymentsPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsProductCode1 = "default"; int orderInformationLineItemsQuantity1 = 10; string orderInformationLineItemsUnitPrice1 = "10.00"; diff --git a/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs b/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs index e6d44a8..17c661f 100644 --- a/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs +++ b/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs @@ -23,7 +23,7 @@ public static PtsV2PaymentsPost201Response Run() processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; + string processingInformationCommerceIndicator = "vbv"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( Capture: processingInformationCapture, CommerceIndicator: processingInformationCommerceIndicator diff --git a/src/Samples/Payments/Payments/PaymentWithFlexTransientToken.cs b/src/Samples/Payments/Payments/PaymentWithFlexToken.cs similarity index 98% rename from src/Samples/Payments/Payments/PaymentWithFlexTransientToken.cs rename to src/Samples/Payments/Payments/PaymentWithFlexToken.cs index c3364b6..5688f8d 100644 --- a/src/Samples/Payments/Payments/PaymentWithFlexTransientToken.cs +++ b/src/Samples/Payments/Payments/PaymentWithFlexToken.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class PaymentWithFlexTransientToken + public class PaymentWithFlexToken { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs b/src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs deleted file mode 100644 index 5dbb48e..0000000 --- a/src/Samples/Payments/Payments/RestaurantCaptureWithGratuity.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class RestaurantCaptureWithGratuity - { - public static PtsV2PaymentsCapturesPost201Response Run() - { - var processPaymentId = RestaurantAuthorization.Run().Id; - string clientReferenceInformationCode = "1234567890"; - string clientReferenceInformationPartnerThirdPartyCertificationNumber = "123456789012"; - Ptsv2paymentsClientReferenceInformationPartner clientReferenceInformationPartner = new Ptsv2paymentsClientReferenceInformationPartner( - ThirdPartyCertificationNumber: clientReferenceInformationPartnerThirdPartyCertificationNumber - ); - - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, - Partner: clientReferenceInformationPartner - ); - - string processingInformationIndustryDataType = "restaurant"; - Ptsv2paymentsidcapturesProcessingInformation processingInformation = new Ptsv2paymentsidcapturesProcessingInformation( - IndustryDataType: processingInformationIndustryDataType - ); - - string orderInformationAmountDetailsTotalAmount = "100"; - string orderInformationAmountDetailsCurrency = "USD"; - string orderInformationAmountDetailsGratuityAmount = "11.50"; - Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency, - GratuityAmount: orderInformationAmountDetailsGratuityAmount - ); - - Ptsv2paymentsidcapturesOrderInformation orderInformation = new Ptsv2paymentsidcapturesOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - var requestObj = new CapturePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new CaptureApi(clientConfig); - - PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs deleted file mode 100644 index f4c3e4c..0000000 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactRead.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SaleUsingEMVTechnologyWithContactRead - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 1; - string pointOfSaleInformationEntryMode = "contact"; - int pointOfSaleInformationTerminalCapability = 4; - string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; - string pointOfSaleInformationEmvCardSequenceNumber = "1"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Tags: pointOfSaleInformationEmvTags, - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs similarity index 97% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs rename to src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs index ec96199..2bc8902 100644 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForAcquirer.cs +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingEMVTechnologyWithContactReadOneForAcquirer + public class SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs similarity index 95% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs rename to src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs index 8739f4d..d50d5f2 100644 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForAcquirer.cs +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingEMVTechnologyWithContactReadTwoForAcquirer + public class SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer { public static PtsV2PaymentsPost201Response Run() { @@ -56,11 +56,11 @@ public static PtsV2PaymentsPost201Response Run() string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - List pointOfSaleInformationCardholderVerificationMethod = new List (); + List pointOfSaleInformationCardholderVerificationMethod = new List(); pointOfSaleInformationCardholderVerificationMethod.Add("pin"); pointOfSaleInformationCardholderVerificationMethod.Add("signature"); - List pointOfSaleInformationTerminalInputCapability = new List (); + List pointOfSaleInformationTerminalInputCapability = new List(); pointOfSaleInformationTerminalInputCapability.Add("contact"); pointOfSaleInformationTerminalInputCapability.Add("contactless"); pointOfSaleInformationTerminalInputCapability.Add("keyed"); diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadForCTV.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs similarity index 98% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadForCTV.cs rename to src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs index 3e61fc6..aa6edd2 100644 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadForCTV.cs +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingEMVTechnologyWithContactReadForCTV + public class SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs deleted file mode 100644 index 968025d..0000000 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessForAcquirer.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SaleUsingEMVTechnologyWithContactlessForAcquirer - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 2; - string pointOfSaleInformationEntryMode = "contactless"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationEmvCardSequenceNumber = "999"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs deleted file mode 100644 index f7d7b45..0000000 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCTV.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SaleUsingEMVTechnologyWithContactlessReadForCTV - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - int pointOfSaleInformationCatLevel = 2; - string pointOfSaleInformationEntryMode = "contactless"; - int pointOfSaleInformationTerminalCapability = 5; - string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; - string pointOfSaleInformationEmvCardSequenceNumber = "1"; - bool pointOfSaleInformationEmvFallback = false; - Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( - Tags: pointOfSaleInformationEmvTags, - CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, - Fallback: pointOfSaleInformationEmvFallback - ); - - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - CatLevel: pointOfSaleInformationCatLevel, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - Emv: pointOfSaleInformationEmv, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs similarity index 95% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs rename to src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs index c8a5c1c..7c2a218 100644 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForAcquirer.cs +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingEMVTechnologyWithContactlessReadForAcquirer + public class SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer { public static PtsV2PaymentsPost201Response Run() { @@ -56,11 +56,11 @@ public static PtsV2PaymentsPost201Response Run() string pointOfSaleInformationTrackData = "%B4111111111111111^TEST/CYBS ^2012121019761100 00868000000?;"; - List pointOfSaleInformationCardholderVerificationMethod = new List (); + List pointOfSaleInformationCardholderVerificationMethod = new List(); pointOfSaleInformationCardholderVerificationMethod.Add("pin"); pointOfSaleInformationCardholderVerificationMethod.Add("signature"); - List pointOfSaleInformationTerminalInputCapability = new List (); + List pointOfSaleInformationTerminalInputCapability = new List(); pointOfSaleInformationTerminalInputCapability.Add("contact"); pointOfSaleInformationTerminalInputCapability.Add("contactless"); pointOfSaleInformationTerminalInputCapability.Add("keyed"); diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessRead.cs b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs similarity index 98% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessRead.cs rename to src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs index a8e6de4..724e1c9 100644 --- a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessRead.cs +++ b/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingEMVTechnologyWithContactlessRead + public class SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedData.cs b/src/Samples/Payments/Payments/SaleUsingKeyedData.cs deleted file mode 100644 index 575aafd..0000000 --- a/src/Samples/Payments/Payments/SaleUsingKeyedData.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SaleUsingKeyedData - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = true; - bool processingInformationAuthorizationOptionsIgnoreCvResult = true; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "keyed"; - int pointOfSaleInformationTerminalCapability = 2; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs similarity index 98% rename from src/Samples/Payments/Payments/SaleUsingKeyedDataForAcquirer.cs rename to src/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs index dcb8ccf..fc47be9 100644 --- a/src/Samples/Payments/Payments/SaleUsingKeyedDataForAcquirer.cs +++ b/src/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingKeyedDataForAcquirer + public class SaleUsingKeyedDataForCardPresentEnabledAcquirer { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataForCTV.cs b/src/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs similarity index 98% rename from src/Samples/Payments/Payments/SaleUsingKeyedDataForCTV.cs rename to src/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs index 8fd53d9..b3d5dea 100644 --- a/src/Samples/Payments/Payments/SaleUsingKeyedDataForCTV.cs +++ b/src/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingKeyedDataForCTV + public class SaleUsingKeyedDataWithVisaPlatformConnect { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs deleted file mode 100644 index a313322..0000000 --- a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCTV.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SaleUsingSwipedTrackDataForCTV - { - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "123456"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = true; - string processingInformationCommerceIndicator = "retail"; - bool processingInformationAuthorizationOptionsPartialAuthIndicator = true; - bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; - bool processingInformationAuthorizationOptionsIgnoreCvResult = false; - Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( - PartialAuthIndicator: processingInformationAuthorizationOptionsPartialAuthIndicator, - IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, - IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult - ); - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator, - AuthorizationOptions: processingInformationAuthorizationOptions - ); - - string orderInformationAmountDetailsTotalAmount = "100.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - string pointOfSaleInformationEntryMode = "swiped"; - int pointOfSaleInformationTerminalCapability = 2; - string pointOfSaleInformationTrackData = "%B38000000000006^TEST/CYBS ^2012121019761100 00868000000?;38000000000006=20121210197611868000?"; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability, - TrackData: pointOfSaleInformationTrackData - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForAcquirer.cs b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs similarity index 97% rename from src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForAcquirer.cs rename to src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs index 59e2d2c..1817940 100644 --- a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForAcquirer.cs +++ b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingSwipedTrackDataForAcquirer + public class SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackData.cs b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs similarity index 98% rename from src/Samples/Payments/Payments/SaleUsingSwipedTrackData.cs rename to src/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs index 3ca5d3a..4ddb307 100644 --- a/src/Samples/Payments/Payments/SaleUsingSwipedTrackData.cs +++ b/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs @@ -7,7 +7,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { - public class SaleUsingSwipedTrackData + public class SaleUsingSwipedTrackDataWithVisaPlatformConnect { public static PtsV2PaymentsPost201Response Run() { diff --git a/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs b/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs index e2b7ad9..eed3d95 100644 --- a/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs +++ b/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs @@ -24,10 +24,8 @@ public static PtsV2PaymentsPost201Response Run() processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator + Capture: processingInformationCapture ); string paymentInformationCardNumber = "4111111111111111"; diff --git a/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs b/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs index b8352f9..21c76f2 100644 --- a/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs +++ b/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs @@ -24,21 +24,17 @@ public static PtsV2PaymentsPost201Response Run() processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator + Capture: processingInformationCapture ); string paymentInformationCardNumber = "4111111111111111"; string paymentInformationCardExpirationMonth = "12"; string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardSecurityCode = "123"; Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - SecurityCode: paymentInformationCardSecurityCode + ExpirationYear: paymentInformationCardExpirationYear ); Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( @@ -55,7 +51,6 @@ public static PtsV2PaymentsPost201Response Run() string orderInformationBillToFirstName = "John"; string orderInformationBillToLastName = "Doe"; string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToAddress2 = "Address 2"; string orderInformationBillToLocality = "san francisco"; string orderInformationBillToAdministrativeArea = "CA"; string orderInformationBillToPostalCode = "94105"; @@ -66,7 +61,6 @@ public static PtsV2PaymentsPost201Response Run() FirstName: orderInformationBillToFirstName, LastName: orderInformationBillToLastName, Address1: orderInformationBillToAddress1, - Address2: orderInformationBillToAddress2, Locality: orderInformationBillToLocality, AdministrativeArea: orderInformationBillToAdministrativeArea, PostalCode: orderInformationBillToPostalCode, diff --git a/src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs b/src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs deleted file mode 100644 index f2ede75..0000000 --- a/src/Samples/Payments/Payments/SimpleAuthorizationRetail.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class SimpleAuthorizationRetail - { - public static bool CaptureTrueForProcessPayment { get; set; } = false; - - public static PtsV2PaymentsPost201Response Run() - { - string clientReferenceInformationCode = "TC50171_8"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - if (CaptureTrueForProcessPayment) - { - processingInformationCapture = true; - } - string processingInformationCommerceIndicator = "retail"; - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator - ); - - string paymentInformationCardNumber = "5555555555554444"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - string paymentInformationCardType = "002"; - string paymentInformationCardSecurityCode = "123"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear, - Type: paymentInformationCardType, - SecurityCode: paymentInformationCardSecurityCode - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = "108.00"; - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - string orderInformationBillToFirstName = "John"; - string orderInformationBillToLastName = "Doe"; - string orderInformationBillToAddress1 = "1 Market St"; - string orderInformationBillToAddress2 = "Address 2"; - string orderInformationBillToLocality = "san francisco"; - string orderInformationBillToAdministrativeArea = "CA"; - string orderInformationBillToPostalCode = "94105"; - string orderInformationBillToCountry = "US"; - string orderInformationBillToEmail = "test@cybs.com"; - string orderInformationBillToPhoneNumber = "4158880000"; - Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( - FirstName: orderInformationBillToFirstName, - LastName: orderInformationBillToLastName, - Address1: orderInformationBillToAddress1, - Address2: orderInformationBillToAddress2, - Locality: orderInformationBillToLocality, - AdministrativeArea: orderInformationBillToAdministrativeArea, - PostalCode: orderInformationBillToPostalCode, - Country: orderInformationBillToCountry, - Email: orderInformationBillToEmail, - PhoneNumber: orderInformationBillToPhoneNumber - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails, - BillTo: orderInformationBillTo - ); - - string pointOfSaleInformationTerminalId = "001"; - string pointOfSaleInformationEntryMode = "keyed"; - int pointOfSaleInformationTerminalCapability = 2; - Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( - TerminalId: pointOfSaleInformationTerminalId, - EntryMode: pointOfSaleInformationEntryMode, - TerminalCapability: pointOfSaleInformationTerminalCapability - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation, - PointOfSaleInformation: pointOfSaleInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs b/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs index b2912b0..cb9b3c7 100644 --- a/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs +++ b/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs @@ -23,10 +23,8 @@ public static PtsV2PaymentsPost201Response Run() processingInformationCapture = true; } - string processingInformationCommerceIndicator = "internet"; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture, - CommerceIndicator: processingInformationCommerceIndicator + Capture: processingInformationCapture ); string paymentInformationCardNumber = "5555555555554444"; diff --git a/src/Samples/Payments/Reversal/TimeoutReversal.cs b/src/Samples/Payments/Reversal/TimeoutReversal.cs index e784f9d..caa7c84 100644 --- a/src/Samples/Payments/Reversal/TimeoutReversal.cs +++ b/src/Samples/Payments/Reversal/TimeoutReversal.cs @@ -12,10 +12,8 @@ public class TimeoutReversal public static PtsV2PaymentsReversalsPost201Response Run() { AuthorizationForTimeoutReversalFlow.Run(); - var clientReferenceInformationTransactionId = "231465978312"; - string clientReferenceInformationCode = "TC50171_3"; + var clientReferenceInformationTransactionId = SampleCode.TimeoutReversalTransactionId; Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, TransactionId: clientReferenceInformationTransactionId ); diff --git a/src/Samples/Payments/Void/TimeoutVoid.cs b/src/Samples/Payments/Void/TimeoutVoid.cs index 0f2dd6a..30199e1 100644 --- a/src/Samples/Payments/Void/TimeoutVoid.cs +++ b/src/Samples/Payments/Void/TimeoutVoid.cs @@ -12,10 +12,8 @@ public class TimeoutVoid public static PtsV2PaymentsVoidsPost201Response Run() { AuthorizationCaptureForTimeoutVoidFlow.Run(); - string clientReferenceInformationCode = "TC50171_3"; - string clientReferenceInformationTransactionId = "879564132897"; + string clientReferenceInformationTransactionId = SampleCode.TimeoutVoidTransactionId; Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode, TransactionId: clientReferenceInformationTransactionId ); diff --git a/src/Samples/Reporting/ReportDownloads/DownloadReport.cs b/src/Samples/Reporting/ReportDownloads/DownloadReport.cs index dbb52a0..8f87c70 100644 --- a/src/Samples/Reporting/ReportDownloads/DownloadReport.cs +++ b/src/Samples/Reporting/ReportDownloads/DownloadReport.cs @@ -17,7 +17,7 @@ public static void Run() const string fileName = "DownloadedReport.csv"; const string downloadFilePath = @".\Resource\" + fileName; string organizationId = "testrest"; - var reportDate = DateTime.ParseExact("2018-09-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var reportDate = DateTime.ParseExact("2020-05-03", "yyyy-MM-dd", CultureInfo.InvariantCulture); string reportName = "testrest_subcription_v2989"; try diff --git a/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs b/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs index 8acba84..6707afe 100644 --- a/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs +++ b/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs @@ -13,7 +13,7 @@ public static void Run() { string reportDefinitionName = "TransactionRequestClass"; - List reportFields = new List (); + List reportFields = new List(); reportFields.Add("Request.RequestID"); reportFields.Add("Request.TransactionDate"); reportFields.Add("Request.MerchantID"); diff --git a/src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs b/src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs index 5ecec96..7720fa3 100644 --- a/src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs +++ b/src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs @@ -19,14 +19,14 @@ public static void Run() } string reportName = ReportNameToDelete; - + string organizationId = null; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new ReportSubscriptionsApi(clientConfig); - apiInstance.DeleteSubscription(reportName); + apiInstance.DeleteSubscription(reportName, organizationId); ReportNameToDelete = null; } catch (Exception e) diff --git a/src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs b/src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs index 3b4a34b..d61366f 100644 --- a/src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs +++ b/src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs @@ -11,13 +11,14 @@ public class GetAllSubscriptions { public static ReportingV3ReportSubscriptionsGet200Response Run() { + string organizationId = null; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new ReportSubscriptionsApi(clientConfig); - ReportingV3ReportSubscriptionsGet200Response result = apiInstance.GetAllSubscriptions(); + ReportingV3ReportSubscriptionsGet200Response result = apiInstance.GetAllSubscriptions(organizationId); Console.WriteLine(result); return result; } diff --git a/src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs b/src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs index ba61be2..ec7aa76 100644 --- a/src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs +++ b/src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs @@ -12,14 +12,14 @@ public class GetSubscriptionForReportName public static ReportingV3ReportSubscriptionsGet200ResponseSubscriptions Run() { var reportName = "testrest_subcription_v1"; - + string organizationId = null; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new ReportSubscriptionsApi(clientConfig); - ReportingV3ReportSubscriptionsGet200ResponseSubscriptions result = apiInstance.GetSubscription(reportName); + ReportingV3ReportSubscriptionsGet200ResponseSubscriptions result = apiInstance.GetSubscription(reportName, organizationId); Console.WriteLine(result); return result; } diff --git a/src/Samples/Reporting/Reports/CreateAdhocReport.cs b/src/Samples/Reporting/Reports/CreateAdhocReport.cs index 8e87808..cbe7f92 100644 --- a/src/Samples/Reporting/Reports/CreateAdhocReport.cs +++ b/src/Samples/Reporting/Reports/CreateAdhocReport.cs @@ -13,15 +13,15 @@ public static void Run() { string reportDefinitionName = "TransactionRequestClass"; - List reportFields = new List (); + List reportFields = new List(); reportFields.Add("Request.RequestID"); reportFields.Add("Request.TransactionDate"); reportFields.Add("Request.MerchantID"); string reportMimeType = "application/xml"; string reportName = "testrest_v2"; string timezone = "GMT"; - var reportStartTime = DateTime.Parse("2020-03-01T12:30:00.000+05:30"); - var reportEndTime = DateTime.Parse("2020-03-02T12:30:00.000+05:30"); + var reportStartTime = DateTime.Parse("2020-03-01T17:30:00.000+05:30"); + var reportEndTime = DateTime.Parse("2020-03-02T17:30:00.000+05:30"); bool reportPreferencesSignedAmounts = true; string reportPreferencesFieldNameConvention = "SOAPI"; Reportingv3reportsReportPreferences reportPreferences = new Reportingv3reportsReportPreferences( diff --git a/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs b/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs index cd3cbe5..56eb20a 100644 --- a/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs +++ b/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs @@ -62,7 +62,7 @@ public static RiskV1DecisionsPost201Response Run() BillTo: orderInformationBillTo ); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation @@ -74,7 +74,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs index fe724d6..937cdc7 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs @@ -65,7 +65,7 @@ public static RiskV1DecisionsPost201Response Run() string buyerInformationHashedPassword = ""; string buyerInformationDateOfBirth = "19980505"; - List buyerInformationPersonalIdentification = new List (); + List buyerInformationPersonalIdentification = new List(); string buyerInformationPersonalIdentificationType1 = "CPF"; string buyerInformationPersonalIdentificationId1 = "1a23apwe98"; buyerInformationPersonalIdentification.Add(new Ptsv2paymentsBuyerInformationPersonalIdentification( @@ -79,7 +79,7 @@ public static RiskV1DecisionsPost201Response Run() PersonalIdentification: buyerInformationPersonalIdentification ); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation, @@ -92,7 +92,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs b/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs index fa94d89..e1e4b63 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs @@ -71,7 +71,7 @@ public static RiskV1DecisionsPost201Response Run() Profile: riskInformationProfile ); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation, @@ -84,7 +84,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs index f4444f5..af0e932 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs @@ -75,7 +75,7 @@ public static RiskV1DecisionsPost201Response Run() UserAgent: deviceInformationUserAgent ); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation, @@ -88,7 +88,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs index 5ee9d98..cb65ea5 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs @@ -63,7 +63,7 @@ public static RiskV1DecisionsPost201Response Run() ); - List merchantDefinedInformation = new List (); + List merchantDefinedInformation = new List(); string merchantDefinedInformationKey1 = "1"; string merchantDefinedInformationValue1 = "Test"; merchantDefinedInformation.Add(new Riskv1decisionsMerchantDefinedInformation( @@ -78,7 +78,7 @@ public static RiskV1DecisionsPost201Response Run() Value: merchantDefinedInformationValue2 )); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation, @@ -91,7 +91,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs b/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs index a5644ba..a5c6773 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs @@ -84,7 +84,7 @@ public static RiskV1DecisionsPost201Response Run() BillTo: orderInformationBillTo ); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation @@ -96,7 +96,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs index 328de82..04f9580 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs @@ -84,7 +84,7 @@ public static RiskV1DecisionsPost201Response Run() BillTo: orderInformationBillTo ); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation @@ -96,7 +96,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs b/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs index 9aafcbe..e815528 100644 --- a/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs +++ b/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs @@ -66,7 +66,7 @@ public static RiskV1DecisionsPost201Response Run() string travelInformationDepartureTime = "2011-03-20 11:30pm GMT"; string travelInformationJourneyType = "One way"; - List travelInformationLegs = new List (); + List travelInformationLegs = new List(); string travelInformationLegsOrigination1 = "SFO"; string travelInformationLegsDestination1 = "JFK"; travelInformationLegs.Add(new Riskv1decisionsTravelInformationLegs( @@ -88,7 +88,7 @@ public static RiskV1DecisionsPost201Response Run() Legs: travelInformationLegs ); - var requestObj = new CreateDecisionManagerCaseRequest( + var requestObj = new CreateBundledDecisionManagerCaseRequest( ClientReferenceInformation: clientReferenceInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation, @@ -101,7 +101,7 @@ public static RiskV1DecisionsPost201Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new DecisionManagerApi(clientConfig); - RiskV1DecisionsPost201Response result = apiInstance.CreateDecisionManagerCase(requestObj); + RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); return result; } diff --git a/src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs b/src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs index 81834ca..e125f72 100644 --- a/src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs +++ b/src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs @@ -15,7 +15,7 @@ public static RiskV1UpdatePost201Response Run() string riskInformationMarkingDetailsNotes = "Adding this transaction as suspect"; string riskInformationMarkingDetailsReason = "suspected"; - List riskInformationMarkingDetailsFieldsIncluded = new List (); + List riskInformationMarkingDetailsFieldsIncluded = new List(); riskInformationMarkingDetailsFieldsIncluded.Add("customer_email"); riskInformationMarkingDetailsFieldsIncluded.Add("customer_phone"); string riskInformationMarkingDetailsAction = "add"; diff --git a/src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs b/src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs index ffb8c9d..8b9f4f3 100644 --- a/src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs +++ b/src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs @@ -34,7 +34,7 @@ public static RiskV1AddressVerificationsPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "996633"; diff --git a/src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs b/src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs index e4edcf7..a6182ad 100644 --- a/src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs +++ b/src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs @@ -38,7 +38,7 @@ public static RiskV1AddressVerificationsPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "9966223"; diff --git a/src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs b/src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs index 91571f3..579b91d 100644 --- a/src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs +++ b/src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs @@ -47,7 +47,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "19.00"; orderInformationLineItems.Add(new Riskv1exportcomplianceinquiriesOrderInformationLineItems( UnitPrice: orderInformationLineItemsUnitPrice1 @@ -75,7 +75,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List exportComplianceInformationSanctionLists = new List (); + List exportComplianceInformationSanctionLists = new List(); exportComplianceInformationSanctionLists.Add("abc"); exportComplianceInformationSanctionLists.Add("acc"); exportComplianceInformationSanctionLists.Add("bac"); diff --git a/src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs b/src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs index faf774f..351d13c 100644 --- a/src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs +++ b/src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs @@ -53,7 +53,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "123456"; diff --git a/src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs b/src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs index a3acdb4..36a358d 100644 --- a/src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs +++ b/src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs @@ -53,7 +53,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "123456"; @@ -84,7 +84,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List exportComplianceInformationSanctionLists = new List (); + List exportComplianceInformationSanctionLists = new List(); exportComplianceInformationSanctionLists.Add("Bureau Of Industry and Security"); Riskv1exportcomplianceinquiriesExportComplianceInformation exportComplianceInformation = new Riskv1exportcomplianceinquiriesExportComplianceInformation( AddressOperator: exportComplianceInformationAddressOperator, diff --git a/src/Samples/RiskManagement/Verification/MultipleLineItems.cs b/src/Samples/RiskManagement/Verification/MultipleLineItems.cs index 3c38e0a..ae4efd3 100644 --- a/src/Samples/RiskManagement/Verification/MultipleLineItems.cs +++ b/src/Samples/RiskManagement/Verification/MultipleLineItems.cs @@ -57,7 +57,7 @@ public static RiskV1AddressVerificationsPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "9966223"; diff --git a/src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs b/src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs index 51da666..9ac7f45 100644 --- a/src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs +++ b/src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs @@ -59,7 +59,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "610009"; @@ -102,7 +102,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List exportComplianceInformationSanctionLists = new List (); + List exportComplianceInformationSanctionLists = new List(); exportComplianceInformationSanctionLists.Add("Bureau Of Industry and Security"); exportComplianceInformationSanctionLists.Add("DOS_DTC"); exportComplianceInformationSanctionLists.Add("AUSTRALIA"); diff --git a/src/Samples/RiskManagement/Verification/NoCompanyName.cs b/src/Samples/RiskManagement/Verification/NoCompanyName.cs index 0f85a02..c2105ef 100644 --- a/src/Samples/RiskManagement/Verification/NoCompanyName.cs +++ b/src/Samples/RiskManagement/Verification/NoCompanyName.cs @@ -47,7 +47,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "19.00"; orderInformationLineItems.Add(new Riskv1exportcomplianceinquiriesOrderInformationLineItems( UnitPrice: orderInformationLineItemsUnitPrice1 diff --git a/src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs b/src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs index daff8ea..8e7f485 100644 --- a/src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs +++ b/src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs @@ -57,7 +57,7 @@ public static RiskV1AddressVerificationsPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "9966223"; diff --git a/src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs b/src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs index 01779cc..0c0d50f 100644 --- a/src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs +++ b/src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs @@ -57,7 +57,7 @@ public static RiskV1AddressVerificationsPost201Response Run() ); - List orderInformationLineItems = new List (); + List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "120.50"; int orderInformationLineItemsQuantity1 = 3; string orderInformationLineItemsProductSKU1 = "9966223"; diff --git a/src/Samples/SecureFileShare/GetListOfFiles.cs b/src/Samples/SecureFileShare/GetListOfFiles.cs index acfe6ae..1689b39 100644 --- a/src/Samples/SecureFileShare/GetListOfFiles.cs +++ b/src/Samples/SecureFileShare/GetListOfFiles.cs @@ -11,16 +11,17 @@ public class GetListOfFiles { public static V1FileDetailsGet200Response Run() { - var startDate = DateTime.ParseExact("2020-01-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); - var endDate = DateTime.ParseExact("2020-01-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var startDate = DateTime.ParseExact("2020-03-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var endDate = DateTime.ParseExact("2020-03-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); string organizationId = "testrest"; + string name = null; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new SecureFileShareApi(clientConfig); - V1FileDetailsGet200Response result = apiInstance.GetFileDetail(startDate, endDate, organizationId); + V1FileDetailsGet200Response result = apiInstance.GetFileDetail(startDate, endDate, organizationId, name); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/Customer/CreateCustomer.cs b/src/Samples/TokenManagement/Customer/CreateCustomer.cs new file mode 100644 index 0000000..20e25aa --- /dev/null +++ b/src/Samples/TokenManagement/Customer/CreateCustomer.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateCustomer + { + public static TmsV2CustomersResponse Run() + { + string buyerInformationMerchantCustomerID = "Your customer identifier"; + string buyerInformationEmail = "test@cybs.com"; + Tmsv2customersBuyerInformation buyerInformation = new Tmsv2customersBuyerInformation( + MerchantCustomerID: buyerInformationMerchantCustomerID, + Email: buyerInformationEmail + ); + + string clientReferenceInformationCode = "TC50171_3"; + Tmsv2customersClientReferenceInformation clientReferenceInformation = new Tmsv2customersClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List merchantDefinedInformation = new List(); + string merchantDefinedInformationName1 = "data1"; + string merchantDefinedInformationValue1 = "Your customer data"; + merchantDefinedInformation.Add(new Tmsv2customersMerchantDefinedInformation( + Name: merchantDefinedInformationName1, + Value: merchantDefinedInformationValue1 + )); + + var requestObj = new PostCustomerRequest( + BuyerInformation: buyerInformation, + ClientReferenceInformation: clientReferenceInformation, + MerchantDefinedInformation: merchantDefinedInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerApi(clientConfig); + TmsV2CustomersResponse result = apiInstance.PostCustomer(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/Customer/DeleteCustomer.cs b/src/Samples/TokenManagement/Customer/DeleteCustomer.cs new file mode 100644 index 0000000..3bdb29f --- /dev/null +++ b/src/Samples/TokenManagement/Customer/DeleteCustomer.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class DeleteCustomer + { + public static void Run() + { + string customerTokenId = CreateCustomer.Run().Id; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerApi(clientConfig); + apiInstance.DeleteCustomer(customerTokenId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/src/Samples/TokenManagement/Customer/RetrieveCustomer.cs b/src/Samples/TokenManagement/Customer/RetrieveCustomer.cs new file mode 100644 index 0000000..ed0e321 --- /dev/null +++ b/src/Samples/TokenManagement/Customer/RetrieveCustomer.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class RetrieveCustomer + { + public static TmsV2CustomersResponse Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerApi(clientConfig); + TmsV2CustomersResponse result = apiInstance.GetCustomer(customerTokenId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/Customer/UpdateCustomer.cs b/src/Samples/TokenManagement/Customer/UpdateCustomer.cs new file mode 100644 index 0000000..1254cd6 --- /dev/null +++ b/src/Samples/TokenManagement/Customer/UpdateCustomer.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class UpdateCustomer + { + public static TmsV2CustomersResponse Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string buyerInformationMerchantCustomerID = "Your customer identifier"; + string buyerInformationEmail = "test@cybs.com"; + Tmsv2customersBuyerInformation buyerInformation = new Tmsv2customersBuyerInformation( + MerchantCustomerID: buyerInformationMerchantCustomerID, + Email: buyerInformationEmail + ); + + string clientReferenceInformationCode = "TC50171_3"; + Tmsv2customersClientReferenceInformation clientReferenceInformation = new Tmsv2customersClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List merchantDefinedInformation = new List(); + string merchantDefinedInformationName1 = "data1"; + string merchantDefinedInformationValue1 = "Your customer data"; + merchantDefinedInformation.Add(new Tmsv2customersMerchantDefinedInformation( + Name: merchantDefinedInformationName1, + Value: merchantDefinedInformationValue1 + )); + + var requestObj = new PatchCustomerRequest( + BuyerInformation: buyerInformation, + ClientReferenceInformation: clientReferenceInformation, + MerchantDefinedInformation: merchantDefinedInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerApi(clientConfig); + TmsV2CustomersResponse result = apiInstance.PatchCustomer(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs b/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs new file mode 100644 index 0000000..dd5907a --- /dev/null +++ b/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class UpdateCustomersDefaultPaymentInstrument + { + public static TmsV2CustomersResponse Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string defaultPaymentInstrumentId = "AB6A54B982A6FCB6E05341588E0A3935"; + Tmsv2customersDefaultPaymentInstrument defaultPaymentInstrument = new Tmsv2customersDefaultPaymentInstrument( + Id: defaultPaymentInstrumentId + ); + + var requestObj = new PatchCustomerRequest( + DefaultPaymentInstrument: defaultPaymentInstrument + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerApi(clientConfig); + TmsV2CustomersResponse result = apiInstance.PatchCustomer(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs b/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs new file mode 100644 index 0000000..4104c89 --- /dev/null +++ b/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class UpdateCustomersDefaultShippingAddress + { + public static TmsV2CustomersResponse Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string defaultShippingAddressId = "AB6A54B97C00FCB6E05341588E0A3935"; + Tmsv2customersDefaultShippingAddress defaultShippingAddress = new Tmsv2customersDefaultShippingAddress( + Id: defaultShippingAddressId + ); + + var requestObj = new PatchCustomerRequest( + DefaultShippingAddress: defaultShippingAddress + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerApi(clientConfig); + TmsV2CustomersResponse result = apiInstance.PatchCustomer(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs new file mode 100644 index 0000000..a72e3f4 --- /dev/null +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateCustomerPaymentInstrumentBankAccount + { + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string bankAccountType = "savings"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBankAccount bankAccount = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBankAccount( + Type: bankAccountType + ); + + string buyerInformationCompanyTaxID = "12345"; + string buyerInformationCurrency = "USD"; + DateTime buyerInformationDateOfBirth = Convert.ToDateTime("2000-12-13"); + + List buyerInformationPersonalIdentification = new List(); + string buyerInformationPersonalIdentificationId1 = "57684432111321"; + string buyerInformationPersonalIdentificationType1 = "driver license"; + string buyerInformationPersonalIdentificationIssuedByAdministrativeArea1 = "CA"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformationIssuedBy buyerInformationPersonalIdentificationIssuedBy1 = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformationIssuedBy( + AdministrativeArea: buyerInformationPersonalIdentificationIssuedByAdministrativeArea1 + ); + + buyerInformationPersonalIdentification.Add(new Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformationPersonalIdentification( + Id: buyerInformationPersonalIdentificationId1, + Type: buyerInformationPersonalIdentificationType1, + IssuedBy: buyerInformationPersonalIdentificationIssuedBy1 + )); + + Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformation buyerInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformation( + CompanyTaxID: buyerInformationCompanyTaxID, + Currency: buyerInformationCurrency, + DateOfBirth: buyerInformationDateOfBirth, + PersonalIdentification: buyerInformationPersonalIdentification + ); + + string billToFirstName = "John"; + string billToLastName = "Doe"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; + string billToCountry = "US"; + string billToEmail = "test@cybs.com"; + string billToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + string processingInformationBankTransferOptionsSeCCode = "WEB"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions processingInformationBankTransferOptions = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions( + SECCode: processingInformationBankTransferOptionsSeCCode + ); + + Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation processingInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation( + BankTransferOptions: processingInformationBankTransferOptions + ); + + string instrumentIdentifierId = "A7A91A2CA872B272E05340588D0A0699"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId + ); + + var requestObj = new PostCustomerPaymentInstrumentRequest( + BankAccount: bankAccount, + BuyerInformation: buyerInformation, + BillTo: billTo, + ProcessingInformation: processingInformation, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentCard.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentCard.cs new file mode 100644 index 0000000..87e0e8b --- /dev/null +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentCard.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateCustomerPaymentInstrumentCard + { + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2031"; + string cardType = "001"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType + ); + + string billToFirstName = "John"; + string billToLastName = "Doe"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; + string billToCountry = "US"; + string billToEmail = "test@cybs.com"; + string billToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + string instrumentIdentifierId = "7010000000016241111"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId + ); + + var requestObj = new PostCustomerPaymentInstrumentRequest( + Card: card, + BillTo: billTo, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs new file mode 100644 index 0000000..722b586 --- /dev/null +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateCustomerPaymentInstrumentPinlessDebit + { + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2031"; + string cardType = "001"; + string cardIssueNumber = "01"; + string cardStartMonth = "01"; + string cardStartYear = "2020"; + string cardUseAs = "pinless debit"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType, + IssueNumber: cardIssueNumber, + StartMonth: cardStartMonth, + StartYear: cardStartYear, + UseAs: cardUseAs + ); + + string billToFirstName = "John"; + string billToLastName = "Doe"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; + string billToCountry = "US"; + string billToEmail = "test@cybs.com"; + string billToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + string instrumentIdentifierId = "7010000000016241111"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId + ); + + var requestObj = new PostCustomerPaymentInstrumentRequest( + Card: card, + BillTo: billTo, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs new file mode 100644 index 0000000..b541d81 --- /dev/null +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class DeleteCustomerPaymentInstrument + { + public static void Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string paymentInstrumentTokenId = CreateCustomerPaymentInstrumentCard.Run().Id; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); + apiInstance.DeleteCustomerPaymentInstrument(customerTokenId, paymentInstrumentTokenId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs new file mode 100644 index 0000000..063bcbb --- /dev/null +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class ListPaymentInstrumentsForCustomer + { + public static PaymentInstrumentListForCustomer Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string profileid = null; + long? offset = (long?)null; + long? limit = (long?)null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); + PaymentInstrumentListForCustomer result = apiInstance.GetCustomerPaymentInstrumentsList(customerTokenId, profileid, offset, limit); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs new file mode 100644 index 0000000..8bf6379 --- /dev/null +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class RetrieveCustomerPaymentInstrument + { + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string paymentInstrumentTokenId = "AB6A54B982A6FCB6E05341588E0A3935"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.GetCustomerPaymentInstrument(customerTokenId, paymentInstrumentTokenId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/CreateShippingAddress.cs b/src/Samples/TokenManagement/CustomerShippingAddress/CreateShippingAddress.cs new file mode 100644 index 0000000..0cbdf0d --- /dev/null +++ b/src/Samples/TokenManagement/CustomerShippingAddress/CreateShippingAddress.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateShippingAddress + { + public static Tmsv2customersEmbeddedDefaultShippingAddress Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string shipToFirstName = "John"; + string shipToLastName = "Doe"; + string shipToCompany = "CyberSource"; + string shipToAddress1 = "1 Market St"; + string shipToLocality = "San Francisco"; + string shipToAdministrativeArea = "CA"; + string shipToPostalCode = "94105"; + string shipToCountry = "US"; + string shipToEmail = "test@cybs.com"; + string shipToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultShippingAddressShipTo shipTo = new Tmsv2customersEmbeddedDefaultShippingAddressShipTo( + FirstName: shipToFirstName, + LastName: shipToLastName, + Company: shipToCompany, + Address1: shipToAddress1, + Locality: shipToLocality, + AdministrativeArea: shipToAdministrativeArea, + PostalCode: shipToPostalCode, + Country: shipToCountry, + Email: shipToEmail, + PhoneNumber: shipToPhoneNumber + ); + + var requestObj = new PostCustomerShippingAddressRequest( + ShipTo: shipTo + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerShippingAddressApi(clientConfig); + Tmsv2customersEmbeddedDefaultShippingAddress result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs b/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs new file mode 100644 index 0000000..111e0bb --- /dev/null +++ b/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class DeleteCustomerShippingAddress + { + public static void Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string shippingAddressTokenId = CreateShippingAddress.Run().Id; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerShippingAddressApi(clientConfig); + apiInstance.DeleteCustomerShippingAddress(customerTokenId, shippingAddressTokenId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs b/src/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs new file mode 100644 index 0000000..9bc0a06 --- /dev/null +++ b/src/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class ListShippingAddressesForCustomer + { + public static ShippingAddressListForCustomer Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string profileid = null; + long? offset = (long?)null; + long? limit = (long?)null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerShippingAddressApi(clientConfig); + ShippingAddressListForCustomer result = apiInstance.GetCustomerShippingAddressesList(customerTokenId, profileid, offset, limit); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs b/src/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs new file mode 100644 index 0000000..f1a97f0 --- /dev/null +++ b/src/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class RetrieveCustomerShippingAddress + { + public static Tmsv2customersEmbeddedDefaultShippingAddress Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + string shippingAddressTokenId = "AB6A54B97C00FCB6E05341588E0A3935"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerShippingAddressApi(clientConfig); + Tmsv2customersEmbeddedDefaultShippingAddress result = apiInstance.GetCustomerShippingAddress(customerTokenId, shippingAddressTokenId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs index 7eac846..71af755 100644 --- a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs @@ -9,17 +9,17 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierBankAccount { - public static TmsV1InstrumentIdentifiersPost200Response Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string bankAccountNumber = "4100"; string bankAccountRoutingNumber = "071923284"; - Tmsv1instrumentidentifiersBankAccount bankAccount = new Tmsv1instrumentidentifiersBankAccount( + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBankAccount bankAccount = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBankAccount( Number: bankAccountNumber, RoutingNumber: bankAccountRoutingNumber ); - var requestObj = new CreateInstrumentIdentifierRequest( + var requestObj = new PostInstrumentIdentifierRequest( BankAccount: bankAccount ); @@ -29,7 +29,7 @@ public static TmsV1InstrumentIdentifiersPost200Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsV1InstrumentIdentifiersPost200Response result = apiInstance.CreateInstrumentIdentifier(profileid, requestObj); + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs index c903279..63777dc 100644 --- a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs @@ -9,15 +9,15 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCard { - public static TmsV1InstrumentIdentifiersPost200Response Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string cardNumber = "411111111111111"; - Tmsv1instrumentidentifiersCard card = new Tmsv1instrumentidentifiersCard( + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( Number: cardNumber ); - var requestObj = new CreateInstrumentIdentifierRequest( + var requestObj = new PostInstrumentIdentifierRequest( Card: card ); @@ -27,7 +27,7 @@ public static TmsV1InstrumentIdentifiersPost200Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsV1InstrumentIdentifiersPost200Response result = apiInstance.CreateInstrumentIdentifier(profileid, requestObj); + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs index b79eba0..a9b6132 100644 --- a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs @@ -9,37 +9,35 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCardEnrollForNetworkToken { - public static TmsV1InstrumentIdentifiersPost200Response Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string type = "enrollable card"; - string cardNumber = "4622943127013705"; + string cardNumber = "4111111111111111"; string cardExpirationMonth = "12"; - string cardExpirationYear = "2022"; - string cardSecurityCode = "838"; - Tmsv1instrumentidentifiersCard card = new Tmsv1instrumentidentifiersCard( + string cardExpirationYear = "2031"; + string cardSecurityCode = "123"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( Number: cardNumber, ExpirationMonth: cardExpirationMonth, ExpirationYear: cardExpirationYear, SecurityCode: cardSecurityCode ); - string billToAddress1 = "8310 Capital of Texas Highway North"; - string billToAddress2 = "Bluffstone Drive"; - string billToLocality = "Austin"; - string billToAdministrativeArea = "TX"; - string billToPostalCode = "78731"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; string billToCountry = "US"; - Tmsv1instrumentidentifiersBillTo billTo = new Tmsv1instrumentidentifiersBillTo( + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo( Address1: billToAddress1, - Address2: billToAddress2, Locality: billToLocality, AdministrativeArea: billToAdministrativeArea, PostalCode: billToPostalCode, Country: billToCountry ); - var requestObj = new CreateInstrumentIdentifierRequest( + var requestObj = new PostInstrumentIdentifierRequest( Type: type, Card: card, BillTo: billTo @@ -51,7 +49,7 @@ public static TmsV1InstrumentIdentifiersPost200Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsV1InstrumentIdentifiersPost200Response result = apiInstance.CreateInstrumentIdentifier(profileid, requestObj); + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs b/src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs index 3d585c1..c85547a 100644 --- a/src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs @@ -19,7 +19,7 @@ public static void Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - apiInstance.DeleteInstrumentIdentifier(profileid, tokenId); + apiInstance.DeleteInstrumentIdentifier(tokenId, profileid); } catch (Exception e) { diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveAllPaymentInstruments.cs b/src/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs similarity index 65% rename from src/Samples/TokenManagement/InstrumentIdentifier/RetrieveAllPaymentInstruments.cs rename to src/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs index addc9da..5d5113f 100644 --- a/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveAllPaymentInstruments.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs @@ -7,13 +7,12 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { - public class RetrieveAllPaymentInstruments + public class ListPaymentInstrumentsForInstrumentIdentifier { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200Response Run() + public static PaymentInstrumentListForCustomer Run() { - var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = "7010000000016241111"; // CreateInstrumentIdentifierCard.Run().Id; - + string instrumentIdentifierTokenId = "7010000000016241111"; + string profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; long? offset = (long?)null; long? limit = (long?)null; try @@ -22,7 +21,7 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200Response Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200Response result = apiInstance.GetAllPaymentInstruments(profileid, tokenId, offset, limit); + PaymentInstrumentListForCustomer result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, offset, limit); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs b/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs index 66f4fb3..d394e2e 100644 --- a/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs +++ b/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs @@ -9,17 +9,17 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveInstrumentIdentifier { - public static TmsV1InstrumentIdentifiersPost200Response Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreateInstrumentIdentifierCard.Run().Id; + var tokenId = "7010000000016241111"; try { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsV1InstrumentIdentifiersPost200Response result = apiInstance.GetInstrumentIdentifier(profileid, tokenId); + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.GetInstrumentIdentifier(tokenId, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs b/src/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs new file mode 100644 index 0000000..cefb8a6 --- /dev/null +++ b/src/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class UpdateInstrumentIdentifierPreviousTransactionId + { + public static void Run() + { + string instrumentIdentifierTokenId = "7010000000016241111"; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId = "123456789012345"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction( + PreviousTransactionId: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId + ); + + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiator( + MerchantInitiatedTransaction: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction + ); + + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptions( + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformation processingInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformation( + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + var requestObj = new PatchInstrumentIdentifierRequest( + ProcessingInformation: processingInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InstrumentIdentifierApi(clientConfig); + apiInstance.PatchInstrumentIdentifier(instrumentIdentifierTokenId, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs index a98055e..1f8ad73 100644 --- a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs @@ -9,34 +9,34 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentBankAccount { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string bankAccountType = "savings"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBankAccount bankAccount = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBankAccount( + Tmsv2customersEmbeddedDefaultPaymentInstrumentBankAccount bankAccount = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBankAccount( Type: bankAccountType ); string buyerInformationCompanyTaxID = "12345"; string buyerInformationCurrency = "USD"; - string buyerInformationDateOfBirth = "2000-12-13"; + DateTime buyerInformationDateOfBirth = Convert.ToDateTime("2000-12-13"); - List buyerInformationPersonalIdentification = new List (); + List buyerInformationPersonalIdentification = new List(); string buyerInformationPersonalIdentificationId1 = "57684432111321"; string buyerInformationPersonalIdentificationType1 = "driver license"; string buyerInformationPersonalIdentificationIssuedByAdministrativeArea1 = "CA"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformationIssuedBy buyerInformationPersonalIdentificationIssuedBy1 = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformationIssuedBy( + Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformationIssuedBy buyerInformationPersonalIdentificationIssuedBy1 = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformationIssuedBy( AdministrativeArea: buyerInformationPersonalIdentificationIssuedByAdministrativeArea1 ); - buyerInformationPersonalIdentification.Add(new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformationPersonalIdentification( + buyerInformationPersonalIdentification.Add(new Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformationPersonalIdentification( Id: buyerInformationPersonalIdentificationId1, Type: buyerInformationPersonalIdentificationType1, IssuedBy: buyerInformationPersonalIdentificationIssuedBy1 )); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( + Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformation buyerInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBuyerInformation( CompanyTaxID: buyerInformationCompanyTaxID, Currency: buyerInformationCurrency, DateOfBirth: buyerInformationDateOfBirth, @@ -44,22 +44,20 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded ); string billToFirstName = "John"; - string billToLastName = "Smith"; - string billToCompany = "Cybersource"; - string billToAddress1 = "8310 Capital of Texas Highwas North"; - string billToAddress2 = "Bluffstone Drive"; - string billToLocality = "Austin"; - string billToAdministrativeArea = "TX"; - string billToPostalCode = "78731"; + string billToLastName = "Doe"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; string billToCountry = "US"; - string billToEmail = "john.smith@test.com"; - string billToPhoneNumber = "+44 2890447951"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + string billToEmail = "test@cybs.com"; + string billToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( FirstName: billToFirstName, LastName: billToLastName, Company: billToCompany, Address1: billToAddress1, - Address2: billToAddress2, Locality: billToLocality, AdministrativeArea: billToAdministrativeArea, PostalCode: billToPostalCode, @@ -68,43 +66,25 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded PhoneNumber: billToPhoneNumber ); - bool processingInformationBillPaymentProgramEnabled = true; string processingInformationBankTransferOptionsSeCCode = "WEB"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformationBankTransferOptions processingInformationBankTransferOptions = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformationBankTransferOptions( + Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions processingInformationBankTransferOptions = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions( SECCode: processingInformationBankTransferOptionsSeCCode ); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( - BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled, + Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation processingInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation( BankTransferOptions: processingInformationBankTransferOptions ); - string merchantInformationMerchantDescriptorAlternateName = "Branch Name"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformationMerchantDescriptor merchantInformationMerchantDescriptor = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformationMerchantDescriptor( - AlternateName: merchantInformationMerchantDescriptorAlternateName + string instrumentIdentifierId = "A7A91A2CA872B272E05340588D0A0699"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId ); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformation merchantInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedMerchantInformation( - MerchantDescriptor: merchantInformationMerchantDescriptor - ); - - string instrumentIdentifierBankAccountNumber = "4100"; - string instrumentIdentifierBankAccountRoutingNumber = "071923284"; - Tmsv1instrumentidentifiersBankAccount instrumentIdentifierBankAccount = new Tmsv1instrumentidentifiersBankAccount( - Number: instrumentIdentifierBankAccountNumber, - RoutingNumber: instrumentIdentifierBankAccountRoutingNumber - ); - - Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( - BankAccount: instrumentIdentifierBankAccount - ); - - var requestObj = new CreatePaymentInstrumentRequest( + var requestObj = new PostPaymentInstrumentRequest( BankAccount: bankAccount, BuyerInformation: buyerInformation, BillTo: billTo, ProcessingInformation: processingInformation, - MerchantInformation: merchantInformation, InstrumentIdentifier: instrumentIdentifier ); @@ -114,7 +94,7 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs index 9df316a..f13cce7 100644 --- a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs @@ -9,49 +9,34 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentCard { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - string cardExpirationMonth = "09"; - string cardExpirationYear = "2017"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2031"; string cardType = "visa"; - string cardIssueNumber = "01"; - string cardStartMonth = "01"; - string cardStartYear = "2016"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( + Tmsv2customersEmbeddedDefaultPaymentInstrumentCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentCard( ExpirationMonth: cardExpirationMonth, ExpirationYear: cardExpirationYear, - Type: cardType, - IssueNumber: cardIssueNumber, - StartMonth: cardStartMonth, - StartYear: cardStartYear - ); - - string buyerInformationCompanyTaxID = "12345"; - string buyerInformationCurrency = "USD"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( - CompanyTaxID: buyerInformationCompanyTaxID, - Currency: buyerInformationCurrency + Type: cardType ); string billToFirstName = "John"; - string billToLastName = "Smith"; - string billToCompany = "Cybersource"; - string billToAddress1 = "8310 Capital of Texas Highwas North"; - string billToAddress2 = "Bluffstone Drive"; - string billToLocality = "Austin"; - string billToAdministrativeArea = "TX"; - string billToPostalCode = "78731"; + string billToLastName = "Doe"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; string billToCountry = "US"; - string billToEmail = "john.smith@test.com"; - string billToPhoneNumber = "+44 2890447951"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + string billToEmail = "test@cybs.com"; + string billToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( FirstName: billToFirstName, LastName: billToLastName, Company: billToCompany, Address1: billToAddress1, - Address2: billToAddress2, Locality: billToLocality, AdministrativeArea: billToAdministrativeArea, PostalCode: billToPostalCode, @@ -60,25 +45,15 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded PhoneNumber: billToPhoneNumber ); - bool processingInformationBillPaymentProgramEnabled = true; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( - BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled - ); - - string instrumentIdentifierCardNumber = "411111111111112"; - TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( - Number: instrumentIdentifierCardNumber - ); + string instrumentIdentifierId = "7010000000016241111"; - Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( - Card: instrumentIdentifierCard + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId ); - var requestObj = new CreatePaymentInstrumentRequest( + var requestObj = new PostPaymentInstrumentRequest( Card: card, - BuyerInformation: buyerInformation, BillTo: billTo, - ProcessingInformation: processingInformation, InstrumentIdentifier: instrumentIdentifier ); @@ -88,7 +63,7 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs deleted file mode 100644 index 3b957dd..0000000 --- a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardEnrollForNetworkToken.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement -{ - public class CreatePaymentInstrumentCardEnrollForNetworkToken - { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() - { - var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - - string cardExpirationMonth = "09"; - string cardExpirationYear = "2017"; - string cardType = "visa"; - string cardIssueNumber = "01"; - string cardStartMonth = "01"; - string cardStartYear = "2016"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( - ExpirationMonth: cardExpirationMonth, - ExpirationYear: cardExpirationYear, - Type: cardType, - IssueNumber: cardIssueNumber, - StartMonth: cardStartMonth, - StartYear: cardStartYear - ); - - string buyerInformationCompanyTaxID = "12345"; - string buyerInformationCurrency = "USD"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( - CompanyTaxID: buyerInformationCompanyTaxID, - Currency: buyerInformationCurrency - ); - - string billToFirstName = "John"; - string billToLastName = "Smith"; - string billToCompany = "Cybersource"; - string billToAddress1 = "8310 Capital of Texas Highwas North"; - string billToAddress2 = "Bluffstone Drive"; - string billToLocality = "Austin"; - string billToAdministrativeArea = "TX"; - string billToPostalCode = "78731"; - string billToCountry = "US"; - string billToEmail = "john.smith@test.com"; - string billToPhoneNumber = "+44 2890447951"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( - FirstName: billToFirstName, - LastName: billToLastName, - Company: billToCompany, - Address1: billToAddress1, - Address2: billToAddress2, - Locality: billToLocality, - AdministrativeArea: billToAdministrativeArea, - PostalCode: billToPostalCode, - Country: billToCountry, - Email: billToEmail, - PhoneNumber: billToPhoneNumber - ); - - bool processingInformationBillPaymentProgramEnabled = true; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( - BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled - ); - - string instrumentIdentifierCardNumber = "4622943127013705"; - TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( - Number: instrumentIdentifierCardNumber - ); - - Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( - Card: instrumentIdentifierCard - ); - - var requestObj = new CreatePaymentInstrumentRequest( - Card: card, - BuyerInformation: buyerInformation, - BillTo: billTo, - ProcessingInformation: processingInformation, - InstrumentIdentifier: instrumentIdentifier - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentInstrumentApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs deleted file mode 100644 index 3930c22..0000000 --- a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCardWithInstrumentIdentifierId.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement -{ - public class CreatePaymentInstrumentCardWithInstrumentIdentifierId - { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() - { - var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - - string cardExpirationMonth = "09"; - string cardExpirationYear = "2017"; - string cardType = "visa"; - string cardIssueNumber = "01"; - string cardStartMonth = "01"; - string cardStartYear = "2016"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( - ExpirationMonth: cardExpirationMonth, - ExpirationYear: cardExpirationYear, - Type: cardType, - IssueNumber: cardIssueNumber, - StartMonth: cardStartMonth, - StartYear: cardStartYear - ); - - string buyerInformationCompanyTaxID = "12345"; - string buyerInformationCurrency = "USD"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( - CompanyTaxID: buyerInformationCompanyTaxID, - Currency: buyerInformationCurrency - ); - - string billToFirstName = "John"; - string billToLastName = "Smith"; - string billToCompany = "Cybersource"; - string billToAddress1 = "8310 Capital of Texas Highwas North"; - string billToAddress2 = "Bluffstone Drive"; - string billToLocality = "Austin"; - string billToAdministrativeArea = "TX"; - string billToPostalCode = "78731"; - string billToCountry = "US"; - string billToEmail = "john.smith@test.com"; - string billToPhoneNumber = "+44 2890447951"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( - FirstName: billToFirstName, - LastName: billToLastName, - Company: billToCompany, - Address1: billToAddress1, - Address2: billToAddress2, - Locality: billToLocality, - AdministrativeArea: billToAdministrativeArea, - PostalCode: billToPostalCode, - Country: billToCountry, - Email: billToEmail, - PhoneNumber: billToPhoneNumber - ); - - bool processingInformationBillPaymentProgramEnabled = true; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( - BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled - ); - - string instrumentIdentifierId = "7020000000001061135"; - Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( - Id: instrumentIdentifierId - ); - - var requestObj = new CreatePaymentInstrumentRequest( - Card: card, - BuyerInformation: buyerInformation, - BillTo: billTo, - ProcessingInformation: processingInformation, - InstrumentIdentifier: instrumentIdentifier - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentInstrumentApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs index 1e75160..97d6a85 100644 --- a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs +++ b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs @@ -9,18 +9,18 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentPinlessDebit { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - string cardExpirationMonth = "09"; - string cardExpirationYear = "2017"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2031"; string cardType = "visa"; string cardIssueNumber = "01"; string cardStartMonth = "01"; - string cardStartYear = "2016"; + string cardStartYear = "2020"; string cardUseAs = "pinless debit"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( + Tmsv2customersEmbeddedDefaultPaymentInstrumentCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentCard( ExpirationMonth: cardExpirationMonth, ExpirationYear: cardExpirationYear, Type: cardType, @@ -30,30 +30,21 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded UseAs: cardUseAs ); - string buyerInformationCompanyTaxID = "12345"; - string buyerInformationCurrency = "USD"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( - CompanyTaxID: buyerInformationCompanyTaxID, - Currency: buyerInformationCurrency - ); - string billToFirstName = "John"; - string billToLastName = "Smith"; - string billToCompany = "Cybersource"; - string billToAddress1 = "8310 Capital of Texas Highwas North"; - string billToAddress2 = "Bluffstone Drive"; - string billToLocality = "Austin"; - string billToAdministrativeArea = "TX"; - string billToPostalCode = "78731"; + string billToLastName = "Doe"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; string billToCountry = "US"; - string billToEmail = "john.smith@test.com"; - string billToPhoneNumber = "+44 2890447951"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( + string billToEmail = "test@cybs.com"; + string billToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( FirstName: billToFirstName, LastName: billToLastName, Company: billToCompany, Address1: billToAddress1, - Address2: billToAddress2, Locality: billToLocality, AdministrativeArea: billToAdministrativeArea, PostalCode: billToPostalCode, @@ -62,25 +53,15 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded PhoneNumber: billToPhoneNumber ); - bool processingInformationBillPaymentProgramEnabled = true; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( - BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled - ); - - string instrumentIdentifierCardNumber = "411111111111111"; - TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( - Number: instrumentIdentifierCardNumber - ); + string instrumentIdentifierId = "7010000000016241111"; - Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( - Card: instrumentIdentifierCard + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId ); - var requestObj = new CreatePaymentInstrumentRequest( + var requestObj = new PostPaymentInstrumentRequest( Card: card, - BuyerInformation: buyerInformation, BillTo: billTo, - ProcessingInformation: processingInformation, InstrumentIdentifier: instrumentIdentifier ); @@ -90,7 +71,7 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs b/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs deleted file mode 100644 index 60583b1..0000000 --- a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentTokenizedCard.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; - -using CyberSource.Api; -using CyberSource.Model; - -namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement -{ - public class CreatePaymentInstrumentTokenizedCard - { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() - { - var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - - string cardExpirationMonth = "09"; - string cardExpirationYear = "2017"; - string cardType = "visa"; - string cardIssueNumber = "01"; - string cardStartMonth = "01"; - string cardStartYear = "2016"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard card = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedCard( - ExpirationMonth: cardExpirationMonth, - ExpirationYear: cardExpirationYear, - Type: cardType, - IssueNumber: cardIssueNumber, - StartMonth: cardStartMonth, - StartYear: cardStartYear - ); - - string buyerInformationCompanyTaxID = "12345"; - string buyerInformationCurrency = "USD"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation buyerInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBuyerInformation( - CompanyTaxID: buyerInformationCompanyTaxID, - Currency: buyerInformationCurrency - ); - - string billToFirstName = "John"; - string billToLastName = "Smith"; - string billToCompany = "Cybersource"; - string billToAddress1 = "8310 Capital of Texas Highwas North"; - string billToAddress2 = "Bluffstone Drive"; - string billToLocality = "Austin"; - string billToAdministrativeArea = "TX"; - string billToPostalCode = "78731"; - string billToCountry = "US"; - string billToEmail = "john.smith@test.com"; - string billToPhoneNumber = "+44 2890447951"; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo billTo = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedBillTo( - FirstName: billToFirstName, - LastName: billToLastName, - Company: billToCompany, - Address1: billToAddress1, - Address2: billToAddress2, - Locality: billToLocality, - AdministrativeArea: billToAdministrativeArea, - PostalCode: billToPostalCode, - Country: billToCountry, - Email: billToEmail, - PhoneNumber: billToPhoneNumber - ); - - bool processingInformationBillPaymentProgramEnabled = true; - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation processingInformation = new TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedProcessingInformation( - BillPaymentProgramEnabled: processingInformationBillPaymentProgramEnabled - ); - - string instrumentIdentifierCardNumber = "411111111111112"; - TmsV1InstrumentIdentifiersPost200ResponseCard instrumentIdentifierCard = new TmsV1InstrumentIdentifiersPost200ResponseCard( - Number: instrumentIdentifierCardNumber - ); - - Tmsv1paymentinstrumentsInstrumentIdentifier instrumentIdentifier = new Tmsv1paymentinstrumentsInstrumentIdentifier( - Card: instrumentIdentifierCard - ); - - var requestObj = new CreatePaymentInstrumentRequest( - Card: card, - BuyerInformation: buyerInformation, - BillTo: billTo, - ProcessingInformation: processingInformation, - InstrumentIdentifier: instrumentIdentifier - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentInstrumentApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.CreatePaymentInstrument(profileid, requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs b/src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs index e0620b0..e2d734c 100644 --- a/src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs +++ b/src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs @@ -20,7 +20,7 @@ public static void Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - apiInstance.DeletePaymentInstrument(profileid, tokenId); + apiInstance.DeletePaymentInstrument(tokenId, profileid); } catch (Exception e) { diff --git a/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs b/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs index 1d4a8ed..ceea2bc 100644 --- a/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs +++ b/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs @@ -9,10 +9,10 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrievePaymentInstrument { - public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments Run() + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; - var tokenId = CreatePaymentInstrumentCard.Run().Id; + var tokenId = "888454C31FB6150CE05340588D0AA9BE"; try { @@ -20,7 +20,7 @@ public static TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbedded var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - TmsV1InstrumentIdentifiersPaymentInstrumentsGet200ResponseEmbeddedPaymentInstruments result = apiInstance.GetPaymentInstrument(profileid, tokenId); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.GetPaymentInstrument(tokenId, profileid); Console.WriteLine(result); return result; } diff --git a/src/Samples/ValueAddedService/BasicTaxCalculationRequest.cs b/src/Samples/ValueAddedService/BasicTaxCalculationRequest.cs new file mode 100644 index 0000000..0db28e2 --- /dev/null +++ b/src/Samples/ValueAddedService/BasicTaxCalculationRequest.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService +{ + public class BasicTaxCalculationRequest + { + public static VasV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TAX_TC001"; + Vasv2taxClientReferenceInformation clientReferenceInformation = new Vasv2taxClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string taxInformationShowTaxPerLineItem = "Yes"; + Vasv2taxTaxInformation taxInformation = new Vasv2taxTaxInformation( + ShowTaxPerLineItem: taxInformationShowTaxPerLineItem + ); + + string orderInformationAmountDetailsCurrency = "USD"; + RiskV1DecisionsPost201ResponseOrderInformationAmountDetails orderInformationAmountDetails = new RiskV1DecisionsPost201ResponseOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "San Francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + Vasv2taxOrderInformationBillTo orderInformationBillTo = new Vasv2taxOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry + ); + + + List orderInformationLineItems = new List(); + string orderInformationLineItemsProductSKU1 = "07-12-00657"; + string orderInformationLineItemsProductCode1 = "50161815"; + int orderInformationLineItemsQuantity1 = 1; + string orderInformationLineItemsProductName1 = "Chewing Gum"; + string orderInformationLineItemsUnitPrice1 = "1200"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU1, + ProductCode: orderInformationLineItemsProductCode1, + Quantity: orderInformationLineItemsQuantity1, + ProductName: orderInformationLineItemsProductName1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + string orderInformationLineItemsProductSKU2 = "07-12-00659"; + string orderInformationLineItemsProductCode2 = "50181905"; + int orderInformationLineItemsQuantity2 = 1; + string orderInformationLineItemsProductName2 = "Sugar Cookies"; + string orderInformationLineItemsUnitPrice2 = "1240"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU2, + ProductCode: orderInformationLineItemsProductCode2, + Quantity: orderInformationLineItemsQuantity2, + ProductName: orderInformationLineItemsProductName2, + UnitPrice: orderInformationLineItemsUnitPrice2 + )); + + string orderInformationLineItemsProductSKU3 = "07-12-00658"; + string orderInformationLineItemsProductCode3 = "5020.11"; + int orderInformationLineItemsQuantity3 = 1; + string orderInformationLineItemsProductName3 = "Carbonated Water"; + string orderInformationLineItemsUnitPrice3 = "9001"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU3, + ProductCode: orderInformationLineItemsProductCode3, + Quantity: orderInformationLineItemsQuantity3, + ProductName: orderInformationLineItemsProductName3, + UnitPrice: orderInformationLineItemsUnitPrice3 + )); + + Vasv2taxOrderInformation orderInformation = new Vasv2taxOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + LineItems: orderInformationLineItems + ); + + var requestObj = new TaxRequest( + ClientReferenceInformation: clientReferenceInformation, + TaxInformation: taxInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TaxesApi(clientConfig); + VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/ValueAddedService/CommittedTaxCallRequest.cs b/src/Samples/ValueAddedService/CommittedTaxCallRequest.cs new file mode 100644 index 0000000..885b358 --- /dev/null +++ b/src/Samples/ValueAddedService/CommittedTaxCallRequest.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService +{ + public class CommittedTaxCallRequest + { + public static VasV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TAX_TC001"; + Vasv2taxClientReferenceInformation clientReferenceInformation = new Vasv2taxClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string taxInformationShowTaxPerLineItem = "Yes"; + bool taxInformationCommitIndicator = true; + Vasv2taxTaxInformation taxInformation = new Vasv2taxTaxInformation( + ShowTaxPerLineItem: taxInformationShowTaxPerLineItem, + CommitIndicator: taxInformationCommitIndicator + ); + + string orderInformationAmountDetailsCurrency = "USD"; + RiskV1DecisionsPost201ResponseOrderInformationAmountDetails orderInformationAmountDetails = new RiskV1DecisionsPost201ResponseOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "San Francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + Vasv2taxOrderInformationBillTo orderInformationBillTo = new Vasv2taxOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry + ); + + string orderInformationShippingDetailsShipFromLocality = "Cambridge Bay"; + string orderInformationShippingDetailsShipFromCountry = "CA"; + string orderInformationShippingDetailsShipFromPostalCode = "A0G 1T0"; + string orderInformationShippingDetailsShipFromAdministrativeArea = "NL"; + Vasv2taxOrderInformationShippingDetails orderInformationShippingDetails = new Vasv2taxOrderInformationShippingDetails( + ShipFromLocality: orderInformationShippingDetailsShipFromLocality, + ShipFromCountry: orderInformationShippingDetailsShipFromCountry, + ShipFromPostalCode: orderInformationShippingDetailsShipFromPostalCode, + ShipFromAdministrativeArea: orderInformationShippingDetailsShipFromAdministrativeArea + ); + + string orderInformationShipToCountry = "US"; + string orderInformationShipToAdministrativeArea = "FL"; + string orderInformationShipToLocality = "Panama City"; + string orderInformationShipToPostalCode = "32401"; + string orderInformationShipToAddress1 = "123 Russel St."; + Vasv2taxOrderInformationShipTo orderInformationShipTo = new Vasv2taxOrderInformationShipTo( + Country: orderInformationShipToCountry, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Locality: orderInformationShipToLocality, + PostalCode: orderInformationShipToPostalCode, + Address1: orderInformationShipToAddress1 + ); + + + List orderInformationLineItems = new List(); + string orderInformationLineItemsProductSKU1 = "07-12-00657"; + string orderInformationLineItemsProductCode1 = "50161815"; + int orderInformationLineItemsQuantity1 = 1; + string orderInformationLineItemsProductName1 = "Chewing Gum"; + string orderInformationLineItemsUnitPrice1 = "1200"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU1, + ProductCode: orderInformationLineItemsProductCode1, + Quantity: orderInformationLineItemsQuantity1, + ProductName: orderInformationLineItemsProductName1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + string orderInformationLineItemsProductSKU2 = "07-12-00659"; + string orderInformationLineItemsProductCode2 = "50181905"; + int orderInformationLineItemsQuantity2 = 1; + string orderInformationLineItemsProductName2 = "Sugar Cookies"; + string orderInformationLineItemsUnitPrice2 = "1240"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU2, + ProductCode: orderInformationLineItemsProductCode2, + Quantity: orderInformationLineItemsQuantity2, + ProductName: orderInformationLineItemsProductName2, + UnitPrice: orderInformationLineItemsUnitPrice2 + )); + + string orderInformationLineItemsProductSKU3 = "07-12-00658"; + string orderInformationLineItemsProductCode3 = "5020.11"; + int orderInformationLineItemsQuantity3 = 1; + string orderInformationLineItemsProductName3 = "Carbonated Water"; + string orderInformationLineItemsUnitPrice3 = "9001"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU3, + ProductCode: orderInformationLineItemsProductCode3, + Quantity: orderInformationLineItemsQuantity3, + ProductName: orderInformationLineItemsProductName3, + UnitPrice: orderInformationLineItemsUnitPrice3 + )); + + Vasv2taxOrderInformation orderInformation = new Vasv2taxOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShippingDetails: orderInformationShippingDetails, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string merchantInformationVatRegistrationNumber = "abcdef"; + Vasv2taxMerchantInformation merchantInformation = new Vasv2taxMerchantInformation( + VatRegistrationNumber: merchantInformationVatRegistrationNumber + ); + + var requestObj = new TaxRequest( + ClientReferenceInformation: clientReferenceInformation, + TaxInformation: taxInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TaxesApi(clientConfig); + VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs b/src/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs new file mode 100644 index 0000000..b9c70fb --- /dev/null +++ b/src/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService +{ + public class CommittedTaxRefundCallRequest + { + public static VasV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TAX_TC001"; + Vasv2taxClientReferenceInformation clientReferenceInformation = new Vasv2taxClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string taxInformationShowTaxPerLineItem = "Yes"; + bool taxInformationCommitIndicator = true; + bool taxInformationRefundIndicator = true; + Vasv2taxTaxInformation taxInformation = new Vasv2taxTaxInformation( + ShowTaxPerLineItem: taxInformationShowTaxPerLineItem, + CommitIndicator: taxInformationCommitIndicator, + RefundIndicator: taxInformationRefundIndicator + ); + + string orderInformationAmountDetailsCurrency = "USD"; + RiskV1DecisionsPost201ResponseOrderInformationAmountDetails orderInformationAmountDetails = new RiskV1DecisionsPost201ResponseOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "San Francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + Vasv2taxOrderInformationBillTo orderInformationBillTo = new Vasv2taxOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry + ); + + string orderInformationShippingDetailsShipFromLocality = "Cambridge Bay"; + string orderInformationShippingDetailsShipFromCountry = "CA"; + string orderInformationShippingDetailsShipFromPostalCode = "A0G 1T0"; + string orderInformationShippingDetailsShipFromAdministrativeArea = "NL"; + Vasv2taxOrderInformationShippingDetails orderInformationShippingDetails = new Vasv2taxOrderInformationShippingDetails( + ShipFromLocality: orderInformationShippingDetailsShipFromLocality, + ShipFromCountry: orderInformationShippingDetailsShipFromCountry, + ShipFromPostalCode: orderInformationShippingDetailsShipFromPostalCode, + ShipFromAdministrativeArea: orderInformationShippingDetailsShipFromAdministrativeArea + ); + + string orderInformationShipToCountry = "US"; + string orderInformationShipToAdministrativeArea = "FL"; + string orderInformationShipToLocality = "Panama City"; + string orderInformationShipToPostalCode = "32401"; + string orderInformationShipToAddress1 = "123 Russel St."; + Vasv2taxOrderInformationShipTo orderInformationShipTo = new Vasv2taxOrderInformationShipTo( + Country: orderInformationShipToCountry, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Locality: orderInformationShipToLocality, + PostalCode: orderInformationShipToPostalCode, + Address1: orderInformationShipToAddress1 + ); + + + List orderInformationLineItems = new List(); + string orderInformationLineItemsProductSKU1 = "07-12-00657"; + string orderInformationLineItemsProductCode1 = "50161815"; + int orderInformationLineItemsQuantity1 = 1; + string orderInformationLineItemsProductName1 = "Chewing Gum"; + string orderInformationLineItemsUnitPrice1 = "1200"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU1, + ProductCode: orderInformationLineItemsProductCode1, + Quantity: orderInformationLineItemsQuantity1, + ProductName: orderInformationLineItemsProductName1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + string orderInformationLineItemsProductSKU2 = "07-12-00659"; + string orderInformationLineItemsProductCode2 = "50181905"; + int orderInformationLineItemsQuantity2 = 1; + string orderInformationLineItemsProductName2 = "Sugar Cookies"; + string orderInformationLineItemsUnitPrice2 = "1240"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU2, + ProductCode: orderInformationLineItemsProductCode2, + Quantity: orderInformationLineItemsQuantity2, + ProductName: orderInformationLineItemsProductName2, + UnitPrice: orderInformationLineItemsUnitPrice2 + )); + + string orderInformationLineItemsProductSKU3 = "07-12-00658"; + string orderInformationLineItemsProductCode3 = "5020.11"; + int orderInformationLineItemsQuantity3 = 1; + string orderInformationLineItemsProductName3 = "Carbonated Water"; + string orderInformationLineItemsUnitPrice3 = "9001"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU3, + ProductCode: orderInformationLineItemsProductCode3, + Quantity: orderInformationLineItemsQuantity3, + ProductName: orderInformationLineItemsProductName3, + UnitPrice: orderInformationLineItemsUnitPrice3 + )); + + Vasv2taxOrderInformation orderInformation = new Vasv2taxOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShippingDetails: orderInformationShippingDetails, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string merchantInformationVatRegistrationNumber = "abcdef"; + Vasv2taxMerchantInformation merchantInformation = new Vasv2taxMerchantInformation( + VatRegistrationNumber: merchantInformationVatRegistrationNumber + ); + + var requestObj = new TaxRequest( + ClientReferenceInformation: clientReferenceInformation, + TaxInformation: taxInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TaxesApi(clientConfig); + VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/ValueAddedService/TaxRefundRequest.cs b/src/Samples/ValueAddedService/TaxRefundRequest.cs new file mode 100644 index 0000000..5544865 --- /dev/null +++ b/src/Samples/ValueAddedService/TaxRefundRequest.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService +{ + public class TaxRefundRequest + { + public static VasV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TAX_TC001"; + Vasv2taxClientReferenceInformation clientReferenceInformation = new Vasv2taxClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string taxInformationShowTaxPerLineItem = "Yes"; + bool taxInformationRefundIndicator = true; + Vasv2taxTaxInformation taxInformation = new Vasv2taxTaxInformation( + ShowTaxPerLineItem: taxInformationShowTaxPerLineItem, + RefundIndicator: taxInformationRefundIndicator + ); + + string orderInformationAmountDetailsCurrency = "USD"; + RiskV1DecisionsPost201ResponseOrderInformationAmountDetails orderInformationAmountDetails = new RiskV1DecisionsPost201ResponseOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "San Francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + Vasv2taxOrderInformationBillTo orderInformationBillTo = new Vasv2taxOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry + ); + + string orderInformationShippingDetailsShipFromLocality = "Cambridge Bay"; + string orderInformationShippingDetailsShipFromCountry = "CA"; + string orderInformationShippingDetailsShipFromPostalCode = "A0G 1T0"; + string orderInformationShippingDetailsShipFromAdministrativeArea = "NL"; + Vasv2taxOrderInformationShippingDetails orderInformationShippingDetails = new Vasv2taxOrderInformationShippingDetails( + ShipFromLocality: orderInformationShippingDetailsShipFromLocality, + ShipFromCountry: orderInformationShippingDetailsShipFromCountry, + ShipFromPostalCode: orderInformationShippingDetailsShipFromPostalCode, + ShipFromAdministrativeArea: orderInformationShippingDetailsShipFromAdministrativeArea + ); + + string orderInformationShipToCountry = "US"; + string orderInformationShipToAdministrativeArea = "FL"; + string orderInformationShipToLocality = "Panama City"; + string orderInformationShipToPostalCode = "32401"; + string orderInformationShipToAddress1 = "123 Russel St."; + Vasv2taxOrderInformationShipTo orderInformationShipTo = new Vasv2taxOrderInformationShipTo( + Country: orderInformationShipToCountry, + AdministrativeArea: orderInformationShipToAdministrativeArea, + Locality: orderInformationShipToLocality, + PostalCode: orderInformationShipToPostalCode, + Address1: orderInformationShipToAddress1 + ); + + + List orderInformationLineItems = new List(); + string orderInformationLineItemsProductSKU1 = "07-12-00657"; + string orderInformationLineItemsProductCode1 = "50161815"; + int orderInformationLineItemsQuantity1 = 1; + string orderInformationLineItemsProductName1 = "Chewing Gum"; + string orderInformationLineItemsUnitPrice1 = "1200"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU1, + ProductCode: orderInformationLineItemsProductCode1, + Quantity: orderInformationLineItemsQuantity1, + ProductName: orderInformationLineItemsProductName1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + string orderInformationLineItemsProductSKU2 = "07-12-00659"; + string orderInformationLineItemsProductCode2 = "50181905"; + int orderInformationLineItemsQuantity2 = 1; + string orderInformationLineItemsProductName2 = "Sugar Cookies"; + string orderInformationLineItemsUnitPrice2 = "1240"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU2, + ProductCode: orderInformationLineItemsProductCode2, + Quantity: orderInformationLineItemsQuantity2, + ProductName: orderInformationLineItemsProductName2, + UnitPrice: orderInformationLineItemsUnitPrice2 + )); + + string orderInformationLineItemsProductSKU3 = "07-12-00658"; + string orderInformationLineItemsProductCode3 = "5020.11"; + int orderInformationLineItemsQuantity3 = 1; + string orderInformationLineItemsProductName3 = "Carbonated Water"; + string orderInformationLineItemsUnitPrice3 = "9001"; + orderInformationLineItems.Add(new Vasv2taxOrderInformationLineItems( + ProductSKU: orderInformationLineItemsProductSKU3, + ProductCode: orderInformationLineItemsProductCode3, + Quantity: orderInformationLineItemsQuantity3, + ProductName: orderInformationLineItemsProductName3, + UnitPrice: orderInformationLineItemsUnitPrice3 + )); + + Vasv2taxOrderInformation orderInformation = new Vasv2taxOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShippingDetails: orderInformationShippingDetails, + ShipTo: orderInformationShipTo, + LineItems: orderInformationLineItems + ); + + string merchantInformationVatRegistrationNumber = "abcdef"; + Vasv2taxMerchantInformation merchantInformation = new Vasv2taxMerchantInformation( + VatRegistrationNumber: merchantInformationVatRegistrationNumber + ); + + var requestObj = new TaxRequest( + ClientReferenceInformation: clientReferenceInformation, + TaxInformation: taxInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TaxesApi(clientConfig); + VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/ValueAddedService/VoidCommittedTaxCall.cs b/src/Samples/ValueAddedService/VoidCommittedTaxCall.cs new file mode 100644 index 0000000..f1901f7 --- /dev/null +++ b/src/Samples/ValueAddedService/VoidCommittedTaxCall.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService +{ + public class VoidCommittedTaxCall + { + public static VasV2TaxVoid200Response Run() + { + string id = CommittedTaxCallRequest.Run().Id; + string clientReferenceInformationCode = "TAX_TC001"; + Vasv2taxidClientReferenceInformation clientReferenceInformation = new Vasv2taxidClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + var requestObj = new VoidTaxRequest( + ClientReferenceInformation: clientReferenceInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TaxesApi(clientConfig); + VasV2TaxVoid200Response result = apiInstance.VoidTax(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/packages.config b/src/packages.config index 186cca5..c40bccd 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - + From edcf8d7e41da7da6c57807505b3d12edd3ee299d Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 31 Jul 2020 10:30:42 +0530 Subject: [PATCH 030/161] Removing unused file from project --- src/SampleCode.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 58dc455..769374f 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -116,7 +116,6 @@ - From 0877a8e354bcd233b072935956d8df2d5854c637 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 31 Jul 2020 10:34:45 +0530 Subject: [PATCH 031/161] Adding NumericUtility.cs --- src/Resource/NumericUtility.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/Resource/NumericUtility.cs diff --git a/src/Resource/NumericUtility.cs b/src/Resource/NumericUtility.cs new file mode 100644 index 0000000..145e2ab --- /dev/null +++ b/src/Resource/NumericUtility.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Resource +{ + public class NumericUtility + { + public static string LongRandom(int min, int max) + { + Random generator = new Random(); + string r = generator.Next(min, max).ToString("D8"); + return r; + } + } +} From 1219f87c6748b650bee9dc6061b30dfd827e7f7b Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 18 Sep 2020 12:10:27 +0530 Subject: [PATCH 032/161] Upgrade to latest version of SDK --- src/SampleCode.csproj | 6 +- src/Samples/FlexMicroform/FlexTokenizeCard.cs | 83 +++++++++++++ src/Samples/FlexMicroform/GenerateKey.cs | 2 +- .../GenerateKeyLegacyTokenFormat.cs | 39 ++++++ .../EnrollWithPendingAuthentication.cs | 2 - .../SetupCompletionWithCardNumber.cs | 2 +- .../ValidateAuthenticationResults.cs | 2 - ...finPCIP2PEForCardPresentEnabledAcquirer.cs | 114 ++++++++++++++++++ ...entWithFlexTokenCreatePermanentTMSToken.cs | 114 ++++++++++++++++++ .../Reversal/ProcessAuthorizationReversal.cs | 1 + src/Samples/SecureFileShare/GetListOfFiles.cs | 4 +- .../TransactionDetails/RetrieveTransaction.cs | 5 +- src/packages.config | 2 +- 13 files changed, 365 insertions(+), 11 deletions(-) create mode 100644 src/Samples/FlexMicroform/FlexTokenizeCard.cs create mode 100644 src/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs create mode 100644 src/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 769374f..0e6ec40 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -45,7 +45,7 @@ False - ..\packages\CyberSource.Rest.Client.0.0.1.5\lib\cybersource-rest-client-dotnet.dll + ..\packages\CyberSource.Rest.Client.0.0.1.6\lib\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -95,7 +95,9 @@ + + @@ -134,6 +136,7 @@ + @@ -163,6 +166,7 @@ + diff --git a/src/Samples/FlexMicroform/FlexTokenizeCard.cs b/src/Samples/FlexMicroform/FlexTokenizeCard.cs new file mode 100644 index 0000000..2734932 --- /dev/null +++ b/src/Samples/FlexMicroform/FlexTokenizeCard.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; +using CyberSource.Utilities.Flex.Model; +using CyberSource.Utilities.Flex.TokenVerification; + +namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform +{ + public class FlexTokenizeCard + { + public static FlexV1TokensPost200Response Run() + { + var generateKeyResult = GenerateKeyLegacyTokenFormat.Run(); + string keyId = generateKeyResult.KeyId; + var derFormat = generateKeyResult.Der.Format; + var derAlgo = generateKeyResult.Der.Algorithm; + var derPublicKey = generateKeyResult.Der.PublicKey; + + string cardInfoCardNumber = "4111111111111111"; + string cardInfoCardExpirationMonth = "12"; + string cardInfoCardExpirationYear = "2031"; + string cardInfoCardType = "001"; + Flexv1tokensCardInfo cardInfo = new Flexv1tokensCardInfo( + CardNumber: cardInfoCardNumber, + CardExpirationMonth: cardInfoCardExpirationMonth, + CardExpirationYear: cardInfoCardExpirationYear, + CardType: cardInfoCardType + ); + + var requestObj = new TokenizeRequest( + KeyId: keyId, + CardInfo: cardInfo + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TokenizationApi(clientConfig); + FlexV1TokensPost200Response result = apiInstance.Tokenize(requestObj); + Console.WriteLine(result); + + TokenVerificationUtility tokenVerifier = new TokenVerificationUtility(); + + var flexPublicKey = new FlexPublicKey(keyId, new FlexDerPublicKey(derFormat, derAlgo, derPublicKey), null); + var flexToken = new FlexToken() + { + keyId = result.KeyId, + token = result.Token, + maskedPan = result.MaskedPan, + cardType = result.CardType, + timestamp = (long)result.Timestamp, + signedFields = result.SignedFields, + signature = result.Signature, + discoverableServices = result.DiscoverableServices + }; + + IDictionary postParameters = new Dictionary(); + postParameters["signedFields"] = flexToken.signedFields; + postParameters["signature"] = flexToken.signature; + postParameters["cardType"] = flexToken.cardType; + postParameters["keyId"] = flexToken.keyId; + postParameters["maskedPan"] = flexToken.maskedPan; + postParameters["token"] = flexToken.token; + postParameters["timestamp"] = Convert.ToString(flexToken.timestamp); + + var tokenVerificationResult = tokenVerifier.Verify(flexPublicKey, postParameters); + Console.WriteLine("TOKEN VERIFICATION : " + tokenVerificationResult); + + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/FlexMicroform/GenerateKey.cs b/src/Samples/FlexMicroform/GenerateKey.cs index 9190690..42d8fed 100644 --- a/src/Samples/FlexMicroform/GenerateKey.cs +++ b/src/Samples/FlexMicroform/GenerateKey.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Flex +namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { public class GenerateKey { diff --git a/src/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs b/src/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs new file mode 100644 index 0000000..6b7096b --- /dev/null +++ b/src/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform +{ + public class GenerateKeyLegacyTokenFormat + { + public static FlexV1KeysPost200Response Run() + { + string encryptionType = "None"; + string targetOrigin = "https://www.test.com"; + var requestObj = new GeneratePublicKeyRequest( + EncryptionType: encryptionType, + TargetOrigin: targetOrigin + ); + + string format = "legacy"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new KeyGenerationApi(clientConfig); + FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(format, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs b/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs index 7813ba4..78ab39c 100644 --- a/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs +++ b/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs @@ -71,10 +71,8 @@ public static RiskV1AuthenticationsPost201Response Run() MobilePhone: buyerInformationMobilePhone ); - string consumerAuthenticationInformationReturnUrl = "http://localhost:8189/cart/enterprise/collect-term"; string consumerAuthenticationInformationTransactionMode = "MOTO"; Riskv1decisionsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1decisionsConsumerAuthenticationInformation( - ReturnUrl: consumerAuthenticationInformationReturnUrl, TransactionMode: consumerAuthenticationInformationTransactionMode ); diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs b/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs index 314fc33..20b6a1d 100644 --- a/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs +++ b/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs @@ -19,7 +19,7 @@ public static RiskV1AuthenticationSetupsPost201Response Run() string paymentInformationCardType = "001"; string paymentInformationCardExpirationMonth = "12"; string paymentInformationCardExpirationYear = "2025"; - string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardNumber = "4000000000000101"; Riskv1authenticationsetupsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsetupsPaymentInformationCard( Type: paymentInformationCardType, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 899c327..6afc141 100644 --- a/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -55,11 +55,9 @@ public static RiskV1AuthenticationResultsPost201Response Run() ); string consumerAuthenticationInformationAuthenticationTransactionId = "PYffv9G3sa1e0CQr5fV0"; - string consumerAuthenticationInformationResponseAccessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5YTAwYTYzMC0zNzFhLTExZTYtYTU5Ni1kZjQwZjUwMjAwNmMiLCJpYXQiOjE0NjY0NDk4MDcsImlzcyI6Ik1pZGFzLU5vRFYtS2V5IiwiUGF5bG9hZCI6eyJPcmRlckRldGFpbHMiOnsiT3JkZXJOdW1iZXIiOjE1NTc4MjAyMzY3LCJBbW91bnQiOiIxNTAwIiwiQ3VycmVudENvZGUiOiI4NDAiLCJUcmFuc2FjdGlvbklkIjoiOVVzaGVoRFFUcWh1SFk5SElqZTAifX0sIk9yZ1VuaXRJZCI6IjU2NGNkY2JjYjlmNjNmMGM0OGQ2Mzg3ZiIsIk9iamVjdGlmeVBheWxvYWQiOnRydWV9.eaU8LZJnMtY3mPl4vBXVCVUuyeSeAp8zoNaEOmKS4XY"; string consumerAuthenticationInformationSignedPares = "eNqdmFmT4jgSgN+J4D90zD4yMz45PEFVhHzgA2zwjXnzhQ984Nvw61dAV1"; Riskv1authenticationresultsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationresultsConsumerAuthenticationInformation( AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId, - ResponseAccessToken: consumerAuthenticationInformationResponseAccessToken, SignedPares: consumerAuthenticationInformationSignedPares ); diff --git a/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs b/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs new file mode 100644 index 0000000..c08d8f7 --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "demomerchant"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2050"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + string paymentInformationFluidDataDescriptor = "Ymx1ZWZpbg=="; + string paymentInformationFluidDataValue = "02d700801f3c20008383252a363031312a2a2a2a2a2a2a2a303030395e46444d53202020202020202020202020202020202020202020205e323231322a2a2a2a2a2a2a2a3f2a3b363031312a2a2a2a2a2a2a2a303030393d323231322a2a2a2a2a2a2a2a3f2a7a75ad15d25217290c54b3d9d1c3868602136c68d339d52d98423391f3e631511d548fff08b414feac9ff6c6dede8fb09bae870e4e32f6f462d6a75fa0a178c3bd18d0d3ade21bc7a0ea687a2eef64551751e502d97cb98dc53ea55162cdfa395431323439323830303762994901000001a000731a8003"; + Ptsv2paymentsPaymentInformationFluidData paymentInformationFluidData = new Ptsv2paymentsPaymentInformationFluidData( + Descriptor: paymentInformationFluidDataDescriptor, + Value: paymentInformationFluidDataValue + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + FluidData: paymentInformationFluidData + ); + + string orderInformationAmountDetailsTotalAmount = "100.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "201 S. Division St."; + string orderInformationBillToLocality = "Ann Arbor"; + string orderInformationBillToAdministrativeArea = "MI"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToDistrict = "MI"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "999999999"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + District: orderInformationBillToDistrict, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + int pointOfSaleInformationCatLevel = 1; + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 2; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + CatLevel: pointOfSaleInformationCatLevel, + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs b/src/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs new file mode 100644 index 0000000..59925cb --- /dev/null +++ b/src/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PaymentWithFlexTokenCreatePermanentTMSToken + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List(); + processingInformationActionList.Add("TOKEN_CREATE"); + + List processingInformationActionTokenTypes = new List(); + processingInformationActionTokenTypes.Add("customer"); + processingInformationActionTokenTypes.Add("paymentInstrument"); + processingInformationActionTokenTypes.Add("shippingAddress"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + ActionTokenTypes: processingInformationActionTokenTypes, + Capture: processingInformationCapture + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "John"; + string orderInformationShipToLastName = "Doe"; + string orderInformationShipToAddress1 = "1 Market St"; + string orderInformationShipToLocality = "san francisco"; + string orderInformationShipToAdministrativeArea = "CA"; + string orderInformationShipToPostalCode = "94105"; + string orderInformationShipToCountry = "US"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + string tokenInformationTransientTokenJwt = "eyJraWQiOiIwOHAwWWVyTTBJSnpvYlpMMENyalVsRnQ4QXlIdXc4TSIsImFsZyI6IlJTMjU2In0.eyJkYXRhIjp7ImV4cGlyYXRpb25ZZWFyIjoiMjAyMyIsIm51bWJlciI6IjQxMTExMVhYWFhYWDExMTEiLCJleHBpcmF0aW9uTW9udGgiOiIwNyIsInR5cGUiOiIwMDEifSwiaXNzIjoiRmxleC8wOCIsImV4cCI6MTU5OTU2MDU3OSwidHlwZSI6Im1mLTAuMTEuMCIsImlhdCI6MTU5OTU1OTY3OSwianRpIjoiMUUyWjRMNjYxMENPSExHUUIxMlBXQk5OUjE1WFUwU1ROTTQ5UlA5WlJaUEtBVE1NOVo5UzVGNTc1QjgzNEFDOCJ9.Va9-Rf3nBtxHXVvb1M-mQqzOa86Uj5wY3qejFmYmMiSjMOSF_DpNepjOYat-8WqdacmhUemtwQfOtDEVDpd6X3YpBNydZ4dzVt3baq2Z1KAH1lEJxyvAyHX77tnO-wzfZrQm-HH-qtrGmt6ZvuNknvYPxwPcqnOryGaIQE70znBK6GVf3vgdE0xedxAQWl97ZfpZKafVjCvtGIMuJ0QdtrqM0OmtkoDKrqmXGzKlfSbpEep_yaDdpRkX_NdOgiVomRb3P6nqkT1OO0Czzu4HyxaMfVyCgGUAHd_SjXrwqM2vuchE4Scg1DicjWAJxXb_tZoAuUU0EN8HwVnrHiFAiQ"; + Ptsv2paymentsTokenInformation tokenInformation = new Ptsv2paymentsTokenInformation( + TransientTokenJwt: tokenInformationTransientTokenJwt + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation, + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs b/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs index 37a1cb8..e5364f4 100644 --- a/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs +++ b/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs @@ -11,6 +11,7 @@ public class ProcessAuthorizationReversal { public static PtsV2PaymentsReversalsPost201Response Run() { + SimpleAuthorizationInternet.CaptureTrueForProcessPayment = false; var id = SimpleAuthorizationInternet.Run().Id; string clientReferenceInformationCode = "TC50171_3"; diff --git a/src/Samples/SecureFileShare/GetListOfFiles.cs b/src/Samples/SecureFileShare/GetListOfFiles.cs index 1689b39..93c9a0d 100644 --- a/src/Samples/SecureFileShare/GetListOfFiles.cs +++ b/src/Samples/SecureFileShare/GetListOfFiles.cs @@ -11,8 +11,8 @@ public class GetListOfFiles { public static V1FileDetailsGet200Response Run() { - var startDate = DateTime.ParseExact("2020-03-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); - var endDate = DateTime.ParseExact("2020-03-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var startDate = DateTime.ParseExact("2020-07-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); + var endDate = DateTime.ParseExact("2020-07-30", "yyyy-MM-dd", CultureInfo.InvariantCulture); string organizationId = "testrest"; string name = null; try diff --git a/src/Samples/TransactionDetails/RetrieveTransaction.cs b/src/Samples/TransactionDetails/RetrieveTransaction.cs index 26c73de..32b3792 100644 --- a/src/Samples/TransactionDetails/RetrieveTransaction.cs +++ b/src/Samples/TransactionDetails/RetrieveTransaction.cs @@ -4,6 +4,7 @@ using CyberSource.Api; using CyberSource.Model; +using Cybersource_rest_samples_dotnet.Samples.Payments; namespace Cybersource_rest_samples_dotnet.Samples.TransactionDetails { @@ -11,7 +12,9 @@ public class RetrieveTransaction { public static TssV2TransactionsGet200Response Run() { - string id = "5843582801906488504004"; + string id = SimpleAuthorizationInternet.Run().Id; + + System.Threading.Thread.Sleep(10000); try { diff --git a/src/packages.config b/src/packages.config index c40bccd..8364da5 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - + From 4a815ba407ac33cebc2d0b3b3f5633482b52fc83 Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 11 Nov 2020 11:17:37 +0530 Subject: [PATCH 033/161] + Changes for meta key generation --- src/Configuration.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Configuration.cs b/src/Configuration.cs index 491264c..cca6525 100644 --- a/src/Configuration.cs +++ b/src/Configuration.cs @@ -10,25 +10,28 @@ public class Configuration public Dictionary GetConfiguration() { _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); - _configurationDictionary.Add("merchantID", "testrest"); - _configurationDictionary.Add("merchantsecretKey", "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="); - _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); + _configurationDictionary.Add("merchantID", "merchannt998"); + _configurationDictionary.Add("merchantsecretKey", "X+ynT3aTCD643tZgnEnnLD+sd5pplDGMw5vG5klPvVY="); + _configurationDictionary.Add("merchantKeyId", "7a7f20a6-1f7f-4780-9a79-3ff8acf7cc83"); _configurationDictionary.Add("keysDirectory", "Resource"); - _configurationDictionary.Add("keyFilename", "testrest"); + _configurationDictionary.Add("keyFilename", "developercp"); _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); _configurationDictionary.Add("keyAlias", "testrest"); - _configurationDictionary.Add("keyPass", "testrest"); + _configurationDictionary.Add("keyPass", "developercp"); _configurationDictionary.Add("enableLog", "FALSE"); _configurationDictionary.Add("logDirectory", string.Empty); _configurationDictionary.Add("logFileName", string.Empty); _configurationDictionary.Add("logFileMaxSize", "5242880"); _configurationDictionary.Add("timeout", "300000"); + + // Configs related to meta key + _configurationDictionary.Add("portfolioID", "developercp"); + _configurationDictionary.Add("useMetaKey", "TrUe"); + // _configurationDictionary.Add("proxyAddress", string.Empty); // _configurationDictionary.Add("proxyPort", string.Empty); // _configurationDictionary.Add("proxyUsername", string.Empty); // _configurationDictionary.Add("proxyPassword", string.Empty); - - return _configurationDictionary; } From 7b9edc68c35e12d529d8c8efa8b2022ac2e069fb Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 11 Nov 2020 16:50:03 +0530 Subject: [PATCH 034/161] Update to v0.0.1.7 --- src/SampleCode.csproj | 14 +- .../InvoiceSettings/UpdateInvoiceSettings.cs | 6 +- ...onWithInstrumentIdentifierTokenCreation.cs | 124 ++++++++++++++++++ ...rizationWithInstrumentIdentifierTokenId.cs | 102 ++++++++++++++ .../Refund/ElectronicCheckFollowonRefund.cs | 68 ++++++++++ .../GetNotificationOfChanges.cs | 4 +- .../GetPaymentBatchSummaryData.cs | 4 +- ...teCustomerDefaultPaymentInstrumentCard.cs} | 4 +- ...CustomerNonDefaultPaymentInstrumentCard.cs | 77 +++++++++++ .../DeleteCustomerPaymentInstrument.cs | 2 +- ...> CreateCustomerDefaultShippingAddress.cs} | 4 +- ...CreateCustomerNonDefaultShippingAddress.cs | 61 +++++++++ .../DeleteCustomerShippingAddress.cs | 2 +- .../UpdatePaymentInstrument.cs | 76 +++++++++++ src/packages.config | 2 +- 15 files changed, 535 insertions(+), 15 deletions(-) create mode 100644 src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs create mode 100644 src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs create mode 100644 src/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs rename src/Samples/TokenManagement/CustomerPaymentInstrument/{CreateCustomerPaymentInstrumentCard.cs => CreateCustomerDefaultPaymentInstrumentCard.cs} (95%) create mode 100644 src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs rename src/Samples/TokenManagement/CustomerShippingAddress/{CreateShippingAddress.cs => CreateCustomerDefaultShippingAddress.cs} (94%) create mode 100644 src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs create mode 100644 src/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj index 0e6ec40..ff18ebe 100644 --- a/src/SampleCode.csproj +++ b/src/SampleCode.csproj @@ -43,9 +43,9 @@ False ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll - + False - ..\packages\CyberSource.Rest.Client.0.0.1.6\lib\cybersource-rest-client-dotnet.dll + ..\packages\CyberSource.Rest.Client.0.0.1.7\lib\cybersource-rest-client-dotnet.dll ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -153,6 +153,8 @@ + + @@ -183,6 +185,7 @@ + @@ -236,13 +239,15 @@ + + - - + + @@ -264,6 +269,7 @@ + diff --git a/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs b/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs index 6505a57..a676663 100644 --- a/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs +++ b/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs @@ -24,14 +24,16 @@ public static InvoicingV2InvoiceSettingsGet200Response Run() string invoiceSettingsInformationDeliveryLanguage = "en-US"; string invoiceSettingsInformationDefaultCurrencyCode = "USD"; - InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformation invoiceSettingsInformation = new InvoicingV2InvoiceSettingsGet200ResponseInvoiceSettingsInformation( + string invoiceSettingsInformationPayerAuthenticationInInvoicing = "enable"; + Invoicingv2invoiceSettingsInvoiceSettingsInformation invoiceSettingsInformation = new Invoicingv2invoiceSettingsInvoiceSettingsInformation( MerchantLogo: invoiceSettingsInformationMerchantLogo, MerchantDisplayName: invoiceSettingsInformationMerchantDisplayName, CustomEmailMessage: invoiceSettingsInformationCustomEmailMessage, EnableReminders: invoiceSettingsInformationEnableReminders, HeaderStyle: invoiceSettingsInformationHeaderStyle, DeliveryLanguage: invoiceSettingsInformationDeliveryLanguage, - DefaultCurrencyCode: invoiceSettingsInformationDefaultCurrencyCode + DefaultCurrencyCode: invoiceSettingsInformationDefaultCurrencyCode, + PayerAuthenticationInInvoicing: invoiceSettingsInformationPayerAuthenticationInInvoicing ); var requestObj = new InvoiceSettingsRequest( diff --git a/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs b/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs new file mode 100644 index 0000000..e2912fb --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithInstrumentIdentifierTokenCreation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("TOKEN_CREATE"); + + List processingInformationActionTokenTypes = new List (); + processingInformationActionTokenTypes.Add("instrumentIdentifier"); + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + ActionTokenTypes: processingInformationActionTokenTypes, + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "John"; + string orderInformationShipToLastName = "Doe"; + string orderInformationShipToAddress1 = "1 Market St"; + string orderInformationShipToLocality = "san francisco"; + string orderInformationShipToAdministrativeArea = "CA"; + string orderInformationShipToPostalCode = "94105"; + string orderInformationShipToCountry = "US"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs b/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs new file mode 100644 index 0000000..4ae38ac --- /dev/null +++ b/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithInstrumentIdentifierTokenId + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationCardExpirationMonth = "03"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + string paymentInformationInstrumentIdentifierId = "7010000000016241111"; + Ptsv2paymentsPaymentInformationInstrumentIdentifier paymentInformationInstrumentIdentifier = new Ptsv2paymentsPaymentInformationInstrumentIdentifier( + Id: paymentInformationInstrumentIdentifierId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + InstrumentIdentifier: paymentInformationInstrumentIdentifier + ); + + string orderInformationAmountDetailsTotalAmount = "200"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "900 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "9321499232"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs b/src/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs new file mode 100644 index 0000000..a4a18c7 --- /dev/null +++ b/src/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ElectronicCheckFollowonRefund + { + public static PtsV2PaymentsRefundPost201Response Run() + { + var id = ElectronicCheckDebits.Run().Id; + + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + Ptsv2paymentsidrefundsProcessingInformation processingInformation = new Ptsv2paymentsidrefundsProcessingInformation( + ); + + string paymentInformationPaymentTypeName = "CHECK"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "100"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new RefundPaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new RefundApi(clientConfig); + PtsV2PaymentsRefundPost201Response result = apiInstance.RefundPayment(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs b/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs index 302b850..8f4d0d4 100644 --- a/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs +++ b/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs @@ -11,8 +11,8 @@ public class GetNotificationOfChanges { public static ReportingV3NotificationofChangesGet200Response Run() { - var startTime = DateTime.ParseExact("2020-03-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2020-03-10T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2020-09-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-09-10T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); try { var configDictionary = new Configuration().GetConfiguration(); diff --git a/src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs b/src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs index 14ec009..6084062 100644 --- a/src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs +++ b/src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs @@ -11,8 +11,8 @@ public class GetPaymentBatchSummaryData { public static ReportingV3PaymentBatchSummariesGet200Response Run() { - var startTime = DateTime.ParseExact("2019-05-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2019-08-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2020-10-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-10-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; string rollUp = null; string breakdown = null; diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentCard.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs similarity index 95% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentCard.cs rename to src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs index 87e0e8b..d314a5d 100644 --- a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentCard.cs +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs @@ -7,11 +7,12 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { - public class CreateCustomerPaymentInstrumentCard + public class CreateCustomerDefaultPaymentInstrumentCard { public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + bool _default = true; string cardExpirationMonth = "12"; string cardExpirationYear = "2031"; string cardType = "001"; @@ -50,6 +51,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() ); var requestObj = new PostCustomerPaymentInstrumentRequest( + _Default: _default, Card: card, BillTo: billTo, InstrumentIdentifier: instrumentIdentifier diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs new file mode 100644 index 0000000..8cf22bd --- /dev/null +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateCustomerNonDefaultPaymentInstrumentCard + { + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + bool _default = false; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2031"; + string cardType = "001"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType + ); + + string billToFirstName = "John"; + string billToLastName = "Doe"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; + string billToCountry = "US"; + string billToEmail = "test@cybs.com"; + string billToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + string instrumentIdentifierId = "7010000000016241111"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId + ); + + var requestObj = new PostCustomerPaymentInstrumentRequest( + _Default: _default, + Card: card, + BillTo: billTo, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs b/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs index b541d81..5965d28 100644 --- a/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs +++ b/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs @@ -12,7 +12,7 @@ public class DeleteCustomerPaymentInstrument public static void Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; - string paymentInstrumentTokenId = CreateCustomerPaymentInstrumentCard.Run().Id; + string paymentInstrumentTokenId = CreateCustomerNonDefaultPaymentInstrumentCard.Run().Id; try { var configDictionary = new Configuration().GetConfiguration(); diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/CreateShippingAddress.cs b/src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs similarity index 94% rename from src/Samples/TokenManagement/CustomerShippingAddress/CreateShippingAddress.cs rename to src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs index 0cbdf0d..507b7c4 100644 --- a/src/Samples/TokenManagement/CustomerShippingAddress/CreateShippingAddress.cs +++ b/src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs @@ -7,11 +7,12 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { - public class CreateShippingAddress + public class CreateCustomerDefaultShippingAddress { public static Tmsv2customersEmbeddedDefaultShippingAddress Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + bool _default = true; string shipToFirstName = "John"; string shipToLastName = "Doe"; string shipToCompany = "CyberSource"; @@ -36,6 +37,7 @@ public static Tmsv2customersEmbeddedDefaultShippingAddress Run() ); var requestObj = new PostCustomerShippingAddressRequest( + _Default: _default, ShipTo: shipTo ); diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs b/src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs new file mode 100644 index 0000000..634987a --- /dev/null +++ b/src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class CreateCustomerNonDefaultShippingAddress + { + public static Tmsv2customersEmbeddedDefaultShippingAddress Run() + { + string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; + bool _default = false; + string shipToFirstName = "John"; + string shipToLastName = "Doe"; + string shipToCompany = "CyberSource"; + string shipToAddress1 = "1 Market St"; + string shipToLocality = "San Francisco"; + string shipToAdministrativeArea = "CA"; + string shipToPostalCode = "94105"; + string shipToCountry = "US"; + string shipToEmail = "test@cybs.com"; + string shipToPhoneNumber = "4158880000"; + Tmsv2customersEmbeddedDefaultShippingAddressShipTo shipTo = new Tmsv2customersEmbeddedDefaultShippingAddressShipTo( + FirstName: shipToFirstName, + LastName: shipToLastName, + Company: shipToCompany, + Address1: shipToAddress1, + Locality: shipToLocality, + AdministrativeArea: shipToAdministrativeArea, + PostalCode: shipToPostalCode, + Country: shipToCountry, + Email: shipToEmail, + PhoneNumber: shipToPhoneNumber + ); + + var requestObj = new PostCustomerShippingAddressRequest( + _Default: _default, + ShipTo: shipTo + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CustomerShippingAddressApi(clientConfig); + Tmsv2customersEmbeddedDefaultShippingAddress result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs b/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs index 111e0bb..6f483e0 100644 --- a/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs +++ b/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs @@ -12,7 +12,7 @@ public class DeleteCustomerShippingAddress public static void Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; - string shippingAddressTokenId = CreateShippingAddress.Run().Id; + string shippingAddressTokenId = CreateCustomerNonDefaultShippingAddress.Run().Id; try { var configDictionary = new Configuration().GetConfiguration(); diff --git a/src/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs b/src/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs new file mode 100644 index 0000000..4077d30 --- /dev/null +++ b/src/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class UpdatePaymentInstrument + { + public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + var paymentInstrumentTokenId = "888454C31FB6150CE05340588D0AA9BE"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2031"; + string cardType = "visa"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + Type: cardType + ); + + string billToFirstName = "Jack"; + string billToLastName = "Smith"; + string billToCompany = "CyberSource"; + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; + string billToCountry = "US"; + string billToEmail = "updatedemail@cybs.com"; + string billToPhoneNumber = "4158888674"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentBillTo( + FirstName: billToFirstName, + LastName: billToLastName, + Company: billToCompany, + Address1: billToAddress1, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry, + Email: billToEmail, + PhoneNumber: billToPhoneNumber + ); + + string instrumentIdentifierId = "7010000000016241111"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier instrumentIdentifier = new Tmsv2customersEmbeddedDefaultPaymentInstrumentInstrumentIdentifier( + Id: instrumentIdentifierId + ); + + var requestObj = new PatchPaymentInstrumentRequest( + Card: card, + BillTo: billTo, + InstrumentIdentifier: instrumentIdentifier + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentInstrumentApi(clientConfig); + Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PatchPaymentInstrument(paymentInstrumentTokenId, requestObj, profileid); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/src/packages.config b/src/packages.config index 8364da5..6622a03 100644 --- a/src/packages.config +++ b/src/packages.config @@ -1,7 +1,7 @@ - + From a68a9821545de7f24851b59b4a25ddbf44ced20a Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 11 Nov 2020 18:00:03 +0530 Subject: [PATCH 035/161] + Reverting Configuration Changes --- src/Configuration.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Configuration.cs b/src/Configuration.cs index cca6525..93e86ab 100644 --- a/src/Configuration.cs +++ b/src/Configuration.cs @@ -10,14 +10,14 @@ public class Configuration public Dictionary GetConfiguration() { _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); - _configurationDictionary.Add("merchantID", "merchannt998"); - _configurationDictionary.Add("merchantsecretKey", "X+ynT3aTCD643tZgnEnnLD+sd5pplDGMw5vG5klPvVY="); - _configurationDictionary.Add("merchantKeyId", "7a7f20a6-1f7f-4780-9a79-3ff8acf7cc83"); + _configurationDictionary.Add("merchantID", "testrest"); + _configurationDictionary.Add("merchantsecretKey", "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="); + _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); _configurationDictionary.Add("keysDirectory", "Resource"); - _configurationDictionary.Add("keyFilename", "developercp"); + _configurationDictionary.Add("keyFilename", "testrest"); _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); _configurationDictionary.Add("keyAlias", "testrest"); - _configurationDictionary.Add("keyPass", "developercp"); + _configurationDictionary.Add("keyPass", "testrest"); _configurationDictionary.Add("enableLog", "FALSE"); _configurationDictionary.Add("logDirectory", string.Empty); _configurationDictionary.Add("logFileName", string.Empty); @@ -25,8 +25,8 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("timeout", "300000"); // Configs related to meta key - _configurationDictionary.Add("portfolioID", "developercp"); - _configurationDictionary.Add("useMetaKey", "TrUe"); + _configurationDictionary.Add("portfolioID", string.Empty); + _configurationDictionary.Add("useMetaKey", "false"); // _configurationDictionary.Add("proxyAddress", string.Empty); // _configurationDictionary.Add("proxyPort", string.Empty); From 3ad318e4ee9b255a37941618a56ce9da11df01b5 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 13 Nov 2020 10:11:13 +0530 Subject: [PATCH 036/161] Merged .NET Framework 4.6.1 and .NET Core 3.1 Sample Code applications to same code base --- .gitignore | 357 +-------- .travis.yml | 13 +- NLog.config | 23 + src/NLog.xsd => NLog.xsd | 0 README.md | 68 +- README_Net461.md | 79 ++ README_NetCore.md | 146 ++++ {src => Source}/Api.cs | 0 Source/App.config | 30 + .../AuthenticationData/Configuration.cs | 0 .../AuthenticationData/RequestData.cs | 0 {src => Source}/Configuration.cs | 0 {src => Source}/Properties/AssemblyInfo.cs | 21 +- {src => Source}/Resource/AuthTRRReport.json | 0 {src => Source}/Resource/DownloadReport.csv | 0 Source/Resource/DownloadedFileWithFileID.csv | 2 + {src => Source}/Resource/NumericUtility.cs | 0 {src => Source}/Resource/TRRReport.json | 0 Source/Resource/jwsToken.txt | 1 + {src => Source}/Resource/mcb_test_merch.p12 | Bin .../Resource/request_captures.json | 0 .../Resource/request_payments.json | 0 {src => Source}/Resource/request_refund.json | 0 .../Resource/request_reversals.json | 0 {src => Source}/Resource/request_void.json | 0 Source/Resource/signatureHeaderValue.txt | 1 + {src => Source}/Resource/testrest.p12 | Bin {src => Source}/Resource/testrest_cpctv.p12 | Bin {src => Source}/SampleCode.cs | 681 +++++++++--------- .../CallHttpMethods/DeleteMethod.cs | 0 .../CallHttpMethods/GetMethod.cs | 0 .../CallHttpMethods/GetObjectMethod.cs | 0 .../CallHttpMethods/PostMethod.cs | 2 +- .../CallHttpMethods/PostObjectMethod.cs | 0 .../CallHttpMethods/PutMethod.cs | 2 +- .../DeleteGenerateHeaders.cs | 0 .../GetGenerateHeaders.cs | 0 .../PostGenerateHeaders.cs | 2 +- .../PutGenerateHeaders.cs | 2 +- .../Authentication/StandAloneHttpSignature.cs | 2 +- .../Samples/Authentication/StandAloneJWT.cs | 4 +- .../Samples/FlexMicroform/FlexTokenizeCard.cs | 0 .../Samples/FlexMicroform/GenerateKey.cs | 0 .../GenerateKeyLegacyTokenFormat.cs | 0 .../InvoiceSettings/GetInvoiceSettings.cs | 0 .../InvoiceSettings/UpdateInvoiceSettings.cs | 0 .../CreateAndSendInvoiceImmediately.cs | 0 .../Invoicing/Invoices/CreateDraftInvoice.cs | 0 ...InvoiceAndAssignItSpecificInvoiceNumber.cs | 0 .../Invoices/CreateInvoiceWithoutSendingIt.cs | 0 .../Invoicing/Invoices/GetInvoiceDetails.cs | 0 .../AuthenticationWithNORedirect.cs | 0 .../AuthenticationWithNewAccount.cs | 0 ...nrollWithCustomerIdAsPaymentInformation.cs | 0 .../EnrollWithPendingAuthentication.cs | 0 .../EnrollWithTransientToken.cs | 0 .../EnrollWithTravelInformation.cs | 0 .../PendingAuthenticationWithUnknownPath.cs | 0 .../SetupCompletionWithCardNumber.cs | 0 .../SetupCompletionWithFlexTransientToken.cs | 0 ...ionWithFluidDataValueAndPaymentSolution.cs | 0 .../SetupCompletionWithSecureStorageToken.cs | 0 .../SetupCompletionWithTMSToken.cs | 0 .../SetupCompletionWithTokenizedCard.cs | 0 .../ValidateAuthenticationResults.cs | 0 ...eOfAuthorizationThatUsedSwipedTrackData.cs | 0 .../Payments/Capture/CapturePayment.cs | 0 .../Capture/CapturePaymentServiceFee.cs | 0 .../Capture/RestaurantCaptureWithGratuity.cs | 0 .../Samples/Payments/Credit/Credit.cs | 0 ...finPCIP2PEForCardPresentEnabledAcquirer.cs | 0 ...ngBluefinPCIP2PEWithVisaPlatformConnect.cs | 0 ...mentInstrumentAndShippingAddressTokenId.cs | 0 .../Credit/CreditWithCustomerTokenId.cs | 0 .../CreditWithInstrumentIdentifierTokenId.cs | 0 .../ElectronicCheckStandAloneCredits.cs | 0 .../Payments/Credit/ServiceFeesCredit.cs | 0 ...AmericanExpressDirectEMVWithContactRead.cs | 0 .../AuthorizationCaptureForTimeoutVoidFlow.cs | 0 ...rizationForIncrementalAuthorizationFlow.cs | 0 .../AuthorizationForTimeoutReversalFlow.cs | 0 ...SkipDecisionManagerForSingleTransaction.cs | 0 ...finPCIP2PEForCardPresentEnabledAcquirer.cs | 0 ...ngBluefinPCIP2PEWithVisaPlatformConnect.cs | 0 .../AuthorizationUsingSwipedTrackData.cs | 0 .../Payments/AuthorizationWithCaptureSale.cs | 0 ...mentInstrumentAndShippingAddressTokenId.cs | 0 .../AuthorizationWithCustomerTokenCreation.cs | 0 .../AuthorizationWithCustomerTokenId.cs | 0 .../AuthorizationWithDMAcceptPAEnroll.cs | 0 .../AuthorizationWithDMRejectPAEnroll.cs | 0 .../AuthorizationWithDMReviewPAEnroll.cs | 0 .../AuthorizationWithDecisionManager.cs | 0 ...tionWithDecisionManagerBuyerInformation.cs | 0 ...orizationWithDecisionManagerCustomSetup.cs | 0 ...ionWithDecisionManagerDeviceInformation.cs | 0 ...cisionManagerMerchantDefinedInformation.cs | 0 ...nWithDecisionManagerShippingInformation.cs | 0 ...ionWithDecisionManagerTravelInformation.cs | 0 ...onWithInstrumentIdentifierTokenCreation.cs | 0 ...rizationWithInstrumentIdentifierTokenId.cs | 0 .../Payments/AuthorizationWithLegacyToken.cs | 0 ...izationWithPAEnrollAuthenticationNeeded.cs | 0 .../AuthorizationWithPayerAuthValidation.cs | 0 .../Payments/DigitalPaymentGooglePay.cs | 0 .../Payments/DigitalPaymentsApplePay.cs | 0 .../Payments/ElectronicCheckDebits.cs | 0 .../ElectronicCheckDebitsWithLegacyToken.cs | 0 .../Payments/IncrementalAuthorization.cs | 0 .../Samples/Payments/Payments/LevelIIData.cs | 0 .../Samples/Payments/Payments/LevelIIIData.cs | 0 .../Payments/Payments/PartialAuthorization.cs | 0 .../Payments/PaymentNetworkTokenization.cs | 0 .../Payments/Payments/PaymentWithFlexToken.cs | 0 ...entWithFlexTokenCreatePermanentTMSToken.cs | 0 .../Payments/RestaurantAuthorization.cs | 0 ...actReadOneForCardPresentEnabledAcquirer.cs | 0 ...actReadTwoForCardPresentEnabledAcquirer.cs | 0 ...yWithContactReadWithVisaPlatformConnect.cs | 0 .../SaleUsingEMVTechnologyWithContactless.cs | 0 ...ctlessReadForCardPresentEnabledAcquirer.cs | 0 ...hContactlessReadWithVisaPlatformConnect.cs | 0 ...gKeyedDataForCardPresentEnabledAcquirer.cs | 0 .../SaleUsingKeyedDataWithBalanceInquiry.cs | 0 ...leUsingKeyedDataWithVisaPlatformConnect.cs | 0 ...dTrackDataForCardPresentEnabledAcquirer.cs | 0 ...gSwipedTrackDataWithVisaPlatformConnect.cs | 0 .../ServiceFeesWithCreditCardTransaction.cs | 0 .../Payments/SimpleAuthorizationInternet.cs | 0 .../Samples/Payments/Payments/Swiped.cs | 0 .../Payments/ZeroDollarAuthorization.cs | 0 .../Refund/ElectronicCheckFollowonRefund.cs | 0 .../Samples/Payments/Refund/RefundCapture.cs | 0 .../Samples/Payments/Refund/RefundPayment.cs | 0 .../Reversal/ProcessAuthorizationReversal.cs | 0 .../ServiceFeesAuthorizationReversal.cs | 0 .../Payments/Reversal/TimeoutReversal.cs | 0 .../Samples/Payments/Void/TimeoutVoid.cs | 0 .../Samples/Payments/Void/VoidCapture.cs | 0 .../Samples/Payments/Void/VoidCredit.cs | 0 .../Samples/Payments/Void/VoidPayment.cs | 0 .../Samples/Payments/Void/VoidRefund.cs | 0 .../Samples/Payouts/PayoutCardNotToken.cs | 0 .../Samples/Payouts/PayoutToken.cs | 0 .../GetConversionDetailTransactions.cs | 0 ...tfundingInformationForAccountOrMerchant.cs | 0 .../GetNotificationOfChanges.cs | 0 .../GetPaymentBatchSummaryData.cs | 0 .../GetPurchaseAndRefundDetails.cs | 0 .../ReportDefinitions/GetReportDefinition.cs | 0 .../GetReportingResourceInformation.cs | 0 .../ReportDownloads/DownloadReport.cs | 0 ...CreateClassicStandardReportSubscription.cs | 0 .../CreateReportSubscription.cs | 0 ...eSubscriptionOfReportNameByOrganization.cs | 0 .../GetAllSubscriptions.cs | 0 .../GetSubscriptionForReportName.cs | 0 .../Reporting/Reports/CreateAdhocReport.cs | 0 .../Reports/GetReportBasedOnReportId.cs | 0 .../Reports/RetrieveAvailableReports.cs | 0 .../DecisionManager/AddDataToList.cs | 0 .../AddDuplicateInformation.cs | 0 .../DecisionManager/BasicDMTransaction.cs | 0 .../DecisionManager/DMWithBuyerInformation.cs | 0 .../DMWithDecisionProfileRejectResponse.cs | 0 .../DMWithDeviceInformation.cs | 0 .../DMWithMerchantDefinedInformation.cs | 0 .../DMWithScoreExceedsThresholdResponse.cs | 0 .../DMWithShippingInformation.cs | 0 .../DMWithTravelInformation.cs | 0 .../DecisionManager/MarkAsSuspect.cs | 0 .../DecisionManager/RemoveFromHistory.cs | 0 .../Verification/AddressMatchNotFound.cs | 0 .../ApartmentNumberMissingOrNotFound.cs | 0 .../Verification/CanadianBillingDetails.cs | 0 .../Verification/ComplianceStatusCompleted.cs | 0 .../CustomerMatchDeniedPartiesList.cs | 0 .../ExportComplianceInformationProvided.cs | 0 .../Verification/MultipleLineItems.cs | 0 .../Verification/MultipleSanctionLists.cs | 0 .../Verification/NoCompanyName.cs | 0 .../ShippingDetailsNotUSOrCanada.cs | 0 .../VerboseRequestWithAllFields.cs | 0 .../DownloadFileWithFileIdentifier.cs | 0 .../Samples/SecureFileShare/GetListOfFiles.cs | 0 .../Customer/CreateCustomer.cs | 0 .../Customer/DeleteCustomer.cs | 0 .../Customer/RetrieveCustomer.cs | 0 .../Customer/UpdateCustomer.cs | 0 ...UpdateCustomersDefaultPaymentInstrument.cs | 0 .../UpdateCustomersDefaultShippingAddress.cs | 0 ...ateCustomerDefaultPaymentInstrumentCard.cs | 0 ...CustomerNonDefaultPaymentInstrumentCard.cs | 0 ...ateCustomerPaymentInstrumentBankAccount.cs | 0 ...teCustomerPaymentInstrumentPinlessDebit.cs | 0 .../DeleteCustomerPaymentInstrument.cs | 0 .../ListPaymentInstrumentsForCustomer.cs | 0 .../RetrieveCustomerPaymentInstrument.cs | 0 .../CreateCustomerDefaultShippingAddress.cs | 0 ...CreateCustomerNonDefaultShippingAddress.cs | 0 .../DeleteCustomerShippingAddress.cs | 0 .../ListShippingAddressesForCustomer.cs | 0 .../RetrieveCustomerShippingAddress.cs | 0 .../CreateInstrumentIdentifierBankAccount.cs | 0 .../CreateInstrumentIdentifierCard.cs | 0 ...mentIdentifierCardEnrollForNetworkToken.cs | 0 .../DeleteInstrumentIdentifier.cs | 0 ...ymentInstrumentsForInstrumentIdentifier.cs | 0 .../RetrieveInstrumentIdentifier.cs | 0 ...strumentIdentifierPreviousTransactionId.cs | 0 .../CreatePaymentInstrumentBankAccount.cs | 0 .../CreatePaymentInstrumentCard.cs | 0 .../CreatePaymentInstrumentPinlessDebit.cs | 0 .../DeletePaymentInstrument.cs | 0 .../RetrievePaymentInstrument.cs | 0 .../UpdatePaymentInstrument.cs | 0 .../GetIndividualBatchFile.cs | 0 .../TransactionBatches/GetListOfBatchFiles.cs | 0 .../GetTransactionDetailsForGivenBatchId.cs | 0 .../TransactionDetails/RetrieveTransaction.cs | 0 .../TransactionSearch/CreateSearchRequest.cs | 0 .../TransactionSearch/GetSearchResults.cs | 0 .../GetUserInformationDeprecated.cs | 0 .../BasicTaxCalculationRequest.cs | 0 .../CommittedTaxCallRequest.cs | 0 .../CommittedTaxRefundCallRequest.cs | 0 .../ValueAddedService/TaxRefundRequest.cs | 0 .../ValueAddedService/VoidCommittedTaxCall.cs | 0 {src => Source}/Utilities.cs | 0 ...Cybersource.Authentication.NetStandard.dll | Bin 0 -> 30208 bytes .../cybersource-rest-client-netstandard.dll | Bin 0 -> 3022336 bytes {src/lib => Source/lib/net461}/ApiSdk.dll | Bin Source/lib/netstandard/ApiSdk.dll | Bin 0 -> 28160 bytes cybersource-rest-samples-csharp.csproj | 325 +++++++++ cybersource-rest-samples-csharp.sln | 12 +- cybersource-rest-samples-netcore.csproj | 76 ++ cybersource-rest-samples-netcore.sln | 25 + src/packages.config => packages.config | 0 src/App.config | 107 --- src/CybsPayments.ruleset | 76 -- src/SampleCode.csproj | 329 --------- 241 files changed, 1093 insertions(+), 1293 deletions(-) create mode 100644 NLog.config rename src/NLog.xsd => NLog.xsd (100%) create mode 100644 README_Net461.md create mode 100644 README_NetCore.md rename {src => Source}/Api.cs (100%) create mode 100644 Source/App.config rename {src => Source}/AuthenticationData/Configuration.cs (100%) rename {src => Source}/AuthenticationData/RequestData.cs (100%) rename {src => Source}/Configuration.cs (100%) rename {src => Source}/Properties/AssemblyInfo.cs (72%) rename {src => Source}/Resource/AuthTRRReport.json (100%) rename {src => Source}/Resource/DownloadReport.csv (100%) create mode 100644 Source/Resource/DownloadedFileWithFileID.csv rename {src => Source}/Resource/NumericUtility.cs (100%) rename {src => Source}/Resource/TRRReport.json (100%) create mode 100644 Source/Resource/jwsToken.txt rename {src => Source}/Resource/mcb_test_merch.p12 (100%) rename {src => Source}/Resource/request_captures.json (100%) rename {src => Source}/Resource/request_payments.json (100%) rename {src => Source}/Resource/request_refund.json (100%) rename {src => Source}/Resource/request_reversals.json (100%) rename {src => Source}/Resource/request_void.json (100%) create mode 100644 Source/Resource/signatureHeaderValue.txt rename {src => Source}/Resource/testrest.p12 (100%) rename {src => Source}/Resource/testrest_cpctv.p12 (100%) rename {src => Source}/SampleCode.cs (95%) rename {src => Source}/Samples/Authentication/CallHttpMethods/DeleteMethod.cs (100%) rename {src => Source}/Samples/Authentication/CallHttpMethods/GetMethod.cs (100%) rename {src => Source}/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs (100%) rename {src => Source}/Samples/Authentication/CallHttpMethods/PostMethod.cs (94%) rename {src => Source}/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs (100%) rename {src => Source}/Samples/Authentication/CallHttpMethods/PutMethod.cs (95%) rename {src => Source}/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs (100%) rename {src => Source}/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs (100%) rename {src => Source}/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs (96%) rename {src => Source}/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs (96%) rename {src => Source}/Samples/Authentication/StandAloneHttpSignature.cs (99%) rename {src => Source}/Samples/Authentication/StandAloneJWT.cs (98%) rename {src => Source}/Samples/FlexMicroform/FlexTokenizeCard.cs (100%) rename {src => Source}/Samples/FlexMicroform/GenerateKey.cs (100%) rename {src => Source}/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs (100%) rename {src => Source}/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs (100%) rename {src => Source}/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs (100%) rename {src => Source}/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs (100%) rename {src => Source}/Samples/Invoicing/Invoices/CreateDraftInvoice.cs (100%) rename {src => Source}/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs (100%) rename {src => Source}/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs (100%) rename {src => Source}/Samples/Invoicing/Invoices/GetInvoiceDetails.cs (100%) rename {src => Source}/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs (100%) rename {src => Source}/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs (100%) rename {src => Source}/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs (100%) rename {src => Source}/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs (100%) rename {src => Source}/Samples/PayerAuthentication/EnrollWithTransientToken.cs (100%) rename {src => Source}/Samples/PayerAuthentication/EnrollWithTravelInformation.cs (100%) rename {src => Source}/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs (100%) rename {src => Source}/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs (100%) rename {src => Source}/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs (100%) rename {src => Source}/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs (100%) rename {src => Source}/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs (100%) rename {src => Source}/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs (100%) rename {src => Source}/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs (100%) rename {src => Source}/Samples/PayerAuthentication/ValidateAuthenticationResults.cs (100%) rename {src => Source}/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs (100%) rename {src => Source}/Samples/Payments/Capture/CapturePayment.cs (100%) rename {src => Source}/Samples/Payments/Capture/CapturePaymentServiceFee.cs (100%) rename {src => Source}/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs (100%) rename {src => Source}/Samples/Payments/Credit/Credit.cs (100%) rename {src => Source}/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs (100%) rename {src => Source}/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs (100%) rename {src => Source}/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs (100%) rename {src => Source}/Samples/Payments/Credit/CreditWithCustomerTokenId.cs (100%) rename {src => Source}/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs (100%) rename {src => Source}/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs (100%) rename {src => Source}/Samples/Payments/Credit/ServiceFeesCredit.cs (100%) rename {src => Source}/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs (100%) rename {src => Source}/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs (100%) rename {src => Source}/Samples/Payments/Payments/DigitalPaymentGooglePay.cs (100%) rename {src => Source}/Samples/Payments/Payments/DigitalPaymentsApplePay.cs (100%) rename {src => Source}/Samples/Payments/Payments/ElectronicCheckDebits.cs (100%) rename {src => Source}/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs (100%) rename {src => Source}/Samples/Payments/Payments/IncrementalAuthorization.cs (100%) rename {src => Source}/Samples/Payments/Payments/LevelIIData.cs (100%) rename {src => Source}/Samples/Payments/Payments/LevelIIIData.cs (100%) rename {src => Source}/Samples/Payments/Payments/PartialAuthorization.cs (100%) rename {src => Source}/Samples/Payments/Payments/PaymentNetworkTokenization.cs (100%) rename {src => Source}/Samples/Payments/Payments/PaymentWithFlexToken.cs (100%) rename {src => Source}/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs (100%) rename {src => Source}/Samples/Payments/Payments/RestaurantAuthorization.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs (100%) rename {src => Source}/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs (100%) rename {src => Source}/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs (100%) rename {src => Source}/Samples/Payments/Payments/SimpleAuthorizationInternet.cs (100%) rename {src => Source}/Samples/Payments/Payments/Swiped.cs (100%) rename {src => Source}/Samples/Payments/Payments/ZeroDollarAuthorization.cs (100%) rename {src => Source}/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs (100%) rename {src => Source}/Samples/Payments/Refund/RefundCapture.cs (100%) rename {src => Source}/Samples/Payments/Refund/RefundPayment.cs (100%) rename {src => Source}/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs (100%) rename {src => Source}/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs (100%) rename {src => Source}/Samples/Payments/Reversal/TimeoutReversal.cs (100%) rename {src => Source}/Samples/Payments/Void/TimeoutVoid.cs (100%) rename {src => Source}/Samples/Payments/Void/VoidCapture.cs (100%) rename {src => Source}/Samples/Payments/Void/VoidCredit.cs (100%) rename {src => Source}/Samples/Payments/Void/VoidPayment.cs (100%) rename {src => Source}/Samples/Payments/Void/VoidRefund.cs (100%) rename {src => Source}/Samples/Payouts/PayoutCardNotToken.cs (100%) rename {src => Source}/Samples/Payouts/PayoutToken.cs (100%) rename {src => Source}/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs (100%) rename {src => Source}/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs (100%) rename {src => Source}/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs (100%) rename {src => Source}/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs (100%) rename {src => Source}/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs (100%) rename {src => Source}/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs (100%) rename {src => Source}/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs (100%) rename {src => Source}/Samples/Reporting/ReportDownloads/DownloadReport.cs (100%) rename {src => Source}/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs (100%) rename {src => Source}/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs (100%) rename {src => Source}/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs (100%) rename {src => Source}/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs (100%) rename {src => Source}/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs (100%) rename {src => Source}/Samples/Reporting/Reports/CreateAdhocReport.cs (100%) rename {src => Source}/Samples/Reporting/Reports/GetReportBasedOnReportId.cs (100%) rename {src => Source}/Samples/Reporting/Reports/RetrieveAvailableReports.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/AddDataToList.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs (100%) rename {src => Source}/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/AddressMatchNotFound.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/CanadianBillingDetails.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/MultipleLineItems.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/MultipleSanctionLists.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/NoCompanyName.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs (100%) rename {src => Source}/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs (100%) rename {src => Source}/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs (100%) rename {src => Source}/Samples/SecureFileShare/GetListOfFiles.cs (100%) rename {src => Source}/Samples/TokenManagement/Customer/CreateCustomer.cs (100%) rename {src => Source}/Samples/TokenManagement/Customer/DeleteCustomer.cs (100%) rename {src => Source}/Samples/TokenManagement/Customer/RetrieveCustomer.cs (100%) rename {src => Source}/Samples/TokenManagement/Customer/UpdateCustomer.cs (100%) rename {src => Source}/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs (100%) rename {src => Source}/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs (100%) rename {src => Source}/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs (100%) rename {src => Source}/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs (100%) rename {src => Source}/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs (100%) rename {src => Source}/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs (100%) rename {src => Source}/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs (100%) rename {src => Source}/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs (100%) rename {src => Source}/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs (100%) rename {src => Source}/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs (100%) rename {src => Source}/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs (100%) rename {src => Source}/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs (100%) rename {src => Source}/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs (100%) rename {src => Source}/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs (100%) rename {src => Source}/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs (100%) rename {src => Source}/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs (100%) rename {src => Source}/Samples/TransactionBatches/GetIndividualBatchFile.cs (100%) rename {src => Source}/Samples/TransactionBatches/GetListOfBatchFiles.cs (100%) rename {src => Source}/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs (100%) rename {src => Source}/Samples/TransactionDetails/RetrieveTransaction.cs (100%) rename {src => Source}/Samples/TransactionSearch/CreateSearchRequest.cs (100%) rename {src => Source}/Samples/TransactionSearch/GetSearchResults.cs (100%) rename {src => Source}/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs (100%) rename {src => Source}/Samples/ValueAddedService/BasicTaxCalculationRequest.cs (100%) rename {src => Source}/Samples/ValueAddedService/CommittedTaxCallRequest.cs (100%) rename {src => Source}/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs (100%) rename {src => Source}/Samples/ValueAddedService/TaxRefundRequest.cs (100%) rename {src => Source}/Samples/ValueAddedService/VoidCommittedTaxCall.cs (100%) rename {src => Source}/Utilities.cs (100%) create mode 100644 Source/lib/Cybersource.Authentication.NetStandard.dll create mode 100644 Source/lib/cybersource-rest-client-netstandard.dll rename {src/lib => Source/lib/net461}/ApiSdk.dll (100%) create mode 100644 Source/lib/netstandard/ApiSdk.dll create mode 100644 cybersource-rest-samples-csharp.csproj create mode 100644 cybersource-rest-samples-netcore.csproj create mode 100644 cybersource-rest-samples-netcore.sln rename src/packages.config => packages.config (100%) delete mode 100644 src/App.config delete mode 100644 src/CybsPayments.ruleset delete mode 100644 src/SampleCode.csproj diff --git a/.gitignore b/.gitignore index d5bb44b..6f7338a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,352 +1,5 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# 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/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# 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 - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -**/Properties/launchSettings.json - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.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 - -# Visual Studio Trace Files -*.e2e - -# 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 - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# 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 -# Note: 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 -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable 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 -*.appx - -# 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 -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# 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 -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# 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 - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ -/src/RestSharp.xml -/src/RestSharp.dll -/src/NLog.xml -/src/NLog.dll -/src/Newtonsoft.Json.xml -/src/Newtonsoft.Json.dll -/src/jose-jwt.dll -/src/FlexServerSDK.xml -/src/FlexServerSDK.dll -/src/CyberSource.dll -/src/cybersource-rest-samples-dotnet.vshost.exe.config -/src/cybersource-rest-samples-dotnet.vshost.exe -/src/cybersource-rest-samples-dotnet.exe.config -/src/cybersource-rest-samples-dotnet.exe -/src/AuthenticationSdk.dll -/src/cybersource-rest-samples-dotnet.vshost.exe.manifest -/src/SampleCode.exe -/src/SampleCode.vshost.exe -/src/SampleCode.vshost.exe.config -/src/SampleCode.vshost.exe.manifest -/src/SampleCode.exe.config -/src/cybersource-rest-client-dotnet.dll +obj +packages +bin +cybersource-rest-samples-netcore.csproj.user +.vs diff --git a/.travis.yml b/.travis.yml index 8d4dad6..8c8d22c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ os: windows - + language: cpp - + before_install: - powershell -c "Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine" - powershell -c "Import-Module PackageManagement; Install-PackageProvider Nuget" @@ -13,12 +13,13 @@ before_install: - export PATH="c:\tools\NuGet.CommandLine\tools":$PATH install: + - choco install dotnetcore-sdk - nuget restore cybersource-rest-samples-csharp.sln before_script: - MSBuild.exe cybersource-rest-samples-csharp.sln - - cd src - + script: - - dir - - ./SampleCode.exe RunAll + - ./bin/Debug/net461/SampleCode.exe RunAll + - dotnet build cybersource-rest-samples-netcore.sln + - dotnet bin/Debug/netcoreapp3.1/SampleCodeNetCore.dll RunAll diff --git a/NLog.config b/NLog.config new file mode 100644 index 0000000..e6d0111 --- /dev/null +++ b/NLog.config @@ -0,0 +1,23 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NLog.xsd b/NLog.xsd similarity index 100% rename from src/NLog.xsd rename to NLog.xsd diff --git a/README.md b/README.md index e38055f..37cbc87 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,17 @@ # C# Sample Code for the CyberSource SDK -[![Travis CI Status](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp.svg?branch=master)](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp) -This repository contains working code samples which demonstrate C#/.NET integration with the CyberSource REST APIs through the [CyberSource .NET SDK](https://github.com/CyberSource/cybersource-rest-client-dotnet). + +This repository contains two applications that demonstrate integration with the CyberSource REST APIs through our SDKs. -## Using the Sample Code +## .NET Framework -The samples are all completely independent and self-contained. You can analyze them to get an understanding of how a particular method works, or you can use the snippets as a starting point for your own project. +The application `cybersource-rest-samples-csharp.sln` contains working code samples in a .NET 4.6.1 application which uses the [CyberSource .NET SDK](https://github.com/CyberSource/cybersource-rest-client-dotnet). -### Requirements -* .NET Framework 4.6.1 -* [CyberSource Account](https://developer.cybersource.com/api/developer-guides/dita-gettingstarted/registration.html) -* [CyberSource API Keys](https://developer.cybersource.com/api/developer-guides/dita-gettingstarted/registration/createCertSharedKey.html) +For a more detailed explanation of how to use this application, please refer to [README_Net461.md](./README_Net461.md). -The samples are organized into categories and common usage examples. +## .NET Core +The application `cybersource-rest-samples-netcore.sln` contains working code samples in a .NET Core 3.1 application the [CyberSource .NET Standard SDK](https://github.com/CyberSource/cybersource-rest-client-dotnetstandard). -### Running the Samples -* Clone this repository: -``` - $ git clone https://github.com/CyberSource/cybersource-rest-samples-csharp.git -``` -* Open the solution in Visual Studio and build: - -* Run the console app and select a sample to execute. - -## Setting Your API Credentials - -To set your API credentials for an API request,Configure the following information in src/Configuration.cs file: - - * Http - -``` - authenticationType = http_Signature - merchantID = your_merchant_id - merchantKeyId = your_key_serial_number - merchantsecretKey = your_key_shared_secret -``` - * Jwt - -``` - authenticationType = Jwt - merchantID = your_merchant_id - keyAlias = your_merchant_id - keyPassword = your_merchant_id - keyFileName = your_merchant_id - keysDirectory = Resource -``` - -## Switching between the sandbox environment and the production environment -CyberSource maintains a complete sandbox environment for testing and development purposes. This sandbox environment is an exact -duplicate of our production environment with the transaction authorization and settlement process simulated. By default, this SDK is -configured to communicate with the sandbox environment. To switch to the production environment, set the appropriate environment -constant in src/App.json file. For example: - -```csharp -// For TESTING use -_configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); -// For PRODUCTION use -// _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); -``` - - -The [API Reference Guide](https://developer.cybersource.com/api/reference/api-reference.html) provides examples of what information is needed for a particular request and how that information would be formatted. Using those examples, you can easily determine what methods would be necessary to include that information in a request -using this SDK. - - ## License -This repository is distributed under a proprietary license. +For a more detailed explanation of how to use this application, please refer to [README_NetCore.md](./README_NetCore.md). diff --git a/README_Net461.md b/README_Net461.md new file mode 100644 index 0000000..256ef64 --- /dev/null +++ b/README_Net461.md @@ -0,0 +1,79 @@ +# C# Sample Code for the CyberSource SDK + +[![Travis CI Status](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp.svg?branch=master)](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp) + +This repository contains working code samples which demonstrate C#/.NET integration with the CyberSource REST APIs through the [CyberSource .NET SDK](https://github.com/CyberSource/cybersource-rest-client-dotnet). + +## Using the Sample Code + +The samples are all completely independent and self-contained. You can analyze them to get an understanding of how a particular method works, or you can use the snippets as a starting point for your own project. + +### Requirements + +* .NET Framework 4.6.1 +* [CyberSource Account](https://developer.cybersource.com/api/developer-guides/dita-gettingstarted/registration.html) +* [CyberSource API Keys](https://developer.cybersource.com/api/developer-guides/dita-gettingstarted/registration/createCertSharedKey.html) + +The samples are organized into categories and common usage examples. + +### Running the Samples + +* Clone this repository. + + ```bash + git clone https://github.com/CyberSource/cybersource-rest-samples-csharp.git + ``` + +* Open the solution `cybersource-rest-samples-csharp.sln` in Visual Studio and perform a clean build. + +* Run the console app and select a sample to execute. + + The console app can be executed from the `Debug` menu in Visual Studio. + + Alternatively, the console app can also be executed from `command prompt`, run the following command. + + ```bash + bin\Debug\net461\SampleCode.exe + ``` + +## Setting Your API Credentials + +To set your API credentials for an API request, configure the following information in `Source\Configuration.cs` file: + +* Http + + ```lang-none + authenticationType = http_Signature + merchantID = your_merchant_id + merchantKeyId = your_key_serial_number + merchantsecretKey = your_key_shared_secret + ``` + +* Jwt + + ```lang-none + authenticationType = Jwt + merchantID = your_merchant_id + keyAlias = your_merchant_id + keyPassword = your_merchant_id + keyFileName = your_merchant_id + keysDirectory = Resource + ``` + +## Switching between the sandbox environment and the production environment + +CyberSource maintains a complete sandbox environment for testing and development purposes. This sandbox environment is an exact duplicate of our production environment with the transaction authorization and settlement process simulated. By default, this SDK is configured to communicate with the sandbox environment. To switch to the production environment, set the appropriate environment constant in `Source\Configuration.cs` file. For example: + +```csharp +// For TESTING use +_configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + +// For PRODUCTION use +// _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); +``` + +The [API Reference Guide](https://developer.cybersource.com/api/reference/api-reference.html) provides examples of what information is needed for a particular request and how that information would be formatted. Using those examples, you can easily determine what methods would be necessary to include that information in a request using this SDK. + +## License + +This repository is distributed under a proprietary license. diff --git a/README_NetCore.md b/README_NetCore.md new file mode 100644 index 0000000..2973155 --- /dev/null +++ b/README_NetCore.md @@ -0,0 +1,146 @@ +# .NET Core Sample Code for the CyberSource SDK + + + +This repository contains working code samples which demonstrate .NET Core integration with the CyberSource REST APIs through the [CyberSource .NET Standard SDK](https://github.com/CyberSource/cybersource-rest-client-dotnetstandard). + +## Using the Sample Code + +The samples are all completely independent and self-contained. You can analyze them to get an understanding of how a particular method works, or you can use the snippets as a starting point for your own project. + +### Requirements + +* .NET Core 3.1 / .NET Standard 2.1 +* Visual Studio 2019 +* [CyberSource Account](https://developer.cybersource.com/api/developer-guides/dita-gettingstarted/registration.html) +* [CyberSource API Keys](https://developer.cybersource.com/api/developer-guides/dita-gettingstarted/registration/createCertSharedKey.html) + +The samples are organized into categories and common usage examples. + +#### Caveats + +* Remember to add the installation path for the .NET Core/.NET Standard to the PATH environment variable. + +### Running the Samples + +#### Windows OS + +* Clone this repository + + ```bash + git clone https://github.com/CyberSource/cybersource-rest-samples-csharp.git + ``` + +* Open the solution `cybersource-rest-samples-netcore.sln` in Visual Studio 2019 and perform a clean build. + +* Run the console app and select a sample to execute. + + The console app can be executed from the `Debug` menu in Visual Studio 2019. + + Alternatively, the console app can also be executed from `command prompt`, run the following command. + + ```bash + dotnet bin\Debug\netcoreapp3.1\SampleCodeNetCore.dll + ``` + +#### Linux / Mac OS + +* Clone this repository. + + ```bash + git clone https://github.com/CyberSource/cybersource-rest-samples-csharp.git + ``` + +* Change directory to `cybersource-rest-samples-netcore` folder. + + ```bash + cd cybersource-rest-samples-netcore + ``` + +* Clean the `bin` folder to remove any previous build (if applicable). + + ```bash + rm -r -f bin/* + ``` + +* From the root directory of the repository, run the following command: + + ```bash + dotnet publish -c -r --self-contained + ``` + +* In this command, + + * For ``, accepted values are `Debug` and `Release`. + + * For ``, refer to [.NET Core RID Catalog](https://docs.microsoft.com/en-us/dotnet/core/rid-catalog) to find the proper **Runtime Identifier (RID)**. + + * This determines the location of the output files ( `bin//netcoreapp3.1//publish` ). + +* Move the output files from `bin//netcoreapp3.1//publish` to `bin//netcoreapp3.1`. + + ```bash + mv bin//netcoreapp3.1//publish/* bin//netcoreapp3.1 + ``` + +* Linux : Provide execute permissions for the DLL. + + ```bash + chmod 777 bin//netcoreapp3.1/SampleCodeNetCore.dll + ``` + +* Execute the console app and select a sample to execute. + + * Linux + + ```bash + ./bin//netcoreapp3.1/SampleCodeNetCore.dll + ``` + + * Mac OS + + ```bash + dotnet bin//netcoreapp3.1/SampleCodeNetCore.dll + ``` + +## Setting Your API Credentials + +To set your API credentials for an API request, configure the following information in `Source\Configuration.cs` file: + +* Http + + ```lang-none + authenticationType = http_Signature + merchantID = your_merchant_id + merchantKeyId = your_key_serial_number + merchantsecretKey = your_key_shared_secret + ``` + +* Jwt + + ```lang-none + authenticationType = Jwt + merchantID = your_merchant_id + keyAlias = your_merchant_id + keyPassword = your_merchant_id + keyFileName = your_merchant_id + keysDirectory = Resource + ``` + +## Switching between the sandbox environment and the production environment + +CyberSource maintains a complete sandbox environment for testing and development purposes. This sandbox environment is an exact duplicate of our production environment with the transaction authorization and settlement process simulated. By default, this SDK is configured to communicate with the sandbox environment. To switch to the production environment, set the appropriate environment constant in `Source\Configuration.cs` file. For example: + +```csharp +// For TESTING use +_configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + +// For PRODUCTION use +// _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); +``` + +The [API Reference Guide](https://developer.cybersource.com/api/reference/api-reference.html) provides examples of what information is needed for a particular request and how that information would be formatted. Using those examples, you can easily determine what methods would be necessary to include that information in a request using this SDK. + +## License + +This repository is distributed under a proprietary license. diff --git a/src/Api.cs b/Source/Api.cs similarity index 100% rename from src/Api.cs rename to Source/Api.cs diff --git a/Source/App.config b/Source/App.config new file mode 100644 index 0000000..aaf5744 --- /dev/null +++ b/Source/App.config @@ -0,0 +1,30 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AuthenticationData/Configuration.cs b/Source/AuthenticationData/Configuration.cs similarity index 100% rename from src/AuthenticationData/Configuration.cs rename to Source/AuthenticationData/Configuration.cs diff --git a/src/AuthenticationData/RequestData.cs b/Source/AuthenticationData/RequestData.cs similarity index 100% rename from src/AuthenticationData/RequestData.cs rename to Source/AuthenticationData/RequestData.cs diff --git a/src/Configuration.cs b/Source/Configuration.cs similarity index 100% rename from src/Configuration.cs rename to Source/Configuration.cs diff --git a/src/Properties/AssemblyInfo.cs b/Source/Properties/AssemblyInfo.cs similarity index 72% rename from src/Properties/AssemblyInfo.cs rename to Source/Properties/AssemblyInfo.cs index 0374fb4..440512d 100644 --- a/src/Properties/AssemblyInfo.cs +++ b/Source/Properties/AssemblyInfo.cs @@ -1,34 +1,35 @@ using System.Reflection; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -// General Information about an assembly is controlled through the following +// 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("CybsPayments")] +[assembly: AssemblyTitle("cybersource-rest-samples-csharp")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CybsPayments")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCompany("Visa Inc")] +[assembly: AssemblyProduct("cybersource-rest-samples-csharp")] +[assembly: AssemblyCopyright("Copyright © Visa Inc 2020")] [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 +// 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(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("4cf837ff-237d-4b5b-b922-71ccc654d718")] +[assembly: Guid("97ff11a4-924d-4c87-a028-2aaf64655954")] // Version information for an assembly consists of the following four values: // // Major Version -// Minor Version +// Minor Version // Build Number // Revision // -// You can specify all the values or you can default the Build and Revision Numbers +// 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")] diff --git a/src/Resource/AuthTRRReport.json b/Source/Resource/AuthTRRReport.json similarity index 100% rename from src/Resource/AuthTRRReport.json rename to Source/Resource/AuthTRRReport.json diff --git a/src/Resource/DownloadReport.csv b/Source/Resource/DownloadReport.csv similarity index 100% rename from src/Resource/DownloadReport.csv rename to Source/Resource/DownloadReport.csv diff --git a/Source/Resource/DownloadedFileWithFileID.csv b/Source/Resource/DownloadedFileWithFileID.csv new file mode 100644 index 0000000..0da03d6 --- /dev/null +++ b/Source/Resource/DownloadedFileWithFileID.csv @@ -0,0 +1,2 @@ +Batch Files Detail Report,1.0,2020-01-30 to 2020-01-30,,,,,,, +merchant_id,txn_batch_id,payment_processor,request_id,trans_ref_no,merchant_ref_number,ics_rflag,amount,currency,action diff --git a/src/Resource/NumericUtility.cs b/Source/Resource/NumericUtility.cs similarity index 100% rename from src/Resource/NumericUtility.cs rename to Source/Resource/NumericUtility.cs diff --git a/src/Resource/TRRReport.json b/Source/Resource/TRRReport.json similarity index 100% rename from src/Resource/TRRReport.json rename to Source/Resource/TRRReport.json diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt new file mode 100644 index 0000000..ed2ff83 --- /dev/null +++ b/Source/Resource/jwsToken.txt @@ -0,0 +1 @@ +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJXZWQsIDMwIFNlcCAyMDIwIDEyOjM2OjQxIEdNVCJ9.ILvpFooL-HWQ638uxjFsQgTe44SkV4R46rWAcKgJXgzvsTSaMjE5wF5Yx4kKPqBer_cgklnmpKZz0piADfCcbf6AUKHk0AyK5U_ashILWwBDUcT_1D8qWw1h2zCIegyQ6KVZueUlX55ONS9oOG-12O0Lj6i8bOwtFoJUtCoStiCNpo1LOJDJKaar8TU6HigHqVXYsTDvfaE_XB4w_f6yqcywyqj19_PYGZtswbHvwHuW1z_NwCoxc_ixty9C-4MuxW9f7eUNhmdI13PMY0iC0xsWx4_mX7mC3AG-mdUUavJ7ZDqZoF14zBCuckh15ygcBfMm4l3kiFcpaM4El82ptw \ No newline at end of file diff --git a/src/Resource/mcb_test_merch.p12 b/Source/Resource/mcb_test_merch.p12 similarity index 100% rename from src/Resource/mcb_test_merch.p12 rename to Source/Resource/mcb_test_merch.p12 diff --git a/src/Resource/request_captures.json b/Source/Resource/request_captures.json similarity index 100% rename from src/Resource/request_captures.json rename to Source/Resource/request_captures.json diff --git a/src/Resource/request_payments.json b/Source/Resource/request_payments.json similarity index 100% rename from src/Resource/request_payments.json rename to Source/Resource/request_payments.json diff --git a/src/Resource/request_refund.json b/Source/Resource/request_refund.json similarity index 100% rename from src/Resource/request_refund.json rename to Source/Resource/request_refund.json diff --git a/src/Resource/request_reversals.json b/Source/Resource/request_reversals.json similarity index 100% rename from src/Resource/request_reversals.json rename to Source/Resource/request_reversals.json diff --git a/src/Resource/request_void.json b/Source/Resource/request_void.json similarity index 100% rename from src/Resource/request_void.json rename to Source/Resource/request_void.json diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt new file mode 100644 index 0000000..0f3748f --- /dev/null +++ b/Source/Resource/signatureHeaderValue.txt @@ -0,0 +1 @@ +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="dsyy7FQGdK8C56n1JmyWHQwJ084BTdOUBOsd1euaVjE=" \ No newline at end of file diff --git a/src/Resource/testrest.p12 b/Source/Resource/testrest.p12 similarity index 100% rename from src/Resource/testrest.p12 rename to Source/Resource/testrest.p12 diff --git a/src/Resource/testrest_cpctv.p12 b/Source/Resource/testrest_cpctv.p12 similarity index 100% rename from src/Resource/testrest_cpctv.p12 rename to Source/Resource/testrest_cpctv.p12 diff --git a/src/SampleCode.cs b/Source/SampleCode.cs similarity index 95% rename from src/SampleCode.cs rename to Source/SampleCode.cs index d6a082f..38bb89c 100644 --- a/src/SampleCode.cs +++ b/Source/SampleCode.cs @@ -1,341 +1,342 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using NLog; - -namespace Cybersource_rest_samples_dotnet -{ - public class SampleCode - { - private static readonly string PathOfSamplesFolder = Path.Combine($"{AppDomain.CurrentDomain.BaseDirectory}", $"Samples"); - - private static readonly string ProjectNamespace = "Cybersource_rest_samples_dotnet"; - - // List of all the all the APIs - private static readonly List ApiList = new List(); - - // List of Sample Code name for each API Call - private static readonly List ApiFunctionCalls = new List(); - - // List of Location Path for the Directories containing Sample Codes - // The Paths are used to Call the Class File Dynamically (using Reflections) avoiding long switch case statements - private static readonly List SampleCodeClassesPathList = new List(); - - // Name of the Sample Code File to run for the current execution - private static string _sampleToRun = string.Empty; - - // NLog Logger object - private static Logger logger; - - public static string TimeoutVoidTransactionId { get; set; } - - public static string TimeoutReversalTransactionId { get; set; } - - public static void Main(string[] args) - { - // initializing logger object - // LogManager.DisableLogging(); - logger = LogManager.GetCurrentClassLogger(); - logger.Trace("\n"); - logger.Trace("PROGRAM EXECUTION BEGINS"); - - // Set Network Settings (To Avoid SSL/TLS Secure Channel Error) - SetNetworkSettings(); - - // Initialize Api List and the paths of all the sample codes - InitializeSampleClassesPathList(); - InitializeApiList(); - - if (args.Length == 1) - { - // Run the Sample Code as per input in the command line - RunSample(args[0]); - return; - } - - // Display all sample codes available to run - ShowMethods(); - - // Run the Sample Code as per user input - RunSample(); - - logger.Trace("PROGRAM EXECUTION ENDS"); - } - - public static void RunSample(string cmdLineArg = null) - { - try - { - _sampleToRun = string.IsNullOrEmpty(cmdLineArg) ? Console.ReadLine() : cmdLineArg; - logger.Trace($"Input provided for Sample Code to Run: {_sampleToRun}"); - - Console.WriteLine("\n"); - Type className = null; - - if (_sampleToRun.ToUpper().Contains("RUNALL")) - { - int sampleCount = 1; - foreach (var apiMethod in ApiList) - { - Console.WriteLine("\n" + sampleCount + ".\t#### START RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); - RunSample(apiMethod.ApiFunctionCall); - Console.WriteLine("\n#### END RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); - sampleCount++; - } - - Console.WriteLine("\n\nTotal number of Sample run : " + sampleCount); - } - else - { - foreach (var path in SampleCodeClassesPathList) - { - className = Type.GetType(path + _sampleToRun); - - if (className != null) - { - logger.Trace($"Sample Code found in the namespace: {path}"); - break; - } - } - - if (className == null) - { - logger.Warn("No Sample Code Found with the name: {0}", _sampleToRun); - Console.WriteLine("No Sample Code Found with the name: {0}", _sampleToRun); - - if (cmdLineArg == null) - { - ShowMethods(); - RunSample(); - } - - return; - } - - var obj = Activator.CreateInstance(className); - var methodInfo = className.GetMethod("Run"); - if (methodInfo != null) - { - logger.Trace($"Invoking Run() method of {_sampleToRun}"); - Console.WriteLine($"Invoking Run() method of {_sampleToRun}"); - methodInfo.Invoke(obj, null); - } - else - { - logger.Warn($"No Run Method Found in the class: {_sampleToRun}"); - Console.WriteLine("No Run Method Found in the class: {0}", _sampleToRun); - - if (cmdLineArg == null) - { - ShowMethods(); - RunSample(); - } - - return; - } - } - } - catch (Exception e) - { - Console.WriteLine("Exception in RunSample() Method: " + e.Message); - - if (e.InnerException != null) - { - Console.WriteLine("Inner Exception: " + e.InnerException.Message); - Console.WriteLine(e.InnerException.StackTrace); - } - - Console.WriteLine(e.StackTrace); - } - - if (cmdLineArg == null) - { - Console.WriteLine("\nPress any key to continue....."); - Console.ReadLine(); - ShowMethods(); - RunSample(); - } - } - - private static void ShowMethods() - { - logger.Trace("Beginning to Show All Sample Codes on Console"); - - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - Console.WriteLine(" - Code Sample Names -"); - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - - var apiFamilies = new List(); - - foreach (var api in ApiList.Where(api => !apiFamilies.Contains(api.ApiFamily))) - { - apiFamilies.Add(api.ApiFamily); - } - - foreach (var apiFamily in apiFamilies) - { - logger.Trace($"Showing Sample Codes for Api Family: {apiFamily}"); - - Console.WriteLine(" " + apiFamily.ToUpper() + " APIs "); - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - - var lineCharsCount = 0; - const int nextLineCharsMaxCount = 85; - string apirow = null; - - foreach (var api in ApiList.Where(api => api.ApiFamily == apiFamily).OrderBy(api => api.ApiFunctionCall)) - { - if (lineCharsCount + api.ApiFunctionCall.Length < nextLineCharsMaxCount) - { - apirow += " " + api.ApiFunctionCall + " \n"; - } - else - { - Console.WriteLine(apirow); - apirow = " " + api.ApiFunctionCall + " \n"; - lineCharsCount = 0; - } - - lineCharsCount = lineCharsCount + api.ApiFunctionCall.Length; - } - - Console.WriteLine(apirow); - Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); - } - - logger.Trace("All Sample Codes Shown on Console"); - Console.WriteLine(string.Empty); - Console.Write("Type a sample name & then press : "); - } - - private static void InitializeApiList() - { - /* - Initialization of Api List contains Following steps:- - - 1. Find the Api Families (Folders inside the main 'Samples' Folder) - - For Each Api Family:- - 2. Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) - 3. Create Api Object by providing value of Api Family and File Name (Extracted from File path). - 4. Add the Api Object to the ApiList List. - */ - - // 1. Find the Api Families (Folders inside the main 'Samples' Folder) - logger.Trace($"Samples Folder At:{Path.GetFullPath(PathOfSamplesFolder)}"); - - var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*"); - var apiFamilies = new List(); - - foreach (var dir in dirList) - { - var dirModified = dir; - - if (!dir.Contains("Risk Management")) - { - dirModified = dir.Replace(' ', '_'); - } - - dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); - dirModified = dirModified.Replace(@"/", "."); - dirModified = dirModified.Replace(@"\", "."); - - apiFamilies.Add(dirModified); - } - - foreach (var apiFamily in apiFamilies) - { - // 2.Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) - var allfiles = Directory.GetFileSystemEntries(Path.Combine(PathOfSamplesFolder, apiFamily), "*.cs*", SearchOption.AllDirectories); - - logger.Trace($"Api Family: {apiFamily}"); - logger.Trace($"Total Sample Codes Detected: {allfiles.Count()}"); - - foreach (var file in allfiles) - { - var lastBackSlashIndex = file.LastIndexOf(@"/", StringComparison.Ordinal); - - if (lastBackSlashIndex == -1) - { - lastBackSlashIndex = file.LastIndexOf(@"\", StringComparison.Ordinal); - } - - var firstPart = file.Remove(lastBackSlashIndex); - var secondPart = file.Substring(lastBackSlashIndex + 1, file.Length - firstPart.Length - 4); - - ApiFunctionCalls.Add(secondPart); - - // 3.Create Api Object by providing value of Api Family and File Name(Extracted from File path). - var newApi = new Api - { - ApiFamily = apiFamily, - ApiFunctionCall = secondPart - }; - - // 4.Add the Api Object to the ApiList List. - ApiList.Add(newApi); - } - } - - CheckDuplicateSampleCodes(); - } - - private static void CheckDuplicateSampleCodes() - { - // Verify if this Api Already exists in the Api List or not (FunctionCall must be unique) - var duplicateListOutput = "Following Duplicate Sample Codes Found: "; - bool duplicateFound = false; - foreach (var apiFuncCall in ApiFunctionCalls) - { - if (ApiFunctionCalls.FindAll(x => x == apiFuncCall).Count > 1) - { - duplicateListOutput += apiFuncCall + ", "; - duplicateFound = true; - } - } - - if (duplicateFound) - { - logger.Warn("DUPLICATE SAMPLE CODES DETECTED!"); - Console.WriteLine(); - Console.WriteLine("WARNING:"); - Console.WriteLine(duplicateListOutput); - Console.WriteLine(); - } - } - - private static void InitializeSampleClassesPathList() - { - // dirList has got all the folders and sub-folders for the Samples Folder Path - var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*", SearchOption.AllDirectories); - logger.Trace($"Project Namespace value provided: {ProjectNamespace}"); - - foreach (var dir in dirList) - { - /* - Once we have the path of each folder, - we can use that to create the namespace names of all the sample codes, - inside the folder [Samples]. - */ - var dirModified = dir.Replace(' ', '_'); - dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); - dirModified = dirModified.Replace(@"/", "."); - dirModified = dirModified.Replace(@"\", "."); - - // SampleCodeClassesPathList is the complete list of all the possible namespaces for all the sample codes - SampleCodeClassesPathList.Add(ProjectNamespace + ".Samples." + dirModified + "."); - } - } - - private static void SetNetworkSettings() - { - // setting servicepointmanager configs for SSL/TSL / Proxy issues - ServicePointManager.Expect100Continue = true; - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - ServicePointManager.ServerCertificateValidationCallback += - (sender, certificate, chain, sslPolicyErrors) => true; - } - } +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using NLog; + +namespace Cybersource_rest_samples_dotnet +{ + public class SampleCode + { + private static readonly string PathOfSamplesFolder = Path.Combine($"{AppDomain.CurrentDomain.BaseDirectory}", $"../../../Source/Samples"); + + private static readonly string ProjectNamespace = "Cybersource_rest_samples_dotnet"; + + // List of all the all the APIs + private static readonly List ApiList = new List(); + + // List of Sample Code name for each API Call + private static readonly List ApiFunctionCalls = new List(); + + // List of Location Path for the Directories containing Sample Codes + // The Paths are used to Call the Class File Dynamically (using Reflections) avoiding long switch case statements + private static readonly List SampleCodeClassesPathList = new List(); + + // Name of the Sample Code File to run for the current execution + private static string _sampleToRun = string.Empty; + + // NLog Logger object + private static Logger logger; + + public static string TimeoutVoidTransactionId { get; set; } + + public static string TimeoutReversalTransactionId { get; set; } + + public static void Main(string[] args) + { + // initializing logger object + // LogManager.DisableLogging(); + logger = LogManager.GetCurrentClassLogger(); + logger.Trace("\n"); + logger.Trace("PROGRAM EXECUTION BEGINS"); + + // Set Network Settings (To Avoid SSL/TLS Secure Channel Error) + SetNetworkSettings(); + + // Initialize Api List and the paths of all the sample codes + InitializeSampleClassesPathList(); + InitializeApiList(); + + if (args.Length == 1) + { + // Run the Sample Code as per input in the command line + RunSample(args[0]); + return; + } + + // Display all sample codes available to run + ShowMethods(); + + // Run the Sample Code as per user input + RunSample(); + + logger.Trace("PROGRAM EXECUTION ENDS"); + } + + public static void RunSample(string cmdLineArg = null) + { + try + { + _sampleToRun = string.IsNullOrEmpty(cmdLineArg) ? Console.ReadLine() : cmdLineArg; + logger.Trace($"Input provided for Sample Code to Run: {_sampleToRun}"); + + Console.WriteLine("\n"); + Type className = null; + + if (_sampleToRun.ToUpper().Contains("RUNALL")) + { + int sampleCount = 1; + foreach (var apiMethod in ApiList) + { + Console.WriteLine("\n" + sampleCount + ".\t#### START RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); + RunSample(apiMethod.ApiFunctionCall); + Console.WriteLine("\n#### END RUNNING SAMPLE CODE FOR " + apiMethod.ApiFunctionCall + " ####"); + sampleCount++; + } + + Console.WriteLine("\n\nTotal number of Sample run : " + sampleCount); + } + else + { + foreach (var path in SampleCodeClassesPathList) + { + className = Type.GetType(path + _sampleToRun); + + if (className != null) + { + logger.Trace($"Sample Code found in the namespace: {path}"); + break; + } + } + + if (className == null) + { + logger.Warn("No Sample Code Found with the name: {0}", _sampleToRun); + Console.WriteLine("No Sample Code Found with the name: {0}", _sampleToRun); + + if (cmdLineArg == null) + { + ShowMethods(); + RunSample(); + } + + return; + } + + var obj = Activator.CreateInstance(className); + var methodInfo = className.GetMethod("Run"); + if (methodInfo != null) + { + logger.Trace($"Invoking Run() method of {_sampleToRun}"); + Console.WriteLine($"Invoking Run() method of {_sampleToRun}"); + methodInfo.Invoke(obj, null); + } + else + { + logger.Warn($"No Run Method Found in the class: {_sampleToRun}"); + Console.WriteLine("No Run Method Found in the class: {0}", _sampleToRun); + + if (cmdLineArg == null) + { + ShowMethods(); + RunSample(); + } + + return; + } + } + } + catch (Exception e) + { + Console.WriteLine("Exception in RunSample() Method: " + e.Message); + + if (e.InnerException != null) + { + Console.WriteLine("Inner Exception: " + e.InnerException.Message); + Console.WriteLine(e.InnerException.StackTrace); + } + + Console.WriteLine(e.StackTrace); + } + + if (cmdLineArg == null) + { + Console.WriteLine("\nPress any key to continue....."); + Console.ReadLine(); + ShowMethods(); + RunSample(); + } + } + + private static void ShowMethods() + { + logger.Trace("Beginning to Show All Sample Codes on Console"); + + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + Console.WriteLine(" - Code Sample Names -"); + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + + var apiFamilies = new List(); + + foreach (var api in ApiList.Where(api => !apiFamilies.Contains(api.ApiFamily))) + { + apiFamilies.Add(api.ApiFamily); + } + + foreach (var apiFamily in apiFamilies) + { + logger.Trace($"Showing Sample Codes for Api Family: {apiFamily}"); + + Console.WriteLine(" " + apiFamily.ToUpper() + " APIs "); + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + + var lineCharsCount = 0; + const int nextLineCharsMaxCount = 85; + string apirow = null; + + foreach (var api in ApiList.Where(api => api.ApiFamily == apiFamily).OrderBy(api => api.ApiFunctionCall)) + { + if (lineCharsCount + api.ApiFunctionCall.Length < nextLineCharsMaxCount) + { + apirow += " " + api.ApiFunctionCall + " \n"; + } + else + { + Console.WriteLine(apirow); + apirow = " " + api.ApiFunctionCall + " \n"; + lineCharsCount = 0; + } + + lineCharsCount += api.ApiFunctionCall.Length; + } + + Console.WriteLine(apirow); + Console.WriteLine(" ---------------------------------------------------------------------------------------------------"); + } + + logger.Trace("All Sample Codes Shown on Console"); + Console.WriteLine(string.Empty); + Console.Write("Type a sample name & then press : "); + } + + private static void InitializeApiList() + { + /* + Initialization of Api List contains Following steps:- + + 1. Find the Api Families (Folders inside the main 'Samples' Folder) + + For Each Api Family:- + 2. Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) + 3. Create Api Object by providing value of Api Family and File Name (Extracted from File path). + 4. Add the Api Object to the ApiList List. + */ + + // 1. Find the Api Families (Folders inside the main 'Samples' Folder) + logger.Trace($"Samples Folder At:{Path.GetFullPath(PathOfSamplesFolder)}"); + + var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*"); + var apiFamilies = new List(); + + foreach (var dir in dirList) + { + var dirModified = dir; + + if (!dir.Contains("Risk Management")) + { + dirModified = dir.Replace(' ', '_'); + } + + dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); + dirModified = dirModified.Replace(@"/", "."); + dirModified = dirModified.Replace(@"\", "."); + + apiFamilies.Add(dirModified); + } + + foreach (var apiFamily in apiFamilies) + { + // 2.Fetch all the Files Paths inside Api Family folder (and all of its subfoldes) + var allfiles = Directory.GetFileSystemEntries(Path.Combine(PathOfSamplesFolder, apiFamily), "*.cs*", SearchOption.AllDirectories); + + logger.Trace($"Api Family: {apiFamily}"); + logger.Trace($"Total Sample Codes Detected: {allfiles.Count()}"); + + foreach (var file in allfiles) + { + var lastForwardSlashIndex = file.LastIndexOf(@"/", StringComparison.Ordinal); + var lastBackSlashIndex = file.LastIndexOf(@"\", StringComparison.Ordinal); + + if (lastBackSlashIndex < lastForwardSlashIndex) + { + lastBackSlashIndex = lastForwardSlashIndex; + } + + var firstPart = file.Remove(lastBackSlashIndex); + var secondPart = file.Substring(lastBackSlashIndex + 1, file.Length - firstPart.Length - 4); + + ApiFunctionCalls.Add(secondPart); + + // 3.Create Api Object by providing value of Api Family and File Name(Extracted from File path). + var newApi = new Api + { + ApiFamily = apiFamily, + ApiFunctionCall = secondPart + }; + + // 4.Add the Api Object to the ApiList List. + ApiList.Add(newApi); + } + } + + CheckDuplicateSampleCodes(); + } + + private static void CheckDuplicateSampleCodes() + { + // Verify if this Api Already exists in the Api List or not (FunctionCall must be unique) + var duplicateListOutput = "Following Duplicate Sample Codes Found: "; + bool duplicateFound = false; + foreach (var apiFuncCall in ApiFunctionCalls) + { + if (ApiFunctionCalls.FindAll(x => x == apiFuncCall).Count > 1) + { + duplicateListOutput += apiFuncCall + ", "; + duplicateFound = true; + } + } + + if (duplicateFound) + { + logger.Warn("DUPLICATE SAMPLE CODES DETECTED!"); + Console.WriteLine(); + Console.WriteLine("WARNING:"); + Console.WriteLine(duplicateListOutput); + Console.WriteLine(); + } + } + + private static void InitializeSampleClassesPathList() + { + // dirList has got all the folders and sub-folders for the Samples Folder Path + var dirList = Directory.GetDirectories(PathOfSamplesFolder, "*", SearchOption.AllDirectories); + logger.Trace($"Project Namespace value provided: {ProjectNamespace}"); + + foreach (var dir in dirList) + { + /* + Once we have the path of each folder, + we can use that to create the namespace names of all the sample codes, + inside the folder [Samples]. + */ + var dirModified = dir.Replace(' ', '_'); + dirModified = dirModified.Substring(PathOfSamplesFolder.Length + 1); + dirModified = dirModified.Replace(@"/", "."); + dirModified = dirModified.Replace(@"\", "."); + + // SampleCodeClassesPathList is the complete list of all the possible namespaces for all the sample codes + SampleCodeClassesPathList.Add(ProjectNamespace + ".Samples." + dirModified + "."); + } + } + + private static void SetNetworkSettings() + { + // setting servicepointmanager configs for SSL/TSL / Proxy issues + ServicePointManager.Expect100Continue = true; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + ServicePointManager.ServerCertificateValidationCallback += + (sender, certificate, chain, sslPolicyErrors) => true; + } + } } \ No newline at end of file diff --git a/src/Samples/Authentication/CallHttpMethods/DeleteMethod.cs b/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs similarity index 100% rename from src/Samples/Authentication/CallHttpMethods/DeleteMethod.cs rename to Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs diff --git a/src/Samples/Authentication/CallHttpMethods/GetMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs similarity index 100% rename from src/Samples/Authentication/CallHttpMethods/GetMethod.cs rename to Source/Samples/Authentication/CallHttpMethods/GetMethod.cs diff --git a/src/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs similarity index 100% rename from src/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs rename to Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs diff --git a/src/Samples/Authentication/CallHttpMethods/PostMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs similarity index 94% rename from src/Samples/Authentication/CallHttpMethods/PostMethod.cs rename to Source/Samples/Authentication/CallHttpMethods/PostMethod.cs index 7af0841..62630b6 100644 --- a/src/Samples/Authentication/CallHttpMethods/PostMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs @@ -11,7 +11,7 @@ public class PostMethod // POST Request to Authorize the payment for a transaction. // Transaction details provided in the JSON File are sent along with the Request as Request Body private const string RequestTarget = "/pts/v2/payments/"; - private const string RequestJsonFilePath = "Resource\\request_payments.json"; + private const string RequestJsonFilePath = "Source/Resource/request_payments.json"; public static void Run() { diff --git a/src/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs similarity index 100% rename from src/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs rename to Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs diff --git a/src/Samples/Authentication/CallHttpMethods/PutMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs similarity index 95% rename from src/Samples/Authentication/CallHttpMethods/PutMethod.cs rename to Source/Samples/Authentication/CallHttpMethods/PutMethod.cs index 4eeefe0..deb8228 100644 --- a/src/Samples/Authentication/CallHttpMethods/PutMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs @@ -12,7 +12,7 @@ public class PutMethod // Report Details provided in the JSON File are sent along with the Request as Request Body // Below request subscribes 'TRR Report' for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; - private const string RequestJsonFilePath = "Resource\\TRRReport.json"; + private const string RequestJsonFilePath = "Source/Resource/TRRReport.json"; public static void Run() { diff --git a/src/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs similarity index 100% rename from src/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs rename to Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs diff --git a/src/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs similarity index 100% rename from src/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs rename to Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs diff --git a/src/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs similarity index 96% rename from src/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs rename to Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs index 0a9f9d7..695be37 100644 --- a/src/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs @@ -10,7 +10,7 @@ public class PostGenerateHeaders // POST Request to Authorize the payment for a transaction. // Transaction details provided in the JSON File are sent along with the Request as Request Body private const string RequestTarget = "/pts/v2/payments"; - private const string RequestJsonFilePath = "Resource\\request_payments.json"; + private const string RequestJsonFilePath = "Source/Resource/request_payments.json"; public static void Run() { diff --git a/src/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs similarity index 96% rename from src/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs rename to Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs index d664d54..f7fc4f3 100644 --- a/src/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs @@ -11,7 +11,7 @@ public class PutGenerateHeaders // Report Details provided in the JSON File are sent along with the Request as Request Body // Below request subscribes 'TRR Report' for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; - private const string RequestJsonFilePath = "Resource\\TRRReport.json"; + private const string RequestJsonFilePath = "Source/Resource/TRRReport.json"; public static void Run() { diff --git a/src/Samples/Authentication/StandAloneHttpSignature.cs b/Source/Samples/Authentication/StandAloneHttpSignature.cs similarity index 99% rename from src/Samples/Authentication/StandAloneHttpSignature.cs rename to Source/Samples/Authentication/StandAloneHttpSignature.cs index d005aed..db89f14 100644 --- a/src/Samples/Authentication/StandAloneHttpSignature.cs +++ b/Source/Samples/Authentication/StandAloneHttpSignature.cs @@ -311,7 +311,7 @@ public static StringBuilder GenerateSignature(string request, string digest, str signatureHeaderValue.Append(", signature=\"" + base64EncodedSignature + "\""); // Writing Generated Token to file. - File.WriteAllText(@".\Resource\" + "signatureHeaderValue.txt", signatureHeaderValue.ToString()); + File.WriteAllText(@"./Source/Resource/" + "signatureHeaderValue.txt", signatureHeaderValue.ToString()); } catch (Exception ex) { diff --git a/src/Samples/Authentication/StandAloneJWT.cs b/Source/Samples/Authentication/StandAloneJWT.cs similarity index 98% rename from src/Samples/Authentication/StandAloneJWT.cs rename to Source/Samples/Authentication/StandAloneJWT.cs index ca43e18..ec7eb78 100644 --- a/src/Samples/Authentication/StandAloneJWT.cs +++ b/Source/Samples/Authentication/StandAloneJWT.cs @@ -181,7 +181,7 @@ public static string GenerateJWT(string request, string method) Console.WriteLine("\tJWT BODY : " + jwtBody); // P12 certificate public key is sent in the header and the private key is used to sign the token - X509Certificate2 x5Cert = new X509Certificate2(Path.Combine($"Resource", $"testrest.p12"), merchantID, X509KeyStorageFlags.MachineKeySet); + X509Certificate2 x5Cert = new X509Certificate2(Path.Combine($"Source/Resource", $"testrest.p12"), merchantID, X509KeyStorageFlags.MachineKeySet); // Extracting Public Key from .p12 file string x5cPublicKey = Convert.ToBase64String(x5Cert.RawData); @@ -223,7 +223,7 @@ public static string GenerateJWT(string request, string method) token = Jose.JWT.Encode(jwtBody, privateKey, Jose.JwsAlgorithm.RS256, cybsHeaders); // Writing Generated Token to file. - File.WriteAllText(Path.Combine($"Resource", $"jwsToken.txt"), token); + File.WriteAllText(Path.Combine($"Source/Resource", $"jwsToken.txt"), token); } catch (Exception ex) { diff --git a/src/Samples/FlexMicroform/FlexTokenizeCard.cs b/Source/Samples/FlexMicroform/FlexTokenizeCard.cs similarity index 100% rename from src/Samples/FlexMicroform/FlexTokenizeCard.cs rename to Source/Samples/FlexMicroform/FlexTokenizeCard.cs diff --git a/src/Samples/FlexMicroform/GenerateKey.cs b/Source/Samples/FlexMicroform/GenerateKey.cs similarity index 100% rename from src/Samples/FlexMicroform/GenerateKey.cs rename to Source/Samples/FlexMicroform/GenerateKey.cs diff --git a/src/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs b/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs similarity index 100% rename from src/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs rename to Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs diff --git a/src/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs b/Source/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs similarity index 100% rename from src/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs rename to Source/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs diff --git a/src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs b/Source/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs similarity index 100% rename from src/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs rename to Source/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs diff --git a/src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs b/Source/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs similarity index 100% rename from src/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs rename to Source/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs diff --git a/src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs b/Source/Samples/Invoicing/Invoices/CreateDraftInvoice.cs similarity index 100% rename from src/Samples/Invoicing/Invoices/CreateDraftInvoice.cs rename to Source/Samples/Invoicing/Invoices/CreateDraftInvoice.cs diff --git a/src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs b/Source/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs similarity index 100% rename from src/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs rename to Source/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs diff --git a/src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs b/Source/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs similarity index 100% rename from src/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs rename to Source/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs diff --git a/src/Samples/Invoicing/Invoices/GetInvoiceDetails.cs b/Source/Samples/Invoicing/Invoices/GetInvoiceDetails.cs similarity index 100% rename from src/Samples/Invoicing/Invoices/GetInvoiceDetails.cs rename to Source/Samples/Invoicing/Invoices/GetInvoiceDetails.cs diff --git a/src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs similarity index 100% rename from src/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs rename to Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs diff --git a/src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs similarity index 100% rename from src/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs rename to Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs diff --git a/src/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs similarity index 100% rename from src/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs rename to Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs diff --git a/src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs b/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs similarity index 100% rename from src/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs rename to Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs diff --git a/src/Samples/PayerAuthentication/EnrollWithTransientToken.cs b/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs similarity index 100% rename from src/Samples/PayerAuthentication/EnrollWithTransientToken.cs rename to Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs diff --git a/src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs similarity index 100% rename from src/Samples/PayerAuthentication/EnrollWithTravelInformation.cs rename to Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs diff --git a/src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs b/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs similarity index 100% rename from src/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs rename to Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs similarity index 100% rename from src/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs rename to Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs similarity index 100% rename from src/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs rename to Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs similarity index 100% rename from src/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs rename to Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs similarity index 100% rename from src/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs rename to Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs similarity index 100% rename from src/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs rename to Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs diff --git a/src/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs similarity index 100% rename from src/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs rename to Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs diff --git a/src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs similarity index 100% rename from src/Samples/PayerAuthentication/ValidateAuthenticationResults.cs rename to Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs diff --git a/src/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs b/Source/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs similarity index 100% rename from src/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs rename to Source/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs diff --git a/src/Samples/Payments/Capture/CapturePayment.cs b/Source/Samples/Payments/Capture/CapturePayment.cs similarity index 100% rename from src/Samples/Payments/Capture/CapturePayment.cs rename to Source/Samples/Payments/Capture/CapturePayment.cs diff --git a/src/Samples/Payments/Capture/CapturePaymentServiceFee.cs b/Source/Samples/Payments/Capture/CapturePaymentServiceFee.cs similarity index 100% rename from src/Samples/Payments/Capture/CapturePaymentServiceFee.cs rename to Source/Samples/Payments/Capture/CapturePaymentServiceFee.cs diff --git a/src/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs b/Source/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs similarity index 100% rename from src/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs rename to Source/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs diff --git a/src/Samples/Payments/Credit/Credit.cs b/Source/Samples/Payments/Credit/Credit.cs similarity index 100% rename from src/Samples/Payments/Credit/Credit.cs rename to Source/Samples/Payments/Credit/Credit.cs diff --git a/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs similarity index 100% rename from src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs rename to Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs diff --git a/src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs b/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs similarity index 100% rename from src/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs rename to Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs diff --git a/src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/Source/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs similarity index 100% rename from src/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs rename to Source/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs diff --git a/src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs b/Source/Samples/Payments/Credit/CreditWithCustomerTokenId.cs similarity index 100% rename from src/Samples/Payments/Credit/CreditWithCustomerTokenId.cs rename to Source/Samples/Payments/Credit/CreditWithCustomerTokenId.cs diff --git a/src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs b/Source/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs similarity index 100% rename from src/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs rename to Source/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs diff --git a/src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs similarity index 100% rename from src/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs rename to Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs diff --git a/src/Samples/Payments/Credit/ServiceFeesCredit.cs b/Source/Samples/Payments/Credit/ServiceFeesCredit.cs similarity index 100% rename from src/Samples/Payments/Credit/ServiceFeesCredit.cs rename to Source/Samples/Payments/Credit/ServiceFeesCredit.cs diff --git a/src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs b/Source/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs similarity index 100% rename from src/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs rename to Source/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs diff --git a/src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs b/Source/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs rename to Source/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs diff --git a/src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs b/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs rename to Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs diff --git a/src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs b/Source/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs rename to Source/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs diff --git a/src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs b/Source/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs rename to Source/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs diff --git a/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs rename to Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs diff --git a/src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs rename to Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs diff --git a/src/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs b/Source/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs rename to Source/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs b/Source/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs rename to Source/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs rename to Source/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs rename to Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs b/Source/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs b/Source/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs b/Source/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs b/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs b/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs rename to Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs b/Source/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs rename to Source/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs b/Source/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs rename to Source/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs diff --git a/src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs b/Source/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs similarity index 100% rename from src/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs rename to Source/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs diff --git a/src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs b/Source/Samples/Payments/Payments/DigitalPaymentGooglePay.cs similarity index 100% rename from src/Samples/Payments/Payments/DigitalPaymentGooglePay.cs rename to Source/Samples/Payments/Payments/DigitalPaymentGooglePay.cs diff --git a/src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs b/Source/Samples/Payments/Payments/DigitalPaymentsApplePay.cs similarity index 100% rename from src/Samples/Payments/Payments/DigitalPaymentsApplePay.cs rename to Source/Samples/Payments/Payments/DigitalPaymentsApplePay.cs diff --git a/src/Samples/Payments/Payments/ElectronicCheckDebits.cs b/Source/Samples/Payments/Payments/ElectronicCheckDebits.cs similarity index 100% rename from src/Samples/Payments/Payments/ElectronicCheckDebits.cs rename to Source/Samples/Payments/Payments/ElectronicCheckDebits.cs diff --git a/src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs b/Source/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs similarity index 100% rename from src/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs rename to Source/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs diff --git a/src/Samples/Payments/Payments/IncrementalAuthorization.cs b/Source/Samples/Payments/Payments/IncrementalAuthorization.cs similarity index 100% rename from src/Samples/Payments/Payments/IncrementalAuthorization.cs rename to Source/Samples/Payments/Payments/IncrementalAuthorization.cs diff --git a/src/Samples/Payments/Payments/LevelIIData.cs b/Source/Samples/Payments/Payments/LevelIIData.cs similarity index 100% rename from src/Samples/Payments/Payments/LevelIIData.cs rename to Source/Samples/Payments/Payments/LevelIIData.cs diff --git a/src/Samples/Payments/Payments/LevelIIIData.cs b/Source/Samples/Payments/Payments/LevelIIIData.cs similarity index 100% rename from src/Samples/Payments/Payments/LevelIIIData.cs rename to Source/Samples/Payments/Payments/LevelIIIData.cs diff --git a/src/Samples/Payments/Payments/PartialAuthorization.cs b/Source/Samples/Payments/Payments/PartialAuthorization.cs similarity index 100% rename from src/Samples/Payments/Payments/PartialAuthorization.cs rename to Source/Samples/Payments/Payments/PartialAuthorization.cs diff --git a/src/Samples/Payments/Payments/PaymentNetworkTokenization.cs b/Source/Samples/Payments/Payments/PaymentNetworkTokenization.cs similarity index 100% rename from src/Samples/Payments/Payments/PaymentNetworkTokenization.cs rename to Source/Samples/Payments/Payments/PaymentNetworkTokenization.cs diff --git a/src/Samples/Payments/Payments/PaymentWithFlexToken.cs b/Source/Samples/Payments/Payments/PaymentWithFlexToken.cs similarity index 100% rename from src/Samples/Payments/Payments/PaymentWithFlexToken.cs rename to Source/Samples/Payments/Payments/PaymentWithFlexToken.cs diff --git a/src/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs b/Source/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs similarity index 100% rename from src/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs rename to Source/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs diff --git a/src/Samples/Payments/Payments/RestaurantAuthorization.cs b/Source/Samples/Payments/Payments/RestaurantAuthorization.cs similarity index 100% rename from src/Samples/Payments/Payments/RestaurantAuthorization.cs rename to Source/Samples/Payments/Payments/RestaurantAuthorization.cs diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs rename to Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs rename to Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs rename to Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs rename to Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs rename to Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs diff --git a/src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs rename to Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs rename to Source/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs b/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs rename to Source/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs diff --git a/src/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs rename to Source/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs rename to Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs diff --git a/src/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs similarity index 100% rename from src/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs rename to Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs diff --git a/src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs b/Source/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs similarity index 100% rename from src/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs rename to Source/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs diff --git a/src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs b/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs similarity index 100% rename from src/Samples/Payments/Payments/SimpleAuthorizationInternet.cs rename to Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs diff --git a/src/Samples/Payments/Payments/Swiped.cs b/Source/Samples/Payments/Payments/Swiped.cs similarity index 100% rename from src/Samples/Payments/Payments/Swiped.cs rename to Source/Samples/Payments/Payments/Swiped.cs diff --git a/src/Samples/Payments/Payments/ZeroDollarAuthorization.cs b/Source/Samples/Payments/Payments/ZeroDollarAuthorization.cs similarity index 100% rename from src/Samples/Payments/Payments/ZeroDollarAuthorization.cs rename to Source/Samples/Payments/Payments/ZeroDollarAuthorization.cs diff --git a/src/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs b/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs similarity index 100% rename from src/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs rename to Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs diff --git a/src/Samples/Payments/Refund/RefundCapture.cs b/Source/Samples/Payments/Refund/RefundCapture.cs similarity index 100% rename from src/Samples/Payments/Refund/RefundCapture.cs rename to Source/Samples/Payments/Refund/RefundCapture.cs diff --git a/src/Samples/Payments/Refund/RefundPayment.cs b/Source/Samples/Payments/Refund/RefundPayment.cs similarity index 100% rename from src/Samples/Payments/Refund/RefundPayment.cs rename to Source/Samples/Payments/Refund/RefundPayment.cs diff --git a/src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs b/Source/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs similarity index 100% rename from src/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs rename to Source/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs diff --git a/src/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs b/Source/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs similarity index 100% rename from src/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs rename to Source/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs diff --git a/src/Samples/Payments/Reversal/TimeoutReversal.cs b/Source/Samples/Payments/Reversal/TimeoutReversal.cs similarity index 100% rename from src/Samples/Payments/Reversal/TimeoutReversal.cs rename to Source/Samples/Payments/Reversal/TimeoutReversal.cs diff --git a/src/Samples/Payments/Void/TimeoutVoid.cs b/Source/Samples/Payments/Void/TimeoutVoid.cs similarity index 100% rename from src/Samples/Payments/Void/TimeoutVoid.cs rename to Source/Samples/Payments/Void/TimeoutVoid.cs diff --git a/src/Samples/Payments/Void/VoidCapture.cs b/Source/Samples/Payments/Void/VoidCapture.cs similarity index 100% rename from src/Samples/Payments/Void/VoidCapture.cs rename to Source/Samples/Payments/Void/VoidCapture.cs diff --git a/src/Samples/Payments/Void/VoidCredit.cs b/Source/Samples/Payments/Void/VoidCredit.cs similarity index 100% rename from src/Samples/Payments/Void/VoidCredit.cs rename to Source/Samples/Payments/Void/VoidCredit.cs diff --git a/src/Samples/Payments/Void/VoidPayment.cs b/Source/Samples/Payments/Void/VoidPayment.cs similarity index 100% rename from src/Samples/Payments/Void/VoidPayment.cs rename to Source/Samples/Payments/Void/VoidPayment.cs diff --git a/src/Samples/Payments/Void/VoidRefund.cs b/Source/Samples/Payments/Void/VoidRefund.cs similarity index 100% rename from src/Samples/Payments/Void/VoidRefund.cs rename to Source/Samples/Payments/Void/VoidRefund.cs diff --git a/src/Samples/Payouts/PayoutCardNotToken.cs b/Source/Samples/Payouts/PayoutCardNotToken.cs similarity index 100% rename from src/Samples/Payouts/PayoutCardNotToken.cs rename to Source/Samples/Payouts/PayoutCardNotToken.cs diff --git a/src/Samples/Payouts/PayoutToken.cs b/Source/Samples/Payouts/PayoutToken.cs similarity index 100% rename from src/Samples/Payouts/PayoutToken.cs rename to Source/Samples/Payouts/PayoutToken.cs diff --git a/src/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs b/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs similarity index 100% rename from src/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs rename to Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs diff --git a/src/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs b/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs similarity index 100% rename from src/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs rename to Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs diff --git a/src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs b/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs similarity index 100% rename from src/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs rename to Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs diff --git a/src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs b/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs similarity index 100% rename from src/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs rename to Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs diff --git a/src/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs b/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs similarity index 100% rename from src/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs rename to Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs diff --git a/src/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs b/Source/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs similarity index 100% rename from src/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs rename to Source/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs diff --git a/src/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs b/Source/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs similarity index 100% rename from src/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs rename to Source/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs diff --git a/src/Samples/Reporting/ReportDownloads/DownloadReport.cs b/Source/Samples/Reporting/ReportDownloads/DownloadReport.cs similarity index 100% rename from src/Samples/Reporting/ReportDownloads/DownloadReport.cs rename to Source/Samples/Reporting/ReportDownloads/DownloadReport.cs diff --git a/src/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs b/Source/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs similarity index 100% rename from src/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs rename to Source/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs diff --git a/src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs b/Source/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs similarity index 100% rename from src/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs rename to Source/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs diff --git a/src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs b/Source/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs similarity index 100% rename from src/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs rename to Source/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs diff --git a/src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs b/Source/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs similarity index 100% rename from src/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs rename to Source/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs diff --git a/src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs b/Source/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs similarity index 100% rename from src/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs rename to Source/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs diff --git a/src/Samples/Reporting/Reports/CreateAdhocReport.cs b/Source/Samples/Reporting/Reports/CreateAdhocReport.cs similarity index 100% rename from src/Samples/Reporting/Reports/CreateAdhocReport.cs rename to Source/Samples/Reporting/Reports/CreateAdhocReport.cs diff --git a/src/Samples/Reporting/Reports/GetReportBasedOnReportId.cs b/Source/Samples/Reporting/Reports/GetReportBasedOnReportId.cs similarity index 100% rename from src/Samples/Reporting/Reports/GetReportBasedOnReportId.cs rename to Source/Samples/Reporting/Reports/GetReportBasedOnReportId.cs diff --git a/src/Samples/Reporting/Reports/RetrieveAvailableReports.cs b/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs similarity index 100% rename from src/Samples/Reporting/Reports/RetrieveAvailableReports.cs rename to Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs diff --git a/src/Samples/RiskManagement/DecisionManager/AddDataToList.cs b/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/AddDataToList.cs rename to Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs diff --git a/src/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs b/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs rename to Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs diff --git a/src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs b/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs rename to Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs rename to Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs rename to Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs rename to Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs rename to Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs rename to Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs rename to Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs diff --git a/src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs rename to Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs diff --git a/src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs b/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs rename to Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs diff --git a/src/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs b/Source/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs similarity index 100% rename from src/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs rename to Source/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs diff --git a/src/Samples/RiskManagement/Verification/AddressMatchNotFound.cs b/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/AddressMatchNotFound.cs rename to Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs diff --git a/src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs b/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs rename to Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs diff --git a/src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs b/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/CanadianBillingDetails.cs rename to Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs diff --git a/src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs rename to Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs diff --git a/src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs b/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs rename to Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs diff --git a/src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs rename to Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs diff --git a/src/Samples/RiskManagement/Verification/MultipleLineItems.cs b/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/MultipleLineItems.cs rename to Source/Samples/RiskManagement/Verification/MultipleLineItems.cs diff --git a/src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/MultipleSanctionLists.cs rename to Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs diff --git a/src/Samples/RiskManagement/Verification/NoCompanyName.cs b/Source/Samples/RiskManagement/Verification/NoCompanyName.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/NoCompanyName.cs rename to Source/Samples/RiskManagement/Verification/NoCompanyName.cs diff --git a/src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs b/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs rename to Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs diff --git a/src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs b/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs similarity index 100% rename from src/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs rename to Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs diff --git a/src/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs b/Source/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs similarity index 100% rename from src/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs rename to Source/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs diff --git a/src/Samples/SecureFileShare/GetListOfFiles.cs b/Source/Samples/SecureFileShare/GetListOfFiles.cs similarity index 100% rename from src/Samples/SecureFileShare/GetListOfFiles.cs rename to Source/Samples/SecureFileShare/GetListOfFiles.cs diff --git a/src/Samples/TokenManagement/Customer/CreateCustomer.cs b/Source/Samples/TokenManagement/Customer/CreateCustomer.cs similarity index 100% rename from src/Samples/TokenManagement/Customer/CreateCustomer.cs rename to Source/Samples/TokenManagement/Customer/CreateCustomer.cs diff --git a/src/Samples/TokenManagement/Customer/DeleteCustomer.cs b/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs similarity index 100% rename from src/Samples/TokenManagement/Customer/DeleteCustomer.cs rename to Source/Samples/TokenManagement/Customer/DeleteCustomer.cs diff --git a/src/Samples/TokenManagement/Customer/RetrieveCustomer.cs b/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs similarity index 100% rename from src/Samples/TokenManagement/Customer/RetrieveCustomer.cs rename to Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs diff --git a/src/Samples/TokenManagement/Customer/UpdateCustomer.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs similarity index 100% rename from src/Samples/TokenManagement/Customer/UpdateCustomer.cs rename to Source/Samples/TokenManagement/Customer/UpdateCustomer.cs diff --git a/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs similarity index 100% rename from src/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs rename to Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs diff --git a/src/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs similarity index 100% rename from src/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs rename to Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs rename to Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs rename to Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs rename to Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs rename to Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs rename to Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs rename to Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs diff --git a/src/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs rename to Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs rename to Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs rename to Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs rename to Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs rename to Source/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs diff --git a/src/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs similarity index 100% rename from src/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs rename to Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs similarity index 100% rename from src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs rename to Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs similarity index 100% rename from src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs rename to Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs similarity index 100% rename from src/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs rename to Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs similarity index 100% rename from src/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs rename to Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs similarity index 100% rename from src/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs rename to Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs similarity index 100% rename from src/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs rename to Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs diff --git a/src/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs similarity index 100% rename from src/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs rename to Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs similarity index 100% rename from src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs rename to Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs similarity index 100% rename from src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs rename to Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs diff --git a/src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs similarity index 100% rename from src/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs rename to Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs diff --git a/src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs similarity index 100% rename from src/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs rename to Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs diff --git a/src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs similarity index 100% rename from src/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs rename to Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs diff --git a/src/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs similarity index 100% rename from src/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs rename to Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs diff --git a/src/Samples/TransactionBatches/GetIndividualBatchFile.cs b/Source/Samples/TransactionBatches/GetIndividualBatchFile.cs similarity index 100% rename from src/Samples/TransactionBatches/GetIndividualBatchFile.cs rename to Source/Samples/TransactionBatches/GetIndividualBatchFile.cs diff --git a/src/Samples/TransactionBatches/GetListOfBatchFiles.cs b/Source/Samples/TransactionBatches/GetListOfBatchFiles.cs similarity index 100% rename from src/Samples/TransactionBatches/GetListOfBatchFiles.cs rename to Source/Samples/TransactionBatches/GetListOfBatchFiles.cs diff --git a/src/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs b/Source/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs similarity index 100% rename from src/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs rename to Source/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs diff --git a/src/Samples/TransactionDetails/RetrieveTransaction.cs b/Source/Samples/TransactionDetails/RetrieveTransaction.cs similarity index 100% rename from src/Samples/TransactionDetails/RetrieveTransaction.cs rename to Source/Samples/TransactionDetails/RetrieveTransaction.cs diff --git a/src/Samples/TransactionSearch/CreateSearchRequest.cs b/Source/Samples/TransactionSearch/CreateSearchRequest.cs similarity index 100% rename from src/Samples/TransactionSearch/CreateSearchRequest.cs rename to Source/Samples/TransactionSearch/CreateSearchRequest.cs diff --git a/src/Samples/TransactionSearch/GetSearchResults.cs b/Source/Samples/TransactionSearch/GetSearchResults.cs similarity index 100% rename from src/Samples/TransactionSearch/GetSearchResults.cs rename to Source/Samples/TransactionSearch/GetSearchResults.cs diff --git a/src/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs b/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs similarity index 100% rename from src/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs rename to Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs diff --git a/src/Samples/ValueAddedService/BasicTaxCalculationRequest.cs b/Source/Samples/ValueAddedService/BasicTaxCalculationRequest.cs similarity index 100% rename from src/Samples/ValueAddedService/BasicTaxCalculationRequest.cs rename to Source/Samples/ValueAddedService/BasicTaxCalculationRequest.cs diff --git a/src/Samples/ValueAddedService/CommittedTaxCallRequest.cs b/Source/Samples/ValueAddedService/CommittedTaxCallRequest.cs similarity index 100% rename from src/Samples/ValueAddedService/CommittedTaxCallRequest.cs rename to Source/Samples/ValueAddedService/CommittedTaxCallRequest.cs diff --git a/src/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs b/Source/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs similarity index 100% rename from src/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs rename to Source/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs diff --git a/src/Samples/ValueAddedService/TaxRefundRequest.cs b/Source/Samples/ValueAddedService/TaxRefundRequest.cs similarity index 100% rename from src/Samples/ValueAddedService/TaxRefundRequest.cs rename to Source/Samples/ValueAddedService/TaxRefundRequest.cs diff --git a/src/Samples/ValueAddedService/VoidCommittedTaxCall.cs b/Source/Samples/ValueAddedService/VoidCommittedTaxCall.cs similarity index 100% rename from src/Samples/ValueAddedService/VoidCommittedTaxCall.cs rename to Source/Samples/ValueAddedService/VoidCommittedTaxCall.cs diff --git a/src/Utilities.cs b/Source/Utilities.cs similarity index 100% rename from src/Utilities.cs rename to Source/Utilities.cs diff --git a/Source/lib/Cybersource.Authentication.NetStandard.dll b/Source/lib/Cybersource.Authentication.NetStandard.dll new file mode 100644 index 0000000000000000000000000000000000000000..d53f404db6a40ec9212b9e44db13aaf67701f13c GIT binary patch literal 30208 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ⅅ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 literal 0 HcmV?d00001 diff --git a/Source/lib/cybersource-rest-client-netstandard.dll b/Source/lib/cybersource-rest-client-netstandard.dll new file mode 100644 index 0000000000000000000000000000000000000000..e5bda36e64ca96400c28ff9156f048457dee90c4 GIT binary patch literal 3022336 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 bvdg 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⪚J8piB7-o?3|p= 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%0Dg2TN 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

kk}~NiEl_u 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�qLw|CamVn1?i%t?Z>d@0+Ohu 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

{%GSFQJ*{jHH}bT$eJt{{w(qi}J*{n* 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�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 F{{hUIiEjV^ literal 0 HcmV?d00001 diff --git a/src/lib/ApiSdk.dll b/Source/lib/net461/ApiSdk.dll similarity index 100% rename from src/lib/ApiSdk.dll rename to Source/lib/net461/ApiSdk.dll diff --git a/Source/lib/netstandard/ApiSdk.dll b/Source/lib/netstandard/ApiSdk.dll new file mode 100644 index 0000000000000000000000000000000000000000..34bd8afa5269053896c3555252a9f35a6dc026c6 GIT binary patch literal 28160 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 + + + + Debug + AnyCPU + {97FF11A4-924D-4C87-A028-2AAF64655954} + Exe + Properties + Cybersource_rest_samples_dotnet + SampleCode + v4.6.1 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\net461 + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\net461 + TRACE + prompt + 4 + + + + False + Source\lib\net461\ApiSdk.dll + + + False + packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll + + + False + packages\CyberSource.Rest.Client.0.0.1.7\lib\cybersource-rest-client-dotnet.dll + + + packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll + + + packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + True + + + packages\NLog.4.5.10\lib\net45\NLog.dll + True + + + packages\RestSharp.106.5.4\lib\net452\RestSharp.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + Designer + + + Designer + + + + + + + + + + + + + + + + + + + + + + + DEL /S /Q ..\..\..\obj\* + + + DEL /S /Q ..\..\..\obj\* + + \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.sln b/cybersource-rest-samples-csharp.sln index 8130cfb..c0fd272 100644 --- a/cybersource-rest-samples-csharp.sln +++ b/cybersource-rest-samples-csharp.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.28307.645 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleCode", "src\SampleCode.csproj", "{4CF837FF-237D-4B5B-B922-71CCC654D718}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-samples-csharp", "cybersource-rest-samples-csharp.csproj", "{97FF11A4-924D-4C87-A028-2AAF64655954}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -11,15 +11,15 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4CF837FF-237D-4B5B-B922-71CCC654D718}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CF837FF-237D-4B5B-B922-71CCC654D718}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CF837FF-237D-4B5B-B922-71CCC654D718}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CF837FF-237D-4B5B-B922-71CCC654D718}.Release|Any CPU.Build.0 = Release|Any CPU + {97FF11A4-924D-4C87-A028-2AAF64655954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97FF11A4-924D-4C87-A028-2AAF64655954}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97FF11A4-924D-4C87-A028-2AAF64655954}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97FF11A4-924D-4C87-A028-2AAF64655954}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {95563D15-3D02-4AC0-9DFD-FE5A429F71AD} + SolutionGuid = {FB9CA784-6AD6-40A2-97AE-8F3EB809EBD3} EndGlobalSection EndGlobal diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj new file mode 100644 index 0000000..d876ac2 --- /dev/null +++ b/cybersource-rest-samples-netcore.csproj @@ -0,0 +1,76 @@ + + + + Exe + netcoreapp3.1 + SampleCodeNetCore + SampleCodeNetCore + + + + bin\Debug + full + true + + + + bin\Release + pdbonly + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source\lib\netstandard\ApiSdk.dll + true + + + Source\lib\cybersource-rest-client-netstandard.dll + true + + + Source\lib\Cybersource.Authentication.NetStandard.dll + true + + + + + + Always + + + + + + + + + + + diff --git a/cybersource-rest-samples-netcore.sln b/cybersource-rest-samples-netcore.sln new file mode 100644 index 0000000..624a04b --- /dev/null +++ b/cybersource-rest-samples-netcore.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30517.126 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-samples-netcore", "cybersource-rest-samples-netcore.csproj", "{EB3608A8-87BA-48C2-B5FA-99B0C400C3AC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EB3608A8-87BA-48C2-B5FA-99B0C400C3AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB3608A8-87BA-48C2-B5FA-99B0C400C3AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB3608A8-87BA-48C2-B5FA-99B0C400C3AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB3608A8-87BA-48C2-B5FA-99B0C400C3AC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BC37D5E2-EA43-4842-ADDE-04C956DC6FFC} + EndGlobalSection +EndGlobal diff --git a/src/packages.config b/packages.config similarity index 100% rename from src/packages.config rename to packages.config diff --git a/src/App.config b/src/App.config deleted file mode 100644 index 89f0254..0000000 --- a/src/App.config +++ /dev/null @@ -1,107 +0,0 @@ - - - - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/CybsPayments.ruleset b/src/CybsPayments.ruleset deleted file mode 100644 index de6824e..0000000 --- a/src/CybsPayments.ruleset +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/SampleCode.csproj b/src/SampleCode.csproj deleted file mode 100644 index ff18ebe..0000000 --- a/src/SampleCode.csproj +++ /dev/null @@ -1,329 +0,0 @@ - - - - - Debug - AnyCPU - {4CF837FF-237D-4B5B-B922-71CCC654D718} - Exe - Properties - Cybersource_rest_samples_dotnet - SampleCode - v4.6.1 - 512 - true - - - AnyCPU - true - full - false - .\ - DEBUG;TRACE - prompt - 4 - CybsPayments.ruleset - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - CybsPayments.ruleset - - - - False - lib\ApiSdk.dll - - - False - ..\packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll - - - False - ..\packages\CyberSource.Rest.Client.0.0.1.7\lib\cybersource-rest-client-dotnet.dll - - - ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll - - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - True - - - ..\packages\NLog.4.5.10\lib\net45\NLog.dll - True - - - ..\packages\RestSharp.106.5.4\lib\net452\RestSharp.dll - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - - - Designer - - - Designer - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 7bb1961f8b7ef9c07f8376560902fc30a53c362d Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 13 Nov 2020 15:32:17 +0530 Subject: [PATCH 037/161] Converted to NuGet references --- cybersource-rest-samples-netcore.csproj | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index d876ac2..92bb501 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -36,6 +36,8 @@ + + @@ -50,14 +52,6 @@ Source\lib\netstandard\ApiSdk.dll true - - Source\lib\cybersource-rest-client-netstandard.dll - true - - - Source\lib\Cybersource.Authentication.NetStandard.dll - true - From d79f28e6997cd84f5f33e05b694e589c656517a7 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 13 Nov 2020 15:57:53 +0530 Subject: [PATCH 038/161] Removed temporary artifacts --- ...Cybersource.Authentication.NetStandard.dll | Bin 30208 -> 0 bytes .../cybersource-rest-client-netstandard.dll | Bin 3022336 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Source/lib/Cybersource.Authentication.NetStandard.dll delete mode 100644 Source/lib/cybersource-rest-client-netstandard.dll diff --git a/Source/lib/Cybersource.Authentication.NetStandard.dll b/Source/lib/Cybersource.Authentication.NetStandard.dll deleted file mode 100644 index d53f404db6a40ec9212b9e44db13aaf67701f13c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30208 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ⅅ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 diff --git a/Source/lib/cybersource-rest-client-netstandard.dll b/Source/lib/cybersource-rest-client-netstandard.dll deleted file mode 100644 index e5bda36e64ca96400c28ff9156f048457dee90c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3022336 zcmcGX2fQUkmH+SDp8MX+o5Y(3g9M!c2@Nx35H5%W1yoc}6cIrMSIHI(Vn9(*0RyO* zb5_i21jSWX3?Qx%|7%#&s+ch18rFdS-}juZaPO_B^VZ$>nW;MUJEyCwt4^q@?!JBR z6Q9>>dcEFa{r~GgII>e_Zf?(pI; zBaftC^+((Ky+QABd#>(1W6`#~MTRasncK7Jy+?=X_}N|))bmqeM#;=nd&gdHrj@Qu ztqB_anPrPNO6c6Mqv+-5@1%4^Z^_yXYr@VV=cd-oO|Rd1c4~I|<#S7VOV@4)t>B%O zE}mUtM}%D{_GYKIJYjBnc6xT|IcMzsrKMq4p=)mI&n=x@x?x#w>6$IWdXrlkHYlH4 zym;d_@tkvm>Dk4zgI1kBH8-=qH#?()d)w@}xc6k`LT7txX3pPDhb`;1>ZF+_?4fk| zV!MzPz3G0Ciq7<=muwV%Zo8KXOT*quXL{dWH@CRA@nFHTi_bq$C%ABK(3J;X{`Ruo z^qQ~_74*K@`}VTw4b#(MHN|gE%}uE_Q@i#S?MwgPzPI+yz0KyVOGV$Sx7p^R`@#=< zNN*Vu{oc~v!_Rh__CH9CS3l48)~>qZG|BGx#Ye2{EpAoY%uEL@>z}`$ip!UreQlJm>sO!^Wt9bwncNB&2C0N2C2S!d;J~ZJk>a}v$Mt-I%jEb^SRaE z`mRQF>DpC6mprpyc)P?uGty|4*wPAVJ zC391~^&4P$W4E5&dc)?CHSN8Ih+q0AG*nyrfUKFFdgYE=&Q8B_ZprMDHSIxM$WdlAO)J)X;uooXl|R?Z8ofm12MaF%LmOZ?Mcb4r{|XWp|`tj5u)49Zo6TM z;rRCbyDFD2on7vdD@>v1R<2%k+ZM9TMXOiMF1zS1I*o`G7abyEcIE6USM1r9s$zC0 zt7%53K2%&O>+EXmAms&n(Wo=Vdy{^CyHbS)xB4C67xoMX$qF()~uKL-odfB+D@Ac;P?Dy8FpH$au zZ{zv$BK>xyctfzkmZ1gO;x7$HF8;D8YVbUh9jAwbc?0V4#g zh=36S)DD+0LVzy90VDE-iX{bemJtGUp$-@!Kn~9VBLt`m956zF^vMAua`m4thG~7* zkMh+Tu0bnztbFBSTr$L<-3MaVT{Wb4HFex|_kOduy<0&a;WQ%hh#E8(kv~kd{0;Q2 z#hGO}rXYt}K45_S%&OYYe54aotpcp;&KB{CjL;=&sQnU+5U^zgj1X|U2pAz?s|Xk& zVCx7NA>BcTex+P3p6yw5otfJBCaIDK&Z&(zN4nq2%}fO~bY|nKMOk1j(*0I`p(1ct z7LeUl1fHA))a@04w`T$Me?{P?EO1m+;4e{Nrzwl@%hva%cjelpuWmp6En6MxX4CbH zlnq}cAJkkR+vvCVQr%`(-fug|X~>8)f7$%DMKeO(=IgaqVsAU%O9lYRCRXXKCKF zV{_4&%62V1&V6+hf#EpI2kiqam&bXa6NC0a5cp}$H{H685U_0oj1X}92pA#Y4iPXy zz}g5HVYdAR_4$ZxH~nn7g=HQqu}RxLI12aM`&9+b$pZJU3f!FC$MIEx*X0^cs0vg~ z*RE|-ZC7Ee-=3_>3){sU$8GofW-jzZ6G*Wx^3E7DBfN4&GDiBP38aXVcgC0*;SY$r zG15y-AjQVWF~*FBpGy{Fq_>(tiXb`0n9=Zl1Z9l$S`$byMskcXqv1;u95qH=C%*40 z;?r38g*^gw{J74+-mY_d zJJ0RyTF{>kz|`$)@We5X4xXwP(Fsy*9@>Gn}hENRbmVrje4 ziJA7%PAqF5oj1l&m5y~!0zePV9cBxF9e7I_i5zbgH^uHG&jrv}P~tPt@UDB|f7DfBEe4$OlS%1`Ga**%grw)bXe0R%-6N(&o-LdMtme$MVPI zSpIY=BY#CKf10WwmS1A|puNm;#qwu5F=(Id#8i8Q6VvT;omkRd>BQ3Z1y0PgFLGj8 z`w}OXw=Z*IMf(aTR<^H#AgJ#a1ECQDc8`D&0``c25d!v%fDr=rihvOU_KtuN0``f3 z5d!v&fDr=ri+~XV?i2wd1neIHBLo}}0V4zqBVdGp10!IB&!zq#TN;V;N5^T0Lf&B+5O24=&P;7g=v?@?c1YTYhDCQcktO`^o0t?v}S&o^$PIVXafLAJ3 zFTocV`y$V>_>IOifs_D4K4jA1q%*=9YlS}0Q1qt>q==Ju(}v6l%hn0?X#?8S1X9Gw zyJ_yqh*;M))tpecFKDHGvdy@^0FY z8R1aGecFH)Hh~mz@^0FY8R4Ob`?LX_Yyv6bqBB*Hty4?g)rVZpw8#0P|tRGzhqvO}h&n?e$2GmiJE6*7K zQd~pj#LaUCfW$?^#LaUCfW$?ih>69V0Vwg&Ao#_c0VwfN8TiGV0Vwg&5%|TN0VwfN z3i!pG0Vwg&0{F$80VweqcKF4d0VweqXZXdO0VweqTlmGC0VweqQuxK30VweqN%$*g zSH?L7P{*H|TctV0Dw|V$+2<4&`JCd3c}}4@nEe%ViZ`nY<`i$Se9*qla?L5;;l!YQ zmlIR%yPcSB-|NJZ_We#QZLfA>rv0E3%i3!pm^d61W2+GY?i>Ll1RNXzBLwJ1fv>`i z5O7EYj1X{W1dI@HSOkm^aCiia5OCKB7$M+p5iml)5fLx~+jxy^W2#*1KP^Tp%>k~D zbiaL*#OzkV$UT9dXMwA#0&AyI?0YK$M~>fBI4ldiy;{R*S>T;jflIQ$KUW1_lLg)* zfy=M%_qLgA$n{z3ee+A*lBGVt$tJF6)pWYxYpMbVWq}VNu*-OlR73TG_CZ$=X+NsU zi&*{fevf+~BeD9Qh55)ff$?qcskZDU*G^%0#TYjnE$;BKhBDYqAWg?m81ke+zs+1f z=B|b^{!JhydXNuy9b@n`$ok>thN2BkAWf&BF#Meqw%=y1pThS6P>?2&rei1!ud`z^ z*N=IJq3BE#NYgPChR+$}`Z13)6g67j1hN&Y?RL@3>V~^UGrKoy*01fL-I^`e&xyXb zaIwkS`zYCM|9hrb<_=ZoFDk(%aUUsve_bhJTe;>$hm;iYAaP@6Onr%unnU z`icFF-TBjr{ZMc7P@b@>bouJOS37ayOHBr4ZvrVHntX$9LT8jGJJxSFx!( ze8W*C8lHZ8LHqVwl)nk2-tP+N6bR^@osDmnsn`1ga;-YE9q#~vRB|cgOzliBTiH|bDFJd}S;-d+3OI9y2^|8pl zjo&4Uj7|&UwJ?BLo=D!wN5+^uW5oH3m=2WA&k(^cVmeUbGZ^rTm=4tOr{-2DCaeA&I5B8H>%>(1IVYyuFF3KJ{gM+) z+nb!2Y5$)S%i6CxvAq4d6D!*PaAIZqEeOK3e7474BLo~30V4#cuU*0j0r!Z25d!2X zUBUe)yFham_5inw& zb^Zfm3>sbMU#A|LjA$QRe@p||LLkgu@P`XRp92lm2hKKpjhYsTUDS~=YPH` zP^_`PSQRMN*k7&+6l?6SR0WEygnzFJ6k7>js|plb3E!v+6k7@3tO`^o4+~l6%cu6+ z|5V+@++qH8J{r>mQerxJx6aQDe?r06`RGp*ND(LR*7=zcj=iH$U+1GuO&~>_yj$mI zMmPd-U+1G+O&~>_yj$mIMtI2fLVcZ&rZs^Saq@1RpBdrntY&?kkKQ$b6mjxyou3)u z*XxA(Iv*`;0x9C;-8w%r!X?!1>wI*w38aXVckBGj2!TuWbv_!}1X9GwyLEnMgr_6! z>wNUJ38aXVckBGju%&ai&PRKjK#Dkdx6aQD-*mWGZoS{4%S|99V z<~adC;-XN*#9~eWl=x^6{9;Z3l=!F&{9;Z3l=$cf{9>ICl=vtG{9>ICl=x@?{9>IC zl=uug{9;Z3l=zG@{9;Z3l=zG-{9;Z3l=uuO{9>ICl=zG!{9>IC)bY!8{`Y)NafQz* zF3)p{Crr*MeyA##Q~cQSLHkq7HK+KQ6NB~_PE57Ga$>r@)rlqTe>t(V{hbpt?H`<2 z*8b6nr6G#y!?*e^hgdfuw5A^6<6G#y!?*e^hl+OX6 zflVMqoV*M4nGx2`3VpXlZuGGUq==Jufj%?J=K#>oCXf=p$qDos4ZCTK2=r)a6G#yx zC(vg!JqLicHi48tPfnoE=q5i0fLi&zho_zX1sBGv;XJ|hdii1k2;&rrfIVm(meGkoxi zSPzu=j2iqR)&nIzg9X2c^*|lJd=B8J9?M_gvHbbO@{yM-myM;%3_fNL)@P zZnjN;q+5%%_q5pdo^EyBdYS9iOVO=I7TZmm>nL<<4LLgXPf=rx5b%fy7~$h|wytAD zhdvh7Vs!qaiA+U@{uG7#?G{yms){URtv-u>Y^}PBwfb3O`mtD#<)74VX<`#d8FO;R zJfmUffsZ*&Z2~D{PR^KTw3XtH-D0&dKT7A7zN$&~%s(}cj5$CWRjL~qbAULi+E83- zWBNxQ)7SWzzM3)hana_X{S^beRuwS7+gUznwWY4I=Kec6F=%&oVyfN6iRpH|6HD6N zoLJiK;lxb4mlMm{eVka{?&rjcc7G>UwnHaYwFfz|S*xWyC!K8%abk6=hh;(L+PgZj zd3%HtTeL?(po))-nrDOnnU8M+8X@5H2pA#Yj0hMZ;LHdZAwX*2br>N)y6k`v0?vtm z5dt0+0V4#22pA#Y+z1#U;JgSJAz)(!j1X{s1dI^y=m;1g;DQJkA>c6)Fham%BVdGp z$3?&h0gsP>5dtoZfDzc#cQjWWvE}WS=6Fy%(|iXF%Vaz#)-vm=0w>4X`t9~r0qK7X z7<%rra*CUCMA@k-a8s_KtqMFdw_(?+K(QLyP!%XvL%UZ6iq+7bRe@rIa__1@v0U1> zDo`w!?o<^hmP-dz1&Za;fmMMI=Z?B_RiIc;-K8o}JeYQ9RiM~zKD;VW>;>PgDp2eN zA6XTshK~iU=~fdzj#lMG{J6Q9oL}4|tlwf8O(12lKt8;BjNxm#*BXkQG=UUx^5JD; zjBxT6LeDc4t7!r$;^e~<#u(v{l|m0U6dP&+DdObAUB(#UfX#%?8Hz_yjx3WhA%LEEsX^?ffRA_ZY`Y|>RsLQKig`@o|{05IC;00 z&Wvy;E>)3MjlsH`K#Dkdx0cQfTWNM{X>7d-q==JuYw64gi}Ew|Sbh^o5hw4~(wSk) z({3$|A7}z8;^f_0Iy1ttdi;HOvF0xQ7O&6*QYK{N%+@m+7V)UO*3x)~CXgaX&de>N zzPqm3I$oj)q|DsNnYm@ucGt&d>pq{lN@}TzTb#SyL5Gga-2l?uZJl%Td>tThw|8!y zuLC6R4$dvt(m;v7Q^zmX(m;uiC8}lRS{f+vF+KRjS{f+vF);YWS{f+vu_*Y(S{f+v zF(LTHS{f+vu^ITqS{f+vF%tO2S{f+vu?qObS{f+vF$4I;zBy3hqxbMv&8~{i&jBSq ziVmM&@#x+e07`r`8$Q3~(eZ&2A616GdUkc>10_D{3!k6&=#B?Ue6$umKkw1;ff65O zh0l+CbbO$WKQ*^T>%BF$Ht6qb@8iD7*9LE7ZIFKpfcc)ZvZweq8`lVn{nhQ|y^X(A z^gsVtJsEN#3x?xVzgFYoYJDp1)iar^_jrxFl7pr2VxO}tv$eW-pz}FgDldM!yx{At zU*}JYZ%QwTn@fr5_GFh>f&^+WiI=V@>R8e~)FqZ8!6uR_>-gds$79talh5N7&p6(%DzG*`6L^0Fj+AbVJSAB?<9K|vhI_6`i-QxY0vofy ziB*B(Dan(n0>x9352*^gG@s&ORe|?sfm0=L`8CzYD2oRq|A}fQI-__%@{v`6;sMFi zs|~46d>68BGDiSDM|G!pZ_~R;F;Mu(^N~C=sW-zVsQ1K`rUwKm3|}+G^#=r>X()=K zm&MCtC=AaUj5a43~^?{S>##1oX1F z9YdOqp)mZ)7}t;asG;av6G+oB6o#)I0ZCXl9M zC=3r6&NKsug-(+>e)>)p545!j8#uklHImQ<@d-AG1)<0iy6XgYs?&u(P2aRBAo~AZvrXvHgcYr%xHRI5-Vr|DT3rYF`3cy z#3a_x1X90R&GINP%gZdg)UjC}wsDQRWb-`7LxUA*^PVg~io@utxOt8TkhrL(xOt8T zkhmxzF}%260+jeD9QufKq)7B>ZAd2bA~>9sFWW2h{P)XCY>M z&hvJk^Juvm_d}16!tod9I+_V=R258b9&P!ceT?Oru{_R+L3^PSQ|%L-m~Nj0!Gz!$ zF^C!=;F%FHLcp^kV1$5YN5BXHmq)+|0lFdM@!tpm&xwE$an3dpr#~M>rMG zvU$CAr@D(+w@x8qi?LX@(!vHkE9Xdtb3D$SA(=VH`+J$JbB-?A@WUoE!%v&r?I5qk zhUvC7Hdy8yUvDyujb1=knjANU;nT;s?zkUiD8r?<(92^e4CT3WiJ9xi9B3#bs29@9 zV<-%_9pm~jQ-(6AbBpzMI{9GrVh<667$O#Xh!|K#FAVkKx{EqC{Fs?y#Jr-3An|e& zLN(?FO|X3NYClPLO7*x`sB#QP`}EsR)Ugf6XTWP2KM{}GqgqWMO@V^~fg`gjfdiY| zQhl-}#|={uX$Ir1;IXwos@|d9I7iROh|06&I02CS9s`EoE8+xD;xkV0i#P$4_}0JE ztEb&h6D>MF9T{VO+WIZY6CFDF$QYBSXE=WmCxDV)mObegLiw$l)$W(CcE9`q{Bn8k zQEw`kD}E+9?)ACR@fjiDc@Z$e*DShCBXP|~<8QD$F}jM;dykjWrin>*aqsaNRe`_6 zn+gBZ-$|4I=(ks>?&MecJ>6>>xi{V2d!&haT~{d+9CCKBGMer^(p0^ui=gH<Bq;%^i?{BF?|g=WBP(PghmK>VFZkr zXG~Yl=DmgDzTzus(cc==S62o8;W6EkF@1yT{`+G}6ZLkrQpS{=G0kWiQ<~ZYQpS{= zG0o^Ejwv;dj441GQ>q&oQ-Fyv-POnR1|QSw8PoEaqPOT6#`JBL588K-Gqx{^LurJ7 z7e~Md0eaBJ=c`88K9XjxI=t}74=Kj_jgi*tX0&t{MaYp|pbut&w<0j13^!x}-9D@c zRFy$(TFBnV?a+sJtNKD8UODEs`F%@G>?O#R=si!RK68*>P~cWYX4%YvTNPZE-tbh4 z0+FLY84Vu+(yawN07-v1?TG#WBrfL? zH_uG~qIT&AhvRcad%J#p-u3Hq9vP0|$DF3BvH)~uInYyxST^-@67GOIG{b$c4qHCi>IYXC`` zIQxjM0VFPG8__j@imn~#y7m>v2X(*l31k!X2g&|hdZ!_1A(UL(Z{nZ50WEm8&qs(&4kR8!^O(0Fu6tJVr za%tHSJ=p|OmzKw-fE{I)NsoGLx1+1nzL~s!BijDT)r{av|myE zdP|+VhkkSM4Fy|<`wipEr2id4KUDrTat!#j(fEuI@VW>XA>j29Fhal^B4C8s>$}v> z5qrJ!=6P=VxJdWgn{?Vqdwp>h_s zFAZ!jNNBw1+@b0?x1v9?UVL)LKN<|Kd1_vodtea6)5cO$5nx6nonneUsMIYmj!->z>(u?p}OHOBo1$jD*aZKC%bQY(#f9IHzW6O6$2zlk2ird z**%5fo5r|q_s=zyL1+SLI)=jVyfLmH^I$_6mnM*=V<>dbt7Wbqv$Gw;P&I)x9YbNb zbd2lA{KjmE(bGOX8T<4PQ2**CCYkNiAMa(dZlB&I8-7=OX86yk4*R{CqzbpKF@-n= z8QsTGzcKzzAoaFsSx138nVDq`h9;0EX$mX?Gs~s52t+fQK*}PJ9JiOzRxW&e zXUOerOZAM_8PV@Ck|TZ(Ao(uFY{c&YBrZcT;`aa&mvI>Ldq9a#&&^G(p0aMWnMJp! z92s4Y-d#P)y+Zno`igs(K&d`@34U?!5-9QM9QehaG*HKnU#((K`hM<*f9QVrX8iDx zh3oyJjxz80j_AgW(3oR`M=KxkW1FwZeoPDH_#pd#bMF5G+rB-jcbh6tw%zX?qBcn( zl5MlMyr*71l$2gcREiRjqeK}E&)F{SB-rOE?E18H?r9z$^#^J7YL1%#u}_!tB_VqB zMDNj`d5_*gkLFpS_uC$-cUtwvj?VMK6V-w7nX{%{+^2gL`KBNUV(*N@V1xio-8@7Y zp?VpYiF*RmTjp^&I@0}CpMI#sm-Di~pej&x$_w$ycVOIRRCh6M7gWaWk>126(9q;6 zC@@VTcb2;fEkS5+6G&ZJLrsC9&McE2UxHY_9i=vGmdBeDjEpxxvN0+YH_wv*qBf-a z1E;z+-0Ir!YqX(UtLsYyN_+dBlca5Ql&C{*mtcR&2O<-(|C^z|Hw>mDN>&;#Cs;o?GP< z#akL{ssdGYv};?TYa1}0f9L(lwdmtEs=Uz0-;U`cd!64GrY~wqunD9*e?{Is@0}Up z`S~~0=@)&^uoEZmp7+j-@F~PEw%X~XCXli>O3o%~M#Fm~%O)zl)dW%m$%&sC4R1kE z@snO_0x7PK9DB%USgt4KtM;I2Z@DJt`bO*lAlU<#Ghz<_iOU6uo7W8hiA$@+E!Pb| ziBDtU7i)5$j$f|H&vbj!gPVMR=l9rK8PD`YgIm-4qa_%j>#WAJFBG;gxLt~8YdQD- zK|EWBdhMXf3q71Cp3#IRkTR&`3~EOC^jtS7nm3*ytzOOX3?TMtif0?WM{n~U{R=%h z9?wo!{}FR1ea$GmdgKd7I-c1$S|~!MNJp*d2m*GWT?1(C+QTRJ$((-tYr) z{EQHAbp(tMa7_e^5b(hW7$M+85iml)wGlAFb>dgLwh{k$&{jE?o*(IcyNg;jxmLR* z3#_jSyebRqRu%YE7TBXI@RKaCS5@GzSzsRoHcfFC63@3oZx2x2h29>lxpz4a!+)+9 z<~`K}`pbi~oG68E9RulHi_=42$Iy9AAWg?m82&$vPQT4uKjveG(w|KrO~+6ezHW@` z$M`yiF4pH-(=qa_6j;Y(mL0%4hW>5>sh>g86!62D<^F(ye}bDW3LMI&|#kbEVbA#R?R03rid*_&pv32@;1_-vDDk-%_{B4s zKpnsQPTGa;RTi%@Kiw!BxgV?VjM=>C5X%ScVdU8ThogxaA>dykV1$5=M8F91>l625 zx7a${@Pi_)SG{PfCjF!LV+$MBH)<*Zg$*BC6{ycp+`nw<9A$eH{RmZG*w~w;7vnbO z_sh5vy~3t6X(k2sA~VZ1Q~Uf}mfm11r71AU&McSKB%5p03v5YR%1i-e&McE2pH$#e zPE(s#WnHE<(wH2B0Fpj&c5$;V10*hI6F2KJK+?5*Z}zFKYcsBEOVPEr#ZaZ~#e3=~ z7Fqh@tnxv7AIlYfj)g$!J{ncZ2mx|1J{LDaz`sVo2mv3DfDyW8u6<&k{j8{anrpuy z(*5=xI`O0)UY`Yyt_plB3*5UZP-yZoRe^aFbs@3fj_B$ARePbQ^Y62BrA;7BKAJ+e z&z`xaPQ&M^AN3-#9YdOQn*zF>SxL9)i6)RHX$t6eW+mOGTbe-X($Z}T=yqn!tJ{~U zeZ@XI%^%TifTX>&bwsxT5|_4(=r%y&(iU+`KMj<0Kku_Y%XNP<*Zo!KexAKaPp^x5 zYJ`AKM8F8w+ll>z-$YH5-WE?%pFkTX{OA7Lq>1y1Re`G3Ekx&bKrJ4sx(l7VKx0w* zM)rZUpFk7!aYUs_9VnmcJj?aX={m+-mTnQdhcZIr`l$#QA>h*yFrpqO?;D3svL?hY+{@X@A8PMz?*Unry;Ou6H)cyLUdtAbm44OU+4lezET&Mi#}JFUx_{}C-I~X z6qxUkJImEU^F1z0-<2z+DKOv5ESJ`Nk89Lt<&-ktBS&vC%2&bb^S!YcNlQlb1|aDT zXCBcTfW+l=;^r6$5Vfj!e(B||SKGQ?ZG&FPS`M@IzhdNhI*J&1J~<)r`lvld2)H2v zM$F?kJ`y!R`t+wr_uF%6(}Xr`w{7wp8><5Uu;17T6?m-bE_CIrFGnRR z+cBn>7GwHE9mAMD$?`$_6mrJ)GjS-55O8Azj1chI2pCcK9s9-M(^y{=X}yI&ODD$q zxmn<%s=)iQz>}*2Rb^P9@7NiAV0;RFc*&SP;5#lc-@%pWT?(bB1UWl(8PzM^`qY7T z>bN4kR?!KPqdOUOLFo=x)&x>?haBC>Xt+{PMR!h9dx|+VO&HM~fTTN|cSLsp5|@*S zoBahq)U3i^yv=p1b=}%|T(_R7qtLBqTRv#7AV;_UEozPt0zMZ3BLsXt0!Gwz>r+u1 zq+46uKDmi!(AJ5#v~w1CR#o7jEO2>M;D1B6T6Bx?D|GA472Wdn8&{$?9F(TGM1eVO zW_hI1`i;xdm&i(K3QTG;%cZq`;~MoLvLr24qkyVqmPwDPnvKPnuF;wiT?0tk#Mwu5 z4Iptj+la0KRCMjVu4}uyuI+}dmG@9ytfSDims&n(Uv9b9Z?AM>(7qZ1?bFQ;pA{J) z;ENG3Lco_IV1$4#N5BXHH$}h*>yxi&9H*G)#dmP-8#PM$SuERLq;_0>ZS`4-V(s=4 zNlj{TF}r$MRp3*3o9`7>fnxggDg-8+a8=D0GWU|{^;-gA(($Hu=%QXv&t9ebvG~v3 zh4ou{L(e9V@od5aHP_Iy31ob%d`8fN93tx;PjKPJI77c3(?MR5_3mwJtdEb;Vck1+ zbZHYv-JG=LNTJ&b%v{s@?vVz1xe27n1Sv2z%q%x5O%3VtCXgm+3OM@Aa%nkw`o9UJ zIC^rdFQct?g~q0ajKek3Gd<4|_W`W~yKd43O81UkhjyKCcXa|!6mX3rwg!+akqZ*H zTu%ZeK9>N$*!KfUd|D2_*!KfUwmhxpzNYQ&__c1!`?@XfgDscy%&T-1w)|FdELNuF z7Hfn6?f5!i#60uNw-@$TEI;2&nT#w|+X>SuqU0TXS0cFZ8lOA{F=C{V?oSZHTr$@xF4OnL*A!7F4Foa7H8fx_ht2N>K^NQ#_4KR zUX0T`_upuOzQCmv3nr)2Ga6o=e)4wS`)^2(^fy54(dF@Zk{i885A_~BgdQz-FF&kf zu$YfnK4?E?xuTzbl*GIGtFfz%kO_S)0!9eVkA&13K_2Ri1R9>CGr! z&5gydKd3+YEmzwFQl14MAO6P}Bm5pzyDk#v+M7V?_Nrqj46hpFn#m5YG?ea8m?YbT z-yzw{`%lm7+565Lj!k8+V&b)LMI*Yh38d&UIl7$DcI8Aga(jJ=8mMQmVm#vVNAwvW z`4291#D4%JE|)jAxO;yaxCoEEb4}Y+R~e6hqV3F0Dc($3y!ob<;Ij~?&Un{NjJr z8ex5Utj;&$N8VNR>F(>2eScYX%<~1#YR7Udo9gFxr(eIS6BPaWOtnkLr+F&=R8P<0%pOKPn(ia>Rqy13-;Nk`ud{_25$G@WJVcH{x>)`%sm!6l4HfHVV8j|OH z9Xj$wzo`_HzvrWMKOe38GFrD5`#|5+wGlzSZTX=6uH}j#-*aNn{=kW;_J1bjCFMhN)N2pA#Ydl4`~*UgyzO8JPs92s?FH17O|nl?EncyAQ$ zx8Fiw!bpqN*>|b}#U}v%vwDi+69C_@3f!C@fxEdX@DJ5k69lul&)+7X*z~N_uyOR z`Y{*VG4yT|NZC#!XFDyU0Y}Jo8ok^EQUu9aWo0yA*=)tq+xoZ+f{JV8xWkNwRcVeU zyX%Y&ox5HQTAFQ+ei`wJ04Z|O86$Dc6fLg1xK?rVei}eJma7xDTz3H_J{JYQSa$&> zKGy=jSa$(+{PKB=pSlk?!F|93@d4#t@Go@~KH%4u58B_5W9V9Adt5X^zz-r|gaE0x zOBi7`dxiRM#Ag3BnxSmA*vb6`Z9P)HbmaZ_Vzc;HRe_zhOHtz1szBAC)TV{Rh&|D6 zrf!8zG2a=tsY`_EwFL?4jRvLYBst2P(QyCOf~34$kzQu#1j$j}jJlwdmn&-mDauQZ z@@CWo$5wS*-)U;ks;s*-K^l_RbO1?zIIp;QO$U&;oJ`!Ty8ubI^79q9x^6whb?anw zt6ZV{Sx2E;w^=@Dd$Kxvysr;|lKn8MkP!lY6agay{5S$e2#{}btuvw<+jl7+(Yr&V zri|*{pSX?*y?aX()`x|v0w2u+f2|7qdlp!vYnwd9Jc_vxz1$0R!#x*z`DtDExL&?r zm_DVXcIpF5O7ZpNoe$0oQ>3B$V6I!ASwdWDOpY37G^sJy-vm+w$x-8sCN-uXnm~#g zlcUBNt*Nou>1AsFmRXN!?}#1)Bu%A-BYF&wxHM}-j{y>wwuoE$V4$Su`B{oTx}N`& z>-odc^Kx%vnT|4b{%O=rBXk{%@5J85&!VzOH&5R_d9)eMJ)xU*#aW2n?2S4Q@Cv<| zXK#Zh=yN_w88dRmETds-LFG)9cI=|-+&YgJ(j(&q5c@Q(Bl`Q`6mPUcSz|68K6hGcZd-Xw{B(0&Nz|duuNsmPh*UzKW zZ=2=u;{+q)2as%r3dPNF10arWT6fI&=$`AN8yMa4zRg-4!{}~jxjw~Xxz-&!I-yVT zKrrq3BT(z4}UD^N^sv?V&VH>?w55 zVP~#S>_2A5&^h|RM|li|?&eG8`Z3S8W9Tn^ZqwjN9OzItm-y+wwuXujR7AJ2^3E4}ic1 zZ;ke2gn-{fzz6~V6#*jz{5Aqc2>4wDjHuh-hw3)ChuZNsZE&xuKw*RXR0Rqf+^;H7 z*x>#M{2$ohewfysRrw~_AU&aX6qF_#q|n)5=9V@{=jcs^@)!!84Q6g>gY=i)S4hXm z1}R{JnU!pi&T9f`3RV=b!OTiFNKZC_6dNSR1~a6AlV5QCT@;X0Ex?0 zh?{K?AaQ9mHdg$W1yJJCSonnv0(Jb-2Df$_e4^Xn6R^Q@eRP-Sg*}>vr)xJBEwb z7kSb#vI`14o0D0t>8I)gJSI(=?1BQ5xXf~CP2%VleVZpq%Qz@t9GPX(X@E$Dt>8$e0-^O|XU*Zrru?q7`VmoxlhbriaP zKXO$4Pf>4;5b);+7~#4wF~>iz(BtC1%rUe{3zO0Pr7uNc{iuIcpsIxnnd9$|Y8|h- z3mu$ij!zTy!hzDH9u!cI%u4D(dz(P&(ozo!s7Gd1)x%=#*c_h|jOYhI8e=LP(GP$) z!fB4btB>z9e0(n(AKwS-7{>Qxa>n;BaX5_-a9ae7m}h)%jzc!;r%t3r6XRPvC~y)2 zn-;JaGQI~ezNe_}VtmgX^D*2%Iz_JuNJ?)IC{5!_fv}iaKE9fo(q4TJLn&dAoT1HV zc$}b7%ctFA<4VON;|h?*mD)ze6<}gq_x5ppj*sgVjH{2$eRQ4t6*rI`sR|h6(=8vg zXIicRcD56P_EAnuwdXo9-EMSZN&9FBG~=&P5sVPfThs+PBLpmpfDr=v5imkP69FRx zERKK?0tOK0 znbxw->V6o7dsqJZO!T5_NTmCOiF1NG?&L*E3_K$@ey^>FCak5U?ZyM$8jm?;h=3@%8tS?zc~*O%w5Tu1!wiNmYTW zQ&>oRJrJLO3MZd1@AHy0u?eI}yD6ZrnU(aF_BMgkrKPVF(AUhGUth=KEGN(?=J_>1 z8e=LHH_xvD;s~et)8Rh8FZc0%+24$_&rk&n_OmP>w3l11IQtwY2JQ2lm};Nz#B}>Y zCziA?hCoBKx#w#~BLwK_HV2Fluq*;b2v{BgBLu97fDr;#M!*OGt0G{8fXyOc#5{5K zpr~5X!y?XJrnXP&VG(DaSrsVa?6a!^MV!4t0)IcwK9_3#R-C=EdY&TAzMv{_O}uVB z6<-yon$&{g>_OPn%T;-@slOFx>G39zruavpi?f+)w$jB}2B8V0=@<%KoXuQ6#^WsG z(gf0U423SvX09LOah9P{oF&_|IO~!lakhiJmU-eVgWUvD;w*U=XEURWvkbkybfMHQ zMcV=th_jhx*Rery7Cq4CE=p+%_^r%xX~kKTLN7QZY56S*_^r$`=}n2V4Bv>~0!V&~ zfg15!0Ex?xh@0aqK;qJ^)i@g&V{w+ARBdIP1xoeNaqx>c3zYbD75pO30wq431HXu~ zKpnq~v-fmA{CfApult*R_%*5mKm0n&2kjdymmhwU6NC0DC#KrBIx*e8-H9dbJ0bAH zv(X_MAz*a`j1Vvv0V4!#9swf+Y!Lw?1gwdG5dt*Da_4S@fZIjD2=~K#YaTYmJS@Jy z^q1(5k^rthRkP+w0`ivJ-Wo;t?x z=k)GnD1F}q(&S1h4E<%R%yn0)(bp*$jwX<%V<-%@X*|O9WAwzAP)4W;r0Ez6-EZJ! zt{?MmJBC5iTP;et6!Pvdl*|b1mklpAafVQ@wID7pO3q^_84V{b7Nn=C7|JG)B1q20 zN=CzJ2x?=6A#DOF8!P1a&WyI3&3DgF^XT4od5yv_$fM*rA3*Xq^s=~l&IgdVbgj7A zcLF3XJ%_I<_EdoqpRR&m+;0F%e7XmI@hl)v;?pbe3ttM9_;d#R!j}Sd{HeL6dZvD< zJyU-__myvPUwIY2vV4~CY8{1p{GjE7_F8g0-d54|7$IQm2pAz?n+OU6WN`BY}AyD4)wxAEKIx8Q%Yb?H`Qod{ng;wy%d)MxHrm zpM!f9el<qho^L%BfBi^%>bkE-j<5kIthR9$b5bY-t|{84qxir#7h zDP~2ES!FbQM$qV#gmvI!)!yy1O>t$?ylhi8mUq|232!czjgnz?Z#j18$P@2=W^}l) zAsUl(INz5z(RKJ;uEXy{hs*mCpU_e0@TbVpT|GMOanuL_w~v4k^Q@~6i;5*({cxoF z?RB(iLRY_&1wL67sA}Ot*41}GwHT5@2j{sjK@*!m>Ix|LN`d)lW|{W!>=Es40;x+& z87QC(nPt+W${;lwc>*`Z|eDy7Ieh2h@jBk0*_47K0 z@%^IZgZ9goYYO)j2nPHPaeR#sur>ll2v`>ZBLr+00VBF=!(vDL*Kgx6OD7(BN&dv3s6deL({A_^-$2YQBWj2dl4`zcowUR6W^0tY3$qUtd$*Nxz!j$%>zM#MXGnh2#|=NK!AX!;JMQL&FE<(b zm5;qz&c|MDdv_4GcNg2vVzYF& zemlBKP2C~;ReE#8jsTJ!l^v1&YKM;b)!6ch{nN-8Ti4N8{BSWB0g6^Sm){3J)9v(H zx6=<{r{%jz-_lXo>31w2wEt@VY zcRtVekg6Mh;Ua!8zf|EOepqc%)kQ354Rk0LcZ(`7e1vM9@DaC|z0-3|AWc4k!tgU= zT=x<0GnCG30%qH&Hheg0^ z89xy|48_r>O_U}dMgbp|S@ZiaJ>t~cG5at^d&GwUBp=4Oj?4uB5|{qBcZ%<&>(Z*L zyXO<(F&}4L$TvFZ1zTlx@{uv-w2bOTbPynpYMPH;=wte6AJb1Uramr}=PCZA3K-zOSUza~YPo{mB3+k#6ryor zsvS5n-A+5Pq+JSuR>%jr5*Q(1eFTgUupt6Q2-qzGMhMW}k=J2_fIT8$gn&IGV1$6Z zB4C7H<6&}jBXi(eqB=?U?iiohhF%*Vx9pm~jFEEs0 zQ+y^PK0lB^_4j@&%7we%it;_u4)Tg7ek)4uQ{BMWuV@0<^6nhn8U1Ieyh1?_QX{&b zrE+11hX1Ki@@kf^?t4WOr}~J=pg_7RvQ4`x?a{cfH)6x%Q`u`7KM#AP=wA~^@s{Lx z%Z!E{fwY-}9yWm#Z%K}~%xJispz8Xa=cRVaF&nKJ@s|L}U!or){t_T@(FAex9w|WL zGJbY{iM}tNha;2Ffc@`G`8-D7p7!2A~_^EfO?c>jY`BI$LHi6XrhqRi)h9`LLEOQQ)Z01R0xgpU3$ZG$6vF*P<%XQ_;t}9zdG^Ldot>6?niNDGsiy3jA;A*WJ)B++5PHe(%k? zuJL!=UMQ^JawSb5P5MQF8~K^#`lTEBT$bL5E2Sy0QJPsUE#=}G^)6hJmZPPBqs=Un z9@Q+j=hM_ay_}|5>)KtkGfrzpbPFKq7H1bX?~?)~E@u-r`&oeGm$I%s-*xS4u4`XK z*UEj=U3CQ5hlNfCv~NU>E@-1RNLvBXrH!)%%o>__EWY z=1323inKl@qZ3c+;jgp6`l`U}o=FdPlfXQ`Kej$g?NP0!uB{7M2OWV5?yJg^t~Nd0 z?w|PmF+K7uL9SL`%Tb!YRd1DCQ>o#NhSCB0mQHyLg&`hSuYxA7AM;{E=@WTT zGQ8-0ef~ve&$iyr%Vf-mG)-~I?nlTTkjh@g#E+24GU!je)uz<1M3zAT%gC&XWze@T zQ5$cc?SdW{u?v8t`CQvC5?XLU|S%k-ahm4k~uJWENP_m=^J7h0+JNmZU(YLT8 z*K3Wp{T0vC4^;(5b&%zQ_F&6pREIdB&*3;R)!x;K>GlW+?CqdvJVpq(a|DbKaBu{S z5O9|W7$M-02pA#Y&Z3 zDV`y@b5)>thU6|)f#MmGL#u5lo*_BBDo{K_a<{5L-THl;H+9W+Bu01-RiEs?-{Y~5 z@mO`N*+0G61X3QXARlV}ry4TDpAoseq4aGNNRzvu(Ea{X=DO+sM2e~RQtcShbPR>= z_n$J?kNJQd!wBeuLgg_Ox`#e8*N?f_j$u&rDxOl-Ddar#kx_dSjz|P{VbPDy1x^H_IM|z+7lq~M2ANoVT6FYM!*OGcZ+}#0*;7)5dw~k zfDrzeH%rV%s*ZvFHCjHc+?(O=a-94CJnpf!{ zuXf@d%x6u8;o=^Q<(qI1=1y8ha!7okWcc)4jWDlhe5J@kzl?YjNWCZJ=P0mN$Sms; zZlo~$O(1n?`7jFju*@>)`FvP$AB7Q2#?)Iv93w? zMetnRo=aqmtZV(s$9xo>kvkqNDI(4=2Y# z-97peBLv(d0!FxRIeXl<926~B^P1wm$-`)qg7@gV#>IV;Q>y}1YhH*g>oKW*%VUno zmgl{1LKB-nN`xgRaAq_-1xSIDrZ$0;z)6nMWpoqon^5zJ&HV z$Mjb|roUuNeO%aQ;jai%XR87R_)(S*+H);eklN_PpnbFxQ|)7%m~J2E#FF+xCziHP zgg`y+8MVO(0eWo3C%r}p(5A8jMhLif1dI@Hp9mNs;Ft&)Awcsuufqrd_lY-PBAJ}1&SLk=T!xY8!qQd;P2mXxnO>& z;)cs(=a(vOxICUFO;}=a!{rH8fvP1gZ0>#!)Da^}w%GI@U%B6+Z*WPF(b0>ZN>f~= zFyszR$@LhyhoKCZ-u*0(q0rr<$y`6i@6j-ZdI7XNhC+9bCUgB5zemHc>NU{v7z*7z zn#}cM{2mP>t@uqw{NAK{G%h@HkEVmXqVXFVL%&CZy67Ga*(Tqkap94BG#%s>O`OW_ z(V%m>DzZ(xDs6taaK1;=mA#hn^RT2rWt%{XXC}upXEfcTL3Q=bDFo%2$??n?o&O%q z1LZTcs*ZbyXxfNx21vdcMH=zV0Evsrh@00m0Evroh+D2{fD)haonwAr_i&2&L1c{G zV_}f8d~r`EGREZT>@3f$p__k1#+W?4OnZxaG(f4nbT0gv*_jQqQ)>@8(fhmOPtECf zgJ+ldw@o}&{mx_6Z;4gq@7-OZiU?1aSw3i=X}QAFvz^davLFaO$3>TKgn;`;zz6{k zh=36Sj*oy50yN+rSd6fB(iapjN8-kr(bH=#Q|z!jUG12R8^sRGrB#9A_kW&I6)1lH z=UG*O;*PZl2=1cd)xn8NtlaKEAmdZB9_g8*za|?Q+38cwKQ|NwcD|6is z`uq8GP7_GeF%*Wcvl=tkkMZBTqrddMuXK#O00n+)E3@nXzB^9m>3d(LGzEM{X1TOx zbM&OX_oWn{L5|PJ=qCTx7MCka$ZH6IWG7shxOoi$kholhxY=g_BrdJS#)^Fqpv0%K z@QZyAppIYu*4A}ygMW4#{1Y}<-Wz+dj=~0CYPr4@Mvldu5Us@s0S}6R5dySyb$c?R zesAo$x;?#!woYtmYU}h|L-lng1SXXIPfL=(%c=r(YgpKvsNm>d#_-TvXOnVH|Qwz z>rIyHMNrG-(#VLeSLlu);oYzfj7>k8s1zLC?d#PsscrTcw1HA z+T4bBATVJwRg+jqe9(TA-qBRug*_Zxi4S^+PJ;B5UZ7N(d_9FB5vAn1um6qN5S^zN zD9d9gbTK7!{TPoa^rv2+ERUhk#gxqTV?3tN#d?b}9U~K@KupOjw^hXy`dhD3meLe3 z*vxWi87!Tz_bHWPu;dtQM#C#)+2h+%ri0h350>V6D7`gevjE8|>5LJZ1xQ>jd&Fh| z5|?Wfw~Q%3iO*HRFJcN%;&Uv<0?M!2m`>^uD+s{ZI)?E|!FBDNHv;~E71_wD4~DEPmq?!r#a)!3GCqx%gs zny8lWXg_7S9RKxB4BF2)G1Y$7iRt!pPAqA^ z0D)#aJSu__0{$riMhJLB1dI^y$OsrA;Is%BA>i}~7$M+{2pA#Y%m^6a*Qn>p)TrV& z0e0WF8Y}))ZJ*S?B34{i6)0lGC#wQQtoU?Q;Dxb0{q}~cKoLxCtP1E`lyL&~Z*_ra za{3Av0-I(<-hZ2VzgN1Xm%CJZVMlMO#2epZp||y^Hl-=vQ0RVRC38IvXhNaN834V? zSsp{7`;C>%^<#FnV;B>?&{-Zsp^Iyo>&JLpW0;yin%YL8i))$d$9P<0`^!qw~kLY4zK7 zIj%7jBmM^<`5!uc#Qy*!F5N3`o{It`E*&Xu8P|XkpH72c#5JJAr;p$laSbT(=@t0J zJ!7E6r!(Le_hW!Me)&5A-*f-Dx%5 zBmQpPovQxsYh3F@ye<6QH>v_>#@hPrH>(2GiL2VQkh$wInEQXK`ofpIx$EQd{ab&| zkt=BeX|fCoJm;8MZW*WcTP~{!q)D0r_bxNbrFHL;Yt(ytNm|B40b|N6lOB!ae!XMs zI$9%*%ds3F=_6+sH^*{-#N}+_W?KSCx|-K@KXqNzj|cO<_*Up@xp((N9YuKmvE_sI zr{;j1UkaV1$5kBVdGp^CDn`fQ=C_!gOF_@9v3Fqekb0H>(|! z`dLKNA5{g4&4`~MFcIpC8Racifg56b`t8rF0(A{vhbo4; z4x!(gK#CwaQ7EJBoOU_b4x#^=KuQ!M$8a**Za%RcVmfk_+B1`55SKV&Hvq{pxR?>U z0Z3e$KVmlkiA$TsEn^T+;?q?4MGOM!_~m}xt!{Vg-0s$5cjfcNzt>UN-G5s?X#Zrn z?CviRnA`c$RE!Yt=m;1g;DQJkA>c6)FhYHX4!%qIi2uJW>a*;tm?{2FC!VygVmkYW zs=#CRPjk&bRt1Xb?4PRwb@N$Je9-f{`u3Jq=7s(6do$&ljo+ZTL6}~~R5O}DnrwkW z_ak_j>$dPbJBEvI0%?j86o@IAWe4y)3_YPY&Pr(t#FWf(X~h(}Memv=X_*EEOe3>Q zx)xI|Q~S2ewn6iyp*f}iB>knW;^vqFkhru>+#FK?5|_51`^8>1P}2SU8#I4(-QUS| ze@ArRb+Phn!<0r1Ls(+@pq;T?hOpd;LA%n4sdh6brrXs{ENM4)Vrjbu0;_p!Gyx+7 z=&>!|f-pkB<0D{%fD0pFgn%bRzz6|PjDQgWE{cE=0-h8BBLqA-0!Cnmy5lu!hnGgn z8Qr5C=u#%_u$YHUR|N_~U0M|=40Tympa`Wasse>2uc`_Z3)9)EK;drY>H>LTx&;Cg z(Yo#|77}aqEWf@}rpgOn@pX;OxUaZgSifa7nn0R-1%>YSLNnKW#dGZ#2B-<7=@<&# zS~he27+=dWW=$YX$580jvYG40_*#}>YyxRIhC;WN&0Igm*RqUk6G+oB6uPx+=K3+d zmSwP;K$?!B(5+=N*N^eFEaR^i*3vPW7f@g=n^|@MYgv>*@1d2_6qrS1mP>0EfoAA~ za7vj)kmD*dI{#Xhev>PT&k8VnBfb(K`8x(`#8(0&E<-ZnD*+Oh&L8uYK#5OB!!PC$ zK#5PM!Y|gcK#5Nu!Y|gcK#5PU!7tXbK#5Oh!7rW-0P6VV`P7Vjt4s=p|F%?01J_jU$ zbyb1Wv%vNUY@&Br*jn{C+{VtTzVI)vtIS27Yx4@OL~q$Cb=#7iP{2+yE7=K`rMK)# zX$sg$W+gk}8uhI?rPv8Mc9PNX$=${`oYf|L>DW4zmPlLjoB|-}5@!}S&nW;Bm(z)x z=M(@*&+Cbc$Q^?U+zJY6<(9p`fqE2Nn4ap_VDtquRbS}o zn=5+idn#N>6G)SuQegg@S+04S|8iMPAWhN~nEz&$OKbkiH8z3NrKPMCP}a;c>Dv5v zOjl{mh^_)8ZRG4Dx(blEoNYu`0V=w>+I95+*VX;e)pBijppL>P-r4d&dl$$>z^sSGb5BE^cv26G3Ex3gfnx9EU<4-o zWwCd1NL64SMP0~z?E&cN-Bf#_r(dk-ssH31SK0(p*Cp+ZP#E&$hm+1VbsAo3C>P%Z z(xj~v*zCwG*H&$I&=XA{WwV1E_nXo5><2y41XA2DIU1eOc8iJ44*F$mJxA+D^cf&& zEbSZ7XMn_|Q6u^ckhru&+;Tk!l=MBX=eBlzzl-bp!RULrhj*=l|%5CXgmO zq0p@ZGS}_I*8y}+6G+oB6uNal=K3+d4xqo9K$>ie0`r^9a@*26fX-_IX_BUZfn}CU zYaKvOHh~laBgeopI{!N0D%pLppUCBo*cd>v6E1AT#sCtRs~E8{fW)QMV>Skq_%s%N zu?_(0_~m}$_HKiBa~r%XHdxNXPt;M^;7OJb+J}&1aaxl4{)Z6)o)-Zl1Y8*bBkJ?; zl?PSh%7bX@#Qdf(mj_n`im-7q0-I!N?2w&Z6(|D5qpAW$pg0$SO*4&!#EBEI3pB2lQ|6ko4}Fh`&T9f`I)*|QTQb*=@z_FtHi0x9L!pZ;nd`@RY@v&rK$@(O0ydjj zZiR|1^mh|TlQacvHnUt>v4zfW0x332j?HFt{@8N8bZ}|jW1@>jY!)C{C7m&1vjB<9 zWsle_K;m+Z;+FF_pv32@;1{t4DDk-%_{AO*P{%Ky1Kitv!m;iXj=?94uFdz*HBalB zC!cq?RtA{Y=1)-l(yGPnMG*Lgmqs%-Lcq%+U_@uv6VD8ub>|$93cJ3L_D{s4V!i#u zsz7z}wGf-q8$bQ_V%1&P)CFpLIrrk3!AJI6n%D%=q=pn&8fTWPp_az9S6_ik($Yl= z=wfD>bTxh)r8aDqb&(Tj#B=-rNcup9;^z1P5VavaJ9wb$!tt&P4?q{nweO`mh5>$t z<%9NFmMcD74#9}OJPxoC0$vdTBLuuM0!9dURRoOabYf!d`@TXainZ@0I`O1V6t4WT zsz9;!eI^1Ej<}e_Ji97T)vATfVNOJ^o~POiy_$dR%at~PH2F{p-P$*EO<%gTFBh-x zp`~NAq@}>xH?v$Fwf3ba^d&T<-(|&z+4@0GaJ@)Jq3K_>@S7x7H^xqkTy;Dv*Km47b7sCnpMqPh(CKUdiM&|UFhAp z6@PY0zom&yAWi;^0(y~Iu0RT_w6_VQ=mj}?k>Oto)wV!C~Y6HD56 zL7*A0jf!A|fY(L92m!B;fDr=T5CJ0uyfFes2+$L?K9x2?z?&mrgn+9eV1!@e-kRGf z5a)UFX$M#1>1)*XN&PG0>FcTj#YFlIRe|DO^qZ;zg?qlLDp1U{-&z$YX4-GB3KTQ# zcOtN9RxGXPB>O~+8^ z?i**WAG5QahcRgaX*z~NH>b~BKgQ?u3{w+G(=imfIeq5(F+Qhfy<92N;6rl#_V}Hw5v2mtzFUHdwrM4E+^W_(uj9dAHDlh!c zZ^bXyCHNozMms&x1X6x;kG%W#VP=H=W`w?5Rd~NNf!;x!ynC7y(i!0oD}-Kb;`CAz zNSQm5Gs(Vvp}%L1=`ZW*llm=9Yyv4-Lyp#D)HD~Zp{Y$EMQg~>nv8}mR!(S5We!Ts8o8`9 z0BKyQPTZ_B0C7~)9Q0Hl(?|Q5p3j*2xE!Ht7{5yuy(@h{noV<$?nGv3YxJL>4T`%Kw;^bYF$c%8^)o%05UW zj1cfI5iml)M`25O7@tj1cgN2pECh$zSNgi?#V1 zqL0$EWySAJ|42PH=`-J(e{cFH2uy4qEjlE*#9OKYTV;WtOJJU#d)+5X{jyrkQCZ;E z2u#c#PRjznsS4bbrx(Ai3Oqj7@cXJj;k^I5Do_NFKUD>un@{nVs=&vyz+bBZ|B(e2 zNuwwGLE{}C9Sj>ZE!EF%O=}vkp!o1GOmj-rr})tHexTpgTZ9~fhV19ler8bi?|y#}TQ7yd@RvtrPc<(W;AG5!qXq$eJ zj*K6q({r@^OfH%I6u+KVq)gU*oX8~|8ve#&SqFJ7>O(|VQK78sJBh2n3^lU>>=q8XNPCg`DJL!yYCgKMhih4JJ6mjw{ zU}r`+7;z8SD0>q~5hw2gc4ma#5%++N>NkNDaq=!;XGS=U;r4)yAvA#$aq=!;XGXXu z;ul*$z$}_TO28&3U}rS!CRqYD=FtRF1jz~584V{PsDO=`G=Y?WO-{hhXn2yYZ8Tux zH@~W`T%Y4LYOSc3=jQ+^CZfRN=J`25;-aeJ=6DT|xae5=iDZk~-S6;4#@O!wqfx}) zB0dA9`p_o$MSKQIeAEYiu_ptR_$Ued;#q#6#78UO7r*ldl=!Ft{AIJt;_m-Z%P{*H|+f2VhxS9P9;YOdI zJjLfHPtNlb`9J$B<|oTk1@n^?mJixhmTP`8>%^d)b7HF9!inj2ODC4JTRE|`-NuQT z_Vy6WMm`w>wh;n86#*jzd^!R~2)I51MhLhe0!9eVZo`_Yz)P~g?WzJr2;aIYP=xSps{+*!zL53ZDa3~DRCkKs{oc(QyYcm% z`cs08Ruf3^(Bwl+jYk;a8+d5lXcEfUHGwq6I|^L@%Uq9l9>5sRCXjLp@-Bd7M%Y|) z^)7%hxJ@8MoV*KQnGxQ(qfifE40RJo5hw2gSZ0K)5%&Pbz&C*uaq=#JWk#zvVApp6 z3^iy1DdOZ^0LzT1e9K0}{pGjUSl5;*}Zqu~b062MT7CXgaXP5{ejSgH;ofT1M% z&K80SVB`d_jE0+3<7fa=OVF32G+>$o#`n`0T6xAC!vK=sWaPxnF$^Ga87Ogc3`MYAJ_7;2SaSj;K0Ob=h-pBHPglb)Vj585)4lMEmZ5m5JN~AR-Wh=jA6+cxc9Fn5%ekEo zOP+jv^*n`>+^s6`5BtDVF~+@Bck+QvZy(vi_!?$Ab87TP6G$;~^5Nn!Mz|aw_zN>~ z`lbn_$p=yxesPTJKJZ#Y=`O8D$Tnd;qF={$$?gM-`hsa!_A15~BX|_LS|2P^ibo;G zqhvIEvYQgq<@&-Hg7PTjc$AEWt0Xw)QSc|%=t6eO{)BFl)ntDHkZg($5jXo2fW+lu z>{}Tuz~oiBId6o==Db`3_F4E3pi~=8hhO*)pk%+(n)6NDobRb_zn8oHKKpOZ`Sw>8 z|DU$=jD9d-bpPnCexB+%GhNlyJw4MqbmpGrBlTvMt21xm z!btsE7e?!?U6@jD>%!FfbuLV+U+=>7`V9#5d=0za(M=HWbO1~c@Js+q5b!?%FhPKB zPy84r2>5mYOc3y$0GJ@)*#MXz;JX1ZLBRI{V1j_}2fzdYKL~&c_ykjhzId}~===Tg zW_?|KGq7rt%?UR|VIbbj6=s;j^+rX7Y~^T^qC)oV&DRtavX!IFQ5ZPMZ0%{wqQX_- zlC`s}sPJ%7*ruqEEiG+VRLB;mwl6AV5p{>6LNTJw*}Bj{#MGU1^cYizhh}TBr8}?O z+!kQ4c-4>+Q^|YFcZlW(D+!&)Q0%Wyv?+}-l|t`#7Kan-F;z~jbHOF_owmFVg`QSn z`&h4YyPPp92Ow5I00iwHird@JXVI!#vq`` zV^;WV3<8Qgc7)I7ut1T=aPZk27AW#q3O<{|0!1F{z-MzK3kUo zYWdM|J!T%8$G@xWW9ZdBhF+D%(86<_-E;`X&^;_4srRv5W9a@ajMN9ZFj^n%!j$?@ z7pB&SyD+Uj(uL{uQ7+7=k9J{ZeGCGl>T_XeGC{x(17L!H9|gb!0nZ1(1OYz|fC&PA z5&#nf=r-ENT@wWSEC415cp(5L2>5vbOc3yk0GJ@)mjN(Az^?*ef`DHKzy!u!g>zka z_FU)7VT|b?cXw6$3=V18xVt+F|7zUbv#5~W2<$C|32p?k(RttEVY0DxKNJQA-)wX~ zps1ipRQT_-2Ne~vq4SWULN@pwR#eEI>l{&3$e!!GrKpgN&TlO$WQ#&gQDK7Ndyby# z9L%VAf({?Y?|=1N2hY)0_>?kckhjlu5|KaG!H@JAKBaM7rO-atNvw~N{#*yw(l*Jw z4u$r)PGY@|Ki9$AbRR`FiTfyh?a(#*p6j%bAEkRM)jrq3U$xCrX}lf^?Q@;P`nmaY z9bC9-NNFxO$HK?Ki8onR1GQWt%?5XVHkR&2V51&A#EDK^a~03wTz z6`$(_qH~XnM=}0p^9P`KJX{Dqn?C?W9-o2F<_|!T$4TI``2$eo@e25C{s0tt+yFkC zKLAA@yTfPm2cXDfYxwNB4p8JVF?{x12PpDb7Cw8f1Jv^QbDgVwesY7)Pu|J=B;QkZ zifS<>InDBs`V7l8C3!mnQ;FY%(bfb3zYTy10(4X2(*P3${5}9CsNXO~59}#hbjx{rnd9^LOLt`8&K9suq5JH92nmhv1_o2zW67CJ6Xr089|@ zrvR8B;LiatLBRhDfC=vRES-+#bJN{3zt7$|x`68%@cYf@k6wF`6fS*acxdrKE$tW$ z)4oe4*19|V@Nj+E#9E(9T31Z0l}*vElGflU6?@a1^rb`TOV{hzu`g9a^J;NqoVLu~ zyZO7?R~ss&sJ)g-=}Y82-TL$q&HbQy3M`bi)Vzs|d6WLfE$_dO+50g1KbDlq+V^2x z)1lsZ@fh>Ws{ANsn3oqa^SnvbdIy*e*3dU6$@u1^{f_^fe#eidpU-~BH67|L8ILh@ z*03LC;CEiKP=Y;mJ!F%+9@lKI=izt^yB@fK-?_?k@CaQG*(9z<>-Mhc*R%SLvFwNF z{s=J%Z>kznViGwqDWT1K1eIdaTxu-sl^@enja8<*3-rY#>tEZ+G<%56&8fh&n17K)fn; z`#HKVJBCf9@Mj>X>U$6vcm5Ju+yntH z1;7LWe+_^M0{#{N69g#a`Gm^^T@TmwRM&2Y1Y5~&4=xey_I{nopxr(jl!xoviwggn z6z(i4oRNOwgGGg3q$Av2RCwjSb2z?3n9qD?;yqckg!XDGWy~P&eO`^|q7%*cL4Dbn zcF{J?R-L?^t|g-RDCpUC5L!t)G*Q=djhyLPLYt?7G+m>$v@Nq$Bxkyo(B{iP3XQay zc4VR`cPGc)6WTm3s2dv1H#&Q=xYRzM2Z(bnE=O#duK`4s3lN*;YXFhuti|T@HK53I zvhdluF;L6rd$Jzz9(TX@xclgFD}@L~Ka#U}A26Zq0|T+^Z^7r(2Nqm1_JN1^&4FdU zSMGmD;63<2=6_r1+`6%Az2TZus2WmVQISO{V9`X`a*A8j0$3q_p{y27b8mpqo-uxX z%v@7t17s2bAPmK12qL`|YC zQSNI?fPuDr+}rXoZ_AGlwB|C0t~d}lirq(ds}{Hpe=`n+g@%$xh>b)y6Bfr@q7P;w$%R@(e^DJ z{NJ}Fr%*Mdu`MakmWi4~TcX_8mH-27`Au)jFM3;kVW2JN3TK9#@TK~y~Y4!heVS4=+7iQFdbzx@xcLYYf;b1=# z1XKYqLBQMrFhRgb089`t8UPanObLJq0;UGQ1Od|mV1j_@0Wd+pi~yJ*U}gYJ5TKVD ze6Th_fNta+FhRh40Wg8K)@ZB?&z|Z1E%VK6-Q-7VpTYTT_Dt``C=57n_Abp&iwfB@ zy%(hL@1N=YqIj6>nclBZ7`S7~p6UIjsE|F=`(05Xd#3k?qC&Pd`p2R|_Dt{3MTP8{ z-v1R9vS)fP6&11tqrVju%Cj%Ox0&qv>(Rs${fCAWPyW?2Jv^ssNSXhWx6kwvkw4SJ zkE({$BarG)XrJjN)`C#apXuRR`kYu^heG>IFR@<7pXuRkTFW7u+%rAb?0cryLVlD9 zp6TJQ+IyxnUJr%#nOg4S+y+q{C^l)$O z9&6Rf+h=--$e-!q?Akcis*|_R^b(Oj)5G<(KdexN&6hPqFD<4mu= zd!`4}^7%8p=Y4kaw9ihy#q7l6$X!0Y2C>k<9nPT}!JPiD9pqfUy9WAYfJiOb{?0022f(5C9VdEEoV2 z1S}K)69g z4A)bON63co=|zR?`RB}{Lbg|H-lD?3=^W-SDr9@LW)&5(A$)&%^+5s%FKHm9W zEzDUpr2GVVJAfr3->ZdjwR@~pCvOL^MC5z5Ftv7%wd&;U0G5b+uNH>a#<5nNydA(2 zk?+;Q4YYBrRVQx;utem0wQve;97A0L7&!x2LgQX7oI_j2T19dOu!P3FS~!U|i=n6i zjGO^1p_AULg*_D+(;62*jGI_aY#PG=B8#EKrZEg4ve<=~n>}9!iadsZ&(0`#TK4yG}F(ZG1 zv5aalOe|;lNWFsP8YWh9VWh4Ri2RF%0BeGP#RFi1fF%N8f`BChV1j_90$_rzMGWlK zx~d$bm)3dw%NV^Z3Ij1ZyPaEJ3KQJUtsLGP)xM|V?_@!8<)XqXj)BJz+E&-GV+{OP zd$nkdsv#vnk+*xb5|QuKqHU^%G{!&*?Ov_KdJOcvS~QpLN602|KcZ*8u9@~~wPim< z_hy7AAT+f$oGB&rkP}f7+I((hL3#p0lWVIPii#-YM3jV1a<3L`qh6EZ2|(;qw1U_a zPXHpz#T52x1-LWk^);0GJ?P zxd50TK)YUi<;Mg8D+Is<0V@W;1OY1rzytv+2fzdYbpT8duu1?-5U^?hOkhqjuvhCB z<#@BUuKr)fn{`nbh&S2#(yNOK+1udj7ZtL-S{oJ>vX!HaP#BoFW@}HI6cw&Y;qEm> zg>0|Z=0$~UX=%%%Lbf=yRZ$^}sM{13iV=0r)`gBGroLWBk1_RM?bX8K`evR|Vk&vN zS1S?uUM=ijHKZ}7QfT*TCDvoA@72O3s)jVyq0sKtO03tp-KM*EiMEjCbttrZwG!)f ze6JRcqkUv~9SZFvHnCo3Q~Mo!N&Co@a{1)#BsLNGUM)OJTgX~<@^%uNhKaMNnZzbE?$yEPd^QFF zMIN)lXJZghuLkrJ!cGMvlLuXq)QtxKD#?ZZ7(C#f4M(a1bFs0t#g{k#{ zE=;Qrc42ybs0%ad!(EtJABn)Ix>^{TOc1bo089|DMgU9@ux0>E5U^GNOc0;}&WBkO z1gsMP69lXq022hfDgY)3cy$0w5U^eVOc1bs089{|6>R@m69jA+027MObvE9%xEAv! zwa?&?maWC?gu=fXcXuu-WH$o4N@0Q!-@*oqRx8q!#YLi=1Nv0g`=LFbRR z={|~V68BNstL2(~&vjbJkJ7!BYWHg4uiAU2G@cuU_PI`C{oMSy4lb;{XG&=@@^)D) z5&3f+99sLuT6OYvMv;j8xeo5F-D9mfc{`&>ME+a{XV=EDR-L?^Q6wUNu7m4q<5;Us z-p(izkw4d=BWUATt4`j|C=!uB*P&Zz;~46iQIIpENN9YnL-){@u~w0s8AU?la~-;g zHjAOC83j2riiA$?xemUpQ7_%Y0>m*9uN9l_VF4nGe~L}>34qArW5wq>f#}@h;!%vh z+57=09uF6S&*l$6k;iA?v-ty1j1TU{#<8x1N$GrzxMgbub7{tcODr#FV(Xh-X#pr zciL?bGl!15K!a%d7TgIs{?O3e3%op+{6p;Q?Gih8eWJ0$BlXD$!cU8Ux(lQA znJ!GJ&vIdEeU1y$>UX#>y*?j-8B8w>@+Jt_C;%o1*f;BU=u zvcB_JR5)xj9^s^-!WK#4l%m4+^Ti{aR#Z4HDV$MMI4}Lg+lvY}q$8YNRCp*UoGS&} zs4+Ojxh^%vdBwy0C&vEc89Oi5;j^)Shr&J}xtbKQTGf!o!H+^uPY3&0AN+<5#gJ7) z8tYK#>E9fvPGY@|{zI8iY+E&?u?~ga{Tvh&O6sM>f(pZN=Z-EZ$bzZjT#rR3pkj6R`dOz&2Ugt?eah<9mjddvW?&+{z z=Xyi&CQX9KCb3aTi^;C(8g_98^oqD79g_NoiQQ1X9tQrHipmc*?}UDJ>j!4 z7bx=B4n7-mfg+Ec;IlCoDDt%W`1D!RZEKp1yzT!a3q)sU5-rQ|vN0B@J>KZ}OzljX zX*-jq`xy74k8yusj5|LJXL?=X3f1Da`zp&v>TAduV_q9Vxd{Tc3V;a$whn*^c7Ji1 ze6BCne>Oxcy~Doj_A$<0&bbcU!DTN7Tv=4ezJz%-3IjKz|B3i_0^#PJI(&?O!$UXg zy7D~*JQKgz`WIJHHKa^e$@#ojLhD7fC5q2`aYa=_iXu6mNlj>TE0FpVS5`Hou|H9u zKP75{{-nKJL-VEn#A(P&Qhx%7KF4p1P5lWVviz3V)Sm#Nf2D71&vO6zoBP*a@vnU6 z+s&$F{;WJxLu=kBqs2Wo4 zBFM2wLYun;VwkR9)8hzAff0I@j3H+$&aRXyVkrv-)<`p~v1y zPEXx7w5$mNwhMp>w1?iI@9&q7WbK^o)47fF8R%6Tr;R*!6cvhwm=imkh#hFa%nq_m zU!QBgIm{_m4XJkzbtVdQrbJoypfhp4RYMv(69r6{s6uCI{c~I8^QZpA5A@j&Aodsz z*w>!`f_39}l9qGpPI2pwVqNbGh3_QYuLEG}2P_|{AF^Ec4tCJ17m0o0rI2b)LvDWOQ_0i&wW#9Jv zcu}F)HRfn7?j-ugr*-hyH>#l@sg1|+%WPl1{&BAqY1OJBb%)pL5{2Hq9oBrl_fA7; z=&B)&btv?>b8|B|>vaw?l(w%L(pZN=Z|e^0b=EQzb7(F~Hi@~Y7UW#B-8BCz^~DJJ zQM%L7-WN;X)9#-n>s;tlQ`COzq&S2{`{EElj6>M2FAf1j7AuKO z<2pcOX>nVN;$I}#Y`L9>2BI?$rFD`%v*T7j5FLG*M!%lVlY!#z(-`pCJQ=9v^KW*p z>Tz@)kE1iYqvR8+Mdk z=O;UdJq4e@n3+$!x8oDsuUsKa`yi#LEs{!O*rLEqOQJk%>86Ftsv6R$O@W2>M7g%! z7ULSLhLkBXIZl+&TK@)OwPJkh+_!KheSQQG{fJ-g^CN)B@^fNSd;8W9Zv6PZYT;+kk>g*x2JbOJz-|FBVS@N^_#4vP=g&dbr~Npmf8|d<Uf_%d zdV4lL`~rmm2YAKyJq`Q*R>#ilJHhzCDQdf#QpN{zOqeZ`5z{mn~kttOHw!jkgW&LKw%)DzT$p$2JSS!jvf0|H8fA*S(pA1loV-oeI8J$cNX1S zQ|S3Crir!w($hy!RR=@pOM!VE3O#?tG_hXi3af){^wB`2@pmZn{1wy0dY!$k4(8Im zHQD6utzEOdw_Z3N!~P*%w0(BZ+xw&SJq)gUYqCk)Tk9U)HQRgZ`{FU|-a2|u{yUeL z4lYwQq%n+9V4j*NYXBD4@t>+8joK8LrzXm^HBZHvs)m$#Dmn2kq0OR#iu2T!)lTcC z`*2L&7w-UKyu-MC@eUxem{Dw+rvgM43#9vMo?5l{)q&{TSJRS7Kf4bPL`R=C)UW6F z;Xv{CX*KxlJ{&0WG!}gJjtEf8>rs}TKTWsiPkVVhU)SULI>ht*`M`pzWl{K`5Dra{ z4={fics{W0o6>yi!60ih9KSue@GwVfZ)ehl@rD>5Cj8%coPu`gDaEPCajJyYi^rRv z3I8`9+G^Ew{|pe?bY^%yaGwDZ8a z$1|aAweFEUA6Sy}85no6=L1U@6<%?iemizpLC4PQFv0wXQ>+@&7z!vb|4EdG0!?l? zUv1}#+AnPwEh7QtQ+rJj&$p8=GJ{px4*2SI%d^F zgAq-bsK4yBW9lyt1bMiw`Q-sS7R@wA{pBp|w1y6z*=d6R$HpmC4XN8nEl+`#PgK_O z6a7Cnl>6EoAhc@iGsk(WZtbnQ6|IWj7v4i(SJml0ueN-oUf*)fDK~Usq~6Gd(RvdX zrqr)-VQRg(3)AW?U6@{P<-&}58y9BQ+ab^|4+|DFLBQbwFhRf(0Wd+pkpVD4fZmSv zCpIPsI4S@p2+%vru3>_JqXS@qfF=MY2skDHCI~n-044}HE&wKYtRC3k^_AdniXqul zZXI3!V64t2x35BBz&W#<=krM)qQXKuwS8f@?iCfXe+sZM3IhYm=IIEV78TUS z;dQpniV9ln4hmZo6~@#5U4Ly+;ip6K2wN8w-kZ*0+oD3bo6k`{KbwBOgN~l{bFI7f ztwXcss22sLh{dahl$V{!+x=aMX!cr2C{yp@8v9obsYeFYq0sK{N~{HkcJhr&R1ImY zL!sT@l~}LilW)AFYDi-p3hn-`#Cjc{eB(G(LmKN)Xy3+8tk>Dprq%dT)sS-e^azcJW zn}19joO~0jFHmD<-{Qh|`r z`Bn|7YpZ)upnD|Bv?ntcPNWH)1nkpUW!bp8E0+xSUFtiB*P7Htv0!|8m2?9nlt;kHO*moTRXCQQ_vKuwPLj+s<`BQQ?c}2nQ7vitac^W3k>>7_JG! znLqwn?b3Z;@y8a>X$kElQcC<@S9dZ(wg z8m_OeKLEu3z~%Jy2Y|?O0beSF9Ob~Ed08H?Bs=fIAedPDSC)Gy|-Z_TLqd2F5DetvO;bS_I>G}plD5P zZd+5k+Wll-_mh3_lYC9>Wc`Bq$LYZxOwf68egkW2p9?0IKkTjP>x{<0;uvsImrc&_Cm^?8MTH}h!o@{}i;}{nMTPs4!sSJUZzY8*iwgfp3Rf2u7T+y4 z)U`#0os+`#MTK*d!VM@4j9J;Bc4JZD-gJbUiwe&qgAHp4aJeGhBVfp&|AI3dYy#~ z#kZ@5G}fWe`-?5@B-ZOZZz%3wHKef)h2G~ntk?OFq4a>NA&qq?^sel%UPtpIwE>-? zYDi-p3OzmM?_<5rHiptqs)jVyq0p;4tk;=kC|yT;g7P{Pdiso=ekZYB=Ld$;o3uSB zuS22t=??34?lP1Prkz509SXfmJFM3^(NOwa)sV*Pq0rl-!+M=94W%1a4QZ@Hp~XEP7_ukaC|v-mYRLqPb`up}vYmKh>9|T6OaFwj>eFW1zl@MX#+IQjSjE-j*by z`3~sWHgMC2tA>=xB00Au32mML(rpQSxoSvJBw@|xhxF}jx2?DMTfC&Pw34jR#t_^?*0f2{ZW6Y<}^ARDj9`jeX zIy7+Akj6R`+UFXH^*VpC&`g_azfxX@LhsoQ>vcY7C}z-(q`VG=-W?s*>s)ClmeGEt zSV!TV!s>7H+$pQT<{r$XEk?OE1r}}-<=R>?z-HQR6ty)XP+&wzlxg>m2yVX@bbfUj z6KGoX{Ip&G&}`R!N0UYro5loy$kK9R)0hAdS=xx0lI?*9iahNBpN$DXk>|?cvoQfE z@?0x?HYNbI{OEZ4TIO9Ivl@?CM-#L1^^4D_mW7<_LohHw?S#J%tY6$4x|ia?hI_{D z{%L;uzp#FBA^nI6L)MQbSij&Ds)p1%gdBqcj*+O$F(z8SKv^xDd;%b}>&&oz@qoAL z+q_jzpjGpyF;A)v!T&4d1oU@?)-^%E4FNELwjOvEGdr}e+WKoj98emDyr~XEB^&)sVU^6aXmDr4tpqH0N72q|tH|uw0@t%c*1gTV3v> z+saqxPkovn=(8U{>^B@xZ0geh!MgET%*Wiir@3`c?e>{xRL89Pu3$tH+CH$~jnKEh8!Yqp%tB7|d*Dg$}f9t~Z`u7O*<{N|EO%QNX z089{Ya{x>b@a_PZAmEk&m>}Ri0Wd+ptpPAWfZjIoNuUV=-WLE91iU{0CV0CHd>`b= z;DhqV>|LSn>*@yAcd~bdoG($0`J|ULZq0rm6!+M=<4aLIx zj#yrYLT{B0>vh!Xx@L^7?}+7fD70%BiS;_ZhVg>cA?5PP+ck_tG}F0!U&FvFw6CgF zCvVp<64Cqv^lS?t_=vs)hPs9>a@H^s+H9divxb4M=o?_IA~|aq32jzHQEM3ZjK2Pb zq9!Kf3~vc-mXKoqjFos#qpqIfC1&m$+W?v{U&Ww(V;ewZF`d{nUj>LPMiQIPSAimr z72vb^Dp2HUcKB?*3KV(T89tk@0!5y-h0oS7fFl2!me1BOfFe&zQa@Y60BZUCTOm*S z_;G=cALn<+_Lo%4V*G6(l$s#7z#aqh;SKjrWBc)o#`*AH`0asESqu?#bYFQX{RKzO zV#EaVVNRiHNaL)E0&bTm>r(D^ag5e!=l@3sWwmUY4+DgDof+oC-}F|!%v<$RTJ`*F zARd-?GZ4>hxweXtGm_pOTG<2vcLcx$0e1$#gw_rNd&$3>*&*9QIG28B&<@!i!m6l{ z?Ij;UVPL>1The`Gvd`dk4Z}4tDzoK#b$#7hSE=H+V-*PMbrh@}*xkYkjDHoNGpoviCx9O?93wEOG<5ZW~M z-RHeU-{mcOL$^g2Q5|d14~7;sp&SpN&)W0w#I{3eDPfnp~NNG=U+B2cenu7j~f1=&jo&W>w`J%Vy?cScZb=z}Q)v@-x zJG7?><@Q`Xw4v@Avh}M~_}%})czqS^Nke4qIl*|%DO3$<9Iq+RsEM+Woi!@4r_<+A z?rT$kfj0fCx9Q#9rgzb%FJ|NQt5k>adOgcW>J2Q{jdRb1k$PhnM(a%x7|QPn&2NH$ zdjnvC06k6i`&SbL+!p{71l%7069jxX04A7Cf3J8s%9wNfO1cl6K6>2uGn<~UU+g36 z>cj?Z`tenx!mEo4*QX<_UsQNBDQs9&_-#_ysHm{e{_z|(L1A(oc}~WetMR)nbnMLU zHr2gEcW$wou;H4P(no%j#+yS5y=fiRyszDxOylVzKY1Mry=P>d;X1Ki=TnB#p8Cj7 zUWY=DS^PWUm1?D}pw?6NaYg1s}lPK5Lyobiu*L{={ z!pP}u32nYR9zs}W-tz^W+q5+Ap|$$@96;OWyfMV4c@M1*X3zKv=T5w^2@q~6|gMT8w( z7^&ZgKp=P^^jQ-GJQx5I1UwV~69haQ022g!BmgE@zkfx&B6UBeqtm|VBEYn$vn!!>k?**bXEuj!@Te*J&ecW4Ri z6H*%cHHEg1CN}S*G>*0m<#i~ueKfIoAEmvjhBV%rP@s<{D)vztuWCr6HU;`P3Xk;CU>e0vUk$CT=j%>9}5us2^S_d^-+Mxaus4z9|edkXH6f=p7jAm zo|A>o`Y2G#=kKIX_dfWD_rZ_Q2k**8<=s__KDejlBlX^vs}JsrK-YUDbQ=={JQ@HK z1bj3ACJ6Xg08CJuG0uFb+t=>O`r6Au9O^zETw7Eo3*A2}Mo%JKmq|XllqA&5weSQcKS$?k14*{Z| zrTrX>xu1R3{p@l4%-j74wG)3?z&&1v!0Fy*`AB_|xgug`N~MtuPS&il#WnkESNQ~*p6@aX`UAmB3rFhRiM0Wd+pX9Hk@0KMDm z_gy9kcp?BM2>5&eOc3ye0GJ@)ivci!7;>HF9ewk$sRy>*LVf7OAP?8a>0$@_Q1)E$ zgrY*$$xbXP+?;;mO9a72*-z zQB+tr{lxi2g$ahjIht4M`z6CQy)=s@+vxq-ZY+7Vy>pF4tA^BLiJrhw=*{Y|79e_m zm!AyR7`bXlV;u@Teu*6Unrb#R5MA&qq?^!$zN#Co0m ztq$H%HKef)h4%fs#Cjcn{|<+#8q!#YLi_$*V!e*Pe}@lM4QZ@Hp?&`@v0lgDzr(Gx zmmsf0p`CXm*6aAZ15eXlf>=lQ%oLb+B+4rA{vB?oT?Dx{1?C-za&65!@Imb#h}sJH z6bSfqf;u6JRizQKjj`bHO~)HfqAmVGIV5GDwC zG5{tB_;LVD5b%`%m>}S*0Wd+p*8*UIfTsdr0zS2ne5!98njIph#-Uq-JX~L)6CE6f zzLpfODk}UoDO^)jSnl8$!LKVSY?Tz=iNe5a@YJO6uHq4HO$s+jVS;}ZIl(|c8%=h7 z;hlu)TlEuh9H@rwR{M_AXS44gyvyPyEm}3CF`iNAoz!7HHXUFnja)UPu?~gaYdfsh zS;J7;y=q8f9SS|Y0;JPTtk-$T=5UyzYDi-p3cc@kSg-Shp;)JCNO`G*y#3r)BI+gd zD75FF`@&XLL+U@FFiU~G(TTF-vo{*U={-BLN&M4DMOxQvKMtnzY0G|y?$;PP!4{jd z2DE;PwOB?GBi-Wx#CU=Y#HM>ZfXLFsV$(eyKxAoGVo`RF2NZc)4?c^vK#`}h;Imi@ z6nQRueCn*J{=F_DZu|ck1JU>Y7W=+i;IZ#1k9}Vw_T~4Kx9h-!yE`o(sXs_gDEoQ{ zGA0Q4MgU9@@XY|2P`;=9bm+B;L)R=GgT!t6mBBca&4=$ODr|H}Ji-Tx3KMkyIhqIF zK!>_lhmZY#c<2uKQFk7wwG%0FCHg#&(%1ngFwaPocL2>ZxGa4hDA%UIJR?!AE$`&IM}Qh(Bgsr9E_m{vdT!u0xc z2>9){f>)X#;OPLEAmEt*m>}SP0$_rG{|$f%0=^vp69jxG044}{HUK6F_-+795b(VK znBe!@1Mj8o5vzRdPd#PAU z`-PM;hLX4Mr6!_z2Grk6#dg{cq%;oG6x#Pv6Kg%aeJ>SrYQs=oheG>aYGS>Pzn6-I zwQVS`L!o^yHL+gD-%G{l`sz?#heG>aYGS>Pzn6+1=-Wd|xqR~Wz0^eb|DU_xA_87f zHKeGMx9_DUqM2{H(6db)AE_Er-b*Ftz0`y@KLpZysrX9OkfKP=(p^IBAHVTlDn3&+ zq%7T$6JZnDjOy3>BP_ntc`p^)_Qh9#7(uaOUwj3KEcWV)uK^N z0E#@#4xh~}fFe&j!)Nz#K#`|y;j{ZVpvcpt@Y#JFP~>Sz`0PFosO9tbQaAGPHklSIb5I30fJTIKB(>8rZ2cnf7Z3> zPgMt-zCeympARN9LBNj#V8R48eLk2;HeG)C*zJG984XOivi}G9v!cQ)wyC}itbG_d zc4pJJ6>KW+<`k=jG~S$0;C3TXHgxmZ(<^(VoMCa5jwBReV|#oxj^a;F^D+D>+yb$GPn z?{t*^)*i%nV=MYYwAF-r5IGI4jgU=l5294zZ5bd`I_8_+C1bYzoa@+jT zZS!K+HZSQq%r-v_wlSf#&A>b8I|O^kHqQiEyEJr^!9G^(LUS~3-hy5Jp@T=eO!zkrfp9zQeeAvw@n^(AlBzjRx5STj*;)t`k{HKFY9 ze+=!YHqHL6;#@k$f6L$BL%T9vj_o?3zjGS$ce2U(yK5$YZ_9p&IrDe>?E!yp(Fy$h zNVm*C-7+tCEi*&cVU~FzSjL2j{QcA;QY^||$DOXD{5SmlR_ww}RJ6;4{>~{>4Qcdu z3ix}XCgJZW_xU@(fWIH-tvWKxzCAv-vc5Mi7f>BW@P#ZNsTZ+ai$sgLFj6mpz}Wut z(C#J(_(cFr5b(}R+0Wd+puLEF0YrBDWF8`U?E?Z$4*O?63E?Z$)u&9u|bGdL) zA$#X?(V{~3&gJ4L49qiMdAxit{Bx#V*D`T;z-% z^LH*!^2E>@ zGeN*_17L!H-vz(~0lyD`2?G8Q022hf7yuIl{4oF~Fc%#7pH6!pnc{D@XLSXg=wKht z0`y8ng*R>(XOneN;qaueDhdN#^b_HHhU?XfNBC({ShJ`w{+4(SYZn#DQNZmy*=M8g zBMz*m!)I}T4^?!ZjqGPnC27s7A&q^SLT}R!>wS7vjI97_IO3 zSRK+>he8`~664y0uW;Y4JbCPr2s^h zrV^Xt4M1dR8RALyj1wsGGz5GWZ-64trNd|IkU){=V&SuONT8O_|DV%29Ou z%HI*+NVN!2n^-x?)ww9Nohz~47rk?F@%ms*tfS6FfzFkv*tuv4eXl0hra|C_b1+sJYjyR_;4^4dwAo?%oDmL{kfXH%gVpHD&h%D!V?`M4rDEfYSNBm;< z{e|847fNIGvx=YmWeX&)(;?^xueW@peuL%e2yb#>q~6Je(RybWrqsK-Fty&@g=zJk zE=;fYc40=nuM0El{al!*KEQ=}>w{dFuRg?u`Rl`67^{zPVOISX7sl(iy0AdqxUgV- ztP2a($Gfm_{WcdCsZVlY(fSk@7OPKlVe$G57nZ2s?!uDw*)A+qpXr;lhgbRW7VlU*p2c^>r@P^*dcyrGA$StJXKUuv-0Y7gn#| z(n1~Vcq&}7hYB0>%yz+`w$3Re+f~@1OYDvzytw* z4S)#({uTfe1pGY!CJ6XP089|@asW&a@Xr94AYiCc%w2A{I>Q73a|OTz0mA_>K|mD% z69mj1022g^1i%CVqX95Mz?1-(AYf_$Ob{?F044~S9sm;r%m{!90%iul1Of8|zytyF z2EYUX^98^J0rLmI1Oa0KFhRhq0GJ?PJOCyLSReo<2v{%xCJ4~Ky!KW%LBPTRFhRf~ z0Wd+pq5&{Lz+wR~LBQexFhRf)0Wd+pk^wM5z)}G)LBP@hFhRgF0Wd+pvH>tbz;XdF zLBR3>FhRfy0Wd+piUBY|z)AryLBPrZFhM{a022hP5&#nftQr6l1gsVS6MTOBq85_- z){+kh1Fy#UZv=U`-cJ2=aGd{fQrNzzFy*ar7~i3&uw+trV^Lw#q_AUA;eeztyQpw% zQrM-a@WG_8TT$V;q_77H12;KiN5{+Dt9XQ+lfphlg^QBHn~MsMB!&Hp3g1l%2No3; zZ{kTFTvXUQDI8i^ahE-Jh`Dcn+2_)Jo` zwW#o;r0~9?!pPg=RoqroctcXSqp0w2gT}6fOCxv^83JabXPx3=Wh5x|4 z;%(f1JgB3`d&O$#tuuy(7G!-Qdv|_sVLn<`4P#~<)`=QKnUgvky`5ng8sv(VaDD=M3VZF}B4P}_E8q!#YLQhkB9Wk+9NB0y$8F}^j#k>xM zo^E{lSg)fyE};y@`UqoQheA(_Y<;ZPS=vy>=c*x%=SHEY2Ux0;Sg)g31%xtWYj<{D zheA*9RQ0i5NAH&jWfa%mZKbS{k@s%t5Y6X7FEo@fU7NR+#?zwE(>7%tEV2F*yBNwa zuPxkp9SXhmJFM4P#!yE7sv(WPL!md^VZDz2g{^*_$w1YR#yS*wU+b`5=TSqMA5;x# ztV5xv4>Rb9iS;`A9EMP)3{^uK>rm(&+F`xUj)pRes2b8(heB`N4(oN6F!XS%LmKN) z=)F9Jvq-Gh`MIG-S{>3@heGek4(oLuGV~~`LmKN)=w07oz0O&N9&L33btPW|cL!q~3hxIy(7vnoGI_W^fr0n<5EKcH=! zO5?dv=>5MD+90uhZa*~ibSaF_t&N-HBeUkNchW<;Sy~HH_VQdR&-OCe%X96wMo*v5 zbJY=}dhbey8JRWW2kLId>78IoXR4yMdn%3RN1?Y{hxPN@+|aY6Fpu_oDw{d0s(0pW zhAq?Cc?-4A?m0WPooo8P(C+=4ZYmz zkj6R`+K+!F*6Y05>Rf4cNMjueJ^%PuV!e(Qqh$N5tqy6dL!qaa{`y$2qivT$ueCa) zu?~gahdQj+xxvuutqy6dL!ozShxIxK8+wD)A&qq?^w?;w&sIg&>u3d9=#7Sw#yS+* zt>%gKI=riO7nkUxl_*U~;HrTg`8^I;61vepq`E6E*G}fWeZZ%J=*YU09cUT?LScgKp)jY9Y=X17n{sF5) z8tYJKA73Qa>-gh~yQ~hW*U{q(3Ov3@lvQA>`8}ph8nr3#_##oRt!INDGHp`V*5eBb zJibVjX&0XjenEr82I<-0cBv1dJqkdP-=pQTJqkdP->c=bJqkdP->2oXz2-oX ze{;)c-~R%N{QfPUeg6w6@&~qj_WduQ$RFJD+4sMIB7bPhXW#zpvWK9^5bLU;rn1fkw3cS7Z_V0@IaA2rsWqLTQKlIkw32G7aChA@IaA2q2(7I zTR8AQkw3BJ7a3b5@IaA2S%vY%W-Vr)*%)7RY|*fPHV}Pp{rSv^=W&aVEgp_{YJR-a zIo^`9mh}C&ON=cMju(i&{kX&RnbPNYON}iRjt3Oa?<|fN&u{6mrNi+8(K)|!+T$%V zwoEu4P(0o{T7KEFWdjcs`SVps=fB+8a^d#^(K-JM+v6=iwtP4qP(0qnEx*Fp3V{cT z{G~0w;@FCT2a5dVEx*#(N`VK8{FN=g^4Q9O2a5dFEnkn-fd`8GwJpEO*eZbsiv0C0 zzv|ekfd`8G4K2Ug*lK|Xiaet*_Fa8!^}qu~{^pinV{DDU14aIpmS1yh&A zy*ltfk-w+q*Be_e@IaCOP|L4BwtnD&T7GnV1O1P*4g6c={``AMfBwA$&%a;H9(g~i zT0HXpnB^n&W0vcY_a|K#sXy()X#F?>4^{PjS%0i%f`BywV1j@(17L!HwE|#*fVBf) zf`D}bV1gzWyif3ZZpCWX%w6^g5fbMn5)?aX;UuVcqG#Ni>n0;qM5zBRV<8&9x~oF-(+eYhp;_Yj)M{Dy zW&zFAH!lQ;eUk%3Grg}R)0Wd*; z?u9)-nIK@j0GJ?P{Q#ICV1oddAYj7)m>{4R022gk6aW(hY#aa+1Z)xj69jA;022hf zCIBV~*en1h2-rLTCJ5Lf048{x+)6jTeQ|Q#liSdzIC)NxhwCTRhJ$hP=A`hIqQav| z;cG>Or<20hiwdKs#8CWA6t+?9>H8elQc2t)zOLxYen{1&8@2eWpIQCHJozh`_OgP9;98!C*^EwoITX$HmquGT{ z2p`pU?7R+zo?b2LW4(@E^Ad{NYG-y{heA&~eyuMaDvg&veqn3-7NQ(pZN=yZ)6}ujA`q zbcm`Ujddur>tBiWI==ozAJLjU+2q#jU9(-Ye}_#+TF8$wuZU-UAqZ<9@KecLtL z_3b6>cUs7gGVnV-&7q%G4QXrx3hgu}vEBwg&7td74QZ@Hp`GR=*6a8*hu*AR#<7m3 zITV=YB+4o<&7o^+mvOF5foV>nTwBu|`gzrm`uS*@LxE{dqD;Fx&9V9R%JS&)% zRn=@Fy}t_(=Nj}wv1y(I5LtSh*fh@ph%9}Jc}h0V0g6052tJ$V07ahO0-w!ufFe)N zfX~*yfFe&XfX~*yfFh5_!)NPXK#|99$7jr%;p-!;g0=r&ED)Xb2mCMTv+C9A2cn~o zxAFVg`WI0AeLM?3TmJ%zJdOmPt$zVU9@l}-*1v!vkF&sM>t8@EKRP~3_m{K$`}RJM zT*c>+HS@^)|3ti~T1*}PM9%DO%P@U0LBMMRV1mzQ2L4aP!C@%VeCF{W57&R-oL1@1 zC7w^SZX4^8kt1vtg3A@v@q-cEu3o2b}-Ip3-wjs2Gb{Wnn) z_up+bZ=XN)Uw%MVO#K%i+L!~1P5l=jSUCRAh`ZdrYq@>b#J>6e6!?egm|eFDW;8+P z!F|)~mG{j{e;Z6AJ7)jyPiVbV{GeU>zbtaS{JV!}_q8`bXwjKr&-w%2qU(8!zPj6EMs>RMn5pFS7)^Ej zZpH)w+XTP_+IgVAY;$@$^;0`P8f1N+PsbeWFVCg#8%-%H6b&&aYZM>E4l{M^f8Sp? zMSWOMY3wf)=r4(i{e|h=S_#{eCJDXmow?}BY@~f{BoZk z0YsLc6PxBu0Kv<$Z(2U?ezt}C+2;6}xBKoo7ydG*TS|w(>6Wp4q+ZT)t>3KR!brW6 z3!`=I!jyVd7pB&$yD+U@69HG^)s z0GJ?PrvR8BV0HjZARg_k$$sB>v*j5n4rcDYq%LK!Kir)Db^p>ug^whKWs3@5PYQbd zvhWiNr2h=PVo_nK^cj$qiwfC4|6ir3ux|Q^)rtz)zrkFis89^|b2RSWjr-ACvOdj! z?a#+u`t(=q<_v384XO81-Aq$xU!+K^b=01}NP&T>hBVfp(7s5KSg+$ZlGvX&F`jn z10wy9z3B=^VZ9s^_QgYh81XPxUpxeeEN1D8hX9eq0Alm|NTA5m*znnXBv9mOSorKd z5-9StBYbur2^4u+4nDh&1d2Ru1)tqV0=4|;_;lSzO}G1~Cq15T>+yUW;(2}_wSj68 z!u77V2jQJV@H0WtaF+m>Fu{G)6IndGH3f?GIj4d7!EckohDC*9pqP_+;XTBOO?7Ow z!)QBxO>iH@De6OzN~8NyzC4$1#!<9ziA$fzy%rGWb;s_4EJ=Q{UM{D7>O?xO&r zjX9v$bRPu}EF9;B-*o%F!R@;P_RZ&oTdEHB-OBQjdK+>E+g*cMO%SkK089|DdjL!* z&kI*RGmV4U^MEZl(*e6@&jVgtRLGtOY+Y0+I)>&XbK)EK;v3uR@R@Jip<{H%5dXj8 zTuIfCM)#mVEKHQUhhia@RW+nhn*z?1sOU^wqrQn4wdG6{aHd2Ror&x1%ndo4K3@We zzQnKh`4T{6`8Ba=ZU_)OEt?xY>%O+L``T=L&D;J3CWiXU=7w+5A#l8%EFYBXkZE z1ne0A69nuP022i49RL#q>=OVJ1ne6C69l|D04507F90S8*gpU!2sj`BCI~n%044~~ z0}#LOH$lL`0Wd+pAptN!z@Y&!LBL@FFhPJ`E%t+&AmE4qm>}TD0GJ@)Edek=z)=A( zLBLxBV1j_717L!HCIBV~I3@rl&`(rXHp|}ixFm~N*%HMYW!k}*^-@sQwxXiK13R`6 zP z|DwX5lfr>Tg(c65*LrYKVb7#+Xi?#`q;Pmq;gO_pWKrRTq;OPGVZpQGNgiEPSSu+U zQ&iYDDI8Z+Xp+JSMTP5Acz#nAf4u zTdKo)ovDV>pS342uS22t%egt-#Cn~l4W*0g;UyUlFKtUt6}I%Kl5T9YcP4D<(WV*K zbf|Y_JceyJf*aUia+K*1B(#rEX>0=uy*GAPKer7HC2r_}Cm9bs?cDqnZ9|Wpo1bF4 zp~p2H>ix-{a<`BlW#HVtZaPFBZ9r5S&y7O6ktMNyZZ}&Uf{`{L=5;8v8(9+Tbu`Gx z0>me6K+NkQ0Z9vTHP-q|IC)VrugM7kY)sV)vrqDjfPpsF`aHuvQB32D) ztV5xFke^tu;}7x)l2t<*>riMPu+Tkj6R`+Vz*jdL3VXIl=0X#yS+*^_RqY9bbPT2J0J;c^wMv`b%QH&gX1C ze6rOcjlV;oU4Kce*YWk2Q>_lE*U^d!1@1W#WffR|Io-5Lqc#QZITGdCx`92@v`JlC z_Z$?s=SY-km)2kO3}L93)?ePJntk^i0P(J3M`zRhD?nstJDct~03y4K3fdFtd-7}* zrhTp*h|YWQyZO=b^%kIbygmAk$Er(vyg+o0w^w_-Z2bi&9&ewP&(>dnBLC)=&-SqZ zMV>&Tmdn4H2o!mO3VgPY1t{_a5cuplK2YQd7Vz0~e4xk^7~r$#_&|{-2*790@qr>w zhlkIe;{!#W&JCaKV*!dh9T`5`#{v|2IxT#*j|C|5bWr$g9}7_A>5TB%J{F+J)A8W5 zeJntcr=P)R`&fV?PtSs92g}&#(i`vPoh|b8CHTe077IL3%a4vPuJyUaZGG-}zo*{Q z@2U6To;rVz{zBE_Hu_@AN9s#0*KPFWE{xPyx-eQ_jljL>vEd%b1Odkdzytxu2fzdY zCj`I*0dEU{2?9kD>Q^9X^}m9;Nl{?i_b7dv-yK zRShZc0Ft-=t~C+OS@R0@f7eR;RSjtzW+=4(t~Ie1*?WJqp@}BdRF!OUQ&rb&r>eRf zT~7=7Q3j@imzWMlsT$HaKvCe)YN8sJ{Q39LSV$l8RLb{H$Qj8J+FYiqW+@g+>Fb?J z<48tg3b?8~&C*ffp-M3xp9*LHB5(`z(q$CUtg z#uYA@xR5^KwGGHr8oc(`yQ7r zHpKye$a1A((|i^nvRoVeHhV7>DDqqqd=?jgBF~k;XK?|j<@5bFFM7W}#QXih^n349 zAJet+m#xu%NQWQ@+;90v{ea~P0uQ;MuYtNST0iQ-l=@>XOsyYtVOsr37pB*rc40>S zxC=Au&$%#9{dpJWt-t8PeD#wq%wK=Sg|Yf;F3hUG?!tKeO&1oZpGF`Aoe`pi2?EXx zfC&QL9sm;roD~2Q1e_fJ69k+S022h98vqjoydwZ62skeQCI~n`044~yAOI!^xG(@F z2)HN!CJ4AV044~yBmgD|xHJGJ2)HZ&CJ4AZ044~yA^;``xH14HxNm$?>jHi8cENYF z0Z{QaTbjOCb{L$dy>|H+E$=HT?6*c#_;69-s_=9AuVqDr`;x-LMTKXQ!Xrh6KO}{Z z78RB~FP`Mbiwb)tg-;X}&Q1!SDk{7;DSW1=@I+GhY*FDCN#Tj2!r1xoD!x!ucvVvP zQc>Zsr0``Fw&}hG{kLSzuND<MuUewP%!Ra7XBp6<(&9X~%zC}haX z#?Se+PTCzmU$!+sJils4;{=;R?|U7#VIJH2yrFc4sv(VaDD*ziVZF}PhSERu&Dy*U zg`V!qbh?T4I(jT9lrEzW*XDI7^fvFXUT0N9=|%c*ZC-~$Z)S(}I{N4P`W-r!_W0&? zDD=MFVZF}dhSJxx$2YG-p?6z{^*WauO83(q-@Fcm-Z354>+EGHJyLso^EwoIn{-&O zvy!27QtkB3>rm)T?XX_wMVm*_Z?)eyuS22tbcgjipEQ)NtPk7fbtv?1?XX_wVngZO zRYMwmheD4##^E}#US~H$>F`xU8tYK#ZP;PG&T@tl1FD8J)}hdwyTf{&-`f0vuuwIm z%=XCJPkbbzUWWZ?pEC8YnmQ@!%eq`vi(S{tch4eF8-u zFNV+7K7k_t)t1lJK7k^Smr_4l`vi(SehHtgeF8-uPlV6bK7m?(bbLXr9WH2Vhky0C z{#$&me`K2LAEA!NUpCkOz7D}$|2fM?>K|FIx&Dt`7^#2i!f5@13sdS}xG=T;l?&7A z-?%Wn{+$am>OUYbHNPs%D@_of0nHZ!Ob~EQ089{YZ2(LVa9sdQ5O93}Oc3zS0GJ@) zh5(o#;9UVQLBNdxFhRgg0Wg7k?&}oo`scqFw9_cff6oo_aQ!`9?BM+OJxSpQMTL(h zg&(3YFr~`g5P!aSgm0uH{G_Omy+Z!8qC)lx`Ok|A3mg<@j=wA_EOkIs_;pbsdxiYB zMTK?KPyD{9Fu}BLj^6Kk0Js0M4nKXhxGu7VVt035x0a3aSX8@&mB#UpLT{c9+t|GB z|7=vm$lCFn*P+n+PKWh6pEVS_R}CqHAbI;3G!e~y^9l9Gpm>4y|0<2AMWKBRnppn{ ze+-IaX#a0sheG=pG_hXCAA{m6+6A1~q0l}CO{~}P$Dp{6_5$a1D72436YF*SF(@8Y zHKg%+D6|uS#Cjc{2;gK@L+W)j5um_CAW>F<$Dnvz)sRMQ3QPnN<=UDE;C@v@>e`wJ zP+%gEDAVqr2q>l!FAkGU*GqE&JVp^a%>@8rJjXZ0rnvw>WU;^4G#3DfES6?0$kvU3 zB9B$!vvnh&$YVkHY~2Vb@>mN#n+pI%9?QUIa{-{pV+iP!D-NG=tdDiaq_J*m8|nJSy1(iWjCFsve58Kaa*cIES_QQK zD>LlEXg#+JQ|eI!#xcE*;=`5+0^S_}69n86022hfCjcf0xHSMK2zYM*Oc3zC0GNPJ zEhL}n8-sooV!p_j?LWithjcCEM;Z7h6_?mN5o78T&Px5<6l^K*kS?B;Q*u=V~BP)umsPm`AZm~vIQxat^na0ub7DX4oq~ z%UksfZ`IRj)qK~?BC5jxvY6%ix-~h2!)>9JO%QN<089{YM*vJ{?QmJw4x5FxmmRX1 z`NEv*fE}`l_o79GZ0f#vQK4+fIa@D%7+dlXFSF$xx~}fL+V{Q=gf|Mdj-yEV30j5JtJSKs8Dp7IqCZ!!CzL>u`_>pOUGaM9~t`$*PNn0P^^^4 zyyT1|32n}qUyw!;PE}teMo~s5$LI-d))&;7v2)Jb>UZZ);|NFYvpGPtDu?T{IY6-L zJgW_PTwcy?dXd}o!mdr%Rvm1*E;%;+U@)Nx0`3Zc2@}|K{F2s=iW6rCdAMGSGa85! z_a=pPiVCmTrjKA#+Bmc61p6vE#i}8V0e}KsI#IDpbG}tW8lyi2tedD}m$rFA$G-eP zpM3$MeK}yCeE|mSyQ+?N`Ybu7O=z_5)-8qThAH^3iV)TV-Nc*Y>?xAiJ=4Y$DtWuBN zox}>f+y{qL~ zpV-}nk$O)TM(e#@m{RZS!qj>{7pBz*xG=pw$b}j8AqcqPeZlKY5O9A0Oc3zl0GJ@) zfdH5w;K2ZxAmE_@m>}Tc0GJ@)BLOf$z#{=LLBOK{FhRga17HHS8d!^8Ik>#~$7;Jq z_uo+$JJ>%K+9@i`E-LJtj<8En;fSQLTT$Vnq_9U(;l8A>S5e_xNnxL&!o%qW#W$lc zFce%9+GM!izo_s;QaG@vFur?isDq0N|A`o)cg}|EBXsx}LxzXeEv&^aW2^00RD1N4 zdJIuNr_g)ZR$LNmVWjtSLou@U=;d`N^q%anUgsf0vAeeD<#j0ZuJ5p3=PW~U1?{)X z>rm(&*kQfS4u;|#+9;RTq0n2i!+M=X48>uzcP_6(q4!sdAc^%lKQR;^(%!ke4u$rO z&BS`0`>hUcrM+`Xc^*ODzOk8zW;5O|KikxCvZ^6vv?u3{&4e~50_lxSoK1V>T19fE z@(FFu2GUd>r_%;G6g8D6XGW0F=A{J(rt+n=cif^cmIK6CjxY4h2>>FC)y1a!H-N}u zU$ObxJ5c1YC49E_4itHe1)r@E0Yx6ez-MbjK#|81@Yxy>P~>TS_-ySRDDpHqe75!u z6nWYjK3jVSYWaNaeM=wP-s@xAt&DB?YRS>6#c+0v#()=Cm(otFn)TvpYPMr{hrz7yrznmBQdRYU69>T49}Yl$-L{#ldH6%W%n zXa9eWvysQ7wKag~PyD*rv{nKTS$<7y>T3Ye*U~&{d-t_F-Pi8G*YdTJ(^LyzJA)h_ z`$X^{69jxR04Df#oT%&Qn{)pqc!7NC>?@*AovNcwu*>M-q;>klS`#?WoXoo)!*__1 z(RZq$AM5uAHQhy;q!DRgK_cj4Wq&ZC=ARfKXGJK zxTtu9pC*M%iVEXziAT7ss8H@4bJ90Hfy-a5gU7xxJTy)7rfyv2xzTVVMoKI3{ zUsg=4&x`zJMH)x@?vyewB5&VONJR4%VmCl!xs<-x4G>vQU2Hy2 z0*X8*3!lxCfLeZZd{p<)qjnFym-oU4y%#<}FU;o|?^G>%;kzs!sc#~u&wVcR7ZU_L z5daee=!I-wKsTX0&)D|L)_>KX?oPgZJ?A7psQcQZ_}VsE#J^3o%(uP}JjaAK z77sjE{dnd(<5$Hv_JkEqWxcX?(WT8_AWU`8G@piI4UXz%m^x?7%_p04#@;Y zL@_G}hzKHLL_|QMIiLuN0bk4rf;s1e;rD#2rmOqR>HWF)nY^3?|43eg1J2l+YCUhbI6PVJ>w zAN&;m`TwB3e1>xRoDwg}X`c4NEi@e=?S(6up3&~hg8oB$L3=E}0aA{J|2fuk^lP4@ zUmfP?)v~c1{Zh(N6YBYSLXn>vzB$^(Rs7%ogZ%s~`AJ6n=ltXrv}s2n`N@_1%xL#b zLH{8?(H_fBfQkHkjpye#JwLxO%+IgO#`5!;l%FP8e(tM!I#WL9+CAl=>gQES*7vQH z#@al_S{q-Ymyf4fG9&V|S@e9}*H+wDf36(;KJH1>A4x^u zdS~6k9rD;5)0LXv^72`p-}dPE6Q}SUCwj?T?foN5vkupD zb`dt!k{eA&$o!LQ|1N$e{M;9R7oWUQt>vYV%4p&lJu9r7Qhl*)N6zcte0r@$BUTA<*$dH7=eA1L|Qxh0zSF0pyQ}O&E&s-@)9vra;=BSeua zPyR9*XSI;WO-IP+g)2=xqYFE$g}fMR=K#_6_~~Nv_!}TteyP~JMgR~jzm0ZV?70C7 zo}UC?w0of7`6cj0y9es|@~oD3db|IbxBH*c?!8Uvxw-un3lcgP$eh5GU8mc{c9j#D zabdb$>cULB+=V6WN*9*4>$yRqe(utlMtt!s>Q&7uIXH zbYZsL+J!akwl2)I+qihh1l*Va69oJq0VW8zDFG%3xH$nP2>4+FOc3y+1ehS;#|bb&z)uojf`FeUzytw5 zOMnRiex3jm1pFcaCJ6Xt0!;9_agE-U7#mlAy70H_92L&+-_*H@0nzVv3x#!5P?HK@ z&k9XdVfMC>!n73T8JX>pwU$(qx&6tJ%(AM&cH4!*imF0!RfXb+oh_;gzsUb$tNCwa?v%*% zZK}!alzZFlstU#FFgu{Iz?rhw?S-y;UrB$uvyzYgv{`id;zf(J{t)vzz614MVN)$F zL7Sfx`T$d%Dv{AE2CR)SN1dTG4(*3h7&b&k`wdvPxvQbH7ww8FZHSDv7_e@$#88@$ z2Jl=KHh_1{egLoMgZh0vuAqSX+vbR*MM~!pUdKi^!>HchRA4@*<{vj{FyDjX->Cq*TsDX z^x2_&@E_Y}N1qS9s%KGuAYsBhp^1EWtwvW}U>uo!jHX(ytt_*TBYA4?K65U{(`BK%Ad*=Bpo=T(1{45M0#+vIWVX=9f z3lMDMY#!$V1Us!r^^EOA4Ccf5i@~@SDAL0>z!&ec0R@jAfG^%>0}7so4qv>_1{6H) z8@_m-4JdfpGJNqq8&L4HTlnH!8KB^4qwvMKGC;vwdt1F`wSSwN(`EXzUK264Qm373 zeR{r`J<~GuL#zwZDagNVxe&h3+U*~zv6Kz&Q+uKWiOxLE}O-Zo0aXY(C zx3{;e<~4V8VYU0B-g>B6%19xg0z_d;Oy@vAg+HbKCz6JUaX-z2~U z0l!Uv2?BnX022iKJ^>~O_(K9r5b(zYm>}R!2{1vxpA%q$k9&@iM;sf|-!YBDw1!e_ z)w_*;-Q`_&CW8QFhm#V@S zate2=DqNgz^6piI;>$$$tSbE1>o{Ma>fTpr$GCH9(Tys*^0_d29=5KG}K>a>eL5qAwyk#G*{N3GTMDnx~xG_FPe@JMXq$u8STzSQQb53qv;6g zp1IOJXSBOqisRigYn}H~-t3zDW{OlEG55^?;V&scvAJ&s2$lj9oBL*fU@0GbZLtPr z4fFnTn~z$qJ(xXTtU&>VJ=uNHs2fDDleJlcf#b1(3HbKB&6JUaXza_u~0e??`2?B0OfC&QrkpL3}{4)V2 z2>4e5Oc3zz1ehRT(PAwLZadYy$b@4y+i)Ger{9rMPx#OiNjxcP9 z^aqP&)@`n^u7Uc|bcA6;qi*X_b-2^e<|Pde5$Oh4_GI;S`$=Hs_$6slpK$I?f!YM_EY%Z3tZ`3oA+0) z#)mvzi5EU(o_DOc1?{I($cTn3buOc}AK&ZTyzeBUtz6CZ4It&|%Jh!sXFNyOnOn4Y z2lY(4?96Z4M|s9yF}HiR%;~QWv#U0S*;W1ZQ7%lk&vjv@eZC7z+M``q+P)Bh-gzpO zj0pmo1ehRTaRN*bFr5Gs1k5DB1OZxo^`6xP0ZS8Lf`DZSFv07??i&A%&C^aU>O-+N z`B}R6$-cMPo7`0uioMB)R~3rA$wyWdioMCtsVWqElb=^rc=;ovYkdI<6Scb7ynIYG zg=){~`M1#Z{V!6DUaHiKde8Z7!@kqkGs$i3pHmop0FnOuw#=H_?ayzc0JMv)v?0<@ zmNM%$etsKeqP=vb4Uzu*w#>TCAFM4Dn~u^JqCW!)p3HzR`ZJ)OFVAzk+P&uz_ntF&&)&DFbeAZvlK))2jx96}&mDP%lJ#>( zn$~4}nU>g|B+eTced9rv&GDELm;IYtw&yiFQm~igrBj`nTRFUM70jw>n0@|~?W=y%Zd zy~(cA?TL0(*LRW&)9ooP%(SN>P>3s1A(|jyWdckPuqpv22v|1(CJ0!a022i0lNR35 znV>qx@1J;Q>zq^{G_E-^?ocJa4Qj6q^lCKw+W}DK;Cvxtc<;+3@75 zLb2KKEmej8y6#>>-924tN8O!Tv}dIc@@HM-ls4-r44+M;?;A4fKHK{SGEbknD{YAM zeM4s5#`^~HQ(wJP$TA++eyWp+?){)X)ggDAjxf3fB20BM<=uj&I%IXz5r#Gq`i4xo zw)zJ0z3B*}Zy-Y7kSWuy_6>T5Uw(UwERqM!V^4tauVjYU+&2IO%WoH(`v!nu`Jwpc zVy*)eJUm+y0Z$9=+_`-C<4gmVAlS+c?>oNd?X_T5}*__L{v znjm0J0!$DvmjDy24ZmLbH#QdC_O!lPstp(06W_tTPP_+HY)^b=Rbh)mqmjR>s!(lU zy?l5`8vKVN_2dROU=YW#(t;+i|5f5h`=0qB8Rv z^#Qri)+S zszSBOtj%~rd*G+qiv#lR~`jqwEH-a9tCi#`brauDs-+C zdPdvrCr>Blp6{psyIvmKlJZ!Y14OBk+*p|dq*9GB#m~J=xAHRGk}@sVDlV6emF0%1 z=uFUka6b>yb<7{EdRz7fZ_6Llx{Uuk;SZ`sW9crmEq|4=AybR8xlg5R?l{$Q3r$BD zJqHo;JyS(vi+wY??Q#z#%42yBkaBfpTCe!M=jslgtJ@D-%4cLlOSyt8EoGyWyCw+O zH~}V**Ar*>y|&2f;swc1E6xA>g5+np>jjpGm-Rx+L}!FdwO>&3Q6_$d-yHR}-~Yt( zN<>`c z7iWUl&1%d(ekMqd4&GcL?J=JUkm^ZshTq@4rtIQ1W#?i0yGB-4LpDhj!UWw{wf(Jg zdTxKkTH%-Y-xI#`zi)rnQr2Hn;!)O9ybn3nm*N|>f0Mr)xhTD0L-gcOy-;j;v=%y)0O{nMR;YEJllGk3Z2lB0JA0nqi99W5o;Sz_ zfA#~rPPaGPRWr{YxiH=S#D$smX9&2w%~JN8AYk(Zm>@v!u=+I81OZznzytwXCBOs$ zTPMH-E7OU2=TC|cL>RSY%C$9WBlGnU zB89jxuC%s{+Tn!@nRk*!V{HzgZ*%%kle2lO4iGFqd#qmp2$tU{ww!kY1<$X7FXo*< z!SiF_i+Lwd&zJMgHSQ7ibdPX1JVH4a_`R&~2!G^CbKfSlOcMlbn*bB$nG5WHM()pw zxxnwZr-^28{iZQ}`~wOLbI@zkPOhV!{8ece?c}gZe|OMS%Plq?A#(w)%mOpoH9F~% z@d>xubcEr^iBPpNWp!}8YH{C#`2eY_^zs}KAj+21#O8VhkV-b@1Dkre-rLLdUc++z zr)((Ke{-c=w@bxnf`IK4V8T4*`pKePi%mEG;EpDW?cRA;&cCV()q%{~ldB#WFf;OKhjGQMz&S$E~`T532D39eiK+4sXX}-6!=juZ}SN9p_>a1)mS8tVa z)r9((^TL#mT2m`tFI|uSJK^*G`#k*?dAflTFY5k0V|Z?%=?Linxssh3E#6?X?6luE z7;mCImY)C<`MJC2=l-6bk03v3&&Q}9@|T`h>0RzkWsXDI+^*B@mUh+9b88o-+ihK# zX}5P_NqZ|7mbR@6%i5h?Sl;gH!ix4bF05>C>%yvbcLZGCj;Rn$5YQ&T1OYoGzytw1 zC%^;&yClE_0lOx^1Oc~BfC&O_lK>M0?3Mr%1l%?OCJ4A)0!$FFdjd=laQg(9Kpy`< zPOy6FMckcIbzM3xsBhjb9AwrC_5(G_}^X}3Y%3GF5EX1wx}v>@RCs2N(%EV zWfYypHq~Ty%gJmve=-lrT02yexi~BASXC%m=uTCIL(h!gvrARsw5)LJs>0P-VYjNn zOY%+LuBuS?5^J}v^KF{los@j|iDuD;+DkWF*I8`)>!=;t@1@Y)ujU9uMmO1;hnY1G zJo=KMR2c2|Ds702&Kt09bE=`#A?^1nZHSDH9dS7z4l&EK!2uIkuZE(Wh+nbIs?u|(Qer0C;-u(Sa8bH$#h7FPa{mRU`jlW+>n`k=1up!dFUzu6A zxx#!q&7|oF!-h!z&@r=a^Cq*Qy>>vsQ_k?kUOS-RDOvbpuN_eElqG!e4R@fPpP5^&{R69Q|G-^*bn+MRe4wJ*9u0cxE#7j=qD?c<*6J)@P0Q-xG78x+h3K4FkQs zxiSp9W6E6<1l%bBCXgo+&lX>t@>hBN+&f3dd~fb&BCl^u%G!TbRj3xm+LXn2DT@ax z?V>E^nRjxFO-C3GjtDL*Q{l3>Uws-Wv{iCMD7j1(B`3$_BX+N&gLxpz^`!6k`BcN`jiy88 z(6E)u!iKG`*$-PE6lv&0N>62C*y^uCQ@!*_B!!U&MEXY$ne{yQgSi!IoIZ(E+7Rg< zJ!IBx{LurIP@hC9ZHV-b9y04T{^)^vsZSz>jfS8^c=V7dGvLt!l~f-?Qpox+S6q2U zyVnD0^hsrHI>P9LiQvjJWyy|@KIw-JR>s~dk3FekV}2YU{5X|q%#Q;EOX1Hg)+rb~ z{MHDx9}6aUFczeEL))G<^!kYy=u>j~-{n{oDE>R81Yf)h4HP^j0$+?hfr6(1;ES;* zQ1IkCd@=R}3Z9&XFUFogJzsve=waT^Jtt_w@s=ew}1J=%rk?F$j;=k`k7i3tMkl>ie2+&cj#2)IuIOb~G21ehRT z?*y12;C=}(LBRbJV1j@LB)|j#4@`gw?pr6$A^1{q)avIpT`#(^r|Z{Ec4PN>XDB?g zs&GhFcve;6^e06MT~*pwXZo>NsQKF9sMs=`b2uXsUK;iRl^ zOjV)UyRFSw^?LfYmn!Y(+ol%HzqgdqYC6Jj)I|EVkIcFQ^|cQQu;~cHhDg7+G_!8w zdrK)(?ZYW;i1d3)GwU|K_CYagA5LjQq+k2UtlRk72PLn4IHe7de(fW(ZsThoR0i$C zDQ$@KYaf|)8(;gNerO*~X+xx6`^c=@_}T|mM*DEWM*Rs9);=<22CRKhf3y#$)Fwjj zlPT9$??YwMW}ML0M1lytPo_+Jy!Y|8eLwX-#n}ZEyS!+g2LgnTrGUlec?3YP6s6d_ z_5lzqg@%7F-nRw{o&tg|o_hlYPhr3p&%J?yC*$FZ{s$;{@)^G9e}IA~XW@(f2Pk;* z629nvfO@{%TY8}PFGqU+as>U$D~qYqD`Z8Na=cxq+gEd?Pk2yry(S2FZ~{ya@Q?(U zU~3hx*8pm44)U(#X2yN~6r*sxudFKE{vP2MUsYA8IxXGP+W4*SueWwe{+jqIJqJ0kn6?mUiJxvhs z&;*zuVBZ9oAYi`)m>}R`2{1vx!xLbFfJY?21OfXezytx0On?aj4oH9r0v?qB6R4|a z$`6jUqpi>GYrfi1@m|Xb`mvKU*W$eDH&+#k^Qup-Dim+Yzon{BoLBwUszPyI_1mfn z&rZK+sy#yr^X%?BC2O5YG7~=I{H$5-PL63o@H(P$_-TibCh`a zm1fZ?nu>2Vc+dGbo1Rm$+C!z#_E70M^1~i8(cKKXpQ%&M+C$Z=a~*xamqC1Y8 z;WOG(E%l@62vO%cdf|ZR{*3z545hYciGmAD6c5+*a!r%Yp!DxkD4x!s)Dth)bZE3~ zq+v@GQT6&Al(t0iFY{E?x27YE(It`5jRV#k@JOd1=%-Kxn~pGSh>Xr1ux@jTq0~w( zg>Ydh#D0(eES)9kcdeh9evjU0cTInVPpBIbJz- z@4O~J{Tu5?0HUX$=8g3u0Krnx#`+O}V5wJP%P|>H@KhxDVoU}UJT(Wt7?S}7Pg&0` zU9;5BMl7CBC1PwBt-e{;r&o-@fFeCgmj73b!GMCNT=M^8C7@r^NW|d(Q5K|EJdXnE z)0>&o()jEud!FBaDE^9m_Crd7e)a;pPPZSntNPiCU6^h!bz!Ex z+=V6WM_pLje%ys+?I&GW-hSGJ742tTSlNEgg;nj9F09*L<-+Rri!Q9!UgN@S`xO_~ zv|n>!uKl_T>$lgrutEDx7dC9a?ZQUwcU{=Hz21dQ+8Yq)}Sg1ehS;=?O4Fz%vqHf`Dfxzytw@Ccp#%&q{y^0-l`!69jY#FhRg! z2{1vx;R!H-e)7qB&tq&%v+=v~n5K9==R6hdWItcL(|LYX;R&~nxxs~1g%geog^Q{R zAIb`sR28nv3YS$CewP(KQdKApbN^UX;nA;%oBTvop*YO_Q&oktatfcRDts<0Tv1i{ zSyuRbRbe)7)cZnJ;r3bK>Z-y^-xWXeODOEEPW*_~>-3<;xTj}@FIQ9ed{+2sRpH=# z57$=z#VxtQ{7+S(*pK*)>c9A7zK3sB6+V~m;X74@-(-dFRTVaUcVyJ}QJBc6|9)J0 zBi+T#N<7A;Q;U{QPtJG$x)?=TXVVeJ2#3h%8w1uyIG-|<2HSLmVMAo}&H?K-uQQZ3 z+;oItLu4cmq`Szh+i2n>lxE#@gkeKuq(`x1tlMmFC@sC|2*ZZRXlB5=jSk&aN;H0L z4J~bmjPzZxG1hH9W+?uk=?LTh5E;FFz`D(=48=t>9bwoI89igby3HdD#cMPjVb~BE z-D$wO&DMtENc8E$(uT-rYQVb9FKwcLZ)rNh_&-EOUmmb-bD5#Io2DZS8zQ6A2CUoo zJO~febcA6;Wb`z%$*kM#YbZ{s=?KGy$Y}Qg>o%Jkil1sa!muGS`j^cYGV3-!H5AvS zEs6@6xNsePWk7T@Ok6HE6i3!{gz+zk^e5|P*8jyT%m&}qbcA6;WWOj^aI=jxe-|urVuBuC0w(xKeFMQ^q~H8p@>FLJh=3jqax zNzWH^A)w$d>-l0X1Qh&7dcIhn1`7UTJzuO(0|ozyo-gJ`K*8fb26H2z;PDmk#q&|1 z;PDIa#asv|cp5%@@opYa@U(aM;@v!;;AznCt7lj5IyT%3f%eVA? zDl4X^Kj+GX?uayTFhRhP2{6Ie@+aQYyMG!dY3x{>4fPZ5X=2T=*p%?IszP;8wKi*g zKfpWxT4@(!s(Iei;})BaFgzC#9tmX1J(repxZkEDbZxmWBDk+infB0q*)x#AdwTo> zm16c^08z#yC^q{qfK$@83s=hds8p;b2zX8c zOc3zg1ej2NzVzLq+z)wAjFo@SolcZ{u{ZmVRfP+;juie}Rj5`Bt+%XA-MERmK?hUR zjrS;x`tv1zi9T(pFscU;o-bv}tB0P|^0V}P!%~|Fl_^tEnfQ(R$YE%!G7+INWvW`4 z_`QSYOWe&^T>^-@#D5>FO8~+0-^Av=5FpjG;_QoKy{?_$b?r?>VRFM%B-V*JE>5uGHX*`Zl=C4j4bNQJidfm z)JMb=Mr9#F@naMo5O8z? zOb~EP0!$F_!UUKg;6({ALBNX>V1j^`B)|m9d_#@H$JW69Rn)cO(E8=N(aEY*RK}H6 zh5hq)5!bCM6kX$bRfXcs+%;8&qu(3#eSIm+^VsghthHe^nQE(8J3snEs>5bVJ=#UH z=zQhx@Oj$XZSF&kHXWf?c1?AN^iP^HYxTW<(nKaV9bwoI8QtGf%&gmR?($SizBe6V z*bo`5KVaR)pEOYv+9q4t5b2*ZW!7!{NfV{hbcFGLi1bgIGV3<}q=^F4lQS+0cygvE zO|ID=U#cffecY3%J!zt_n~u=$N<9h@TuP?wmd1xCw2i;0eXE_%sswk^*Fz|hF@FLO z{)EgQ^CtkolH+1?e*zFJ87j7%TLA@6=D`+s7- zub4{#_34%8?w;uW?+o{Ur)U3H`PS~%N&^44tzDZ6cPkgB+t!7dc4rrsw7a^n zw7rcB%i7zzu)N*fg%#}`Tv*xO$%R$z9xklg-o=I0?cH2huf4kqv+X@ySkvCig}L@V zF09|~jeygAX>x}q2zXfnOb~Ev0!$F_@&uS5;J5^sAm9}VFhRg86JUaX;}c+lfLA5J z1Ocy3fC&O#lK>M0yfy(Q2+$&>@9Ho?!0QuWf`B(9zytwrOn?aj-jo0n1e}ln69k-? z022hfIRPfPzx;&Oug3b6OOo@|_~qrthr8ZNb-MSVaxnp@TjWr(tMM5tty~V z#V&1#j6OJE-R3QZ(mu3_y0jrOdclBo8=i;iYnx_6823hGbl(B%HoF;0E7HE|(uT-r zcEGyLEw;W*!_vNLg{<;&?YGuvqI&|UZ>^`9X-l=jxGf_6*80r)zwoW~v^;I8E^UbP zTkA9HHomo<#;A?er45nM-geWObsLQmlx4I}ZLcnEh>Uo-yky{l?*UM?xO-C3uMEcjuGwU|~dO2;q=?KGyNdJ0yX5GeL zFQ@r89bwoI>0d9;tlRkO<#>dqBMciN{p;nKb(HyWz|@anjCs7O z$X)Xob1Ru@WR};z0AifCjk9_E3n19-oXulQfM9oUwj5&u1y6e&j4^?Nr&Yoi>-Rvx z(*og(^?RV;X>IVum=h>?S{8hOKCVa7e4-`C= z5x!Wz2kQBmxec^FzJaZepXOu!vwh6}&OGL?ta&_CNigQ$&#v0%Y*&r>_jf`2oL$g9 zXBV{38G+&VNonk8f`F3~V1j^C5@3RWw0jDOw1OabNfC&OlOMnTqxmnG8$Hu4s zNCO0oPmBFp`{+g|$EU^6Z{MmyG4y*_RiPNTJ)){m4BQ@BRVW5-kE$vZ1GfXK3iAwk z)@t4O$MkMbQ1Zo?=ef$;;h5(sw$eauYOk=uaNI=tP9?MMxV=*$gSBC}v?0=WDw%Z~ z?^MWh?H4X>i1eLGX5Gd+6^cQ-c1s%~eW#LHxA9JelF>%quu-Q%gia+>W{O`VymQ&+K837R%g=oZK==hRQEcv00D>jE z#O6K)AXqX6pHl2u0t%jdfG^f9fP&|j!xw!DQ1JX#_@Yk%>Uq7&DxbB~eAYYNXT9Hj z*88&0V*d|+#X9X%lmtHOX?C4%53#F!)-zm~ZVz=~rhT>xOWMO+SlS-p!m{=#7nZlr zbzw#Od>2->N4v19eW45Mwl8*Jb^B5TeBaxWS297s=?O4Fz!?cJLBQJ+V1j@%6JUaX zcO<|B0cRz^1Oa-%$yW(X5O8(^Oc3y{1ehS;-3c&3z0oN6@H&H<2n4FOQ#lXHo0Q4e@^Ck zBr~z3vFSPSe_l}iKYM3|W2y?z%?dA?|3==PwO&$9rrI@8XBK*fh5VoPx+(4GmzqT% z)l75)d}48a|NCurN)2l|!swTXjE*0$?)winluFlhgkeKu^zZ@eHhUUMJ#0F{upu(q zYQVb9GDE4F+Jju$5E=c#CYG6Xo9hgvwrUS@X+vbBYN2e&tlOMrC>25Vb6LRJy>`90X20uYr%1zgy+i{kcfCxT4y{7_mK8?65gGl&MirU$d;6N9 zG!*SyE^Ua6{5X)zy3HA8L))2KtewkTr*%xke(d9!wu|e%R!IhpA-)1J`8At1LiC0d~NJ1b=EgX?JH0nu*D3vpA1(jK+pSz%-Wk01x*vxw&&7@NdGDM%({(#%7Ruqr#rXn;{LbyIiW1@-`VE`S#bNQwpaDs+4Yeb z@KlDspUpqC`lciFU!%bd5e7GzvfCOAZtwvcsZPjsrDrm8x91~sStN7m&?_N~9uC)%^XLB0@Ncp-loo#oa=jz3ts~3^0!AGHhGNA1GO_I)m_YR_?D-S%7;R=4N5uwHw< z3$yKoF05%Ua$&B$#D(?S%Usx?{fG-2wjXn0qxKUnY}|gzg-zPexUgw^g$tXtpLb#N z_6sg-(O&JsmhG2Z*sA?90^|J;q{?Q3fO8XIf`AVuzyty3CBOs$A4-4;0?to>2?8!i zfC&OFOn?ajKAZp(1YDE=69inG022gUk^mC~T$%tA1YDK?69inI022g!BmpJ}_-F!5 z5b&`Cm>}Te2{1vxClX+SfKMjC1OcB)fC&OVod6RAd?o=V2>5IQOb~EI0!$F_xdfOX z;PVMELBN#>FhRf<5@3RWs}f)W?dD#34m39ZdCUiT-y%P=&QalKPEZA!^fSN9uhqP{ zs_^x!aB@|l_}tc8q%hBbwNs&GL57iU!! ziY;tsR~5RP!n>;q#TK^rRu#_3DZF0_^GxNg%32?&CR0r1K3G*KwhVr#s_={aFD{t> zM&?e5JpFJrnPP%{aaEz%igqaq6SKvSrs_J?US3V%=B)71s>0v0!pEx$+npP~;*(W{ zV#fOEszNbi{cKfXulz4QS5@e;!j)2(rdXg)G4UWWy3K&~NyNs6;*fOk zLuo@~^mn;CeLpu?xA~!=_$ZzJP}&d~eSW~Y&H0Anwlx3bvao|8U9&$J^3X`b=AUrG zxytDNri0_t*%1mO4~UF*9l=zM)BzHu4Uy5Gr^$oNy3LJ-;vRK~L}^20^qB$c zHs>0O$JB`sr45nM8wRY~Jl{~9s7{0^ZHSBx9I$S4A4Bo0I?bW9Au_tvfOVVo48_&z zjEB;O$msX#`E<-fux|4`L-D>%M;LicWTYNnHkoxBtu6}1Av15cEAw_cuR@QaY@V(- z2UTe9n$D}xyuDX-Y;;gg#^&v?!&eDMcQYm2deafc{Sg^$Ibi+%mKutu*C$m=8zQ5h z+X_!+-R6G`#rf;&s-+E)(Io@cZQfxh{Q;AAyE1vVeDLhB$-Cu)XGgz&(W^Q(dUQ@k zr(}9U6ZvolQ~I#oA7SJJkr7{0m})cY_qWJUI+~^<3>zZ-OCOna8-MBJQnMjsorLS? z!?q}t3Ev5LhN1LCO-C62g2?D41J?h=(+&No*${>ekL>W*tN6!kUgSY>13*wiTYty3I9)(yQsSprs9w(T4`C+q~6KIy!wUw6q~II%dGS z%~K8ioY@e@y%8C4_}x^SS-0^etShCULt?lr?7Upp?9a>nl}#CY$WxhczgL;gRr&`_ zM;P};Wb}an>-ToDq4cr11iLQ4C1@S1S9O=L>wX#VREF(epBjF<4`v zUt^7>ShE6(^ys+Yi|27b!JpCd#XBBA!Jpal#Tph+@bp8ZU#wvP1y7#?U%cZ16#Tn; zzIew2DERmGe6gkl6#V-YnOnVPwZBKr%2uCWi5RTO;rqFt;++nlNbiF^U#wXH1&>e1 zzIdktD0uVFaX-A-(ce!Z2KR&GCB5Pu51>d7CktQf(F6(}uL@u6(F6(}X9{2J(F6(} z#|dBT(F6(}&j?@a(F6(}F9^Ts?51fCCs6P>KlsgNH%mNF@Hjg7&1W}HJW%j>GWacK zw@5rt@c5(LUbdXwGUaz72JHn$M0#7zZk5sliuBB>MEPw!yLC!05rgu>caYvTv)iQf zfco@i=C;)u=eD-S`4L}@`>3zReT3CGU%%W(4v@cMJ?@)Ig7vs>+jYAAu3fbrcfAYK z?F}x>v_EiRNqe&kOWPkIuz+=STEZ|vz!wu>f`Bh2zytx;B)|j#UrvAt0=|*}69jxU z0VW9eS^`Y)-^jie4YTw2z1I0)KU37&NwH_?8@l(&wUaCJH#WajRVYp>{!Ue)c!m9Y zRfXae_U~5}ifx@YRu#UM--^Des&G*H$@(g6RpEbOuK07R(a)56%oV2=ouj-TzTb1I z4HL+19mAk7I%*>Qi>8_Nj@n-|r2upcLuo^#eyGW7MsT$0Kt-(_^{%+8Bp+K9DMQI3@CW=3BDME00mFZz!zf>py0_1_+ktK)br)u zrq8$!{j~egPvJw$ed52C6>jslcAaj2&lOL2ZE{H_2>5yeOc3xt2{6INd?%_-jrpvX zr3NgY^{XW76W01K^DGZ7IWN}3ej}|(&o=v-Q21R{;eWv=`~siwXQduKp;@GJ)hG5i ze$m+O|ZZ$F>={>r;igHxS*nYs)}3w}7iQXN7nZb3 zTv*yJb75J#!iDASDi>C?t6f;x&bqLwopWK`b^{kyw;LhQV6IEe!2|){NPr0fzL@|M z1biz2CJ6X;0!$F_odlR5;JXPhL4cN&{9QK_1YDm069jxe0VW8zAps@`xG@1H2>3w) zOb~EW0!$Eaa{^4@S$3$nucQkds)z+Ln9!VRm*{4e<7U*d;35V`Qf`)ZwS4&PL~<92sjd!uGG z9bt^kh>SKLu;%whGlo*x^qKI|hREorww#q&x4G6(>YqLqUfK{DT{K|b=Iw@3C7X^g z?v2Rkr32P&o?$4pwCM=LhREo_1J-TsWGEH4=?KGy$Y|pM>o!w{QkR>KFl>m7erO}! z%(~5&4W)WF9bwoI8F3Q8RGV41In7XNyv_nBZHT0^0D^TJKXsZ$ptAr<8zSi}fMDIG zKMTN6T1VU)k#rV7ux`_z1z;!*CTxhLvjBp1oBk{SLuo@{LnNIA5UktuX8{P+Sb=u6 zfaf`!1z?)~Jcm=K`?x1DTutP~Ga94L0#N98rLLa{U4N$Rmc~cW_;5Z(_JG{)(|Xif z=kYT@^yM@Tv3dLq5G*ZXY#aa(EOmb{4gdPQw@DXQ1GzwD86F87O!v zD10$~1`3{f316(?0R>MTgfG_cfP$yK!53?I=B+iTTK*`VvOwK}FV^tPStp))1YfM- znXgVfwZPW!cu&*bPV3jq5;0iAq2x)gSi=MA?{{WyR^zT&8+TpngAOf`A_0!$F_iv*Y;;Fk$7LBOvPV1j^O zC%^>S5{K-MjfcLSx>b#b4$fax*-Afl@*(&Md&Mkgo2tTF^V<*GRTYkXSfsE+RpIok zuwzx>jrk^bsw#XTr?5*^;o^Lgx2`H2mQ&cRs!)8k{dQG_T|N{)^Y$oAj4bCFhOE{5 z1bUD&)$XC>V;nNIXnpmaO9$f+?@uXF?R!_q^E|GjA6W;OiSBuzerhS@t1a)nI@i%9 zrk;uJ$Dr>pl+xC2_go$KiI z0nwce`btBoLE6-gx|XE4a%yQtyL$ua)KY4acCz=1T$x5^w7VQgeJM3c+t(FFUrL0& zG*k2Rr3Wj6?wI>h%3dBg_oV>QUr^Lyb6*M&EQKsK`|rA+bd#he-_cnT4|=u3fu zr>NkIz7!~U$_BpZOM!x?T;Pko6exHK0KVu;fr2OB;fuZ$D0p%jzUWJVdcORo<9EF8 z`nvaB*V1>DXI}0pE4r(DaHV_sO>){M2>5LROz?I1i8C(`NFGOi{DLG;wRhv5_EvX1 zcA)xIS>f&|EX+O8e=Kw#(68}L)a=4H9j5kB`liMDYV<*Vi%rLk(m=RU@3}hKJpxGe zo?C4?!l?H|sP~zgr{3$CuZD85cY)MZdb!>MMA?#>*j(=cQpv{obT@gqe%s6STa@dU zi($z9Wkb0>(5}<%gYBwe$UZJixBDVc;=fA;Y=Qv2r{l{fCJ6XL0!$F_#{`%l;7*10OSM2c*^VQ@;(-FqpiAevfBC|es@@ExfPSX*F4Uzs? zMP}W`pH+}wO-JZ9s`o^AR*@+)V3C!~YdXTvCPFL8lxwS%kdsYE=-QfT5uuf2%CyI4 zTJBfgt9)3V+X+8;tepTvJK@KTwG)6~`6Xg={{RpycP_TR;e%P>DOH8L=6~_Ds>0*4!XZ_Kcjuq^jH<#{vcjQNh2La_XIB+gof<#$u&P3_ z=i!K|Le){Pji3H4&6Md!;iqq^%w@i6YlGAno#>!2d@hmxK&s5T&-DYTs6;x~p|l~= zA4rv1xA6n1s8{+Zduc4!IZ)V-b`(Bzr(-FFj z`d%XRy_qrt`d->Y(-DR?5&GUtxwiUV8b{L+y0-dWBJ{nPGVNO5d!_v4%G~!-jnxC@ zF)Bdxk5pK(d5j7WELBr%?t1}(r4rJ&7IQP8;Hhx%Mc)e)Je3Q+n419wPep<+=4L>_ zQ)%FfxfxLKR1o-LZUz)Ql>xq(n*jw+!NV7GGoaupXZT{B6DW8}7QR^L1PY$AgfI5r z0`Ks7d5ZDW()``F}1J~sIwW0P|3_d;1Q9C(WC&)n~X)Q6~F z{X>$q4V`xqSho5{^0G-@SZ);pO{t%J-aN zxOu#6DBoAxb-I16T{YZ%Jpu(jlgifw0ZS5Kf`Fw7FhRhw1elI9`;)T{3d z>J@XjF9`Ers;_HH-K&-sJ&E*v1ERB5Uq;?H@Z+_uJ8aZ95TS3#lvhXf4dg`A5k}=D zLgmd=R9>>B=?J55AVTHMRJHO_zQ^k~ZIt^4Zhx%q0z}>AUdQS#K(O4K*xWY&1k1gM zE&B$bRP*QZyD(FCT{N@9)Qf)Sb^o{2{k@C2e~PTEitF=nzL;Txeh0tjLAs9B*XvRR zQhhC4)XDts2_IIkOlvdV`~y|wG$mftrTgffhCb?!Q!Tfk4RQ*j;D}IgnJNlyzPT&<|%HP~_>``M>`MdHP54^lT;m zpYxPkXgb2kQzGPPrWTN=D39eSz(k&|@jU&f=jlI&dHO!tSe~v-d1^vEPcN3jLV z{|9;cC-U@MCH|lDlv~gSK82B|M99-jEg(-(9?MgJi9FrZ^R!ui(c&GN7ftCh_6Fw# zvZ3euuwAFyi@DO_tx9=pf`D}sV1j_v2{57e7rb9L<}Y@+DA(;x*NfiieC~Ck9NwIi z^|8pRLh;(rMJVh&TrsbEoVDw}{!Cf&5T_{1vj#qg{_Bmxrdoc9zLTlYi&K3O5gs08 z%8HYRNBk^(A+yvb!YA)C<=Wal#c$NNF%`0XiYv7wqupl&4W}s99uC&Mtn~<~408HLdJtJ|QcsS=##Q{fr5^&uTyO z;ZzmW&lL6MZ~(9TAM(SC_gGMQRH`$c)IOaM~8 zu1x*R&Yr8QJy+Kq=IWKQv0R-^xoSc^Pj|dHx5c8L`8@yk{~%AbUZ6dKO8h_PDYu{x zhANCaB|@HNY5{qQ@>re%OyueAo~Ijlo~}=xQdgd+y2xKKIQpv0agW#9b-Mi@yJ}+a z4Hu@{Z@Dnje#eC+?e|<*+J4`KW$leFEN^c@z`L$VrDcMExdfOXVEqJ`AYg+8m>^)o z1ehRTqXd{BVB-XsAYhXOm>^)&1ehRTvjmvnZS$z%`tVzddQ_|re?`A;vK|%d!(Xc^ z6zjuZuPPMl!`D?6noFWz`DRsNn|xTzx9bWyh3{4s9*`BTuPSs|;fAV0vBLa=szTL? zt&I=+8&&tmO1o%p9Is!FmFc$@+4?7?)pUg3_@j*D@)zZ-T4rY5#@8|_`KBWb8zTK$W@g>S*D|RL zO-C3uMEbSN%({)QWl}$yjxcP9^z+rsx{c3QsWMGR=r$T75MjQWDKlU#lls$igrQA@ z`D&(ITWgtArluowZ4DHN;5sv9+QWeYb?bg=+q>p*0>wV&KLKJSKmm)*;{60l^n*nLxo)81ThfCQ$HXJbba12^2i}3}38e0tHXb!WV0qK*5uj z@WomtP|wfIX*M~#!qyV+;=Rje-n(o{@8W*+C*Hl3{mU^j~4#;)pLe&@n; z`v(_h+CRClr2UHvOWVJ>u&lksh2`x(U0Bin+l7_wI^)Q1ehRT>jan}V4DP(AYj`Bm>^)g1ehRT`vjOEV21>lAV8t%(WhpG ze^gUg=dwuQUsZ)IvVz`;s^t6uSz!u=iFs+nj7DZM*3R!-mM{c>~sM4lGV~ zT1I*)M>;qReUn*X+#8XRwnC1ves4O+QYbz|2l#MV*a1GS*&pEZvPfg)nki3Z;@%!- zI(Q-F0hfj4fot}8ut}t0dw|2G^}9G8sx`9FpKQMxeyr&TBM*p-zByn$4?b-uu1)*m z6!Jbg*U|e1M0ZZesH@v*9uTozU-U9+#0ztn)=)38bz z4!f)@KH0-dYxA7K_&r4W$zEpt-h8r$<5orHvapKmntesy*Y2%{Je7$CELYkP=_h-cbsL}T(PwB2UD#-{ zM})~Pwa=5|1l9$q!4 z#|*DeFA;Fmb@PFR3^IFY5PB9 zxAyZXjC&(8VkK*;&8*+s*9@fuI9SrI3piNvPWrGdCOTKv&J-NICMRQO%|?-yXWASx z)l!HW2XR@zI7pqRYx+27R}BFBxF<2pflB{*oo?)bx&Ne;)arBp2@pP^%yD(1{i!!S zI`D5~B>tm#&l4!pvizA@GvjA2vO?PX%R~%L(XpIa-d2)JhgOc1bF0!$EauLPJN;NA%^LBM?yV1j`ACcp#%dndpI z0ryLQ2?Fk)022f}AOR)_cwhodpe!GwDa4q+-Yt1W`Ri>q4-a_m+lRv4QP_L<3dmmTgu*?m3i>wJVRq|N?Y*iB zmoEv0`&1Pkw=5L)t}1AMbNUzeuPXd#Q7AmHs-TaKr4$}qRk*YXg?*|DXDkkdeX9x| z$T#`0s)B|B=^h?YRj7BC)U$>5mD(< zKy(jSBlNE}Q>KnK9bt4|L`L5ku-<)LVJOwM=?KGy$ml%-)@|NoC^fn12*ZZR=!gO9 zHjg!w%B_8~r45nM-3P4O@F_^`o;4dnem>XH>H*Q+0QxuUy{Y|8M~FJt(TxM5dm8A~ zhSCafr=xet=+U z24eG^A0SvN{9p_N6g-t1zIeV16g;&VzE}eQ3ZCizIbL20mIf`A7n zzytvgNq`A9f1G$<^q68ia^xn_|2&R+ofvN1l9ct0?W)2qACD9csw&ibu(g}-{S!y? zG$mj3VegSA81`W&nRnoqG##OL7HauKSRTxjd3}}#`B_az7}`Ww9?X<$Ylg#bY&t^M zma`y&v&fWb51j>l_TZgS?nX5x&u;*tKJnkhW?umiEdNbx_7wn8*A{C%WU;M>9O!lJ z_FmU^r>=S4KU;2{zoOzjQ%O+qo@LkRwzI3|9EZCw-5%+}O#2)cmbA}vVQKpU7nZfh zxUjr^kqax@m$2zW*UOc3zQ1ehS;&;*zu;8_VULBO*U zV1j@y0VW7IECD76I6MI+2sk1ECI~n(0VW7IDgh=4cuoRLa37)CrAn)@&5^g#9B}!} z5f4w^UUS)-l04NuLv?$y?^yYX=o${KD%>e6JiDs!;H+?1RpIEYa70z%nlA3)sH(!b zIfds|6~1<8r11Qz!p&LX=&Hi1!y<(jRu#UL@8QK&g^P0vFRdyp{$%`%W2*{x&kDy? z6<(PYURhPRC@Z|Gs<7l)aSyMlDxC40P1eJ;nb?a-Lt}JRfX$wKAc`vI3%a=_Nu~ZS>YX3g-f!+JF5!s z&-w7Ks>0z};XPG_J+s35stSM1_i#>C;h>ztxmAVPXGd9_S5;^~9SY}H6%Nb_7giMx zc~7KpQB~o@oWdnlh3DkbysWA)&j5IB)^KzNuC~4?^o#W^N{`cYgkeKu^s)i#HW~=21n7jCjxcP9 zj5Kc@W8Fr}q(bSJv{SvbAu`%zz`9LiC|#BIv6nVPMmnEXDQ4Df^Z_8D^j_M{UfK{D zT`*wX=52<)&TI(d_YfJqXu!J7!G^xUYzSE+<2u@BKy=rF?qTSgOr0?P1(DIF1J?h= zVna_f8^W+5GWxNt>1Nh#zG~=6Wm7UOZsk<`6?qH5jn2902*ZX*|8`nt-9{@2s-E=MO-C3uMEYZuGV3;e ztP)*#(-DRZk$x*uX5Gf$PJ5r(5QYtr{_V8Px{be`c8=K)h7FN^D^h0N#nQZ>MF}ZLYATkqga+Fl>nQZ>MF} zZT#)Di_C`5ZM6JEgypA9nE}gBmzXwTXcJ-iDO0Yk<)_O`o6xnj{6vK1r%ajlaQVsB z0++}qJ~*#cKSQQt>rVi&!gQ#!dHo3>*k?PN*Pj4_JNA!HLRt*&VQ9WO* zRRab8+@3Gis)2%ke$N+c)j+`?-Sfp-HBj&`?D=A?8YuV|_k6Kd4HW!Kd%jq!1`7Vz zo-fv_fr3A-=Zm#!px|HG^Tk>y{sON7rd#l6)1%FA;?>M_-;(>y{tmoTVy`ks%2h{U3b318$d?#BUf0D0{ zk9>W6kGwv9Ut1lg!`(~E5V|()XOsl%<5$>qy8XOewLbm@7pB{*U6^UVt znyNy5GQKu*@qbe#u2teO7jG7QUwOP0d0gxZ`jW7zmR!|)gj{%!@ZqXTdTor0zJ{&` z%pT{$*U+{1#x?tI&m9+O*uIk}qT)Thkq@FM7kzMBVGLA=^n<9(`as18Q52P4@8iPj zeRgkti@Gu#dvi^{>(NhbfYd{t%JBQtBOgRj*!sG*!nijg{U9o{es4aAqWty2 z?Xb}xiU@Kpk#@jQEr&-QLb{_OhvcHB3(+llAdugDL)zg1Ou_h#XwzJtQvYMNtT45)jM zwR@huXdStR8GuuS^ZfiHeu=(mtI+GK+5!>IKgyKXZk>O`&(hayOKl>& z_mU~s)_X7fMt#RtA@99#r5R+j)e%R#44Z+K!@;`W;`}4-MD-;<%La(r#D5l>=Mn(H z^6$jvb^#DIEkDaX!fV=ny{6rVn)bA!d;X!UsA)guN)3Bysy`+O(2A5lH#EV^>`?uV zvHtPZMSc3yL!vg^%soxir=r6BsH#w{E^E`@tV3P-xzaA`$~`yLCw|{YAru~}>OWIppSla&6g=Ou(U0B|(qnFFH zwPQuwxUjOFc41Y!#D#U+WiG64SGcfVyUK;xcC`y@+F2Lo+Bp~2Z#QsZgLWeqHf%R> zVWW047dCFUaAA{nD;G9xw?Uu|ADgPI2?Ac8022fpmjDw4ydnW62zX@zOb~E<0!$F_ zssxxI;MEB*LBMMgV1j_xCcp#%uS}T9 z1ehS;%?U6;z)1-(LBPogFhRg62{1vxTM}S`fKwA-f`GRszytxOCBOs$Z%cp)UT@!^ zrOYwk(p-`Isz1FXe9Ny@4JUoe7B3Bj-&PfF*f|t_UsZT?PT`MLg=4b9pQ{R&W`)02 z6@HQx{$5qs;AL@>|EMbLmKFY0Rd`%hSfpk#nNeLnGJ=M-kD3KwLB zrB#KCb7?NGD*Pa)u(GOf;l6Q`>sA#u$p2zJDa^B%YxdYkW=%Dj9kRmuRfX-gixf7j zD(seTWaIg7<}5r^D3FlTE9Bd`#VBu+&WmHv>`I$?VFNyo4XlG zd)HYDr45nMmIKypmKur+&>;z>4Uv&PtEm5zS+~(wc9N z83?5fk&{R6Sgx{W^&!=30Lgwlpc|3ECWZsQNc@Gv?Ep|l~= zKM>2T+xP=9oQ@7cP#9%Oq<m`Uhf} zbsK*mhPTp@2&D~?{()F#-Nqk?;lOkxLTN*!e;}4wxA6yJ_%xk}P}&gbABbhvZTx{4 zZcfJ=lr}{A2V$9Z8-E~%=hL|ar45n(fmmkU#vh2`47J9>Wnp_YU9;b-`Ab`4=^;;L zxKpt|n-6!Y;|&x>Js{FQ5X-FJn?Df4!|Hg0(uPR?KrFLv<7+uMT^(;w+7Rj2ax&{S zzLtX@)>;mi1#H#SI+JVqR?U7br-wY1i9EQ%#@~2y9gmOJPas!91DE$JPas!+{4`5nz`1#=Ukl6kchDzzf&#F zfb@#zUqF!_4IjRE{sj~~jU2vs{sj~~O*P*SPr>^A%83}<4-J#_isxZKksj?3zBqpY zD0o^PeDORCD0tc$eDORCsOM+qHrMl(&Fy*1u|CJ&&*%92GRH5!6SA|cnAY!V*Xi~) zcGa~0wg^m!PfznK69k-*022hfJpm>N&}&M*>|=ub7;S&zJ0V|B!%?jxZh24)fp^kB zo}6+#>>Z)7OI2a7&xOLRs|u$)AryA2D*P{uT^q)(cTnmvcAZ)@|93+8r8-qWVfc0; zy>HKK>D&47+TI^F^6fG88nQ(RA$xBXa8+EVFwcp8` z30FVgDlqx3PZRg*T>G88nQ--&nL4GQ9n`4Hb#P@TZ$?d*oxGHW_D=VTTzR6AQCHLx z4N673rcso`;EKb@s3{HxgVf!h=ziKf79{V+`~^U?d9rHEUjPJ4&W!mBfMCgpfxiF> zo*xfij0J&$=QqO_V?m(c`Kj>5SP-b^%hO0sbbs_X_eYP#AC=Ej_K_7XXkV_lmG`Cw zZ-M}=d3eWag7>Qv&r{|;-#1G6fDN{Y2Ko^0Y2tZG@%fR5Ru!tvi}G7&+tTw}J;7Gm zMcbO^c?!3v&kZY#sR$9et4u|A#r^7Y!=bI(M}*p!scLssd!E8SP$}mA3Lwgu1jXk5 z3LuqmJWn~z%lFA%zE2vK@1tcy`96j#<@^3roF)i3CjlnRQ@)26<$K7sQNEAjjwYU- ze(Y(Xa9~y8zb@Yy%9oP}it>G?+IHzX`R3kZr&?}NA5T??^Wln5$!K>dkbDZasxPLZ zs8Z!hsb;i$o}h|P89XB+<*_mah%zO)u`&giDARX(nLgdi^bpFleA@mL*-)lWv+Hzw z2v^GX1F0xY5O8h+Oc3zF1ejoTa^hM0^+j11%fwISPAA&(Q?87%eri?W-g%+<;HpBk zGN>%qroAtrK2VTFeR$8HKJd*3-#gAPX*$Aa@1yVwJZn>TmQr_U+fjEK8z*cqSo^-mxh&vaFD+iVX8*1i zZ7m>AW%xeTu7~RDxk{bG-|WiaZ~O5I*|c5s+SX!Qp-`NK3SQgN;cvaFW4msf0Z(PP z(pT|g)V+u1v621IiFclQbnu>%-*10ks&V}~MS{oHDRe}g)(NI(4Q|7ygR5(hHR*RKyqCb-I12T{Txa)`jWzI2UHxSGusIeU%GK+t;|TtbLse%iA}& zu%dmF3oF|bU0Btggg{k4Kh}S?1ehS;@&uS5K+mc?Q4<7wGyx_E_*eo=pnZIEIFH-t3w?`I8$I|Q(fW>2 zc1$+B6ZQ&)7gZG&KRy&*QdKxC&%$0-RX8>)yu7M#dRBNvRiT*29bZ)_W`eJ-Djc8k zWU75F3KRX`8Cl`=RfP{`g*R3eF3vf5LRI0KoWh%{3Uw#AHa>6}KJZi}9zJkt(JQqP zsT@zye;#F?D-+%Ipck1sHL2+cQRmtp#FdGTk2#NCVd~VY zrXxh1Ykv?|Cc1M`f265X%bJc5b*}wET$$+p4!WbMQ|FqF5OuEo^gRJF*FO-Jb38Xpm1e3U8E9&}MQ9(=E|ZAI>*sCr}LBY+qIQN6~-M*zW6 zo5sdR0Krmu#Fp!QK*3X6;EVY?Q1Da__+tJJ6g>3-zL>uQ1y2QlFP`N91y5na7teBl zf~R2Ni)T4N!BdX##j_ls;3+xy;#m$*@RSvN@hk_Z=V#{DRUf~u_3Z*As1G( z7r3yp{jdwG+KXLSx4qPb)$Qdjtk-_jh1vGwF05%kiNJv1}Tu2{1vxl?gCGz!wr=f`F?MV1j_F z6JUaXFDAeQ0bfdh2?DN3fC&P=oB$JiEcZfr^|86YFH(P|aYoTQo~~S;>|c+*Duxkn zuPVGfE4%}RiPea`caId_Sxw=xoWi@R3dI!mJynGt<`mvnRaks=+`~Clg*_e}3g=c8 zcF!rCS5??IE1X|dcuH2du&QuuR=B9Da9UQlq^j_#tZ-RX;ijzck*dPdFGfCmtg5he zR`^6!p*k2^o3YSx#zLP}+QnGtgL;QxI2L-_|D)|Zz%41NwLP5X%nUO_m>C$NTl#RjXE2S66onn`*IIJ$SA###a)fmkn4SU!QF#hOEzl zmw8Bx9yee;&jSp_w)Nn-LZ%AD{q~C`cL@wAB^xJv??p5B)*UoR@h>^xJv??p4_&0`2%~Hy`t3iN^*p*#Q8m+RnvO8? zkm#q3ne{yWJUkt#=?EhaiT-)`%z7Sw9-h9{bcB(IM8Ewfv!2Jd|Ipp^>FP2MiGKS} zW<8H@|Dgx!1J-3868-j{%z7T*{zIqKXROOSB>E|1W<8Hj8R@4@M;PZrqMtHm*7NxG zAG&VS5k?*o{gg4Yp2w$*^ya1`^gLQ>CBc+2QPV%Yb~B`ud`Uw*l!~+k^D}Y zCz&AN`UIFD;JXPhLBI_OFhO%?#}8+ry}X5t$2aKc#dtjP{ua(u&!H*|=S8A-UYRYO7bmahP$Q3=7YUqK zrowqq6M7D{)Fy%R%2YTnszuMChPIp+37l7^s?Lk{Jw@$Y>~Ep?ve4|i0K$GLtJv(j z0D`4#Vzci82$r&7`-SfU3fs?Xw%5AtpW?QEGPYmdPyT^&Vf#NK#?-%;?A8PUHzvRY zw}pxO$v-aa_>-RqEBroXnwa75dtE5}5QT|Fx~dhf$eeHyHuzH=yRgAy)i&jvko%2? z>S;}B=|N6~+;1etGBVoz8c4$$Mb$H$3S(F!fn{W>Vi}ZsaLxGwi)2ouK$42?x|ARW!Mxv?q zk2?7OT&EO4A4XLebxMLd&D1RF6y>ox1(>MQ+q_QS=XLsC>a_Gge^DMh(0>u*fqszc z)&v1ROn?dWrwRXaW2#@(^(7mJ{r;KqOw{#*^UadKRu%r&{%3XC;vOBlXp0&4vrxpQ zBlNbA6C!~V%9OPQPKfe09bvQ_30f{wMayZ1Z5^WT_X9t~4~(@RK=>gJIOc}{QtO5v zy2D%dgWkGl(z-rIRQ6B)TL+-2SJK^sIaAYZW3eV$(=JT6^IVwQuHwSHb|C_0@uOq~ zCJ4AW0VW9eaRN*b@RJ0XAmFD7FhRi25@3RWTM}Rbwl=YU^7-HH?Mt@y_aslX_fk6( zwpMg}J)Krjct?J>!BkaY&-|6~m8%K|z9;N`ZdKtwvcmkT!X__@BP^&YR69g(Q?s2H zu0fyRzERO9Uab2A<(SMptHbS93$>|d!W6opYY~M+f5Dwuv-Oc*a8tp0CQM=EA<D^P%z7Tb;HDY$OjwzRL_cTEtmp9yZdyjqghd{8a}vy1Gi4dL z;HH`MG+3!k0;iBE*OpVD&GZ~tXlu?&0;iBE(;i-MW8b%{9osxkQnh0~0U&$=l{n@T z0D`5u#O66GK(JJd*mBMa6g>3+UtDhk1<#qo7uVZB!E>(g#q~B&&zE~F?{c4YuKTQW z@LA=4tu>VkH?_>->2@7rT+pq_IhY{e=Ls-Dz-73ZZ07)BXZhVI_qd&X)a~rTp`C4_T-e!W7EiZZ5MyV*NLFNmfL|uS1OdNFfC+Uw zJGrp4;+v!!Q`QMHTKW1gqfM&{J7k5;s|xppoh`x6u#Upc&a2p&?+fHinvO8chXlr! zDK{S(8>iKDgrQ9WW6M++8|T<`gkfwXFt$upjSZhVur*3EW@`XpP5kX(B(rxWxY^|JSZ?9a~+5?HPv0o<(GC{!Y2{6IuaL1|c$F36(PgbD0 z&*A%q$=shZP57>NW`zexVTO%^_l4c)!-IOJO1}|y)66+vWgou(?Onq3Sd$d>#FIk& z6Y+L0FVXH%K>F4yrPk&_qS#%)b8s*iV>bt?d|TzQn4*o@4M12% z`D1ca{hP^pbZp0;HYaK=)W1En!0qHSZYP%w?PR21z)l`cjGg=@nS}`gewzRjW>^op zxv-OG?iY5l6Xl=qJumrgDC}HSsG11%HQTx8n%D=e8ul?YXNK!Bil_&76o#81ft$!w zxCzRu=XOF{Q!f&@iA+`9g!$~<)!u95_T~r1+8ZF+n*)yd34r7Y;(Ba}x9{h@eLqM0 zdK=xX-{P-WB-%{}ps|-*Jl*bLv98DVa$&mN+l9I96J40sKG}u&?LIE7((dQNg7yFx z7Pbeuu&6!Qg;m?9yRce&hzqN?&vIdn_AnO~w}-p1q&>ogrR`BJtl1vp!dmU~Tv*n= zz=gHjV_jIMJ>G?N+ZVa8Ui)Gf)^A^mfHB{ZY}W(}Rk6JUaXyAoi6fIla|1Ob0ZfC&QrngA07{8s`@5b(DIm>}Tq2{1vx z-3c&3z&!~tLBKx}V1j^uCcp#%|4M)f0`5(K2?G9|022hL@_o0f2?AD1fC&Po5@3RW zCIKc0SUCYE(D%>PefF`j>HOqIG&Ze&L%5X3s_`d%&WrMszK^RaT)9mgVfU)Sqw-Je zSyebLD?GlcP&{q?gsQ^1`3O&{D%_dR;we>y@8u)xTUD6;UYzFsRfSPjI1q)2QGU;? z@YJfpvS-ClJgutm!hD2hR24px6`omDc=bN<6Ngq6ZplY@c2(i>T$9g1VPcTl;>P%i zBdZEWXN9Ay3Lnl2&#fxlo)w;7RapO~C_`6OcxqNSuBx!!8gYadRu$f#kMRFcm}u@x zv%*WNN2m_g8h2J?yk3j(n$PGKGVxU7RnrloPTYS$I}_apKyR}xP57>+BSf8e^o;@0{TTF8L-Az#;AyW;JUV?qbk~Ev z)=>PKzIfWJ6OW!dAi7gP_cs(Tr%#^t>cpd621NHs&@Bzc=jjQ$UY&Tf>VW7j0R5XS zzCOp)38V5!jD9p=z4E_o=#iF(F!GQXojYJX&sz<}Pc|K4Pt9U+&l#9WwUwEGQ^)`aoRO-Ja5)rAQO zE=)3IhaFso`dXPf$dmJR3Ep(cqbE3@bqW+;+;%D!P9r)i+3^s1y7fSFTP0v6g=G%zIX={ zQ1Em?_~IQ*K*7`V;EQ)K0R>NAgD>8}1l058JDAq<>-I1Eb^F!Bb(xcti%a#_5OXOz zoi2z>5HL3ZCd{xd^P@C-(>2obz8`bJS5c;kDetLS;nh`z>Qrw<=6TDQ=bfTs7xTOs z)@3N7K7yw({3Hq7U#8qo%KcGZef}=A<^D+E{xVf{f3R~yB(Y_>T-%LgOQeHhK7usrH60~ooX5GI0z*zeN zMEi2UvGxU+Xy0wTeZS-F`|V--zDIdz-}e#IzN@6>G(o_E1eh>G`#w4~*?9kbHzk^A z-=hD%x2o{JZr^oi-w){6|8x6N#HJ&R_9a34W-8j3@-`h|OkYUQzL}bJ`|<;0?F$g? z%K^vQ7hs}&ckuST$=mnFVf&t~JhbmQ#I*0i)SM;=Sd;)0W@z7=iuNt~?^%>+qJ4}0 z`{Am>|GItGrG2?D_@CRCA~qdiv@Z$TH&fBRl(*>!qkT!xzL}bJ`|<;0?F$g?%K^vQ z7hs}&clP%EvA6Hdv~Rhe@?*+l?Ye4eMiVrJXS|!(`*-pWd)KOdy6{KgW-sEGC)%;v zOe?frvL5a9Ngcdsr`=Sxa=nE8uG&vY5%iRe!l-!?)O@CjnxAPuCCX!U4v=bfQQA+r ztJmt!y;g6fR;jP!RW|;Ldl8o@J00k9i>KQwEY`h<&$%$&Ugg5v_KPmeYp-@;e)|;{ zR%yTH!h-f17Z$eHy0ECd4uPJzT53TP1gxF_69lZ0022f(PJjslmL$Lg0ZS8Lf`By> zV1j_P5@3RWWeG4rz}g8gLBKi*FhRh&2{6HJ?=oG)j;(_~B-z{e9N^PB|4G{`e8^|2 z3g6v4toO53gD&UGV6K#!97f+=?Eha ziT=U8%z7Swa1ZNgI>N|9qJMBNv!2Hv+{2)njxh3&==Tw3*7Nv2LTpT*hb!}t==Tw3 z*7Nv2Ld;IzdMopg==Tw3*7JPDd>@vmkF=F}Nc8&%GwXSLA0fu6=Vc;~R)I*c=Ot5? zfeltzs-Bc7wMj52XUes8(S+IRNtw{rq?!anL#9l-wq|sS{LuD!%?R@v8y^5-OvaGL z#$W&{*Gh5%oz836@Pqr(?#MnJ*S!0^SI5m4|nCVa7G1Qa|C z2Vbli0R>Mx!53>rK*7^8@Wq-DQ1G+`e6eN()bn$f>XLKus`fO)UOxKX?xXLo8GXw= zK{qKEL+%fV85!40!;1+5)=z*5Gt5~}OO9`Ryt$DwP0V$Q@#gzgg{qfaku`-4@R2{( zu?rtL!C=q)=$9dyt@eWUAUdYHJGofLbxHDF8$pb3n0q zO#vXaaI7ipVE=CyabFu(nW3#+vMa$!OHZv^aiqhysP2-r9QCJ5Lh0VW98Gyx_E z*en4i2-rLUCJ5Lf0VW98G65zC*eU@g2xt>vg4fH-hV%0EeveqrS>dj#!mqQ!U!*X@8yn~UG^W=7#bG9T_U2jP@73QqPu)Y^XW$@S9SLY@ST3H60;$gNa9fRD-+dM7N6$ z*55Ow4fP4CUY&UKMN`j2yCts!xzJErR9~O!)rm)M9}wMo9R1~n(!ToeRIg4vI&466 zSE0VQp|rNPwGz$l+dQt>f15||-_&XLkRN6Ew#v~j%^zSd`c9R?n0u4xUsax2b91AM zEe|H7?^G$IUWxlxm1m;U3wGy@PBL{2N}s4gU4u6(}nr%G6Y7Pt&?LnLBKW%FhRh! z2{1vxb_p;+!2J_of`IK4V1j@LB)|j#4@`gwKA!9#`x;y4IVO2U&A$p~KTlT{TwX|8&5#no! z@wFK>U3@KVr{}+VMPhtyMqN>_aHkFR{1=MywZ!<^jGAK2*UnQFZ<2j2)h-W`ucZLO zzfiSe^R*N}u+*g3JpTmf~R)ii?s%z;Heb&!uJ9NPhG$l zz89$H$G-UPzVYAg8}H4&@o|&BaU&f9-?)jz)9q#!%QtS}!gRZp3v=78U6|Kyi-1df zQ1VSC2-qP3CJ15?})Tcj7thbCNTV|J(SMa4j3E zpp&!I%MJ^LjjIY9=C4a_T2;6{A7S&V!d|%yTUHfbkQLgh!pT`-o2tSL?rnvxfj7p# zJwS&q{M*dWVN;v>@}I((!;$FMPc!RtIA1@dg7sWpnTJHbewta&OK zv{};;y0&~834B_nOuOdOZdX5TvrnUH)$_AY0|>uBC5p{H4Io&mOKkRO0Krl*_>{t@ z0R>Mzz!yFZD0t2szVK;4!E>(gg--+O`SLmJ2@b#T+mL*IhY_|lmHV1?3@4->g!h*q~0d~QQX~mFlC*%%H8|Pl%(fn$EXM@( zNyeUu`}@bF)|T!3I?4J*7Qek**LcV44KT-=6-lAq@+&eY-IR9c3bknWN2zS(oRs_f z5A-7F<6Y8aPDMcm3`fdA#7r zV{HZyy@bP!^&x=NqH#arRBzF>y+xM|TXcWrp+yfQrbQo_8qfp*k4k_E-ghS2^arV# z#{KSolxV{5KK{1wyZSa`Md5$lrkm5IPt&oBzBR-BB8u2_gyAAd;36{>E|T bvdg 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%0Dg2TN zddsaub`ueA*&I%RFSuYvipJOGa1{~pmd)XABGy}qKsld=WxJr1jIYnaEl(nm@%34F zn27ZjoV&M#ZMsrj(cHZ&?8wB;-Mhl>Oq{pu4xeY@yk&Pdkcsn_J>hU7;w^i^@tntv z!EeK!PEzHko{ zH+Sz34>ECc_x|t~CT{NjK0M9D&E4OJ=b5;<`#_kso3*N&yAOn!n7Fz7V3?hWo4XH& z_}h)Rs&sSrp)fxaH+LTjZ)f7>?jOR^Ox)c4Ls)@{o4XH(HJG@$`*2vFhmg40{t1ulq5aNW^;Go#1sx!XZ6TO1$o;u+uY0#Orh6^pBwYr`I zcl(6Pnc!TBzom67{D2Al763>c4?kf-zXd?#OD1S}{GF`d!d*U zC+kFbl!^PDtP|l`B4Uk`;ga65);Jk%B_h^186G2It??kV=Tx}v*;s3w4jX|!7h2Xeh-H;!7{4 zBxT<+mT#8y%U0RfAxR}$Dk6J!Au7v|M2RWNl0sCHN}5Xc<@cQDyr0kM^Y3fUy`Sef z=iGDeId_@a5cxj#)m#f%#wqze_SIY~QAWOxeJ$5}C?ns;zLsk%%8a15WAxWZuIKs$ zWhRj5=U1=i%0ijzbZ*gQZsgL}GtwN*2v^WnoS_WM2><~>YALSzjP5fc_Gc(=1BUSB<2)?v?bZk zQVQ}BJ;{88B)3xzvWMh2OBIOz0>)1yd7Ro1{RNC)S<)c;=-Gp8k`$*o6kk#%_1+o}|Ur*zL}PET+cv-|{(4 zjl{o;mCtF(GET{NvGO_TEH=VBoQ-Cyc!YO22T(@Z^bRMR#YC8E3q9fQ)PE^4!UE1< z78_v!XEKY8u%M$?lysZQm%9o&^H^+z1)b$AHo`(q5{*s&J>wU0in7=`EacQ-F%gCo zVPR)7%19j+aXx0T5f*Wdve*cVIzJkTM_APPjm1V-)VaW7BP`}LejMp)Vz$YLW*bw(J8N0{o2XR#5cI+Iy! zgk_x5W~+FFWt^lb=GP^{GENB=6JZI8@GfT{%19mF?YzTcBfQ(mWHAxy>$uhRAi@gU&gKT-QD5{0oumx_ZtHh+Nmz zb6i>z)Z>O+*VT7&L*%-yzEc1q*L4k?;t;v6Yv7b+vAwRLQ*{RKIo|6UIxSi3k=xK2 z$YOfk-PG$EIo)43JyUvJn$ze_Ew*XcEx#?Bri-0Sq3Obh1#ME5$qCeytjV-- zia}&erma&3B5N{jo%e* zYcd_2|3PF;rla!|MAl?FI)hkjD|d1(%ua0OPEN{OrUhke>Eu*oF|B+bwesUm>ReMs zTDh|`^ldG+l{-6ASWGMHHJNm0rx9*ty(aTNXD>vzvR;$gsHKx~O zo^y6VbdBjXndh7@AW~z4oWl^Qu|dxF5E+dJJ7-wzXgt{Y6J=zi9pYR<85wDZI7y34 zjmetKP)9*zO=hT*7b0si!<<48S(6#&l!C~b%y6e1MAl@6J5?aECNsjR4UsjO5l$LJ z)?`LH%^|WTGty}Xku{l7P8W!*$&7M(Lu5^6w9_9VYcivqp%7V<8RLwF=-#5&WX3p? zSZr?@>oi}&H5TtJW1T)Mb`%}!Oky#;r4IF$4Cn09#NIN_8M!>Mw~TXUvevKROeoZ^p>ekRfzPKX-*v$+gqkNjZsF9!RgMU5IF{? zJMAITqh>f=u^;JCGn^+;M$X-@IRhYa?taY~29b03OeX^(=kA%#OAtACzwS(j$hrG< z=PihwyWemYLFC;1hO-JH=k7P14G=kZzv*N`xlXj2dqTX|&2`GM*j_i+Y06@H zT_fssZ#y;Cn*GSAKF=vaYn1;TqvkpK35@^#|CISo9Tw9Mo6&yeJBN(K|D)Ur=Qu?E zqudJTXGouh=3d)M=MTtek`(%lmCi+o{Fk>?j&3=9wIl!KZI$D_XGH$%+-fHeME>jC zYNsGX{_ETtrvya)>)aaW9*F$cxp$pP5WO<3<9XMq1(E+*w$^C~k^fn?)_DXX|50w8 z(*|;XU9+EcPC7*XquhF@Cq(|E+4X)LDQyHI;=bmo4bx3Y7Y_nliGYO!bY_nrKkc+Y(IwkK`%fm6eXns^~O zX%NX~r#|FulCdlgL-dIB3dt6y6-19n(^(#e$h*K>ohKmjq|;WXFN@7I(@~ofGtG2T zS!|}6P8y5JbQb;AHs>75NDtrcblZ}c>2_xbi|NnvX{(Q%Nk(|RWhu!HXBwnZSNcEK zEOS|GgdaN>OqqCFeC(ub)xTvU{Mf0;Vj^5k``PJ?LK%th6K6e(ZHrHwJuD_d{mk1g z=SL&)dF7|hZxC7E_|*9aBH#4>%((`UZ+d^`7N0wHwwe7%7JHqkEH;b1&TmpSB=hm@^l)-w+~RUvgr^jhU%r!HhN${cYT zLsp>75$7>TYZCp;z&B2N$N&=kTi-a{MCkcUUFN9sBt)LGI_eB$vHj;;XVyoYd%XXA z>uhAP{pVZf5R0k#{ZxnFIlDeitodWkH#@c1nm^{8XE8N@gtj{Fs838i>!-86C;8q< zf#|2RPO}t($Z>koDG8C|^rTas#b$BJSz^k>vpD7KKpE*jr<_wPCX3(cw|;QacO_== zqqCO9X7Qu*DT~SCZ`$f7=d6+VQ-WulY=}H1c*eN`k!RI@agukN+~rxdUz`AvK~EAU zZKW>)Ik!RdlY}8lQ5Ku&ug)e@CZ6f9&LNbMOn-GQu$W8>(0+b%mVBC+>F-W~&$QS~ ze|PRPOO;brqpr}Iur$Tkw)>&`o!Ad=~y&i^2i>7Pzt7Mn%3bJ~=NXOZnB z?J*Hb7THb-7L&!Dl*M1p5|okS{cq)E&wK_cLtFjhlr^Gsud6`vuTv4C zdtDWlnh@!A7o7$W>2(*K<}5agOU^D+CZ5G5=M>6F7MGl)y*eI~MJ@WR%g!hkdmg;v z>}RoATyf5@*tWRpB<(t zu@D)1bGws7F!ttgr$J=w&Ew97=&O|OR2wPoLWsUf>CLj5#kNjf_rjN4WAWC>>!$2C zH7~7`*R9B6TBjfF=Qg+bSBb52yF2!4Ew*)Tci&(!tuu(W%I7XOq8_Dxwva(`hr15a zl|+}h!_8!|5$1RE9ZZZczgv;ToF?X&h6R+oD?k1FxdM@T3WieUI zpe*im(+?-sb8&Yqi_N0A`zedbLXVjx+@nU+d-ctgLrM1(z&Nq5LHo{c5D2s`30c};reai^12<;%LxIhHHCnGhLQtGK%$GOku}zktZ|;Z@zk5IJ_Ly5B>3j5cSYYVH|` z{y(U?#;Uo0LiB3t7ZhQ2_Yy>}rXFOWe_usqC#o+Zx<(>-z*Uf+Nlvlkh3L8YFC;bG zLJ&PS|AVCz{w_|3=C4x*pXE<#er?E=wHXqRN^!(w|&UAO#qiM^$++myxjmbz{q7SmhG(taLv z_Z-(-*>h7pxAXUjy``S}EQ>uV>${VUs2>`dE6;}ROvv9Px^)`5Z$sqEFpb=IAdNel zGL77IEH;ZYx9rKpEYjRG7Mn$y+mpp)aX)3z*gcCf(&wAFwNE8x(Zp@dVzQ`CTRr4X zG@`Ecq3@xQG6>Q>2-)Pv+PcO9e+$x|$w zA$r|rAV~}NV~Ae28N#v`vc7nZq|qcT-LE0LNuFmp&SGna~cv{hU8xDi#UV2-4DB<1k> zUQFUAqC2?%LW+~mtjWU-2VtCKtM=fo@? zcMr1IvF>sAHx`qH?wOt4>qgYm1r)xCf+(lfic_xzGr&)wYmEGELuv{iTaf)SNPk?NVQl3PY8R^c0)az&B8Rag8 zbSBYdM!9PtJC2$CjCMbS93|0ZM!P#8EAPmWbc|YXjJpT&5y=lMUqSS-bCzVR`z=Ht zJLg$`gcPT({w2w9e}hyZxyJGjB%6Lc$2NKj%Do23Lu0vO$@Q!08;$bkNXkPp-i;t_ zNbX>{1Jb21{g(=o=iOqE!6cJ39saXQhx%wmp$inP^>?!$kZEUwWNu|5i>xUC=&UH|HupW;3a`LeVr zGu3?p@*RmTGu3?>vW5Orx!%t-_c_Qu5?yARI|?$RliAO7cLHPyi7qqUeHEhGnKCon z*CB;TbeS3MJV?psO^Gt>PLBID0YcL$5D`Pbc3|0LG@>+W?H zTl25GMK9IzBBjjB7R~8%LTsP@5@0sWLdS&u$ zx3CfQI>zw%ZYjtz5*^`u_g={LGA4@!ZWT!EE|bLqw+@TVVxhayl!^E7h3)~Ak#T;Z zo6Tafc$l(S&kKgKT!F~EV56ISo!cwEzPiy3ATlp_-@OeY^Md!?A`qDueBhRb$h_bK zw>(77Rv)@mA#%3*(5(y6>px>C!cA^th+hAh!15SG&mCSN+3dE5=()pmmTnMz%|DA| zi~A%*U-Qpn83@tW{O^!#b%#OpHUBD>aS(mY{~k%E`w~Q7^KW9A$zuEAHa8#DFI|(w z`{6dXB8xqmwz(}?Oe=px``PZcOro{L{~Yfhxr_B`!w5GZSK8p z9~PVGJ~vmc#7y_OC0J~x``r30CevdSbC#QpGLq>RZVxB1ExvF^u$Z>c|HbS}ce0WA ze^uM>&V*FzYW~yNes=+jjqreb*_4U*mIH1+SO1oc@PJ#D#YFfcMfjDQfie=|*Y5i) zwk^JPvsg@oztUC*-S3U?*G;oY4!LI_`s=2;%po_M#YTA8ZAyRpZ*Mv5_GGaU9(E_N zoJrQ>*hSjU5%&PfNQB?Gj!LYRBQ@?zUsGb$HzE%VLkX6Ydxz z@iXlA?nH>3VZV2$vDgStx@S$9c!Ve2TtQ+hpLA1MOoVwU!c*=bl#vL3a96O{2!C*Q zu$Tx7(pEpZH;kwWWz5yiS=R}<1=Z^$`V4#4%?*+N0r9JwA0qz);#apgWMZn>&u{MC zkT*&6etvT+LZ189l= zk3%++lw;}1Vr%uh+nrW|{@XLpyQ5fa&phwWWiho{iT3lSdzQWq|KE`|+ucgv?*H#d zo9%whVro@?k@YXvrLXzZZ^ggAana2Uk@Mh1w*W-WgO}Xm5IGNCa?3*G%N3X1iVztO zFS|7%G9F%W8%P<9hgaNY5E&1zx~(BH9$t0RS!|76b8Dm|*4Q<-EsL$OYwjQxQ)4x# z#;&`Q^Cs5V4Y%HHi8Xe^ZO>wAOn<-braR7v>NUvpjU3)fkijIn-E(*|AVr@reIuv$ z7NjhRE|b$+40+{Fv!7hvD#$DnT_%^e5mI`*xq5fJOh{!CUB>bDu-Mvgy$Q5d{@?!N zdJ9-=ZMfbJ7E>Gbs5U%rc|N_By)su`ZJOi#xBn=wHH)c@CbX6B4Kkv(jx!NP-Y7^G ziHEJWtY&WjTw@G>?}?v&a8tn#b$T zVl&O-Ww4k`^?%Y#@hTQb%rvjJn8l7idA&>)lW7my>NZc$ll75u0+|-`YC^J+X)&)M zM6NvV^qN6rMfy&!4Mb|AxYrpXwNc#b2??8-S}o!Ag%l*wwOYa(3~AZJ^s$oOXh;_l zU8bZr5i+%}*-t5N3S=pXE>p^T6VhO?X`RyEd`NQ=U8c0R9HPHcsmHohZyn?zjJ>Je zW{C9pGTz4!>GNg0y%71Ye0O!N!NYe++du=tmry(6l z^s^#0yg@9s=4*PhN+i~NO>ZNMt@)bXAr@2f%P5{&-sDn=HDBACS~{`jYkNysOwH@> z4c77Y7>WNsj(Xk!h&-2D&-)f4$6$T$2Z$Vl^}XL9Wga)jP6O|6NM#aT^9{V~EH=}I z-mKKbOdEO|S!|{ay+bS}(|0M;M&6_{iJ7K(*H~;HOY`#G#e3%Y#rw2XV=u!9&vW;a zwD2ZD^gQ=4%XElj+R~d1kxW~9iy$)3ZRM?m$oajMw*eyO_txH4h@9VBd%GYq&u!yn zL1doW#ybp=`(JIn6A-!o)z&)$(R0}2ltnx5JVei7e`L7?(eu+^N!ok2AbNhP|Mziw zPu(k{u}lGym^rCNpzY2dCOUBrcZcj6%sRj!t2grGkwC# zU@@5nlxYtymHxZHf3FjIdT+AWOnZ9ovY1Ts(pJ5^Jw|wrR)pk9?*K&4(Mqy>3)x7s zt+FJ2ydR_t$$c#6SZo$gc|Gq>%;G68gT-d?l(&GzWKoUw^M78!iiue~?LEz6vv}GY z&tkIBt9*UExklpufug^+1S0=|qQAEWBKH{wc<)2xKH~sy2aC;OpjU&ga{hb%8tAoU zu~`iC2CQENXc$ZN|W>U|3k5tzCu~|IpJ;7qK&?|V)d4r6oOZS*>1P$^=LGn>A z)@25HlUQtogT2$HOnk04*h`|jiT|C^5B5s1mdDOB*IZ%T^1YRD6cJxt;5k?ZzD?XDvt5`L*%aF7;hMhjc}}Y$drjkIM&NX8HsSL zmr`BFVHjYI-!WmLSD}U$8{tGRjm1Q$=bkTm!;Hk|o|C-{ zh@6`ydoMxc-1Mq99U|wZSG~6&GWVR~ErQ70bBebLB6H8F-Ucayx#v_b6Ow_oxM|)l zh|E2wc?Vc*jZODf*W`MR*VuG#4~so=r+a5vOpSG;8k^xI(KlKCTVtTO%Tg~)})#2ZYuZzy{%0OgYbdGl)MB06>R~;hlKG&-Uk?&Ez?L7pM?@_<)wS?&J zQ9nn&KF{k2(chyU&hkIV$!g{bcE0x%26&Yg6EbvA^f}y6&0`Gaq8}t-_ zo?k5VUV*G6(fe8G&1A7PzsTE2|5xw7W9B070E?~pMP4?Gsrd|wd9gRJUSiEJ@p{zP zVrzbhH-g2~yq@*H#}!=hI$q$aNB(#c6KAvxcHybjWM3?!+TLdXE$<*puZzbd& z5?$u3w*k_PuA20Ie)YCOo+Qy_e)V=i?xQ={y3B807Ni-8F7umr7&4>3+0XCZ3CJ1} zUFLW13}ozZy2_;*JLjE;%p&=b58ClX!ePp=$gLl;vf+p7%OO`^+Wd$l30k=I{dBgnJJ>o2c4WP3Za zpTE7fknc(Ke*X5lKz=V^%KYQ?g2W1%GXHq}A=9v*3*HdOGVJGqHx`lu_4BXyBBT`R z=U;CcWGU7qE_$;d+p#Wj(OU>9Osl)PO)q&XAmvGP%$L0PATQ7rkuG!D+X9(QqRU+N zK7l-zZT54;+Xv}MqRU+I4nZc-(=mEKSH0tqH6*&sRqtoWfV!s4HSZ6|3=&=Dns*WM zM=^6B_PTcya)U%)p?po&U zkDJ~-kOm#her|b{ARS2ber|cSAS<3R@g%8+kW3OCPm+2B@_8wOHbsf5DIpiSvs;kyRZk01-Jhd58;9irLr*=a2^f!4awHI=l zM8~7lLCF31EngjjJc{4))oDn%~YekodQ~^lN@#eQ;syO6!5?v;y%0j+If6lEcLXt2Z=2kT!?>%6CE01ab z*+ruFlSeg!WR5Vum7-chvPg896xA8>dt1|{c~uX{4H8`@uj&ig@tgUr+teV)X%b!L zHZ>ZuiCRau>Fw$Ti2gq+y3Flr3gkM@Df!eJkd%APZ{<_-A$1y<{oJ9JLDEU|e(q4~ zAVb!hGWpde$P5x)CcpX^l6BdXDWE=w94FCb3aCRY_H15I9csZX7{974sIpn?*}R}i zX{pPc;Z=xVKcfGZt0vQvtpB~LEUdcG{f7Tu+Z0wqSj^cxo3<*VHW*R8sZDi_l~h|H zFQAo6s$GyIdIC$ADW$R?rAc%arPN_a6O<{fPC)viOlfrnA}yGz&O@XHQ`IHN62wzR z-GY3Lc*-c%gX>4NM9;iSr9k?U=y>i@MOkdE-mMDuQ$l~zg_NZEx32j*Djjk^i7rz|^@6O!e7Uab2l*WH<+^GJq{#rPn;rD5wHgCy zO;U;FMabP)dI+mB)Uv}wF1((zu8X%wI1>~i7wMX zZGlX_-;`;nc0!hr=rRq}KF9-jcDIo_2x*OHcN?kWkQFGCrcOilqD-3l1M+20^IMJ8 zzmT&e`nMXZn~Sk;8YP|pvmG#1-?o2i-q$MM8_Z!@)y#rEE2>Hv%By>)lcH&fK) z{(39BdeB^bG*FA3?=)9OSWNHLD_xJOY$K`yov0Nz@i9`599`IggnvS}Grs zLZWM!mExQNZP3b5WVWC%d}I+S!{&uRn_M>uXu#*RZA9I&+XMf78BtUw4V+t6J=x_ zsiXRf#YWgssX@Hw_;Z7uR4F5BWMfl@omDx=%OtuEJF6-X`48jisy0Oa!+5$%W3gFu zQJJPpJc};sD9T7ZcTtyFOcqa37G2e-!HMo~S#(opSWG<+q^-IuHH7nu-v#cW zQXpBF`SwtSAadWcrz#1N`<^{jIf%XsJe>C2OI3#GyTD^v>af^Md#j_SOgz)x>H^A0 zroC0Zp*lj7=|tMklWG@>JudpF2Zre~Hq$<;C5y@QRodz)wZVvzES^O4g5-VRomAaZARh`I%lJF`QS8g5!g z?#vEVDG<3cJ5&{d$er0?sw712%nnoKAaZARxT*}1JF~-8ZHU~H8lf6Nd5!7^M!4(p%XU9Id=Di7hx<-N|A{wlS)Pk@(%) z3{@W@cW*P)!w|VMJ5IHN$er17DxJkzp>8q+Q zi^+5?Z8b%8d){O!qu(<1Bt%BPWojTKE!~{Em#blr)+BlqU9QGKLrN0^SDCI zfOMcUwVp4pRBu6glIXeTO0^jBJFTVZ>x5Nm6-4dNQ;SPuD3x| zfpjO)zqLWtfw=dXcs8muNGgdgvr#I zEX97dsFje-*v}TV0kXS<+0RzB6>^Y7?`Nyp1!;)=WU4I4hDrA&-#g-`cJ&L9XJrK2o00d}fo)3w+UV5i#7Vn%=ywACl-nh|yXdHN4`B%iCC zGx*n46OxN85#+^#CeyttA7mMc&UCLT2B|_TIr`|{r^-OmNc2&;Pu&NRkv~gShsemE zrRqWU{6Wv|(yxD^9)kQplJjFNEg@-mZs$wY5%L(G+xb%UWU=Gwe%0r-#9H02Ca~CA z-LICgm|6|!w+^VHuP4^(SLzmvt<|qo{x^8feC3&!w)$GNF~ZlzA-` zyZ`@3a$L=ad`2>mWjW+FCr8pyk`rnjIZeiNc;(bf7SO8IXnETeu2mn0vFYv5P3r2 zqPh%umBx8}fS>=UXC(>tHO}aQ09s%1^EtTuBdw< zc~Iu6ssbs7GFMd{$eS3|uc#4Wo@=rj1B*|ns1DQ%sbMGN>{PU1`BnMe8K|0qnF}waPh`zU}f6MjNT+>^2bv9)@ zKLzqFi7w;$g&>V^C8PY3koF|HjPlE~*rUn!FVEvW$47qO&o^I-J(_&KDvLRqPEyQ) z-*T}jBO`z4|MZR)do+dqbrv)7pP{WH|Cy!yTPkNwQ>z91;gGx}I>G|}c*uqtrc6Qq zWylT^U8bP_8sx#QIg&2Xo(uVNAk9c_uq=VdtgW!W8X~i{!v6b^nU9)lnVFB5nO#x;8;H#8iuorYGP5h@pM}WG?oK}&A~U-?{VNce*%kMbmzf%q znO$)|fXK|Qgnt`EW_Bg~A`qF`mGnzPWM)^=FVA9oLMi{ia{jG&PblS|W3fG5D7s3Vv(IcwA9e@H;~;KVbHApWg$Lg5GkU-xu;zC3Cmyet!_;PZE8%>wbSU zq}bPHKNbBKAhk(!JQe*Zko$2bqLTjxqyg?kRPyIT%082vREjdK>@R~fA*sN!j>Xn| z75~t?TpRJ4ui|I3*qX26r>xawOwHG%{Z#dLtz)xebZPCE*$zn2nh%#;H7kpoDW!s{W{|bw3i$?w;7L(~? zv{jm)X++7_KbrWvAoBH(CjJ)?{T11cwADlYVTk^UY*&_3EH;a#e#Z}VJT{A_{vZ~c zMN@w!i^-xF?dM@X`cQ9WvuNgbW3gE@^M|mQEcDv)BmOiass*iZ>K^r|KMSJ&_pk0z zkNOKCy>puL*JJ()$nzw+%wzsW7Mn#2zx<}eEL!+YS!@<9{5~uui@uaaOaC0oNUv+< z*W0Z3W3y=Gw`Va~JV#r#_6HhKr90$E8cEXD9|pOXWE{&lNGjc7(V4dMUxHL4(OIbPrYt6lN%UJC{9Py`S#(6Y?~3&I8$jf{A_M$~A@W_30e)+U zd{<BgU0g>;DJmWtNk?)E;;}3%9Z-ducLtkR?M?v(r!5g!@0GXaYN75Rq zvFH3(AuCBXu)G0zHD8XTEhK~dd5{GpJ6M)Mlks6N~K$L;Um|ITHHw z5Pukp?FmEtSuCa}d`7=D)IYjYZ)JPJF#nNVT5L}k=0Cw=dV)R|4EHA(QU6!pj4h-5 z$&jHW`iL9lzYh5t^NZ2`+mN3zzZmT=h1A0Heq;Q1A?@+J-xz-ri_LVb-*$Imrepnq zEH=}z{xlYo>6esghM)FnVy5H#4_R!cBkCD?D@w0sOz^WIuaM}~ zj0ye~$b}ka9r6V~`7@4C1vSk&J0w?i>yna%a-pcmy*ZmDFw#Huf_p;a?{)T_fNc>6E+5QEH zJc&BnzX6daQQz{NFE~Q=$~bf0dCSiYktb2-`1v7AGEA8{ehC(v>0Ce4l!^C^x&Bd< zk-jn4zszDX4Jp&N{ncM4W;)L=zF&*Ybe>oMHo~R8`ik2k9^q0ymBsd!rG6TViSRDk&oX}+%EJPnB%YVZ$ge>j=#$HzUFw8tVgZ(^FU-hYPDaG#b&X_pJvL$ zvsmM=Mj5H+HGUS0$)W;f@vh(UU}8P5^%t|)EY|v4SWFgGX{&X9mJy}TU$sfr`-dR< z{H4pR_fN6d2;cK-97?R`_x!djww~Yf2eFt48_<3>_&ZQW>UpF8FN=+EqaPjSJ@aa6 zQ`+i%|4t)n`xjYEggt1hkNk2+xmM%r{JZ?h5LxHn z<=2MD8vbs-5k%JTcl*sDvWEYu-xeZk_@DY+AacLpGrt!^?iYOK_lL+D{vLk_MAq>4 z_!%s=#y6pQV3pZjxJOpQH9x$pJQewWy$`}|eMwAdQk=kH`OH8z5_ z%JOd+iLc>*?R&>f9m*R1*M15_*6} z`?Vl?4SxYkBZ#cwAMqc7$Qu3;zb!=8@W1iXA+m=5jo*jG*6LBe=ZVBxJ?dw$*jhd6 zFJLjXx|-to)<5ulVy%AXFFu)AtKa#VET&dB&{oI%@uy53%G0xd`Y%J|>DfR1*C1tS z)kx3mvi&)b8dyil_Lo5VwKsFvzx>sZQ6%~t_m}@Zq(v`th4#0<4U$fxuj2mpKZU$d z-2B!*{+E!~Nc4XG@xOtLr)Q*fJQw_vkeMX9%mx1}MDASw>t{pa_a^)+5V;p{(NF%t z)P~#(xabFv|8+FKb;-XC(vL*{)+N7)Y*p9fe%UV#k$VA`{qm5%@x162zbeH4&Ftrj zUl$_x0a(B45zGBj^p$U(kJ!_MAWH57A%HO=B4fkuT^L2*yI> z3%Uh@NsuGYB_};XTNMnZLC%o0Vwnxm&u?@jDHJS(=;t@OvaDvYtz0-L|7T(=7Y>@T z*j6qa^kFfr+>7>8Bxw6rVk;L7mi?XB%0+`6ET)zF(pJTS^8c7t?uWj5cTg2F41M+P zpf03iPt%{v28|(oNpycM8$1RXbikCkCuk3OkwlldC+G%||ISt}coHICfhZRYg#40W zR^ILnhC!~A=>6OqjDs{jY<{bJ@DijQi7rz6m z_xpm45LxrQKgfj0n&IGTe(W$T}f=^D#4vBrj^I-q&o;fMI-Sw&uT#ph^%>53({C@gw=z&rc8Xa zsUB=X8M%h69vo#c5ssq>9|%&fCPr8z=)_`2n;OAD78Btl+Nx%-*GPONutD%OL{4w03>Cc)hhSqW?sRD{SEeIE*HK;(-k^GJ7EHLA*gB5{Z{E^kTj!Br9gArleb#FpoHwGbRx@Yn zM}v!ypt?CzKN`@Ta@voL@UbAB#jdVA77Rlf=|7JJvsg@oZ&QRVf}+W0KQfPN8FXW@ z5w;A5u$Ty!&{nO24MyVYQ5}M<5Lu7v5bT1;+tVF`EQq{4-7z=}(Q8)gXwRL36A-;- z^#RKnh^$#X9-N2Bn$_dMB@wJybq;PpWX-B`pmOL;Cn{O9N)J*XvSyVY6lJls+9fEM zledbudzYXpi*5HVL0cA6tJ^5%uEBy_iM84-c+SycYqeYOGK;BIy(-&1SZzefdQ^{K zBShAtdIZ}bvL4kl*bP~dVMgqp!IuzuGrCuB1R`%n_XvY^J?~ zO)MtUU6kpQL0>O1(>}pT7Mp3G;3A93bRTW?RFIJvMr+?7hPt0OKuz|&9F(BB> zVzSU@y@A1TBTAkyc_ugwkta-^39?yigwF;|gT#7%Ht5M>>-pJW0*i^z*-dvMfCrF^iEwGZvG@owU`cAl(R`Ps@;u z4thfL`Baw~9Smf#5snG=m@@GQ#{{QQMj{*&kz)42Q@We_AjeBKPd32QNe9p563dCX21r8Nsx? ziM2W-Sj}Qp@W?JdU*` zc{50b=yB|EmI@I0?#is78brRkGApRhVzZbXY%*oyy?1tS2xX-A&JHfHm@NKBzx7ry z@Q%bR<^-Rx*evD*-?5m!p;y1>1{aLPpT?XQT!+Yt$GpJF&$-7}zvl-rh^&6k4+^r_ zEEWXQOqqBV3xd@sBUvm6vRF(OeJG2CLCXS(Su6?`v)C*a1zT9`F}OI$GNQJvH1m`t z!6C?A5GI9(q3$C!(2$uyZ zg?P{0TlCy>c~HuTlKJV1pd3Wzrz?W0EH=WG!DLe=9^uMhIm$>Kt_=3Dm8Z;@;X{)EU|BwK>Z5P6GaYmiigGga~y$=1M! z$Xg_tL0*WwMUoj5hR9na+k#RMd5dIQa4$sG;Aks6p2X!Fw7Rg6J8bsbA`6zf4 zB5#rG2--p9Es`BUSBShJ@^R1`B5#O%91MWS8zMV{p|T%ZVbFbSXOIEu-Oa3_eG*K9 zj3&`#J_)8nzCmBz70ibGiN3lkSOi(w!1U+c!Ai)dBzix)gAEXQ^X1cED@5LW`83$Y zVtdqQ!Ny{Veg3oH0E_MOp9R@0rbo@9zOg6BS2D3jeIEQ$N{j7Lp9eQt>`}QlNGWal z##B7pvo9zJc?Zw->ay4f zzYN;4*wJr)(BFt!m~PtZt6&IZ1&OZbuY$3VkJC+Cd>y<9*+-(wd>u?rCQrC=IF-mAS7 z%!bUVX8P*oU?F4;iEib~!Ai)k@}|#U3EqPoAkk&61Y05Ur1#a}6No(NeKp8}$Wz?c zf`^7Lm2-w8SWGMHb%0#qTqE&T_QE9)X=N{51CbU~;rkG2 zK^1O?JlV-)>W7~~o*~hh`r!cAyj@i!oCT4$tBQmRA^Ohj{j^ola0Nu)nXSh19z@@ntwT~Q+yc>e zW*f460y&PS2<{B`L9+1_!JXkD$Wr;UAFBcvine zco9;YzTu|tqm>MALLMg3D~csU?*UWKr)!zxy;PV7a)m_yR;jQci|q-e!(BBJdqU~( z6pQT%rNg9}x{T=w4^!@`;gZ@~?8sIoe4wrt+Y`!!Em=%YXh~b$6*hX1e=9x*sTV#1 zkt@A=VOxkifm1(BhsYeHe%K2lcODyr{UCDZu|YTlB5#B>497s^jj)E{ix7DutWh`> zB5#B>3THv&E^u1703vsR)4~-Hc_XZGxE>;Jgf$Mg$X2)u+$7uyk-NZ6!hH~VBkZB@ zAVl5>dnh~(k-NZ6!_yGC3*0pP1F{Wodp#Wf3z0X%9u99p4=X|Bjj%_V1u9mDiS-0tzSUdM14iyZ+v zhO=1A2r!%W(GeWU+v<=pGJyG%<_+g`cq4 zEdCdM$70XjPlVTvsJ~B}EP92x9y56*{cJ|{USSL(>ukNlJ0P;o);qitB3}r3GQ0~S zUkG_JtjJt z^>o&k1hZ~9iuY}>@IEdUOA0EC8kzO|< zoB@$cM}%`A_v1;Gk>O%U4LqqbGF%Oj9zH7E2$3E>D%=KbEcSTM2wSq4 zn%_-zI4+FZo7Rza5V~ z$Pp@eYjswb0$EwrWI8)62-!@cGo2llgzW2NM%uT+dm!JD=rV7Gl_6`ZnElKNYsr2{ zbeTC}BZ#~qJ2!j;B5%mf4ckIw-t=~u4v~4&+hH$=ydgU;><5uIWaouLAaArVGwAu@ z7|3E09nbvmMabngrp$tHD#U4P$}9+HL1d1$FkAqUIoiT-1w`gni^BB~nOiLiw?Jf$ zwm94gkvZDpa34hGdP~BC5Si;O36Dc6RxoYxPIwwpmqh3FPWT6;7oIs;8vY9zhG$Ne zhBqPd#_qDv?PU6fys^71%mZ09$h7J5umEH$iT;hKlRLh zR)#epn@RM3R)%RT_GnrarlfN`@o{WbSf0fmO{>D@EaqrBL&wGHaA0@6l^u=OggJX? zv7_;tuqcZ;n)H9&eK+i9BtB<+KO78^Iph1`7>M-D55kEM>6ssdQz6nbKMdc5NYDH* zTmX?CwJBTUz?co6yQ}Y*StB=B``tWZl zdH(Rr@EM3afB0oM0`krw(|`7d;~^iC=>D@mdz>kJSAo33Q z(J&RV2-lF`hUFofNOV1a8&-onPfwlcdG~i=UC0~~UFN&638dap6VI{mF-RK{9nZ0_ z17v9%v!CN(H^>JhdOyd*J}kCpo(ShY&6&o>gcIQ=7TYsVghyFS&n)&?QquR~f&qFf zJ0_eAKY2!r9TQH5-?5mUsek=cc+N=t>y$r)7a;O=${)g{XU(4Fo%A2Wjx6>X;Ky(f z%E;B%kKs%f6JaVv_)~ZqW#k&*bXe%Q#0XD^6r6a%MnxdUN%U{s8Kpv6 zcQ)^66pzY7o+Qy@X7Q*R>Lq*T-ma*1RJOCJ_H_Lhz|jo?h@5@RU@;@x1lsDZsPK!XR^{pI`=U}1nOEKy-3yWb+H-$Y1tR~o=l-Y;MDA!* zjM5--N26l&C`7*hQz>c(k(pGbs4GNfQkA3L5Sd9;js`$v&7n#(6e4R5RiX@tTyF#m8(TdSZwQ5k4{fYY@O;+(o3f1<-AipD#2n}XByS> z1JTi!O&K}w)QEn6MT>2n8c~kPyk~wA<4xMCW|V3~Ro`#E)lerY4{1cA`&gZ*8l+nR z(^u<8bs^7^=q&0+O(62smj|QAAoA6h2cwQGHq(01Wm6{J59>wwUQNujUR0IEWV)DQ zt{;_{l9*|OXfcb;v_X`~V*24q+NxpHZYt*C zWbV)=8VixRLz`$4MCJ}{qiGPCJG6~vLuBsIE?NkYxkI~XB}C>9?W6Y~GIwYnZH36( zp+ocuMCJ}1qAZBa9XdvbAToF87@dH~Y_wDKGel;ioucy)nT5LJwOLPxpAV$b8QDsO5t>ozY?_Hx> zkeMWUr0p6tf?UXNdT+Pr5y&kP{af9lwk)=1c8@YJhClqVyY2=SccT>mmA$r@vXYK;&(v0ntu~ zyv;Nq+6R%hnFdA&A@VlU!00$c-e!6xIt`JxnVyOMfXLfS&qn`3PGV0O9;LF_o-jO0V=+D93bogW zsOQ^>Jz-?@&Ah~(FfuyNVtPW-9(ukvQu9q6-d8(Ek|G%sr9f(tJ3BxW%_TFYYl^Z4jf7L!H6 z<+Pp|T{RM4NuCttSZMN+GybF~gvk3}FGaUQrIMEr~vIUydq3 zenxG)5>HGvGpx7Q{|Em>@hy&9EY#4*Qf?A53#i*5H;qdqLA z#)?vnO^GHfPOP!1(F04g*czJ}wPZ0hR+_e&7M(Jpq&DV7XCYD>^P;~X@;2Q3=n6#M zhMOPdc*oSUybZS?3Lx?}+=A$Kh+K~?jEX>{brwdckh`+Yn7Jq_52;9^YkpBw4I*!- zEsp9!XYbr zmPW%Nzhs!+vMd@0xlW?XEQ?--$QyjiqZtr+gKv2>2O@9qt%w#w4}svRs!jy{;PdpEXg^ zDlPWP{N3o_YAv?cy&L_;VtSpv&$u?qwT6F7-A~_m(P!cHQ3QDqUwv60-2ss+;rF6q z5V;b5FDlDov)B+VFlFLdY=|;ZMn;v zTKpjT*NA%Zi0KB>J$nXOT7$Yv5NBP#7OrVk5 z!e$iVuIK>D$c$rmArfI$G?T?f_(gQi zl!-_9MWo(0zb+Ae5tU^z5q6{qzl?^VjMU-&Xbp>vaDTLm#YEVRwmJ}7uZ{b&6lJlQ9*H)YGVx50 zM2ApDGCdMqU@@5vru}>qE%`99EsjP7Hfgb$9*yo}v2F2fRNqKE)9<3D5Xtnrs4a_) z@L06kl!-@pEZT!I65+AvEQ^V76h(MEsV&>H?9gi}O)$h+JL#8TE(A)y1FDP>5VzWJhBm za&?g%O@fpfXnN*f(KJXU65TWZie^J{jyLC~zoUha+evhpzoV6qprP5%Khb-TJ4tkz zf1<6Bw{gvXA^HTe4%hq_qAb}D);Io*4nc}yedFKg1VpY zLAF&k>j{NpDT zJ+oNs1SE|_|5mZs87V_gI_WE`J7eb|ZSd^Vov}-h71YNruB0{L*e%Fjl3Oh56Vs-H zC{tagL@Wg|jYO9z5i11w5^IblV?7KS%m+~nHp;gS&RS6nHuW?8Ai{~>;068^@6-cqW4oK)*tfHAX7hg z#fCuMBGK{O6&nkgioSYx>_y0G^wqm#(;(f3nEjNE&4LUj(fcVITL?K^)s(p>wgTef zJa|v+JxK2orcAlm7RYE4y`OTiPaqASHf8RO?Sni)qRZSHJH%o~fby~Q&$tES<9zwp zFcv!kl#k6~F(be!>W39#o4(Ln+3WfHVzs~0Vn=}cVr^N>2=EJSb$@K5k@&l}Rb!bD zdH1$zY&YcFN#>1}YOyaMH%WBsREr&fG@|2O_m=9h?;($q=uE4}eu2n0ejkYa36XF7 zJ`lSMIl9J-5;bB;Uz`4Xo<#pvjabBDYpiDMvMCd&cwir^Cq&CZHh+I)W7TXAs z^ZR45ZIJpnE?UHPLt5jwXc7AoBKJ62#*RSb9!JaANr*fT*(&x6M4pFi70ZUaG%Go& zAw}3ab{R5{q$x}CHzuz`W0I4;*qW5oCgwx_Avwr$8|3%|`T`+s)izcba*?DROKHeG zbCQ$NN!rEkg)}62f~6|tuh)~4o+4=)9%wvw!4c?(j0QgYIVBQHDrB_i=I$V(6L8Nz(-nsZ7Tm=;crAPndS8F|K@5o-Z? zOd?}u#M(nv;jVjTtUKg8+;z{4^@1$PtBy4*Hb}>i$o9*|CX`5hOBZ zc5DVj|F8X=*aC?DU;8<+6_A8{>R5AQ8z9+9mKSIWk$e4MtJ&=dE z*P0(Y46*TSaDMDGq-Z;}p9Qf?kTN84KMP_vAp@GJ8ZM08hm0hVF$-hQAo@SP7sb+C zQlmxx$M>R`137XlArkwQ-nEZqgq$YvSaLy*)llvEDwZE|l|&xvt5|VJ>Ltc*>EjKMwIs@QzUV%)Q>iYuaDh>P)t-&943G{aGG=2e zCnO1ZCB^bVjv%k3STV?wqN?9F#a@GKBa!>r6srQ+{DErE*ReW~!z421>sTX*en;bf zvG*YQ9gY9R+CpxfSNqu<>k4`9g4)mK*r$-k7>D1)20)yGsy*MtMzWZz!s+7s z)nQ94)eR{>$KMy;63fG)t`3>$v$HkU?5>K@SBKtJ$hD2uu}@=h~iJa%KBX$|my@jgkPqCYjL=suCpJERnM`;BExu2h7&mcERiESs^Om4>?h&M?~Sc~ z8m|1_*bWv|`MoqBdtdCblBizw z#@NwV5f+uH{5|DZtd^4K#?k82{d=q-MTyia0MU)O(Qc_I3LUH^?0f#`RI{)?4{=y!$wi&cc^|9*WGtEpp#tBO5} zHH7H@etjHk2GRfh`Z)GJMF02elUOH+{_oc(v5z4so2gIS(^y}K{_oePvCkp;zh9rl z#z6Fczdnmif$0B!jaaiG`oCWz)>jby->(VQYKZ>t*97Zpi2m=_6xMeT{ok)Ctep_O z!c0o*H;7(gCZ%;8qW>Q@m30oH{~tD$bq%8bA2zl1H$?wGY-;O2h+g&OIV(kKH4^ly zFV9)&Ao@RK(^wuv|A%ZED=S2=coVhqK=g_?QL8XSuXvNzDh1Ii-lVlEK=gmnK5x~4 z=>MX9-f95R|3#b5dK;qui#DCr8lq<)zhHHQ=o!c_SRX<3$~iHs4@9q=6SIauK6p)? zjV)_5q&JEDbX(RJknxDItyz%8h_S835WP~3W37Vdm1-Po6GX4lBdl*BdX*kw?P4)! z3D;_ymisGymT;{^7IRj2t@$kKEb$3_-aV_MEw?h~I^R0!N-<{%-@3!1&Jyxh*TBl= zsj;DFlx4E=LiCKXOjZ$yUhyWgRT`pKyvb};glzp#oinpoH6iCnWL2|R4I#tn4G8&- zBdgU6GL1yWWVPC|m}+FRa{A$FWV6b#m}+FRnzN{C^rdQKx2grPm;%-?h@8PCk5$kb2az+lWK2P8Dn!oCk}-v>xez%! zOU4wkmO|t#FBwzVS__f0yktyaYcq?fd=cw-hH&MJSa(@W<%?K;Mj4|jKa*AV#XnLx%92+I9`H&nWa%_~amP7Omz>?N_h@Jsh(n@AA zS(LI$W(j9e%4*1BvM6QsU{P5tpe#yTcM+qnxvyF^vxc*H)oRJ2vRFo2m9cs&;nhEG z(_Pc+Rw6{M{&9_E6hyAbv4OTKYfaKIB%4`gvzRQ(S$?)~7Uis>EGCO`Rznt*#Wvbc zd21J9bQTq?EZM_ZRIrM(s4V2OrixZ$CGnLjs#wh-`b=BJY6rCcpD4a?6dw=!qHn$`#w zGwNzub6HfTdugj$)@CKq2l>^vfI8N8h)>^un$4oJI8E)TZ%xb{&f*O#<%?2G7H?QtSyUDmX{!d-A|*WUH1%$J z!fCC9$a$yfSdt)e-lqOKIMKoSnVNlg-;pN!TJ!=`~&sb>1g$WbRm&39j!zbGom_K zZC?tHs7_WQiy2X!tobZzL=~d`>TH$FA0AO%tSbe=BdUuPDad=~w+TwnR$Z+mB~hK} zKr0!dGaYFC1X+$}1%s@;kga%THOM*&sd6VF(vbF?Xq|yHAbF4F3S=A3B!jJ6kOMfA z47MIZW}xyztVkhlb95~#Kg3E4(Px{_EdkMIo6oJxkW%R7p;m4kgI*qL6@<*aq3J2swzDan@GIB@(%xan=sVhojZq;CO2fq#ucl8E+kdd^AeM zOt4Nv29d~^3D#8>^C_5U^>~H*J$`RI(HhHQJ_Qr4RV?aL(1FI-B&%Zyxs|y(Ot!X` zl48!QldXd+>bxrNjlZy-D2aaxrdg>=t5K&v1=B1GqQ4zax6(uOx8vzn4oE+Y-Wk@* zkkJ^uGpwQzJ$h$aWgvR=&a|qrm}<+sacWT#Y%_ z|5!{l=2-h!R5d=Ot>#)+l|<#7_5mdGt=kYer~Px5e<5p+s4=#{N_b6G>{k-mrwgnX zSWFfRt)VI=-lq$#`H0a^MHX7ySyUFI=~#=ba<7N8SZqyTFb%ry&7xX3iCVbKT89{Y_qE)*#9~^w z+3*@WHEK#XjNiSSlB^ww(RJQrWvD3kW3t#}6=hLb$n_<@wgxMS zc1NARwMIeupw8b~lOeh1x&`s@3-6ECLl#r{9ahH5;mYr@ zO0t;B@30!PsLC&)%Ku~?uM!?VKU=%2hAaQGb)H34el=~i(@Is1kHxFse@*hM^#VlB z;7Vo*AbJMZZYvu^&*0i^y#&!S<@Q)bAbO_U9;*zC$#k!ESjEIYDSNHkh|!;vy_Qp5 zwoqmIBeiFrwVlOWL4LDJ)Cgz#n^lKJWh%c(?YFuriO=LYWc7sTnLLNA0g(P!75T6= z4Dtn5MLukehaAW6L`STtkiYRe(GhDti^=q;Rjwx2IiBfJs~L;w)1y{z7M1C*l<6_6 zP%XKY$@I82kHvhNj$2=|s7w#gR=->Ol|+kWOc6Ola?&~usZDZ`y&ku#bj~X>RCIS#c69Ii^<}&wT?w)ah;BJ#%fz9oW)sdCyUAAtaXM(Wg*XO z=d6cHqFpkotHXIKQkRb&O(c=$-t$&k$dzs?=7J?4&q!p<1uH9y$>O3lMa9JX;-a+< zF?!TpwDz;8EbdSim#oJ1!dYClma>>EE?e7KR2KizR#&W_>Z>-7zpPrA!rlv+Pa<2G z!afQanpef7w9i1kB#|*G?JJP<_@y|NeG8HgzZ9pkA3|m$Cbb=TLmhn+Vp7{_Ayx28 z=ySG!G{-NY&)JzF!|`k|jh!2!pADw53qoe)R&9>jB_JC}WSgUQImrH$>gt)+t_HbC zB4g6p^&tZasQo-|H-StgkulHPEg|b)Rx#=9_K@8qGA5n?iPZ8YDWNaO{(7o-(Q z5tc;A*j_X$tSveH(zy#n$hNiCL* zkb=GGn>dMMZ-rDOX~MDtBEOqAClU4@i2QE;0m~6cmA7an7>R42hO{I3kmWMuliyW+ zJo_eOJc+E2XFq^EJEUTK`xzwHVHM-s(FSU?G%BcK0^5P~Ad&kC>`ai|2USdZI~U|H z5*d@;E&#bqztPKYKpE`fkO-bFXRymc?&Vi88SSbNAN`)ut_S%KvyU>_jUicZHqK6R=~&tA8_nca=B%E>Zq;0hIg{kDKVvcH!<_a+CDCv4 zsZ4X*(;>S^WaV?)3m}y--{wVoIiwNh+q`Hev6w9K*o9hzv&duDVli3du{*M;EJjln zdF>mB(RX?;*%e!cvv|pF%3`v3+3ukv{@-5t?cNYQcP_s@7?K)U6tG7@1hOb#Phl}x z6trJx70#ldosY$2QP8f%qOzDoSroGOAVz0V*v`>9oJC=~G>gfih}}?0yf2E{%^m@JChH&je~L>0HA@5}a>EQ;ItSX36%DT@;JD#Yk4O4`p@ z%!n#!r~iQK!%vpv6}FUJR7t!qUbV|WbYHw`SBB`mC}Y=#=)NdpH)b(eyk_rFG4U*3 zv#%mXUtwRfqitk+R2K6ni`VV3Ear1j);`N(vM6icXHk72$9y?E+LrT*_Q(BLdE0?Z z!u?ozJ1dK6VFkOViix+df;|y2x`h?&bu6ldOQ?kv?MOS-7rM@s>{2YIg_Z1jEUJa8 zX{*ZiuS()|u5TZN=sMT8PeOE^->@%0be-R@Z$R|wC=Kkp5WPA|1N#Z&3w(AO+Ns;C z`pm~?r=e{@^lB1s+UX&BHHkOv9FW!6&s+A(knPydTXs>1UL~WET?V38$!KI(hGfHj z8r!uYuV6oo?YAIJux4Wu`&~$Dtl8MaZUZ@l{WP_^K>omfn%X@f`daX|-5;W_1#jEK zAnmZ9X7)J9N7zp@dpe65E$`UPJ8})i2i;oL$1BT(vsp~0o$Sqs z(V2F#kF%&ucT=XF?Xf+=nRcq_6!uBq*mU-_QO7@*;_>d_Vh7$XE1ayA18QzkLU?mZSp9 zBgpF9DI(QL2G}V-=K4gplGJ5+0b*sPU-3u=+CC&JNi&vgkizt>trf{2J1?XRNjsLJ zEap?0Xm9?6j}`w^CfbKt%%?KZzRRL|xhw5wu$}X>a4!$BKkp^Q^zsmUHjC=zPiU*p z?fXiivhwn+u`%{jh^)MPYix|2rnkyHGyT>tW5(Jx|^ZJK-=SzDti|QTu{BWwBc7UpUEByX7#}<&D`2A~+of)Fn zhMH^VhUm4S=Gp}zdIrusy97kfz?o;4gXs06=G)aEdi|*Rc74dO4C?c>z-|JWMj}67 z3+$GVUi4j0p8Xcu?IE9&$e4xphmZ*?Rm>v07i2z(j9FwSvY5&*w&xEFSAMab%wj6P z*gnOgD!+y*|CQZ3F?sg^&0S&7fy`*GvRG+< z1zAlZvsh`bf&5rP#jLWwh8!l5F{|wDEGE;{cJm?OOjp~zSxly@?ddEk(@m7=8oS=- z;Y`=s+gQvQV6A71(LRM3eV>_Ri(%ouNV4;>pf6~vO?DL}(RTD*SbmoOXV-yzLLxt> z|FauGj!@-g%x3#N$VCzvv)OLTVzT(gKBZ#fXWDPDdU`vQxp^H%#m7L|qkR+4P{Be-Jm5%ry&6{1JfcXnRL;7`?P*=84pj3<$!Wt&}w z#bmMFUZ-N>S!}oWAVz1g-M+!1viO^__}=a@Qntrr@q_&%i^<{#`vi;1;vsGIqy1P( zv?^V@Wu1SvQ;kAiB(lyw+c8L!QR-LMopu0eLn5=-X=jJLgKsyx?3W;I@$F`pU6jRS z`is3s#l$oH#lDIdo#`)jbhPQORQu@3zrC5oWV+ifI7Y^pOn2K=SX8FzXsbPTHzm=| z%jy4;NcP*GLWYs#Vi^c&R*U{GiR6Gi9MXlP2+IV>n=9z)9LYg@8l*i*S(f>btF-4T zB!}!}kjEsoSdv&wH4fW7#&YH3)i`XAWig+@!}cl`)$a{xKS%7uadInDjia_VK3t8X zb^#Vu4f#9uF}sP9sJ?=nv|B**738Gd9-^;Ar|j+!eI+_&_ky%5q(=B@dl2Mf5;-h5p%|#2zeVZXYAQ5rW$AMW)s5IIBWN0G1WM0PhnBjXiC*MXZN2NuErm>Jt~7E_IT zcEc~j)wpMOWii#bXOCr3)o4rAxNrBI8m`6zJI%CkH6Ga6Sxhw^+O?I$tMS-=6QZl} z*nStHtMSDC0HUk$#O?yo)p%-u0@2lYYWIieYCN-tLUc8r*%MhzH6l*E>EUWboQ^D} z8WCqCi>gK!sz!p-V@9|dDV&ru!_`RPWM)y-_?Wgz>6BCwz1cb;GL$5>Qx5WoWCBZd zi2i=@oKqj7zh6A(G-EMYq;dAEnE2T*jdKGr`dX02d101pp~_+w9V_Y#Wie;Jw9YXW zb1g{g++bqym$p{%rBENgaoLmrjmm=?bEhj%j-lfPho8=UT zGji2Qx$0Lx>D zoO^kkB(sxho~ogodwGT>29fhBFOg(%0*IVfd7ULYM9$B=Lz2~b2_olbK4dA%Vk(x+ zapv=};uXv06k;(WJeyOGMOEw>?I*i4azVIaIh?u+rI?E4a6VvB6_fpy)9I-sK2s%^ z(;uQ|s^oG;vX~a;cFw7ocnfnoj}fE$G`Ev=kvzI;;d8&ynkr6L7BhPDI15-z3-dUe zSyT(pptkCUv^GFbPHd0EsyMp+ba3Vju>b3tbii^-y(GnK{ExsbC=Nj!_f&N_(BqOg<9Vp>?l@t1^KSi~vH zVp>?lX~?2l=u-<{apogNe|CyGM_5b?i#j)0Obd%SPnE=5SloGTDIYzmTUgw2SWF8` zI2~0?d?b``h9X9fgc8nT7S+Nm)WVX^UBu`XmU8khlgBbGEag;UQ7ufMcOFYSJ(WcD z+9PG1{t&(PNLgnXM6W$k&KU>MYmbz3rb6_aiRGQS5dCIid1om^zo%KjS*v3Tt8-li zXEP)b?`c+awnOxLniZWrET&?WoMp?yeOk%c!D9Nfl5>$oRV+7Etg`cXh1|+~cB(jQ zSB5KA#rc^4i;67qO{c;&L3-4rk5M2r)nLYYmj>+^4niW=MJRUL-h@@lk*>>28oR6J)|)B$4Omu1;yl zo=fVQ+s&x}IZq;Ex;Zr=|EyCn-JJ%IG+2wEyVDG!*W3BfX${fq?R@BTg5>P4+S9}N z2vU$l9;=7b7xE)L0had(A2~xHM@VGMN6r{XUd-A4*!cod3UjtUc4kAe4^_wd#90g} zMk4p~iL)9qg`SJbWA$`4L6(!qn4ZpekV)xNM7mKgf9m`USwZp%%Wsfzeu_w6lFyuD zkohEuEa&uAL5j!-l3vbL$TpI3EPq3aWlRy7Leks$7b0hH&16ZjUX6_$wABKVKF;%y z5+qAmJjm^n36V7PVqqB9z@opP6bI@p;EIZh&D20OD^%voZHQ*skmHGY;D;xuG2=gc8a z4;FQn*hOvr+}XcHZe`AyL!A=eNik=Mp-w#(b(Z*zwi@QVwoUb5XUuPz>QsjGB9See z>ePW8#9XXt&RdX6m`gLwc@OeB=6y|f+CZ9O-q&=eD@4yjo8k0?%)hLTHNzPI$$mwh zZDu;dAg_|hv&~FrJj8FM?t5oBQz0*t$e3BqJjnCKRLpE=DI`0IjG67MgG_p?&VF;8 z&5*B1n_A}S{1@aE|GuJr?NxGg8vG&v2HO>jh4yST5 zWP9d2cOm~`)GcrxLt@obeHJ*Wx2yho9l0-bVvvT&eW8;cQXK14EON3#>SLXXMb68R z%T#$eG8a3qKvGbhWxp?W%0N0&7Bc25rxIiciH!NmsSVjc`;k|NCC;0WJtQ)(B~Eh| zGs2fTSAXCv;v;;ilj=t)W`r+w^044OifXvb$+%0!==-SU&emV0m=V6*Imn_$cy8Ki zh4Vy7eAW6jPU_u!^r)VXy~eR1-Raj-nZ;TsJ!BM#%wnyR1M(t07nL#VoR=ZxNMy`9 zrzqsFl?jp3boBL38HlwiAyST|8jGpM1}D0Q+Y_(G1}6`Tsm2DU8jGq%Roc%+XUg7i zHIkg_`@+>oa+Uu>GyA) zJuE8IHZ()>JE!siK2}tIy5;Eo#iuTC4t7W(B; z?q|2t1+tq&#_V=_LMFeX_Or+74_QniWA-@1Akii&X0J02l9@!t>~*F>a(%8Uzt5Qq zDNQ0{_Bl%-kM^nk{N}8Myzraa&u`9V$l3xbX1}u?vXeyaXTS3cM9*zL;2ePHxy=Wh z6A(SO`Ji(iqUSarbgn~MysGMR$oU8I5s5t3A?GoR83~7-`G>+I;joj;Vn)JY=M;+? z32*MF=iyG#qv4To)LC>)iWvzYCBs8O~jyb24L_a#L)~h_>T!f4vkxzt9IDbLz z(la8ty6H*h9^`qtn#-7z&QnN9y6=@E;gs{-aW%$jkjP9=ISz}-^t6+tV&b3f)6Rax z=zIRt&TSTzX(wv)8OJ#h&h)IafW>5b*4fOWGL=sc&N&B_MD=@!=baM}{T||Z=K|!_ zqbiFF&UHuw5}CyX=PrxM;-b^_Bxf4W;-WK>#q`%jXBmsiq6cMh$tiRyoW*5l5R1v; zvNN4UWg-7r?22)DGfRLs*3r?sQ|e`B4hq>YC;}$RiE6uP6LRK zJI}jLGl<(=#oTjRL-LTw{oHdpLDGGsV(vR1LGqEvnEOtD7SlTqoa8g%-g)30XED9= zzC(H#dH>vX;!hBMP<5)GR-Es-Uw%! zU7TexnPwOFSyZOUv{ep~@h?7Bba*3mKFlq0LMD?q^y$tm@5JlZNbkmKKY2tI$RrZEpFE--i^(*vxS?X=eVSK9Z>lWx$jmG9v8YUUQJY^9{;hDP zFN%gs1?~ z&vHwO8W8F&ff`xwf;NaTu1RYV~c zlSNgrSjEJ%s4BK2Mvv91;v9?0BF%wFq?%~Yv697PQClca`-2U|I}rVz-J9ZlhB2;{}--U6EU5|RIG{E z%%UomlX7n=_CE^u>D%J-$5Kqi-WD@iRG-TG`DP+XNpudrWxp$uA#3n0`(5!9M6VR_ zp4bb~D@D8~jv=n_=R2K4= ztX5);lKAg3ZN=9RefDcBwn6mSubtQl(PzJQVn0OxF4JBdhv;V)?ZqDu{ku#DaZShI zcbN|24kQu3WOWq(LG&+K9Yv~VDpURDLML&K<^Rp+7mpF6Kg*p&)<|mVQ&q7dRI$#Y zWP%j)RJMz_!eT1cMMP4_7*(-Sv{hH}sgkI??tDZ~zk7)R5P99{#WEbCuRFcPc!<94 z^cK?~`nuCc%!BC4_Yun=y7GO+I*6`(U-1n@Uw8V6?;-lS(@*>g(bt{+;vhs{clwKy zkezgud5ba~ATB`uAZf;O10t_Gtw;unyAXNZX~*&eBLAD9E6E^{IwjXID*v0{V-^e2 zV?sit4@sg(4;e=?h$RO^UYiasqo?uWWr(~s9cL-ZVm>=V#NkwYtoS)|h`7ySK08B% zlUl~8kuaQ&^|`2&Mv55;L&e6Z6f+WrieFjONRW4x!^90GQT<-_NO2dU-^(5;o!Ao_jtS>iE7Uk7K4R58`3`Z_pU#31?|=Q$#P=y#mw zi0lykj`Ljc5=6h_JXaKDF;$%>3R!%tcva_#S}bOS&l4S4R8?nDRp*P%cDSkw#2814 zsp)=xHki}%WOiU5sOqYpuEGE-sVn2(@bRlKBTnu%?nXV8ISWKoX1TCRU?NXV_>)=XJ zMM?ZRxK7l8=(F)U(Fmf?#_Pp<5PddYFWN%%b#Q~|3enfW4dPRXz7B2_19S|ogB!(g zh`tUciSZD99ZV9_Sxm(?iJpGAVw=Q77E`fJVjYXB*mA1a*J4)?uGs%Xzw}Z}#r`KI zv#5%#qpdcJBqjV_+g6gTA{ipzYx|z%Cx};Fo&A!u=EUE|dQVkD_!`Z_F{!duKSU=#bWyFk%$)LJ@b%SyT(VQwyJoo`u3KjJW?}F)fU^`&m?f$)hK@wA4Q3H9X$J z6mEKmZea>HCyQxeO1Hm?iMKGNI~_5)g(=<5EUJZ{QVUbL<%)z`nA#o0Vp^EmoywwG z*q^p~&iz$M^jms!N?sk(xd$P?lE~4L&OHfvLg)E$wABml1xWP06p=4jZa_A5Nr=oO ziMe+nJ4oiUJb|pE_Y{_rSZ?Z9RDF_3RhOU_7mSIs9`=0hA+)Bm56?5HxSWLxS_xa-7!uVP!o|{KWeAR`(Ed2+7Y*H8&B`m_&}=YVIgVUHqb2-JJw!j$c%(yE7p-va7RA z4R;~r35gs(HQbeu>m$^++M4c0NCH-7sOcs{dQdORaahaU0U1mp_fyN=3+Y!@jn&%j z5y*HF8B^Om18IVoI__miN5s@|Z$XOXQv0dvK7dpwk^8CZMoO#t^thzzQ_qb;Mv%z* z)N=*oXkN9S`feu3WfHlc`fhGWquePXu|qWD*DU~PN8+)Rfb7ndB9fV;fm;@Gnj|Mn zHOOyRb*iCT4{`ykPBnC!Kw8kJN!IX9w*}-Q64{bsSyybR>q&cQy-g0|E z77kVY)yN$LSw|xG)5skO>56`D>`sJ?M!z?9XFwj|t-~hn0!UhXyJ_OCfZRt7o4Oky zF+3G%>TZR6SxmM0ZTCmWS0u7MZ@YUSTf3^5X6|9g9ugVT%smacix~^=xR)R)GpU$& z+?$YB3ab6Q>)wY{CXxGj*L?;_b410w=caj8jh2^4WXyZ61DOy@5qX(RZ=l6-Pa+b&EmTqQAPiuR%UVe|2-Kv6!n&clUOA zZcqFw)7^ccf)sOy*4-_{qOLL}X{>(e=BcS-^!;iN_se=x%vGj`yNX3!W#nobAGuGI zM3;S_MsII7b$vd1bUlge!QQR~(eFw1annQeds2Pe91#7kbYJ&nh<*dKuUiySeSkV^ z^>fQW8k5Ll^>Zsj($!Hh{oUG-j3hFqzxx(sN_`bGz#IiQK(`B| z28oOr==NkWl^^6zd4qG0SALMYj>S}dkh`BnRlY1$KGAL5FkJb;Zp}Btl^^W3WKosR zNYBHExRaH{D?h@W3DK1w;Vy#c%8ztcLUiRvx=9dS`B82%L|1;4`x8W0ezdz6qANez zJqpnk8{?jV=!%VTud?Ev|!x*B6M+z%oDlE^VO!|e?@(o%iCX1a-x zizG5;raP9!RCSg+v1z!fv)olIrmC~tJuIrK&8R-J-GKwNoi>hiX z+G?(Q{9RSm9yEJap67SD=OBqBvW2_cYmgYK`iuKFBs;45i~AqsMvsKZT-x)mZi@HR zp6`(?XGsUSh5NeQt_Mk-TODh+n-wxbsHa$a+&qvOB=QN>9=9-LjehdxmV$h*pS-yh zAQvmBy!N>@Aa_Y*Ui;hzkkmC)%x~`7kbp$S{N}cXT&t*J_PZS+|B=X;{q9GQy=7F) z0k;q2B#DeU;0}T4dy<3hXo$WiIp}@?IhIfD=a4%Ka*IUn=a9P?vazZfQHR}Cko_bw z=CHd7(gT6s)F>b<8~rsX!u+b(mFAz@htvz z?;=J&llj;6Kanj|S?r|t{O9grFDcc_?n3!l2@5Tjf8)Qx;)&M$jW$T|{P=a)SJDfp_2$>(K)lqHcd`Mlhatrutor^EEWie3T8 z9+I*wB_Pv|tNj%4%0iZr$o&-XszHk5sZl|%9;7m!8Wr@KK$`!lev>NXwSe>`k^NrC zYY%z8ii#=hb%$gpkuin6UXV2TReOqfgCIFbWP6HuBXtaNf5n>!$%Ncr@n%3K(2Df( zidNKH0GUrB_fync0U3mu`Ng~qkcpU?U(DMId4MNE#l0UP&!15HDemoobj6)a3GXmu zIPPRhc&8x;4yg8&^e#azkjVCw^ln0y(C=UJcfC^HeaP1&vOcA}XON8eHd@+C(_4*} zBKS61+H)XB@J;+xFC*kCzKOr;<$`=f_iVC0WxV{5;kb({;}wVG#9O_ud9Oo??T;3Z9sYN1>Ro)u`IoDXlRPZK1?vluu3f^=`P8yl=yF*29KBNMP{O(ZETMo&A zey`-Mhm^sSz)Id0$WGiiq@z1y2;KdG{d4Nn}hl?#Z6euGqWYE*4XwiQ$Sh z_cpSaiZ%CsWlirV zufFdkvY7d+?|ZWmqp#-gd&w*+i&>P#2VSMg;VjyCU$B@g+IXv2R2BcD}B1AL`YB{7xcsAL=!LjQLpQ zHOzY(@)e0}&oHkwq*yt%pW$9dNM#bapW)s|kZst{2(J(181^&58v?oRsoY0;qajgR z!$clyr1u468h*bR<;{Yu#MyY1w-{0pXWG%;DoA~tX-9jTAU679jQ1@h8~S35w~NJ` z6UKVWrg4A8&!S_!9W3UYFxI=sqCQRg=yNg7J2gA}X&UdXohQY7n#Oy(Sk$LUKI@*~ zWty+XhJN>Ls+S9*e;1zW6@cj9g{OJNA^LaWXsOer+h+Ml*R&}~p529B) zoZ&Tw=+zEqcr74$_34>jJBVI=dZyPMqTgbh<$VUxZ?Vnt20`=_;Mv{?h<*Y*+ndN@ zDnG|tw;){kIo=)?Q~5dG4Hi}TBUJghUXMlL%FpxKEDl$Gp4Xp6RsIxhHQ(E-Bt8#+ zsdogT=ix8)&Or1${AJ!{h@OYP%)15A^YE8@4}onIL+O{Yo!4LBs$aoT&#W&s}h@Q8+#aju{^Om=GNf146d8?NU(eswKdb?OmrpaF0 zmEpcf_7Yi4UnG0;SyZMODARAf#;d}ae&_9EF`0hnoncX#%6ZG%Ja;u8D?V>|hnE?m zNAC{rMTj1~KY0Zqdi4I}m4xVd%RhVNAbQ^N&t7$ip0~WytFL45%l=NUDI_t0X2wzr zcX=%#dfxIbuOo}8*e_nSHQ|c=;MBdZNyMmM6Oh{hLt~uo`gp|kZnp56NNS9+O z)6?EY$S@L_>1i(+^2$wm+CxV_DP2p<%;f?q@T#Y}xxh$$0a)#}B@1&CWT+plD1&F>bf z5PkLh(@Xt7&LXO>o_~54L|>_|d+8ziN`2kS0nu0L8{W$heWkwP6@~05q|SAJd1WB` zNo3{!@~W|zs^0V}Z4OuUrq`UsRQ0CUpG8%*0af*ux96L1Rd0LqwuGyC+xwbDRkbN? z^|!ZQNpurk<64va;~j_WBx%p`2juDcgh)4%yWTZO+6@VjPgw4GQVKL{82i|BFmBnD%>Y=wvN%T6NEIsm)Adm25>5=y> zL|-o+dp|++_2RL&58~3ykkPc~C*Dy=PLhc%=U7apPrd%%hBJNYO=mHgKJ_-Us7$BP zex7+9zYAv?@lUdtOe6js7L}p2L2FGR2BApD~cJu}4h&p`Cd5ZAu~(KACl{}x2g4DtMj5dC@g{mA#K zhWhjF`)MKiyb<^UqR$(FpBbXh3F-aZ5PeQa?-zvVb3z8c1Vo<`GWg{n`XAgf`qd!% zAKWtf^&u#iG;zv4GZr|Az&f-PC4U5U*MZYhL%0kY` z$>Xn45?_-izyCEvuT+!Y-v;SM&)(&?zXJYFNN*B3o(uT* zR;psZQpH~J%j^zUtf+sT#Z;`QpK6bcQ58EtTNU&BD2acwE9Vb}=x=uA{Lv8o&91yZ z8KS@0mG@^s^f$W-{vwFJH?H8Xg6MnWihdGA-y2u-zlG>GtSk9HLG&BemHd5>QPUG5 zHz|wC{!z$WlDjNtA^IC)75@rEe?zR|--f(3FCp@XwyNqsgmflJI4UJ!FIOxoSN4dK zRP)n9)b#z|WQ-aKuh4#K`PB|cF=v3<{{Ie2F(aY2zmG+YguV21rH+4FNqj}b z`u;zcfnKtxK zAx4k+hW=v~m1$|p^i6-&;c%vJ`8ke+Gkwc1&7v|bPg^zeYblA!d*f;(js1oYd2cLZ z8vD&zObeU%Nh&7Z!Y2NH#OM|_@o%%J7S^HtH1*3J4Y%-Z|05RD7jOF`SyT(0#1i^;ULf1gEV+Kje(-;e&z$Kw0dRwN(z4n*Fs z%9s!QtSqL5ZTy}pCf>p}{zSy+zG&mGV^J+^NBe2(KSqqc|7qtJJ0Xv5TG-C7#iCj$ zzr(ioKT#6D7wzo#gXnwF&i+t{z8CG{kA>)a(Jua%kd&DF)YYE@$%wg6UHv7H^v%`x zi*EiJNMRCrZR+N4W--<1?)N+y?yv6tL>ALu-Tieesv2FX8Xx-8PlfxdhhOk?xEekD zDlDoR@(TNr|Cy5bIt-ur10i}HhR^&Fkl|Q!rk6hfqMupy@~1=e8aTcE`4GK^KyQCJ zME{q1AAdbW|Cf3ne+y(5e#`Fb{{Y#5-?IDqdss}x`uWSwge%t1-@#%k*3ZAlqAKMCdQn=rz`2AT- zzfbXJv#5%FNfrCjPr59(G8LQZceozXhWIiD0(> zBV_wYH8$q>yCHhz_BsAxi2k>Nx&A4L{s>W8T z#%jOuU*T%3@vpF$YOL`iH%&FPA^OR{H~s)fsxB(iE&eb_dJ>t% z7JocMKRwv$Plf2G2V4Dl5dHKZ*{!OzHIdih6x`t5Kp|L7;Nm|p(TKg^j9uX$IB>E)mN z)+}nw|3X{+?B7-ry@&71hy90;v*;^k_NmmxJiha@?;D(Z2%!?$?Lt`{&>NrVu@%PWUY$ zdPJS@J3#b^I_ZB1(Ie`l-y5Pw)G0p^qDRyze-z{_W~!X_CqZsurpjr5CPa^@GyXz| z9#Lofl@L9m&iWf6dPJS|lOcLUo%44<^oTm=?}g}J5dQFwK=dyNfB5HE%&0r>UwjZA zb?5!aLp7rGnfAP&lSPfXKdIj@_%A$CG5Vh5qJQ?W6f^2B`uADXsFU|3mwe|5A1nGd z?(44j86gQTs!?~v&jry>a<2OMA^J(qRlg*Q$>N&7O2x#_kk|ZOh|yVG^RKd~EdHh} z{`9*(4QFxP-^OCHxb7ckQCU2st#0^DpQ$Y5Q;1+WJ=ykKLgZ73EG!)$r-mj(@*ays z{`EhE+$Sl>(i`F}N{AF)Mf0EiL`VUW(k!DO@<~N`l1Kg|h%183V-w64Nq&Z76L_RsGLwkPe?|{fBCkCKnXv{gdz05XN-OBQ-gO&br7-Wf&ztwWL` zh(e;H>A!VY1mr5MdbgD%WsnJyK=t{aB@c@kEvbU53B2d{Xh{{MN+HFZX;TGxSk!2# zNNr9X^hl**^q7AxNco%;Gg_Vtva*=bk|vm`B&tV?7c7M6(c%RwA$qj3fauYZB`5*Wqa|xl7NSQ>)}R_hkCtpf zJ%}DH*@7kzJzBB{Eg*WdWDh#Bn9-6WD3q2njgOWbK`jk$lRspT$(8KrqD$SEE3%j>S}? zK(L=hRbw#ir(jUc30I>~aF4}&b_xYA2;MWV88VW#Djf7y65WYA>Q{qA$OYU{zZ#5! zyh(HLWTs_;NszWAGSf1_OvoOrUjACJ5OM;mm%kRQgv|O>-Lt(OY=o>Mk@sw`2g#71 z5K}hT0Xc%0vcX%@>beUm7rGoa4%O4R%Vc5dbw)w1B)8-KhRdyf{RL`ztb;|vIlDh zHz4OpWDnL1?m=R-mX6G{R`3Lpi9}{vD|jxWszyUpwRT`ZTA-@6gN!UD(>lRs6%+q- z*9i_IM&CKq3GT9}O!rfp>jt+og)^-ee3ChwX}w@9i^}vEZB;+GtR$*GxlMwb5dFz* z5Y0mki{e~v1Edr|Cg@9B+Y_ckb5NMSqeaM z|E*%)35r8XkjR*Kg0hgI|EQREgQ}3pBr@jRpdKXhRK>g(G=>BuGUmOY1;n9sMPz%L z2kju)NMua&pa+ZTofg67tek1QcUlC8Ssq7RSf*c@`K^2SOvf4~-GgF~MVR~jVelFx33IF>m(>pza{Vb|?x=@`z z3i9O*_s+*bmzTo5^KmeQWhh?@5~!-51Y=oLf5~qXp9H6sMD^3lPlHPk{q*wF;3njI zoJBti?n8FtEc#gxd0DkbKYi*I^ky+npLzvT5Tnlty@DhbmDk6VSMQ)qzHnZBf-x-S z?AIq)$fC07LtFI?l9WW})2C?|NxvW&vV}y(^b2;en9BDLa^{!EGA-;Mlw&cK?;kX0 zQ7xQE`xy`{LyW$I9T=QuF)bVz++|TMoJLy>3f?Hd$BJKtM+8kF`YJpkXa%W#NPR9w z1|1+BN#y5ZWY7bm&-0^#-VlAB9~BIS=-J?-gHaGYw{UbY8S)B#e;*UfgjB@u?_+{R zkTFM8d&UMUA#+G%d&UMykZdPZ%(x&K@(PKJ85jHn>4x`r#s_;L14(4e_~1B;>75Bd z)GKXdc7jW^vtYT4_UZ<^Q1qDj*v7-7MwKOOW(dVe8L0L$_ zb*fL71yv!nNo0R53+h4iRd{*O7@{k-JZJ&Y6A z8ZDV=tFMETN}~7aeIi-aZNUXdLJ?KfZNUvlQ+n%J#%vGnLRyo^%5M*zK(gggG2aKN z%W)Rb!Xz^0`@n(}qBY7|)6stj(nBhebYb~Fs_r|?ikgc9@LlSqh?L!_2_SW)gG-Z+ zQWZs{!zU;pRRu%@L8N!32#OR%1w<)=pn@WzA}qZvO^PUO=}Qr*@+Bv~bMxGP-zPJZ zbCM~U$;~YU`Aq$%+nY*$ODYNZM#)H$3Xt>pGezE0vN5R|A|lx$Aw4Y{f0ILQDK+k&Y{r)p8` zvFEYWq)2VkI(%nLO)5-cTJXHu&z7X|bxj$*?`%yvTThE^!L3P=`m|@dH zQc`P3|8gc9my=$AOje?^aXG0wxhqM7ATN|R`^iWe4tYa~-cLr- z1jxIX(Q!3t8e~3ZbX-lE4cURXt|fg2Ifb~cB`txxgEH5XRzW7C%=M&okf9ySsP;zE zMlPd7*XKsk4#!=raE#9fw>&>^GCnKoT&s`exD<$Xp!j-=u#bD{!oT zlOjz_Pv9rvTS=#yQY*)L)UBk*Q>F}`@3)c)lb9Zr;}7+&JLzaMQ-;s?J4sWX)nd>0 zJ4uU4OpnsP1iYJc+eoZOWpWal)6t{cqcS-;Ap@J3@28oa{E+cVbT%?OA*3%>qRZkG zg^a{XbXlA-kp9n_{bY4gAfuJ&{bY4&LDHT#WwJR9AZL{5GTEGGApHF+yVDxN-@mdu zogn;eE9!KI@VBj~)0f1a%Q>8>&r$5L%;#{HlGt-OhqIl;WInITd`_qN^YNL_^ap)Ojcc$Ro@xkCO)fy)1hsARs&}MiOFg~wN>ccH4@8evXi-;-fC>D zKPNl6A$kQB{a)))ClR7oP|?|V)RB-kYnu0CrJUlBiAwbQu~JSs2;ZAZJ5?ZjZz}E7 zf$+VljME6h_ogyVa|r)CZCR%+g#Vqktn(s7sx?(~oy$2rA!U^4I+t_$Lq0{B^3Ge3 zl_*o*83j4l&Rp3lIFlfEmFWFcaArVG)-bVGbml_tDbcZ4bQVI64l(CxC1)Arx)Qyg zO3rtXo~M#Crbj)gwyNg5Y$VpBYB{e$_&lxU zyb0miP_>N;ORvb8oXSkL(e zlBh&yte&%u#Ad9%Gxw$VjMaD6kl2jXcMg%5jI~s;KjGBu8lSNzod+Z~V^2CxH`+5j zLv~PGHE@!RM2o9m)^}IZ(5V2ap+uKy=+q>!HEiU}FlAzG+Q?afGJKV2I+FPbTG^D8wY+PMK4ujB#AeaL=1kF|2LcBiaH zPb<-F+RDiT8E{|y-bzK$+HoM`m3%-_2+{*rwl+>l$lJKGwQ(wt*vz+eTK1r0#WLU4 z=}Th!Mq6hpiOKvtb*y$y&0g`DZ|~IUt;J@(z0;P&WPX9#s)O^5kyz%tI6pu*^Ie?Z zAe{NG&Nc{VzN?c4;mmh)jzT!|-JH{q>FS%yZ|dkTJC`7zD%nYL6T+?2-T4o~t<&Af z-p8~Bw@we|VF-2OAL%4N%I*&rQb$U4!A>2B>oSG!Ib$UC)Ux{y>-p*VS z+d93SbtI;B{!nrCab~?1-#V{2KlY7pomZSR64N?=sjXghiuW^-^6yjLaLPjX_bG2U zRUkYgXrNOY!ZU&fI*lNlu{WJ(A)K){owksJ=&OUA&X6Z&x>J>ATgQ0ueN%}8E7Or5H%d<41-KS4aYg- zAe}L%eY`UTG5~Yh$2+qi6Y-8{f-@iT5#A9^aK41}!1t7i&PvD|_?|M+`2nKe*Xiet zNzShj{k~3LktR9YAluZ}Kz)Ur?CgUaQlhVrlbxfGvTEg=!s^N4UFQ^}j*{{ummr^A zONi7_@}Bb#WQ~#rB#}2wR{5!Niu2?kE%vE$iqo0Iw$2o1IEiVU@Q8Zf>vVoAzICQK zqlUz{&NOE>iTw^T-C00l+N+4#&vd8yP&zuzk=EZ&KXB?n^c-pZjP!xi6vFeLKXh6^ zc>eQ;P6r6jf1c%Z;WC*2Jj>|=8Ls9(S5rs-$Qc09^Pis}8BSt*?`)^;+wu9C?Q|ru z`I+quB{BJVR_$kwvtU?!e&#xj-igo8T;~N6lMVeE;m@6tBjTg@ z+^J1sqWGWMYJt<-NVJxE$JkTJLZ>aHl@eWMq0^Pb)^L%t&XkGWJr_BLP==pd7CE;_ zObrL9{e0m(IWj)ai=DwF_A0U1nMz`6I7DsrrSqAQ=x^%%*hnQ`IbT5zDA8rUa#oYr z8ZL2ikBZOX5+|9&=5UGAn8eg@yxPxFX9mh}4wpGwNNf$4IVVVLPgw5UF%orNFxQP0 zPNvax^k^X^x+kn~azSo5rp!vG0OWxZU1p^tNNg0}I5SL{Sf0OeR-g>$`5R|9iHTy0 ziei=1a!h=lS36&j*eF&z8%RtPAE>RqbzT~4>b$vULS&bc-<@8N-AeY8ybftO-1PZP z&Jc)xO3_hlaz;b=YP{K*4B@NsW@jdZul%XbJP2R;Q=LT+zVdHzmP7c;zs30;!efxF z&d(4YgKTwDA+^*sTwk@eIlCdxDbZK0ZO&oHoX1U>?ap72WlD6J?ap}!-$8ab*C2cc z+2P!U%*5N>olfR)Caa%e{?AS)H-u+i?Q#+!Jo9RoBO%>TpWRMz$Np)tU|k|IXxjiqutY-0VKBf z?sw8AQ0%eZyWhzmvFG4^C+|dE#`NB!s*fFTHoT|BK1&>QicZsFd+$M~CW-02C)HMm zob5(p^V!ZgX%Nop8Rr;;Tj#8E8p5q}*0~Jf9-i*pgm4c}cOF2vho5t@Pp3$u+{4c~ zc_G}x&pRH3d-!?h5eWD23(lhu?%@}lN|1<}C!nf(&OEgwKKuXB>o|f37-H zApHDu)tLq1=bvlNdHQv$WV=chl)UTZ`>=H=SW5rq}6ztNhoQWhAP(7V0dEjh>bW)&r9`*8<6eXCmBe-LK=?}Hx|u&QvGW<{xw#;G#(8ccgl8J~u7L1N1K%wU;gL(= zmWA-hC2*@i_-YfnwIO`93Ef5zKD&kcEQHT);kJeF*)8495I(!5+Y`cPcR{xwgwO7R z?oblj>k7G(KaKBoh1|s?w$~MMQ%Ov(>!qy_G$?A939;wAfzvh+B@t^g7)- zMcleZqRmE_r=6m1V@Ovex=c~GC5f$JF?Xpc6TAKtb5l`@33oJ!9ix?Wr;?aD>rqKbcbk#enrV-^`yl+y_fhvKgy*l8a!)~c{%R>V zgT%&F+U@aWeCA8Lqe*P$OS=n5OkD4%xXQT6U&Y5&)*V7(<0|V;CoxfsRa=#FR~w1y zHKt}MspzhQ=ryK3CixvQVRb@ep^{4O4#*58OGpkt?&Qf7`9{fO?r});;Y^XANYY7c zq$%#`CGnA_xbsPDq$%zO5)x1M_t^0^Y-d+WI;Ah+=4 zvA&xQ$=cGCsqbEe@GsP!aBoBS7iv$qnU24X|LU?y&AiHR>rqi6Zf5O zwAl7);(kD4+pDQNpTxA+LA9Tz?tez2V+xt;d~-M3DwB=(mFPS-cOQm4tN!&{zcqT! zbs-&<=(k4CxrHJ9`k3}=;U+_dE7ALD;Z}sah%ZOayVZFsd^vjFtq)1Y+pv~yQ%E(u z4QuH>4|yB^G}OxN0C^YxG}OxNN@DZe+U>DAKF_V)(Ihs{t=$DACeLS7e%iRn-^J&- zt()un_&m3Di;&nnw{y#o*z=;DyUIxHym-<55yI!ii|$4UpBFE=+aY{jyyWhO@Ojb2 zJqF?PqKkV5!skU-_cDafi>~g!5I!%uxep+GUUYM#YfMkz^WtSUFNDvFmt7yi=S6q- z5eT0b-Q7|UJ}-K>l^}dx^l)pE*!Jq_4qY4HUOnAeB(}YJx@$;GdtFlP)ywVsV|;t{ zc1Nv?Z?E3&ToThdH`G>r+y_QtD?z>CX8*~=&MQH^;pT<#oA!aO2jMsE1Kmd;yb{!# z?xPT1hv7}P5@bEjf~pUXSQ4w;M$N zs&0~+Ju<|71)_gdH;rT_TZRW>%$!e>8a#ll5r5d>Xf78ZFdSpuR0}2W|7zy z9Om9yAK!w*+{B+v>+rM0FgJz7v|v%SpLg8cznC)oj6K|~^Q#tnWgG6cCNV9jpBzTG zeT_t~R5GK;QSKl}!eeF>Im#UYDWF8ZAs_8dfFz^LXmt$Nc10kVVUaAhGfNjfT`~1kf>Tk zzoFV{n!5y&sN`vq)sQxCn5+79cO9gU5`8tE?*0xrjrIB8cXvRpV}1Vj-2;#YxYEvW zk3(AGN;|_n3yI+U;Y{}mBp2Qv&U9}<);2V2!hhgKey6NPQmv)s;`;#+5yJCww>&MbE>iD{kAYCj*jqf_-(_KAA7`^A>{)|u_D zCo!$lU2QeTJ!B-xzmk~eo`CSLB<8v2Ao@RpeqEtf9e1xn^nV8JAh}0kqxi%fx-~wE zPuy7~Hi}Q&H6$jA0jfUp-2vO;qxjT4NMg^FPu&a>6U7j<)n{(E?Q|@<6HQjK%zXu- z??lr{2158wwA>vA;XBcCcN~Q8L|?m8AbcnK+MNaAJJAYvK7{W?E8H(3d)nSSe3$vzP2w{6+V!(r5HcLA{cLbcKzOyE4Q>Sz8|g3Zc2g!c()`6u zM;X35{NhH_Y^3v5q`$grNNl9Pxuy5VNBWyvpTs_oZFHX|F|q4elpEdEMxvSCG0&^p z+;xy5N^~o4bAN|yuWPQN+ua?IlS*`%?d}0cP4&+{x@Ycik3%{t(PehHXCZB0H)VFZ zS0H_r=rTLqTabZj%&7OX%Z(f`Z82SmF0;$c0oi`bl-cd(gB(?&%j|Xo$UVGG-QyO4 z-HeAy>72Np2YOJFH~FXb8{coTiLcqb03h{UYF)N zf6$(3uF-O})qb~v5nA=`CnX2nY7o8Z-ESoIAbRAxRmmZ@2}F;4_mi|Fu~8g$x0^Dt zC=R>nD8oJKup2$1>tmw$OYP?mcQ}cS;)uJC#71$%Jx^kL)KT{aiRn@6cB}c}Zq=g{ zX>26*r&|ZYBdI^##tswl}%5<=d5Ma>>na=|SM8Ka~SNf`*QyL-`1f$+M!7u~uf zHXE1Rd!|e*8<$+~go%`U!X>vFiOEI@b*#&7?!V%*amD?F#Af4)`yGkx2^sDN5|baj zPGE+c^tZ`IE3AU`k1HYn!zx(+xFsMXYnyZVrdtlev#M^oRUy0*@4s#x2(QHZuiF^H zEAifPn?rad-dk=v2(J}$+kFwjYsK7l`;gci-fezJRSrpM`w6|sB~yk+cEWq?vKHIJh4(axX~BMKE9sTJLdS{< zJWHf_l_3@JERo{XhTOz6NoB7gB-e2BOj6l<7P6>fZa1rG3q@9{1)z z)+^Cv9`_bN5-^Ia;Vp#}#3-_c_bsHm`Zbe&{;BEx1et{2H`VkuL9SuVkXqhONaVCR zRxR%!KefF-A=yrvGPS*QNCmaZoIX|^F9T9diLP@U?>6M^wkGzvUP6Xx!SPCT znYvz1$OJrV)${U0KEjvldR_?WKg{I0zE>17PKn-6eXk5;(m+$6C%hEM0wuc46J9OI zK=h3#y#|n(cwT+ddj>N7RdcKcUTerQC3-&%yiSmE>E>7sz3z~vN_3fqUS9}5LpJgT zLHHT6kv9U8uc+BiV{Zbav=Y6a#@=*DCpDu?=edbD8`52gF4M&O9I_g5HT9N2_9L#Q z-f9wi=04?}x=w8oJ9D4%A~&?yd(%^1VG?uZPFCmO)846DrVO9C&Afwmwb(PanRl7Q z-kYBBZjqRC`F*vYXT0k7=;+Z6gVen4_390|R}XST$sCfVkjCo%PVdaU7Lc||=$*OO zk;KN;!aHip#Nuk<-9j0@BDL_m`}*i6u7#>T&wJZR>{DDzul#@Uakcaslb9%$s;ydi zn~X%46)`>hMQLoldIs99RF4NV^37L#v9d`5bLl)pyhuypoQgxh}IsCF$6w*S8p0V(< zR|fJW%5?WqAX`zUyH^Xcv#Y6d53d0vU5Tzw5APXBiuxV2?!7&|){y2(beW!BC*DsN zv!7mGcgQ&d!WqNxfAlKDu8~Rv%ya|wpki$OS3=-R0Uhz67 zWLI0;Cy-aXp(OS!c*UDbVtUIC)$Xr)-B-~Gxj)d0EC~h$9cm^Y<|XjHFHx9WBD2HwI#7V ze7rY^#N@|U`I+E#ekeXa6TRysHa`=+oOx)^^j<>u=SiM05-pGU5|h1RklL6pG1;p? zVr%%WH{O(q)$m+%S>+%WQYnNlbq9NPLc0uK*oA%D)?(?=^w&??&f)Eg*areCoA_@LBMw*9F37!Dn7? z2%iO?c>^GP7JTjvh45MMxi<#FXTbvRT?n5A3%pq*Hirwn0g3TBT(2TK7>b_E4*y3X&oL#uJrOicoezPb0K>4*Fe?q8?O*VkN%z_NrvdrUkfFx zyb2IK`fE#4lf-6qwO7rH&+2NgC5g@IYHt9E$!aIHpKra@etcHH^Tq}7S^duYn8ajN z|EJ0K-UcJlYIp_vj5okPczYo0)UQ$WGr*7DVaRqR`uzIQ`y0~aHFFNG^Ug!M zDbZ!tc{fOGq(6C6!}v&l@|Kd=NPqISlbA?fR*|mvhKu+}fA+4E*mLk_FQ=qE(^XV| zQ`q2@F%tWx@SB$c;cp7Rd9@(?W?-Y&fXm>U!ba~I$Z&j9_}yy_;cp7Rd!0#aq?^2Z zrcCT=yvg$lnke{cyveIZVj_J-MY`EbM;X4Krg|L;>8)&}sa}5))28~1^A>Nik?3`d zShsmIAldQ8ew#NBQc(TYL$~R6Zy}^2)=Sy$tst>c?C_EcQ&wY9?C_o>vF)|P>q=sx z7@(rq>7}C#N3qMR@ko3WySx@8CJNnKc6(ioMCYMr?(zCSR-k9@@dlCD8t(OWn=-K) z?)5IB4Ci^Tm%E5Qx~bt1Rl|K=M-uzwndVI+v3XAO7L%A7j#OLi_c9fwY{b479P@HQ z_`jB|6gMUNK11)~3v#UKvOSCA!R?US&uP{4()`R}0bvzf3&g zHH7Gyd-GKd|MH%J=$U(qNZLU3_lspp{`NXS^!JN3Bt0N{mf%JuC%wK9Jxg#a$zaGS zwNjSuKc~DAklRXholkj_No?z!_I4MG??0!#izK%Hoc3}Tx2>~B9qWvDs)QEXI%mD? z$y#jdob?Kl*n4iemrP>Mi*#?Wk=S~J=e-dSUT^TcHxa`Bae2X;4&nb5y5P+vv2k7W z5+99^>!MeI#Kv{eYffT%-60j%B`*zS_`JC6l`It>*JZCZiH+-u*O$dkIglBNw_Ig41yZIfjKZL)V-|>b(_}lSaZxn>T9pCjPL-#jWTc0+jW{fK`E!fWqG z{J$U-Up41ff`1NDLy7LI3H~(*e-qE--+}Nq@l1Y}GCI$;-81{6%f`2RW`913ZTHOn z1`^Zmf2wxR;-4sQ_QUO-)qkv_7Tce*`b|k}yJz!Tl9+ZsqxO@{KVT&GA6R+);}Gtv zdHu5xo<*6@zXIWJfBF1d5dQX;-;Y$HxT5^+FTbAy(n75@q~979@bf{sE75O_3ittp zXIduuMIb!WGSM#$`5pJBB>yqUQM^q}@@qnPrlsRQ3E`QRj^7M&?x{7uvMhm+WL5B%IIl%LpLCh(I6qBmM-4epet#rbG0* zf?`UF__HDUT|p_5&msJ-ps2qD!tV--`l})QO|zK44#M9wi}|S}HXFtL(beO#QQV(T zVzW`)-#}urQBl>Wgg@i)_-vH)OV)_bMoGUmi9HLF{l+9FKYApU?EhsX%HK50`sX10 zO|z_j4ZY{N`7Lk_#9U9E0EY6R`Q#Zm>gD9Ieg6TQ#(F~DSn|k@i|QKtB}|nR`%lZ&EtUOUMq=MItNRBboS*9c2?*!saX%fx`FY&G3gP_J@NYvnKQ;VJbxoc*KQ;ZF z5YA6cKas@driW5#Ff}aoUqYmx8ap)g6Cpg(Z0bu0k2Ih1i$i#%`IKJ{!XwS6{VEV1X+G`O zf$%rYW_}|Gf75K{H;3?O^clY`gh!*#_%A|uP|1AiA(`@dK zg6MysctK_3Ie!vF{{ux=k{J*^^6jmpg+CXfN51_?7DD*D=kxwD2!Ho{-d{svTe+oQ ztpQ~|*2*pYmL&EpXz33iF|9mE9jlc;w2|J*wsLEKSL66rZtb5TF|Dk}gKhk16VuAP zhCq8iFNDW~?R_7@S?%CI!euZX?BJJz499q|qhATa`8QC8 z`}6<&#HPB2Cen9Qq%ZgzNo=H@{HjmIN7~7MhQvgw|AViyKhj9-Klr-&6CvCWyZP@! zxR1T;&w+3sd)Z$A;f!_nmqIvW-TiMNoUtDMPh18W>)~&LaK?K2J0YC0p8g>co3UR0 z>Zhr_Vj1h@?+ib|&e-dIAqZ#ebw3%x85`hNfN;hJ_|+ktu{ZpBTm~6?!*2@Vj1BZ#KsaLq z{f;CyV{iJ^n#X7CO}{0H&Dfj%01}h2cU8s)`IDcE&)8tUP75tIV}t$HBqn1!_o#0Z zeh(wjx-Vvmq$(NW_k}#CM3))j4<)fR9O|c;GO;!t>Sv$~p9MqxywB^Sn;OngHGJFe zNMhS`m_Log)^M1=n8eg@j@s%Sf2)z`+ItC+Z7LA|zGGcD2=L{|4lsl7l3XmL`WhCufX5pTvF<8{@A-8IE*}f0V>TdQ$CYtiPd^ z*$hFc{SLtc~9}xa3J`BBqn2bRP68jiS6PuHpAacVly_wKTcvYrr(&&^lur7eKGvd zkF=+wNBN84hkgzS|GIOQpAW*n?wsWd5*x)w{tQzl*26#YSD*~H`$zt65)(zjUy;ac zzh#H`DCYQIkk}~Z_!~$}6j8O+T>tU^nL58SSpEN(l8t_S$SftzNuGl6%;Det=OH|E z_;WGeQv)n5$x0{hwOuY|;AP5Wyhv02mpuaHH>&9S!oTOsR} z==yB;_d$YUrpyli2&9Y>U1o=W3Nq$V^X_Y>e-ZML5?yAe{}1Gu46~nI{(VSSCA!Qm zKidnYy~dw4Wp?{{Aj_2KGP`{j@>(rZW{+P8GF^!-v&T<{T$1YlwMT>0a@P3wAUa08py9obe;e3e}PQItf3?R7RU#fHFU(^3t6jr zrheyn)c*sr4}JBhe-iSblqqw}zW{MdoBSN}Z$MICHE|vH??Fx}(e*j*XYFMAMtL0T zPyZoEGaTzr-+_2T%zjSz1tB$*=>44VOG4(=H1+w*FArI(M3?!?uLj{?t^V!Th48Od z|Mr_eM&SF-N&h*>6nx(~>9>bu#_GYR{FfjFuzK(*zc*wr`uu7Cbw~uWyiWT=A>ULr zbw1;dhHO-#>wLz47sB79&iXSU{7vet|1so3OVjS@{vybIC3-*U{@0KV=gqOs`QJlM zDbZ!l`5Pc>R14~MKkuhPwxdnY`+FcfGwp(Z7{W8tF8HTN?A_s_-?kgIa_sJK(H}r! z?{OFX86@WJ&_-RuFZuId)mz!;pUeLB*R|NY!(~6`0NQhG7Qq!?7>PDV<}>_akUmOu zq#1q%5?jNo{&-U+R>Q0Q0+iwV*HwQbiK*cWs)pD6#5dw=c-?P8VrzKa?@VIuU)|JJ zH~d@!sm{^W6HI^38Wez}D$zB}8VCr_4a*i3gYew2Y(ZJbxoW1pvImtRH*T($f`288FTfxoU|)ehAN1OAJB?&s9qbib8myP+#kc1V2LbzYXgCTqM{C;ZbeTU^|3IwMB#dkbYw$w7yoc;231I zk_TT!BE^C;kd;f!v5E(mA?uXrV-*i>k=SgM2v(1bZ?6);ZW7yGC4vkRlZ{m>u9898 zsQ7Fo2i-@+Z0K8mtIa}pax*`P0piQ)$pMY-Sx%J6uwe9&lYd=%w_7f4JLzo@M$1cQu3 z%U@22Y*A7v7!GNuWEaT<2>&0@W5F~?J6tm#3+9s8C{lvNaq&^41QkeZ6e&S-5);J% zb*#$4c9h{Lssx3`$45~ms6t}fqH56GNR-zKt{$|7@LIvugBKxX@s#p-&=XP_PbrTF z14wKXHG+$#Ozixs5kx2G`q(IH1j!^OieoB@n!!?(;V5ba4@m6!RV(l&Qhw+zd`fLq zI~Z+*<_zTeTg^oeCPVa`fqW!0Av|ZGNiYw>a|W6Oiy%B_plPri!gB_i2H!(?&cIW_ z&k&w7@Klfr$)7b-#8XFqI@k>Q1f4AkPHXAQ?*Z zJ>{9;E=12gD6aPWY>;^p#$8w2f}j?+60XuJolh&&>X_wbK3?TNo-v0f;3Ym7FW9<17-N` z&@RY3T_4@V)m+8ZKA1sb?_V8)vm`dI4ngF7sx$RoJ=36L(8ow@roqd>00_@CcsY0* z!ZQuJ2V)>S)1Z6s9)xEa^awtH@Jxdq!6y)&Y0xwH0>U#5dIl>XJky|8um-|24SEH? zKzOD>?_djrXBzYl_Ck23L7(6c2+uU=6P$$bOoLZ~3lN@Z@Jet4!ZQtC4emjBropR0 z)*0vtcnk4b@DPM&8oU;GB(|0N2D4_;R}X=y|-_WMq*mIjcVn7!Ho~~R<@P< z2aP_`Vq3X?(3!;a)fd!OuLl`MV)F_{1h*jE4@U$EvrQB{uV7@51H$tPMh5vIJg;C> z5I}fd!Kk1pgy$8E4oX9KUcu-f1;X1urUWG8s^tutM|4a?m%{OKEnmH}_`7pIRv!f;jl`~y z3xkOezCtbx-iPoNa#1h`!dJ*e!2$?hA-@QgLih^#Mer?zuaJv_pCEjNTpVnIbhu?Q z_GPdW(pQPj*q6aU2wz3N3jT!fRrISM9l}@9B|!#+ucAwW+Yr8rE)5bEnfBtV=+Yo3 zgs-B@g8UG^iY^O62+ze@9u$S}6>@n{1~R;adGGgikOG;ZM8Eg@I;aKVwZT^e4IsQW z_==!8iR~>b18*_aIo4ZN1}P-=O1m;>Nn(1-0@d!{1c^)Hd&{ce`=wfJZ&?-WBr$z{ ziP~y)kZGC8PkuikvQEj`ASXo6?fI3Y07TF2*`nl!AcW|-J-bMXL3rNIk3ks-&)fMi zs0_K=BO&6dyZO4H79@*Whg_00gmA`w3Z8**#(oOglGu!`4^o!LXKa1YoWy2qebAT0 zWbA;d^UuMcuj4beAt=2fK4Tk#`XnY}dbZCm!9XKXo;|WD7zW|lBb$P85T5O`IhX?B z*({rbSrDEzlp4&3@T{TK;7bV4c-a!Hgz$`)Ex`{Ep7F9Z_!Yu4UbY6?No>Zp1&de4 zXKY)rk;Gk88kL?Jyl9-I?xjj3Be~iTD_UsMrLpU3I zgKVp*KC!Is3-UlXtNQ{M!r4d*3PCsz2erO8k?OfUmA9x_%0UB& zp4(G{~8w`T*+@7<+2nf$2NDn4J zcoso=Fdb56d_v@VRl{?^Y)D-tKaqS6De!qhBzjW4qYjopN-4=hvKqqke=Y>;AUyx) zLhw6;=l@&`c0hRk&&A*Xgy;WU3XVf~{?Dc0EJV-$Nm56@99)6u`9C4aEfU)kt^{+} zQtQNe!j)hRi9Ii_1cyjWPbi}HlMzJM#rK4(!H}P{*q(4Tm_cHC!lP=dYr*;TrYG<( zU!3q7gn#+sgm)plHi8>w{@HBBYa_T}ZV0c9;Dw10UK_y+C1fq$OZZ`N$VR-E@WXPD zc6bXKgjFDYmFPQl5Y~b4+6ZCT2*PV4gkf_Ce+d;~TL^y%72%7Jd1{7Li(xSGU)m| z5-x*`Q=(&kB>WD-UrURG>mmHLv`Dxa!s|H{4R=9!J%^&4d_wbOqmj4E(ovHP%biM<*>9+ufeb&g$) z9}gRo*sJm5VGj~>HGW=QS8IgZcj&F`JBONKr@dP2)wpIjki=Y#^=!;q;VdJuU+2{g z=R^3LLf!C72+x$O7p~+oxN6l4e}D|fY|Q%MuMnOoS3lfNVk3Pb?6EIC(kH^vBsS6~ z!UZHI()KFSC&QL$@sTzNH%8-&M6Or$TWtr~_IM(7Q24<(JlTM+#QSeI!OX4!A{ z%=5<@haE}mY^cWJAe7-}q{iVa5>vxh)qa|Ur%;AR;!Q*UKzv&?4J(kC8tSv@sj$A0 z*zcsC4x2*wUFFkZOA?#IX5ms(Ce~Y;g{dgRHEb59lb9O5p=$U{SnXhZ4xbHQA+b4p zHXKc2YN$s6&BHZDq8-(`m->FuD%=3+twcxBD%=7o-@sgdT8Dceb(H8bt;0VcEl-*< zZNk4Hos{S@ZNdwX->RE3ZNux3ol10>w&6Vpk0#oMSq|yA#zuKG(JstOVl&o0ylBeA zGS)tf9yZzFjI|GwNleCus*H6ApZp^}V;#ePNo>YChIx+A(doT}o&)^9u)dMljMkUJ zrVxH!eJOk%!q1{z!VVCA7VQ#th48n(u3;YtpQl~JHz0hTb_?I;GB{7Wg<~Onp1vHu z2jTPd%~PR1$lhb`MvOn2e258S4?I9*fUd&v3|bEjD94!|5cZ zkLir{3O5;vW$d+ZCxkQhT6hq`8S5MV3E_KWc2Z?FZS!%1H;YcIVHfqJu&y)-cCqgE{HSDV zmksjWT;KQa>S^`&WxdEuv!F-mk> z%nQGQwC!lhd>nqmTPe|HJ`R6`Y*znpr|-F+gug)!E74^>3AaPaVhl1rOoP3jD6CClGOypfeG&FF5-o+yFA4iW z9!KVvgl|EbqRi58B&0pcEDa|?UMp!bzbt$o@{SUn`DNi;NXwR{%<^ynVV{inYYJF9_d;gGg)?--Q{bOsq}63v*vLHRQADyRZz2i6YA> zwem^00%iERu_nxXBR+~XVL)P|SR1AoiLFidV^|Zy^ACRv8$fve;kvLHgy$cw3)_;| zD1Hien=-K|ehM$53`g-(nEM}HLlZ?V6~+2+Dv9lxKZhqt>^0%%@D7QIBEQ;dLnvZCSVj}(H3$+$X zIMhfqQ2*4RuUgx~(U1~KbfnwEcOkW3FlBaxGa*ft=rTLPk0Ct!XlJ+x!n2QdhAT*H zq`ShWZ&RLQk?sn6kl6EUS2&);M4F-^-5u7vW3s`K?g_spv2D61+(cp`t)aHs8>Snf z|MqI8WPg|e(KBbBC%FyLGkMx8IS?k?r5Z-{OrFjpIU#zMPIn~-!~76EOQ%1HAhD4i z3fGu2u}BYvX(+?J_fU9)#6&tw?dNbf>t1}Me}uX2Yq6335f&k_vulooWk^iyW7K|* zga!XIQSg6zoefJs_^a#Lusnpnx~7L!A^g=fJ**4ie~vg8Hiqy&N1O|vgYZ8`oDbVU z_@5)rhc7|+>+OZG7lgmwUI<@@@Ymam;SdOay}cNYhVYl!OW|Y)f0?}$&V=yS(#zpI z2!AcT94>+{ucH-xXxSHr^)o&$3& z{0qW!V6KH1No@bQ9Ug!{5MR2@VWeNSeL}s@K!j>l!^85Tj6Sy;U0b~Od~NhT%u}t zJ1mwhzJ_< z*6ftkXeA~3YMezaC1~WxO;aYTa3Hsp=rUPFAqdag$tFrdc-~GnQ31kpaL+xjhCJUUhv)*~`8GL4ZwSw~$*F$aVDijw%yNk} zQQA+ey>f{(65FG4i5n!Qy>_TP=N4%>&3^dW`;hoImloSz4~aavY0otB)pwaZqJohq zpUe3~H3*-}`9wVkpI`Y!69}JQ`9%u|pI-$;dkCLj1w>a8+cOhI=2XyGKr0}l1NU9kF=6_ zlEg+@NpvMKk>*p8J|+^K_()U4I1(FaiujnsMCz%nDvJ$9qU|0rbA+miR7gK1dX7*v zu?KSPnz*jh`UHlE{rru(eR(pP2oQJ%wq#}v>?`vuczW&q@Gu-${Ylsyj zHqshmH;IX~n%YlIvDAx?w3aCEYq62m5)DaAq;=F*wMAPa(Mb zL?05{7Ino&QzmwWtSe5S4Bye}ib$Z3Zfe+C?Wdl2n#A_H`eFo$tzmsJi^SCMe`>2I z#BWBTAKo!}ZX~ur7An#Aokk)JlBKzM4sR@uLXwo|dv{}T8qy8>X(BE``e8p!#7)Qv z^#rT`+r6py4{}L~K2}o^4Nac8y`B;qN$eBIQ{n{5a5kP25n;12K*ja6I7DKz(Mo^1`A3qfLgRC7_2#I)BC zRm11Rc$DGmd<*dtiEXbIB8|k

kk}~NiEl_u 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�qLw|CamVn1?i%t?Z>d@0+Ohu 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

{%GSFQJ*{jHH}bT$eJt{{w(qi}J*{n* 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�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 F{{hUIiEjV^ From 9afbbdfafd90eddb2661a8fc9c0943d1013ae07b Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 13 Nov 2020 17:14:13 +0530 Subject: [PATCH 039/161] Enable Travis CI status --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37cbc87..61cd3fb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # C# Sample Code for the CyberSource SDK - +[![Travis CI Status](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp.svg?branch=master)](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp) This repository contains two applications that demonstrate integration with the CyberSource REST APIs through our SDKs. From c75cffd91bfa54848e26fc61b36c5af437b92dca Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 2 Dec 2020 16:28:57 +0530 Subject: [PATCH 040/161] Updates for December 2020 Release --- Source/Configuration.cs | 10 ++- Source/Resource/jwsToken.txt | 2 +- Source/Resource/signatureHeaderValue.txt | 2 +- .../GetConversionDetailTransactions.cs | 4 +- .../GetPurchaseAndRefundDetails.cs | 4 +- ...trumentIdentifierForNetworkTokenization.cs | 60 ++++++++++++++++++ .../TransactionDetails/RetrieveTransaction.cs | 2 +- Source/lib/net461/ApiSdk.dll | Bin 28672 -> 28672 bytes Source/lib/netstandard/ApiSdk.dll | Bin 28160 -> 26112 bytes cybersource-rest-samples-csharp.csproj | 9 +-- cybersource-rest-samples-netcore.csproj | 4 +- cybersource-rest-samples-netcore.sln | 2 +- packages.config | 4 +- 13 files changed, 86 insertions(+), 17 deletions(-) create mode 100644 Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs diff --git a/Source/Configuration.cs b/Source/Configuration.cs index 491264c..74cea14 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -23,12 +23,16 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("logFileName", string.Empty); _configurationDictionary.Add("logFileMaxSize", "5242880"); _configurationDictionary.Add("timeout", "300000"); + + // Configs related to meta key + _configurationDictionary.Add("portfolioID", string.Empty); + _configurationDictionary.Add("useMetaKey", "false"); + // _configurationDictionary.Add("proxyAddress", string.Empty); // _configurationDictionary.Add("proxyPort", string.Empty); // _configurationDictionary.Add("proxyUsername", string.Empty); // _configurationDictionary.Add("proxyPassword", string.Empty); - return _configurationDictionary; } @@ -53,6 +57,10 @@ public Dictionary GetAlternativeConfiguration() // _configurationDictionary.Add("proxyUsername", string.Empty); // _configurationDictionary.Add("proxyPassword", string.Empty); + // Configs related to meta key + _configurationDictionary.Add("portfolioID", string.Empty); + _configurationDictionary.Add("useMetaKey", "false"); + return _configurationDictionary; } diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt index ed2ff83..5a8b86b 100644 --- a/Source/Resource/jwsToken.txt +++ b/Source/Resource/jwsToken.txt @@ -1 +1 @@ -eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJXZWQsIDMwIFNlcCAyMDIwIDEyOjM2OjQxIEdNVCJ9.ILvpFooL-HWQ638uxjFsQgTe44SkV4R46rWAcKgJXgzvsTSaMjE5wF5Yx4kKPqBer_cgklnmpKZz0piADfCcbf6AUKHk0AyK5U_ashILWwBDUcT_1D8qWw1h2zCIegyQ6KVZueUlX55ONS9oOG-12O0Lj6i8bOwtFoJUtCoStiCNpo1LOJDJKaar8TU6HigHqVXYsTDvfaE_XB4w_f6yqcywyqj19_PYGZtswbHvwHuW1z_NwCoxc_ixty9C-4MuxW9f7eUNhmdI13PMY0iC0xsWx4_mX7mC3AG-mdUUavJ7ZDqZoF14zBCuckh15ygcBfMm4l3kiFcpaM4El82ptw \ No newline at end of file +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJXZWQsIDI1IE5vdiAyMDIwIDE5OjI0OjA2IEdNVCJ9.KxUTuq6d8SywB_2ilErHmnPt3ecDotEyvobpLcMjE4jx_HyUW_NX4RTLm_yeT3Auu7GoLwhenN3ra8sSPF0srGw0Ys1yR2bVlUq1fA4p9Yo-Wa_xr0xDPkRfDOBRviKVkuG5qqQ-0oXsi5FwbvSDCM0nnYAghWJLttZ3KM97jsMRTKPQACtEKEhEkVAglRRJ-x8nczipJepFKisy_TWHeBKdw1T8Yi6swB3hqZ-lKZuicbkn7M04s5lx8xpKRVPOcnpw9euFF5A8ethcHXUxdtOhbsqVXTVhnvjm3RGLgwlz__bRTpETdclcFLBXI1eqaGCpupoHJ4GQl9TQI1AaDw \ No newline at end of file diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt index 0f3748f..9efa8ac 100644 --- a/Source/Resource/signatureHeaderValue.txt +++ b/Source/Resource/signatureHeaderValue.txt @@ -1 +1 @@ -keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="dsyy7FQGdK8C56n1JmyWHQwJ084BTdOUBOsd1euaVjE=" \ No newline at end of file +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="h8iHaMK6fcau59hxigeUUjZ0S4U/D8CJOIGki4uZAoY=" \ No newline at end of file diff --git a/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs b/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs index 5202b27..20e5f5b 100644 --- a/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs +++ b/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs @@ -11,8 +11,8 @@ public class GetConversionDetailTransactions { public static ReportingV3ConversionDetailsGet200Response Run() { - var startTime = DateTime.ParseExact("2019-03-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2019-03-21T23:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2020-09-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-09-21T23:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; try { diff --git a/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs b/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs index 07816cd..2f8b879 100644 --- a/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs +++ b/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs @@ -11,8 +11,8 @@ public class GetPurchaseAndRefundDetails { public static ReportingV3PurchaseRefundDetailsGet200Response Run() { - var startTime = DateTime.ParseExact("2020-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2020-01-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2020-09-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2020-09-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; string paymentSubtype = "VI"; string viewBy = "requestDate"; diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs new file mode 100644 index 0000000..eb7fdf3 --- /dev/null +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement +{ + public class EnrollInstrumentIdentifierForNetworkTokenization + { + public static void Run() + { + string instrumentIdentifierTokenId = "7010000000016241111"; + string profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + + string type = "enrollable card"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2031"; + string cardSecurityCode = "123"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear, + SecurityCode: cardSecurityCode + ); + + string billToAddress1 = "1 Market St"; + string billToLocality = "San Francisco"; + string billToAdministrativeArea = "CA"; + string billToPostalCode = "94105"; + string billToCountry = "US"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo( + Address1: billToAddress1, + Locality: billToLocality, + AdministrativeArea: billToAdministrativeArea, + PostalCode: billToPostalCode, + Country: billToCountry + ); + + var requestObj = new PostInstrumentIdentifierEnrollmentRequest( + Type: type, + Card: card, + BillTo: billTo + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InstrumentIdentifierApi(clientConfig); + apiInstance.PostInstrumentIdentifierEnrollment(instrumentIdentifierTokenId, requestObj, profileid); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/Source/Samples/TransactionDetails/RetrieveTransaction.cs b/Source/Samples/TransactionDetails/RetrieveTransaction.cs index 32b3792..2b8cf88 100644 --- a/Source/Samples/TransactionDetails/RetrieveTransaction.cs +++ b/Source/Samples/TransactionDetails/RetrieveTransaction.cs @@ -14,7 +14,7 @@ public static TssV2TransactionsGet200Response Run() { string id = SimpleAuthorizationInternet.Run().Id; - System.Threading.Thread.Sleep(10000); + System.Threading.Thread.Sleep(15000); try { diff --git a/Source/lib/net461/ApiSdk.dll b/Source/lib/net461/ApiSdk.dll index 6a2a1fa442b72e0367ff207ca7894e21aed4c19d..d649a8d7d8d157515ac09ae6cbb9d480addf2f0b 100644 GIT binary patch delta 6823 zcmchcdvsLwwa54GoOvfRnfFXcz!{P-frKQ4_aiVdp%M{I2$7&D6Ny3^#Sr9HXynYO zL=b5SXWffL?M;B9k%|{bTJKV6qSERjRuQqF*BZnpqJ@iAthIFSJwG7yv3mcwtFzYm zoc;ao{d=6>oZp<8Bt9VG17g!U!|a}Yi#i_2R!+2cJbtZsP!}R%jI9O8*27AnzCc8j zQ@7}Mi#3`3?ZB^DNCk|LUJfv?5RTJ)6DuuX-)If3#wc5RA@;rnAKX#=V)s)pC`3$;d4prEYPXUm!iIP>%Zu;A>IJJMr993RzQgFC--Lmr}EEg^+zsyTr?+Vg*II*{k!wT3k&B&%8m>L z$XNqWISe2k#JKj3)~01kR?w7R!X^3AgkD`OJW~eXL@(!xx+=UC;APYg=xcLkh-Q6% zPMJ&hn4l}2_$OPnCj*kYCwENX4%A=Rh;OH@ahjkfZMEG5QT_VdOwAi`z)4@T%K;C& zn_X^L?M~WlaJ6^7V=>IN;+p|8g7Y0F*lyj4yf%&cUY=Hs%yjf45824ET8USI?s32k zmS&d;4mc_Mfs)I>`dTHtIo#L&+I!LerO6Ne12GpbijI?iV5!5 zGx7pW*L$gpU%RO0@<6e72(;;dl4h|~mBa(V?@ zRb2F?ks9pa#xACtYxZ#VP0o&C|66XgiT%~gOlFsHAx`L4Qw;fp+K3!5EJdapZ$;J_ zTaaUocc?;xHshTrs<^va?k+Xo)Fdv>^!!9qSDBjb%RCrOD-7?cHMllgu!k^gz}~{} z3{Er*fAqGYpIXHy&2iNP+iW$+8SZ)k-Z-|>GK{;9#kD|r9^YlpvY(D1m@8qWIvXQ``0_}L2o0SB#5 zVxOC&I_&tls=#Zk+JhDN$)&;(Rvp1A&+}@Q3fsfj4k+2Ds_=SB!Kc2L^|XR4?N!wb zaeQoH1uU?U`ckS}SS`he7Uib1`Y)*(d~aZ7dR{8G$N!FMgBGdYL*;-srFz2lhU$jV zBe>G?itj_!2jitW>N}yKoG#_ZmQL`)_oO;yaiY3Lsux5j1Yo{YhlCT=;HwToOy=tR zoe+ejQr+x#qFOH1F9V&B39F>)4>&>3Ep%#kOXD=Ahrs<(eTV5Gpi9+>lgomKqKmyJ;6%e9BB=#GiW3ckO{#uZCvIN1RR800qRNVB zsnRQaosa`LGC9xZL{%u&No<%4!m8f>m3Q3 zr8;2m#IIkSQoUz)qS`LiW7bY6fL*BclA@sYw6tencZKkrRI{+V!b@g68urWFB-bf* zG`uQRh3hL+Z%LKr{Z=i4-$^yp3x=XgdMSpFWv<0+G8Dt_H7Qq_(@+jxq7pbObHg%R zh7!O_=k+Sf@T0Oy)tZrQ7y~Y;9>@rz8Y0!#84*J%442B~EJRfx)h{wi4P#+!{>)UT z{TUNcPLs*$&N9O|sFbSCc{!@VQyUL+WbV)S293vW^&5(_v>T=O0dCm|aEnx5fh%MgWeDP=ihzQ#}i)1<1w;VYn0s&+4_tE9Rb z*Qo;Lr4$@Wuf=w6j>L@#kboOp3k)-12mSWI5AWrc8x7xsBdikOblj+4F(#tf{jaK3 zU@1)11XeTM2P zxU)Ewd(PHmm~(Lv^v}oGZ>H8)QyO2tGE(bnQUVpVuD+nCbq(a>1~@l2XR8ISoD^{j}}&13pR9 z1N3|DIy>v-6ct{R98Lu9co00uL8p8JJC7psKs8WvPM(~ z7eNold!$q1YlH<{xd(0x-U@r5HR$7-6|h`%SXRR-vDl+Qj|%7fdj5pr+HucMpaUMj zXToXti4T96hVpB%E$%jt5Itg|Z#4QP zz7e7WR^mr)AFQ=5LT7_d6Lyir)$D<%mHU+* z*vH(6!xTXp{1l%O9@ve{f>)6_@D{QFjw8o1r!p(ppADa)U(3$*%*7y#MbHdd0iIUC zBx79s5ZaOVz>CH%j9*4l+>5cv)XVVz#ucUkjzQUg*$^|zj4|WPF6N8O0p@WgsMJbj zhKQOmheebbXLd1rnFCBP@LaafX^D97cJ;nNluL82FYC-T5%Q$Nh<2%xLcB(UXJ@D$r<4Im?Sx1;R#8S6XrN?6pg@47`2#>;U_&FSccj04v4h<0@Q7X#C4Pu?>6njOBvPU_t;Bykp_{T8|;QNH1 zpEl5)W!c)hz7_-ikU!b?ufwK7>TeU4&X zCC-X8UBSb=vH2ipi!7SYMM*L%c{NK$bLI~$DFxb#CguuOuk_$;L zq$oyFjG{*UOhb{uXjUzH?oEZFL$A4Mxo53#$Je{-eXjUg;c&+{y5k-C;hXZNtam4b z#pg~KDUV;lxWEGzKBJ|EK(Uo53JvWXCem%n`HVhpaYVz;Y|?VzOmSKXyD22FvyM!& z=|V5=g@Xrngp~6m;#58#)Tevl#oiWP(m`x+2NznD;WfoBHi=!*r19@I!4{3Og&t^J zk!vvF;u=hNsf3M$4y)<>MVdKEKGFDzQg|i)>xkZTx_z<*K-*e8mH^DHt*k8^9y`9V z?R4dH!)6!8 delta 6908 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 diff --git a/Source/lib/netstandard/ApiSdk.dll b/Source/lib/netstandard/ApiSdk.dll index 34bd8afa5269053896c3555252a9f35a6dc026c6..422b123f9e81fb0377e845a7fb0d206e89576983 100644 GIT binary patch literal 26112 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 literal 28160 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 Source\lib\net461\ApiSdk.dll - + False - packages\CyberSource.Authentication.0.0.0.7\lib\AuthenticationSdk.dll + packages\CyberSource.Authentication.0.0.0.8\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.7\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.8\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -262,6 +262,7 @@ + diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 92bb501..bd18646 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -36,8 +36,8 @@ - - + + diff --git a/cybersource-rest-samples-netcore.sln b/cybersource-rest-samples-netcore.sln index 624a04b..a2b220c 100644 --- a/cybersource-rest-samples-netcore.sln +++ b/cybersource-rest-samples-netcore.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30517.126 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-samples-netcore", "cybersource-rest-samples-netcore.csproj", "{EB3608A8-87BA-48C2-B5FA-99B0C400C3AC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "cybersource-rest-samples-netcore", "cybersource-rest-samples-netcore.csproj", "{EB3608A8-87BA-48C2-B5FA-99B0C400C3AC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/packages.config b/packages.config index 6622a03..fc4a494 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - - + + From d054724fa60b24f4e40f152c8cffe82943f68451 Mon Sep 17 00:00:00 2001 From: snavinch Date: Thu, 28 Jan 2021 13:57:56 +0530 Subject: [PATCH 041/161] + Changes related to OAuth --- Source/Configuration.cs | 26 ++- .../Samples/Authentication/StandAloneOAuth.cs | 199 ++++++++++++++++++ 2 files changed, 220 insertions(+), 5 deletions(-) create mode 100644 Source/Samples/Authentication/StandAloneOAuth.cs diff --git a/Source/Configuration.cs b/Source/Configuration.cs index 5f539b8..a0665df 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -27,11 +27,19 @@ public Dictionary GetConfiguration() // Configs related to meta key _configurationDictionary.Add("portfolioID", string.Empty); _configurationDictionary.Add("useMetaKey", "false"); - - // _configurationDictionary.Add("proxyAddress", string.Empty); - // _configurationDictionary.Add("proxyPort", string.Empty); - // _configurationDictionary.Add("proxyUsername", string.Empty); - // _configurationDictionary.Add("proxyPassword", string.Empty); + + // Configs related to OAuth + _configurationDictionary.Add("enableClientCert", "false"); + _configurationDictionary.Add("clientCertDirectory", "Resource"); + _configurationDictionary.Add("clientCertFile", ""); + _configurationDictionary.Add("clientCertPassword", ""); + _configurationDictionary.Add("clientId", ""); + _configurationDictionary.Add("clientSecret", ""); + + // _configurationDictionary.Add("proxyAddress", string.Empty); + // _configurationDictionary.Add("proxyPort", string.Empty); + // _configurationDictionary.Add("proxyUsername", string.Empty); + // _configurationDictionary.Add("proxyPassword", string.Empty); return _configurationDictionary; } @@ -60,6 +68,14 @@ public Dictionary GetAlternativeConfiguration() _configurationDictionary.Add("portfolioID", string.Empty); _configurationDictionary.Add("useMetaKey", "false"); + // Configs related to OAuth + _configurationDictionary.Add("enableClientCert", "false"); + _configurationDictionary.Add("clientCertDirectory", "Resource"); + _configurationDictionary.Add("clientCertFile", ""); + _configurationDictionary.Add("clientCertPassword", ""); + _configurationDictionary.Add("clientId", ""); + _configurationDictionary.Add("clientSecret", ""); + return _configurationDictionary; } diff --git a/Source/Samples/Authentication/StandAloneOAuth.cs b/Source/Samples/Authentication/StandAloneOAuth.cs new file mode 100644 index 0000000..bdd02b6 --- /dev/null +++ b/Source/Samples/Authentication/StandAloneOAuth.cs @@ -0,0 +1,199 @@ +using System; +using System.Collections.Generic; +using CyberSource.Model; +using CyberSource.Api; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Authentication +{ + public class StandAloneOAuth + { + private static string code = ""; + private static string grantType = ""; + private static string refreshToken = ""; + private static string accessToken = ""; + private static Dictionary configDictionary; + public static bool createUsingAuthCode = false; + + public static void Run() + { + CallOAuthAPI(null); + } + + public static void CallOAuthAPI(string[] args) + { + AccessTokenResponse result ; + if(createUsingAuthCode) + { + // Create Access Token using Auth Code + code = "fHA73z"; + grantType = "authorization_code"; + result = postAccessTokenFromAuthCode(); + } + else { + // Create Access Token using Refresh Token + grantType = "refresh_token"; + refreshToken = "eyJraWQiOiIxMGM2MTYxNzg2MzE2ZWMzMGJjZmI5ZDcyZGU4MzFjOSIsImFsZyI6IlJTMjU2In0.eyJqdGkiOiJmODFiM2M3ZC00YWMzLTQ2MDctYTIyYi00YzUwZjgyMjQwMDkiLCJzY29wZXMiOlsicGF5bWVudHNfd2l0aF9zdGFuZGFsb25lX2NyZWRpdCIsInBheW1lbnRzX3dpdGhvdXRfc3RhbmRhbG9uZV9jcmVkaXQiLCJ0cmFuc2FjdGlvbnMiXSwiaWF0IjoxNjExODE4NjQzNDUwLCJhc3NvY2lhdGVkX2lkIjoiZWJjMl9jYXNfb2F1dGh0cDIiLCJjbGllbnRfaWQiOiJCeW94NGp4VWk2IiwibWVyY2hhbnRfaWQiOiJjZ2syX3B1c2hfdGVzdHMiLCJleHBpcmVzX2luIjoxNjQzMzU0NjQzNDUwLCJ0b2tlbl90eXBlIjoicmVmcmVzaF90b2tlbiIsImdyYW50X3R5cGUiOiJhdXRob3JpemF0aW9uX2NvZGUiLCJncmFudF90aW1lIjoiMjAyMTAxMjcyMzIzIn0.SYZ62TFuukxrPqjiGVPBzs7BHaiTkDOO-Rqjzfl4rZi_hP0pkHSTograBFgLZ3GnWxNUzgXsU5zTGqF2nllI_j0kvMIWuST6xAoDyXRHlDfcM8MQYDI7CaJGVTFbJh1U_qzN6sUUlVhKpk_BXt_4LH03_11HiQHIwnZfTcNCoDrvlnO_xkRonrEipPJb6iMO3ZEv6Z8UBc0Q-L_nR6DhHlL5M3U-S-Fi7pusq5bOyUi38CW9nwAQo9A0F3PG8n0Scji2LatjGUB4Y5hTCiRWEbIoa49fQwq0hroi11o32YriQQnMqGaaH_bCq8NgLQabRv1I73I37443lW4w0Hoy-A"; + result = postAccessTokenFromRefreshToken(); + } + + if(result != null) { + refreshToken = result.RefreshToken; + accessToken = result.AccessToken; + + // Save accessToken and refreshToken before making API calls + configDictionary["accessToken"] = accessToken; + configDictionary["refreshToken"] = refreshToken; + + // Set Authentication to OAuth + configDictionary["authenticationType"] = "OAuth"; + + //Call Payments SampleCode using OAuth, Set Authentication to OAuth in Sample Code Configuration + SimpleAuthorizationInternet(); + } + + } + + public static AccessTokenResponse postAccessTokenFromAuthCode() + { + AccessTokenResponse result = null; + try + { + configDictionary = new Configuration().GetConfiguration(); + configDictionary["authenticationType"] = "Mutual_Auth"; + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var requestObj = new CreateAccessTokenRequest( + Code: code, + GrantType: grantType, + ClientId: configDictionary["clientId"], + ClientSecret: configDictionary["clientSecret"] + ); + + var apiInstance = new OAuthApi(clientConfig); + result = apiInstance.PostAccessTokenRequest(requestObj); + Console.WriteLine(result); + return result; + + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + + public static AccessTokenResponse postAccessTokenFromRefreshToken() + { + AccessTokenResponse result = null; + try + { + configDictionary = new Configuration().GetConfiguration(); + configDictionary["authenticationType"] = "Mutual_Auth"; + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var requestObj = new CreateAccessTokenRequest( + RefreshToken: refreshToken, + GrantType: grantType, + ClientId: configDictionary["clientId"], + ClientSecret: configDictionary["clientSecret"] + ); + + var apiInstance = new OAuthApi(clientConfig); + result = apiInstance.PostAccessTokenRequest(requestObj); + Console.WriteLine(result); + return result; + + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + + public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From 2b6ec98272edfc0656f88c97768abc22a02b8d1a Mon Sep 17 00:00:00 2001 From: snavinch Date: Fri, 12 Feb 2021 14:32:36 +0530 Subject: [PATCH 042/161] + Documentation for OAuth --- README_Net461.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++ README_NetCore.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) diff --git a/README_Net461.md b/README_Net461.md index 19682ae..4300d21 100644 --- a/README_Net461.md +++ b/README_Net461.md @@ -48,6 +48,7 @@ To set your API credentials for an API request, configure the following informat merchantKeyId = your_key_serial_number merchantsecretKey = your_key_shared_secret useMetaKey = false + enableClientCert = false ``` * Jwt @@ -60,6 +61,7 @@ To set your API credentials for an API request, configure the following informat keyFileName = your_merchant_id keysDirectory = Resource useMetaKey = false + enableClientCert = false ``` * MetaKey Http @@ -71,6 +73,7 @@ To set your API credentials for an API request, configure the following informat merchantsecretKey = your_metakey_shared_secret portfolioId = your_portfolio_id useMetaKey = true + enableClientCert = false ``` * MetaKey JWT @@ -83,8 +86,70 @@ To set your API credentials for an API request, configure the following informat keyFileName = your_portfolio_id keysDirectory = Resource useMetaKey = true + enableClientCert = false ``` + * OAuth + + CyberSource OAuth uses mutual authentication. A Client Certificate is required to authenticate against the OAuth API. + + Refer to [Supporting Mutual Authentication](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro/Supporting-Mutual-Authentication.html) to get information on how to generate Client certificate. + + If the certificate (Public Key) and Private Key are in 2 different files, merge them into a single .p12 file using `openssl`. + + ```bash + openssl pkcs12 -export -out certificate.p12 -inkey privateKey.key -in certificate.crt + ``` + + Set the run environment to OAuth enabled URLs. OAuth only works in these run environments. + + ``` + // For TESTING use + _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + // For PRODUCTION use + // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") + ``` + + To generate tokens, an Auth Code is required. The Auth Code can be generated by following the instructions given in [Integrating OAuth](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro/integrating_OAuth.html). + + This generated Auth Code can then be used to create the Access Token and Refresh Token. + + In `Source/Configuration.cs` file, set the following properties. + + Note that `authenticationType` is set to `MutualAuth` only to generate the Access Token and the Refresh Token. + + ``` + authenticationType = MutualAuth + enableClientCert = true + clientCertDirectory = resources + clientCertFile = your_client_cert in .p12 format + clientCertPassword = password_for_client_cert + clientId = your_client_id + clientSecret = your_client_secret + ``` + + Once the tokens are obtained, the `authenticationType` can then be set to `OAuth` to use the generated Access Token to send requests to other APIs. + + ``` + authenticationType = OAuth + enableClientCert = true + clientCertDirectory = resources + clientCertFile = your_client_cert - .p12 format + clientCertPassword = password_for_client_cert + clientId = your_client_id + clientSecret = your_client_secret + accessToken = generated_access_token + refreshToken = generated_refresh_token + ``` + + The Access Token is valid for 15 mins, whereas the Refresh Token is valid for 1 year. + + Once the Access Token expires, use the Refresh Token to generate another Access Token. + + Refer to [StandAloneOAuth.cs](https://github.com/CyberSource/cybersource-rest-samples-csharp/tree/master/Source/Samples/Authentication/StandaloneOAuth.cs) to understand how to consume OAuth. + + For further information, refer to the documentation at [Cybersource OAuth 2.0](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro.html). + ## Switching between the sandbox environment and the production environment CyberSource maintains a complete sandbox environment for testing and development purposes. This sandbox environment is an exact duplicate of our production environment with the transaction authorization and settlement process simulated. By default, this SDK is configured to communicate with the sandbox environment. To switch to the production environment, set the appropriate environment constant in `Source\Configuration.cs` file. For example: @@ -97,6 +162,15 @@ _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox" // _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); ``` +To use OAuth, switch to OAuth enabled URLs + +```csharp + // For TESTING use + _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + // For PRODUCTION use + // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") +``` + The [API Reference Guide](https://developer.cybersource.com/api/reference/api-reference.html) provides examples of what information is needed for a particular request and how that information would be formatted. Using those examples, you can easily determine what methods would be necessary to include that information in a request using this SDK. ## License diff --git a/README_NetCore.md b/README_NetCore.md index 6b9bb33..db3fe24 100644 --- a/README_NetCore.md +++ b/README_NetCore.md @@ -115,6 +115,7 @@ To set your API credentials for an API request, configure the following informat merchantKeyId = your_key_serial_number merchantsecretKey = your_key_shared_secret useMetaKey = false + enableClientCert = false ``` * Jwt @@ -127,6 +128,7 @@ To set your API credentials for an API request, configure the following informat keyFileName = your_merchant_id keysDirectory = Resource useMetaKey = false + enableClientCert = false ``` * MetaKey Http @@ -138,6 +140,7 @@ To set your API credentials for an API request, configure the following informat merchantsecretKey = your_metakey_shared_secret portfolioId = your_portfolio_id useMetaKey = true + enableClientCert = false ``` * MetaKey JWT @@ -150,8 +153,70 @@ To set your API credentials for an API request, configure the following informat keyFileName = your_portfolio_id keysDirectory = Resource useMetaKey = true + enableClientCert = false ``` + * OAuth + + CyberSource OAuth uses mutual authentication. A Client Certificate is required to authenticate against the OAuth API. + + Refer to [Supporting Mutual Authentication](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro/Supporting-Mutual-Authentication.html) to get information on how to generate Client certificate. + + If the certificate (Public Key) and Private Key are in 2 different files, merge them into a single .p12 file using `openssl`. + + ```bash + openssl pkcs12 -export -out certificate.p12 -inkey privateKey.key -in certificate.crt + ``` + + Set the run environment to OAuth enabled URLs. OAuth only works in these run environments. + + ``` + // For TESTING use + _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + // For PRODUCTION use + // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") + ``` + + To generate tokens, an Auth Code is required. The Auth Code can be generated by following the instructions given in [Integrating OAuth](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro/integrating_OAuth.html). + + This generated Auth Code can then be used to create the Access Token and Refresh Token. + + In `Source/Configuration.cs` file, set the following properties. + + Note that `authenticationType` is set to `MutualAuth` only to generate the Access Token and the Refresh Token. + + ``` + authenticationType = MutualAuth + enableClientCert = true + clientCertDirectory = resources + clientCertFile = your_client_cert in .p12 format + clientCertPassword = password_for_client_cert + clientId = your_client_id + clientSecret = your_client_secret + ``` + + Once the tokens are obtained, the `authenticationType` can then be set to `OAuth` to use the generated Access Token to send requests to other APIs. + + ``` + authenticationType = OAuth + enableClientCert = true + clientCertDirectory = resources + clientCertFile = your_client_cert - .p12 format + clientCertPassword = password_for_client_cert + clientId = your_client_id + clientSecret = your_client_secret + accessToken = generated_access_token + refreshToken = generated_refresh_token + ``` + + The Access Token is valid for 15 mins, whereas the Refresh Token is valid for 1 year. + + Once the Access Token expires, use the Refresh Token to generate another Access Token. + + Refer to [StandAloneOAuth.cs](https://github.com/CyberSource/cybersource-rest-samples-csharp/tree/master/Source/Samples/Authentication/StandaloneOAuth.cs) to understand how to consume OAuth. + + For further information, refer to the documentation at [Cybersource OAuth 2.0](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro.html). + ## Switching between the sandbox environment and the production environment CyberSource maintains a complete sandbox environment for testing and development purposes. This sandbox environment is an exact duplicate of our production environment with the transaction authorization and settlement process simulated. By default, this SDK is configured to communicate with the sandbox environment. To switch to the production environment, set the appropriate environment constant in `Source\Configuration.cs` file. For example: @@ -164,6 +229,15 @@ _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox" // _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); ``` +To use OAuth, switch to OAuth enabled URLs + +```csharp + // For TESTING use + _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + // For PRODUCTION use + // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") +``` + The [API Reference Guide](https://developer.cybersource.com/api/reference/api-reference.html) provides examples of what information is needed for a particular request and how that information would be formatted. Using those examples, you can easily determine what methods would be necessary to include that information in a request using this SDK. ## License From 08bf605cfeec3563a7eca43b579089ba04348778 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Sat, 6 Mar 2021 00:26:38 +0530 Subject: [PATCH 043/161] Update versions of authentication and client SDKs --- Source/Resource/jwsToken.txt | 2 +- Source/Resource/signatureHeaderValue.txt | 2 +- .../Authentication/StandAloneHttpSignature.cs | 2 +- Source/Samples/Authentication/StandAloneJWT.cs | 2 +- .../AuthenticationWithNORedirect.cs | 12 ++++++++++-- .../AuthenticationWithNewAccount.cs | 2 +- .../EnrollWithCustomerIdAsPaymentInformation.cs | 2 +- .../EnrollWithPendingAuthentication.cs | 2 +- .../EnrollWithTransientToken.cs | 2 +- .../EnrollWithTravelInformation.cs | 2 +- .../PendingAuthenticationWithUnknownPath.cs | 2 +- .../SetupCompletionWithCardNumber.cs | 12 ++++++++++-- .../SetupCompletionWithFlexTransientToken.cs | 2 +- ...letionWithFluidDataValueAndPaymentSolution.cs | 2 +- .../SetupCompletionWithSecureStorageToken.cs | 2 +- .../SetupCompletionWithTMSToken.cs | 2 +- .../SetupCompletionWithTokenizedCard.cs | 2 +- .../ValidateAuthenticationResults.cs | 12 ++++++++++-- ...tNetfundingInformationForAccountOrMerchant.cs | 4 ++-- .../DecisionManager/AddDataToList.cs | 10 +++++++++- .../DecisionManager/BasicDMTransaction.cs | 12 +++++++++++- .../DecisionManager/MarkAsSuspect.cs | 16 +++++++++++++++- .../Verification/AddressMatchNotFound.cs | 2 +- .../ApartmentNumberMissingOrNotFound.cs | 2 +- .../Verification/CanadianBillingDetails.cs | 2 +- .../Verification/ComplianceStatusCompleted.cs | 2 +- .../CustomerMatchDeniedPartiesList.cs | 12 ++++++++++-- .../ExportComplianceInformationProvided.cs | 2 +- .../Verification/MultipleLineItems.cs | 2 +- .../Verification/MultipleSanctionLists.cs | 2 +- .../RiskManagement/Verification/NoCompanyName.cs | 2 +- .../Verification/ShippingDetailsNotUSOrCanada.cs | 2 +- .../Verification/VerboseRequestWithAllFields.cs | 12 ++++++++++-- cybersource-rest-samples-csharp.csproj | 9 +++++---- cybersource-rest-samples-netcore.csproj | 4 ++-- packages.config | 4 ++-- 36 files changed, 120 insertions(+), 47 deletions(-) diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt index 5a8b86b..086e5a0 100644 --- a/Source/Resource/jwsToken.txt +++ b/Source/Resource/jwsToken.txt @@ -1 +1 @@ -eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJXZWQsIDI1IE5vdiAyMDIwIDE5OjI0OjA2IEdNVCJ9.KxUTuq6d8SywB_2ilErHmnPt3ecDotEyvobpLcMjE4jx_HyUW_NX4RTLm_yeT3Auu7GoLwhenN3ra8sSPF0srGw0Ys1yR2bVlUq1fA4p9Yo-Wa_xr0xDPkRfDOBRviKVkuG5qqQ-0oXsi5FwbvSDCM0nnYAghWJLttZ3KM97jsMRTKPQACtEKEhEkVAglRRJ-x8nczipJepFKisy_TWHeBKdw1T8Yi6swB3hqZ-lKZuicbkn7M04s5lx8xpKRVPOcnpw9euFF5A8ethcHXUxdtOhbsqVXTVhnvjm3RGLgwlz__bRTpETdclcFLBXI1eqaGCpupoHJ4GQl9TQI1AaDw \ No newline at end of file +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJUaHUsIDI1IEZlYiAyMDIxIDA4OjM5OjIzIEdNVCJ9.vZQQwKPxChmUN7xYvVFFuZF3q20RgykuPQtkRbsitdg5f_LcbjQD-ox_w6vhDfD7L5b6R6Va2IsJMFcbknVjoc920eRIaIL65dSm7d4XBwLQ1Mm-naYkp0vcyz2RFlo8uOW4Pe_iiSlIJsiWQD-yHu5VedjRQ558-lt3uA_CbufzoNJ-nGtKKj9XgQFycI9YIpgJH8skaBabyvVVR5vOimyKO7p72Gy1U4J6n4QpCqFCnWVCjKIe8mFEmWkMZRdJ_cZiOTpAxqjmMftdz8aAT1pOHOrqecqc1VwoXHA7edLEV6cizVHT3_ruMfhU6qFuLIAFBSGCjFfTmDlzFl0bBA \ No newline at end of file diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt index 9efa8ac..60114d8 100644 --- a/Source/Resource/signatureHeaderValue.txt +++ b/Source/Resource/signatureHeaderValue.txt @@ -1 +1 @@ -keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="h8iHaMK6fcau59hxigeUUjZ0S4U/D8CJOIGki4uZAoY=" \ No newline at end of file +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="M4CWv81cvaYIjS2Pdg94UXdtAS9NQf2k6bAent6negs=" \ No newline at end of file diff --git a/Source/Samples/Authentication/StandAloneHttpSignature.cs b/Source/Samples/Authentication/StandAloneHttpSignature.cs index db89f14..c902b4d 100644 --- a/Source/Samples/Authentication/StandAloneHttpSignature.cs +++ b/Source/Samples/Authentication/StandAloneHttpSignature.cs @@ -99,7 +99,7 @@ public static async Task CallCyberSourceAPI(string request) // HTTP GET request using (var client = new HttpClient()) { - string resource = "/reporting/v3/reports?startTime=2018-10-01T00:00:00.0Z&endTime=2018-10-30T23:59:59.0Z&timeQueryType=executedTime&reportMimeType=application/xml"; + string resource = "/reporting/v3/reports?startTime=2021-01-01T00:00:00.0Z&endTime=2021-01-02T23:59:59.0Z&timeQueryType=executedTime&reportMimeType=application/xml"; /* Add Request Header :: "v-c-merchant-id" set value to Cybersource Merchant ID or v-c-merchant-id * This ID can be found on EBC portal. diff --git a/Source/Samples/Authentication/StandAloneJWT.cs b/Source/Samples/Authentication/StandAloneJWT.cs index ec7eb78..df46906 100644 --- a/Source/Samples/Authentication/StandAloneJWT.cs +++ b/Source/Samples/Authentication/StandAloneJWT.cs @@ -100,7 +100,7 @@ public static async Task CallCyberSourceAPI(string request) // HTTP GET request using (var client = new HttpClient()) { - string resource = "/reporting/v3/reports?startTime=2018-10-01T00:00:00.0Z&endTime=2018-10-30T23:59:59.0Z&timeQueryType=executedTime&reportMimeType=application/xml"; + string resource = "/reporting/v3/reports?startTime=2021-02-01T00:00:00.0Z&endTime=2021-02-02T23:59:59.0Z&timeQueryType=executedTime&reportMimeType=application/xml"; Console.WriteLine("\nSample 1: GET call - CyberSource Reporting API"); Console.WriteLine(" -- RequestURL -- "); diff --git a/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs index 9a77b9f..5e845a7 100644 --- a/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs +++ b/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs @@ -12,8 +12,16 @@ public class AuthenticationWithNORedirect public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( - Code: clientReferenceInformationCode + string clientReferenceInformationPartnerDeveloperId = "7891234"; + string clientReferenceInformationPartnerSolutionId = "89012345"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner ); string orderInformationAmountDetailsCurrency = "USD"; diff --git a/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs index 7f651f6..b6986f2 100644 --- a/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs +++ b/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs @@ -12,7 +12,7 @@ public class AuthenticationWithNewAccount public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "New Account"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs index 6d05410..4146061 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs @@ -12,7 +12,7 @@ public class EnrollWithCustomerIdAsPaymentInformation public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs b/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs index 78ab39c..b867ade 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs @@ -12,7 +12,7 @@ public class EnrollWithPendingAuthentication public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs b/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs index 1205a75..42b72a9 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs @@ -12,7 +12,7 @@ public class EnrollWithTransientToken public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs index f8728bf..80f2f78 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs @@ -12,7 +12,7 @@ public class EnrollWithTravelInformation public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs b/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs index 70bab11..055d7cb 100644 --- a/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs +++ b/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs @@ -12,7 +12,7 @@ public class PendingAuthenticationWithUnknownPath public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs index 20b6a1d..beaf5b1 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs @@ -12,8 +12,16 @@ public class SetupCompletionWithCardNumber public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( - Code: clientReferenceInformationCode + string clientReferenceInformationPartnerDeveloperId = "7891234"; + string clientReferenceInformationPartnerSolutionId = "89012345"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner ); string paymentInformationCardType = "001"; diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs index e0e12b5..7e8ddbc 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs @@ -12,7 +12,7 @@ public class SetupCompletionWithFlexTransientToken public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs index a1318cc..5a60848 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs @@ -12,7 +12,7 @@ public class SetupCompletionWithFluidDataValueAndPaymentSolution public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs index 511440c..94c732e 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs @@ -12,7 +12,7 @@ public class SetupCompletionWithSecureStorageToken public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs index a04439c..39d3900 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs @@ -12,7 +12,7 @@ public class SetupCompletionWithTMSToken public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs index 3105e5a..fb2850d 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs @@ -12,7 +12,7 @@ public class SetupCompletionWithTokenizedCard public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 6afc141..05002f4 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -12,8 +12,16 @@ public class ValidateAuthenticationResults public static RiskV1AuthenticationResultsPost201Response Run() { string clientReferenceInformationCode = "pavalidatecheck"; - Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( - Code: clientReferenceInformationCode + string clientReferenceInformationPartnerDeveloperId = "7891234"; + string clientReferenceInformationPartnerSolutionId = "89012345"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner ); string orderInformationAmountDetailsCurrency = "USD"; diff --git a/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs b/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs index a2d57e1..bf102d7 100644 --- a/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs +++ b/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs @@ -11,8 +11,8 @@ public class GetNetfundingInformationForAccountOrMerchant { public static ReportingV3NetFundingsGet200Response Run() { - var startTime = DateTime.ParseExact("2019-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2019-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2021-01-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2021-01-02T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; string groupName = null; try diff --git a/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs b/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs index 61aa65b..bc95070 100644 --- a/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs +++ b/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs @@ -45,8 +45,16 @@ public static RiskV1UpdatePost201Response Run() ); string clientReferenceInformationCode = "54323007"; + string clientReferenceInformationPartnerDeveloperId = "7891234"; + string clientReferenceInformationPartnerSolutionId = "89012345"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( - Code: clientReferenceInformationCode + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner ); string riskInformationMarkingDetailsAction = "add"; diff --git a/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs b/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs index 56eb20a..04d7c69 100644 --- a/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs +++ b/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs @@ -12,8 +12,18 @@ public class BasicDMTransaction public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; + string clientReferenceInformationComments = "decision manager case"; + string clientReferenceInformationPartnerDeveloperId = "7891234"; + string clientReferenceInformationPartnerSolutionId = "89012345"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( - Code: clientReferenceInformationCode + Code: clientReferenceInformationCode, + Comments: clientReferenceInformationComments, + Partner: clientReferenceInformationPartner ); string paymentInformationCardNumber = "4444444444444448"; diff --git a/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs b/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs index e125f72..689c08a 100644 --- a/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs +++ b/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs @@ -30,8 +30,22 @@ public static RiskV1UpdatePost201Response Run() MarkingDetails: riskInformationMarkingDetails ); + string clientReferenceInformationCode = "12345"; + string clientReferenceInformationPartnerDeveloperId = "1234"; + string clientReferenceInformationPartnerSolutionId = "3321"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + var requestObj = new FraudMarkingActionRequest( - RiskInformation: riskInformation + RiskInformation: riskInformation, + ClientReferenceInformation: clientReferenceInformation ); try diff --git a/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs b/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs index 7b940bd..9542d64 100644 --- a/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs +++ b/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-error response check"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs b/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs index 8b9f4f3..1021633 100644 --- a/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs +++ b/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-error response check"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs b/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs index a6182ad..2f74ba4 100644 --- a/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs +++ b/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-All fields"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs index 579b91d..354d7eb 100644 --- a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs +++ b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs @@ -12,7 +12,7 @@ public class ComplianceStatusCompleted public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs b/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs index 351d13c..966e4be 100644 --- a/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs +++ b/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs @@ -13,9 +13,17 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; string clientReferenceInformationComments = "Export-basic"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + string clientReferenceInformationPartnerDeveloperId = "7891234"; + string clientReferenceInformationPartnerSolutionId = "89012345"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, - Comments: clientReferenceInformationComments + Comments: clientReferenceInformationComments, + Partner: clientReferenceInformationPartner ); string orderInformationBillToAddress1 = "901 Metro Centre Blvd"; diff --git a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs index 36a358d..151727b 100644 --- a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs +++ b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs @@ -13,7 +13,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; string clientReferenceInformationComments = "Export -fields"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs b/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs index ae4efd3..b8a21af 100644 --- a/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs +++ b/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-All fields"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs index 9ac7f45..71f462c 100644 --- a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs +++ b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs @@ -13,7 +13,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; string clientReferenceInformationComments = "All fields"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/NoCompanyName.cs b/Source/Samples/RiskManagement/Verification/NoCompanyName.cs index c2105ef..8538ab9 100644 --- a/Source/Samples/RiskManagement/Verification/NoCompanyName.cs +++ b/Source/Samples/RiskManagement/Verification/NoCompanyName.cs @@ -12,7 +12,7 @@ public class NoCompanyName public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs b/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs index 8e7f485..c7d3d5d 100644 --- a/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs +++ b/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-All fields"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs b/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs index 0c0d50f..14fd6d9 100644 --- a/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs +++ b/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs @@ -13,9 +13,17 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-All fields"; - Riskv1addressverificationsClientReferenceInformation clientReferenceInformation = new Riskv1addressverificationsClientReferenceInformation( + string clientReferenceInformationPartnerDeveloperId = "7891234"; + string clientReferenceInformationPartnerSolutionId = "89012345"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, - Comments: clientReferenceInformationComments + Comments: clientReferenceInformationComments, + Partner: clientReferenceInformationPartner ); string orderInformationBillToAddress1 = "12301 research st"; diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 8b7c838..ff3f1ed 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,13 +37,13 @@ False Source\lib\net461\ApiSdk.dll - + False - packages\CyberSource.Authentication.0.0.0.8\lib\AuthenticationSdk.dll + packages\CyberSource.Authentication.0.0.0.9\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.8\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.9\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -96,6 +96,7 @@ + diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index bd18646..c747b62 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -36,8 +36,8 @@ - - + + diff --git a/packages.config b/packages.config index fc4a494..f51802d 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - - + + From 4ec91ee14f4bae8225eaab256a53caa042211899 Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 17 Mar 2021 12:29:56 +0530 Subject: [PATCH 044/161] - Removed Hard coded values --- .../Samples/Authentication/StandAloneOAuth.cs | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/Source/Samples/Authentication/StandAloneOAuth.cs b/Source/Samples/Authentication/StandAloneOAuth.cs index bdd02b6..51368cd 100644 --- a/Source/Samples/Authentication/StandAloneOAuth.cs +++ b/Source/Samples/Authentication/StandAloneOAuth.cs @@ -1,66 +1,66 @@ -using System; -using System.Collections.Generic; -using CyberSource.Model; -using CyberSource.Api; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Cybersource_rest_samples_dotnet.Samples.Authentication -{ - public class StandAloneOAuth - { - private static string code = ""; - private static string grantType = ""; - private static string refreshToken = ""; - private static string accessToken = ""; - private static Dictionary configDictionary; - public static bool createUsingAuthCode = false; - +using System; +using System.Collections.Generic; +using CyberSource.Model; +using CyberSource.Api; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Authentication +{ + public class StandAloneOAuth + { + private static string code = ""; + private static string grantType = ""; + private static string refreshToken = ""; + private static string accessToken = ""; + private static Dictionary configDictionary; + public static bool createUsingAuthCode = false; + public static void Run() { CallOAuthAPI(null); - } - - public static void CallOAuthAPI(string[] args) - { - AccessTokenResponse result ; - if(createUsingAuthCode) - { - // Create Access Token using Auth Code - code = "fHA73z"; - grantType = "authorization_code"; - result = postAccessTokenFromAuthCode(); - } - else { - // Create Access Token using Refresh Token - grantType = "refresh_token"; - refreshToken = "eyJraWQiOiIxMGM2MTYxNzg2MzE2ZWMzMGJjZmI5ZDcyZGU4MzFjOSIsImFsZyI6IlJTMjU2In0.eyJqdGkiOiJmODFiM2M3ZC00YWMzLTQ2MDctYTIyYi00YzUwZjgyMjQwMDkiLCJzY29wZXMiOlsicGF5bWVudHNfd2l0aF9zdGFuZGFsb25lX2NyZWRpdCIsInBheW1lbnRzX3dpdGhvdXRfc3RhbmRhbG9uZV9jcmVkaXQiLCJ0cmFuc2FjdGlvbnMiXSwiaWF0IjoxNjExODE4NjQzNDUwLCJhc3NvY2lhdGVkX2lkIjoiZWJjMl9jYXNfb2F1dGh0cDIiLCJjbGllbnRfaWQiOiJCeW94NGp4VWk2IiwibWVyY2hhbnRfaWQiOiJjZ2syX3B1c2hfdGVzdHMiLCJleHBpcmVzX2luIjoxNjQzMzU0NjQzNDUwLCJ0b2tlbl90eXBlIjoicmVmcmVzaF90b2tlbiIsImdyYW50X3R5cGUiOiJhdXRob3JpemF0aW9uX2NvZGUiLCJncmFudF90aW1lIjoiMjAyMTAxMjcyMzIzIn0.SYZ62TFuukxrPqjiGVPBzs7BHaiTkDOO-Rqjzfl4rZi_hP0pkHSTograBFgLZ3GnWxNUzgXsU5zTGqF2nllI_j0kvMIWuST6xAoDyXRHlDfcM8MQYDI7CaJGVTFbJh1U_qzN6sUUlVhKpk_BXt_4LH03_11HiQHIwnZfTcNCoDrvlnO_xkRonrEipPJb6iMO3ZEv6Z8UBc0Q-L_nR6DhHlL5M3U-S-Fi7pusq5bOyUi38CW9nwAQo9A0F3PG8n0Scji2LatjGUB4Y5hTCiRWEbIoa49fQwq0hroi11o32YriQQnMqGaaH_bCq8NgLQabRv1I73I37443lW4w0Hoy-A"; - result = postAccessTokenFromRefreshToken(); - } - - if(result != null) { - refreshToken = result.RefreshToken; - accessToken = result.AccessToken; - - // Save accessToken and refreshToken before making API calls - configDictionary["accessToken"] = accessToken; - configDictionary["refreshToken"] = refreshToken; - - // Set Authentication to OAuth - configDictionary["authenticationType"] = "OAuth"; - - //Call Payments SampleCode using OAuth, Set Authentication to OAuth in Sample Code Configuration - SimpleAuthorizationInternet(); - } - - } - - public static AccessTokenResponse postAccessTokenFromAuthCode() - { - AccessTokenResponse result = null; - try - { + } + + public static void CallOAuthAPI(string[] args) + { + AccessTokenResponse result ; + if(createUsingAuthCode) + { + // Create Access Token using Auth Code + code = ""; + grantType = "authorization_code"; + result = postAccessTokenFromAuthCode(); + } + else { + // Create Access Token using Refresh Token + grantType = "refresh_token"; + refreshToken = ""; + result = postAccessTokenFromRefreshToken(); + } + + if(result != null) { + refreshToken = result.RefreshToken; + accessToken = result.AccessToken; + + // Save accessToken and refreshToken before making API calls + configDictionary["accessToken"] = accessToken; + configDictionary["refreshToken"] = refreshToken; + + // Set Authentication to OAuth + configDictionary["authenticationType"] = "OAuth"; + + //Call Payments SampleCode using OAuth, Set Authentication to OAuth in Sample Code Configuration + SimpleAuthorizationInternet(); + } + + } + + public static AccessTokenResponse postAccessTokenFromAuthCode() + { + AccessTokenResponse result = null; + try + { configDictionary = new Configuration().GetConfiguration(); configDictionary["authenticationType"] = "Mutual_Auth"; var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); @@ -75,21 +75,21 @@ public static AccessTokenResponse postAccessTokenFromAuthCode() var apiInstance = new OAuthApi(clientConfig); result = apiInstance.PostAccessTokenRequest(requestObj); Console.WriteLine(result); - return result; - - } - catch (Exception e) - { + return result; + + } + catch (Exception e) + { Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - - public static AccessTokenResponse postAccessTokenFromRefreshToken() - { - AccessTokenResponse result = null; - try - { + return null; + } + } + + public static AccessTokenResponse postAccessTokenFromRefreshToken() + { + AccessTokenResponse result = null; + try + { configDictionary = new Configuration().GetConfiguration(); configDictionary["authenticationType"] = "Mutual_Auth"; var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); @@ -104,16 +104,16 @@ public static AccessTokenResponse postAccessTokenFromRefreshToken() var apiInstance = new OAuthApi(clientConfig); result = apiInstance.PostAccessTokenRequest(requestObj); Console.WriteLine(result); - return result; - - } - catch (Exception e) - { + return result; + + } + catch (Exception e) + { Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - + return null; + } + } + public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() { string clientReferenceInformationCode = "TC50171_3"; @@ -194,6 +194,6 @@ public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() Console.WriteLine("Exception on calling the API : " + e.Message); return null; } - } - } -} + } + } +} From bb9bac4b8f092d53b6ed7ae98e7ca4ba4df3db74 Mon Sep 17 00:00:00 2001 From: snavinch Date: Mon, 29 Mar 2021 17:55:12 +0530 Subject: [PATCH 045/161] + OAuth Changes --- cybersource-rest-samples-csharp.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 8b7c838..7764072 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -96,6 +96,7 @@ + From e22f74027de1eceee416160a1a382e6ec369149b Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 1 Apr 2021 18:39:18 +0530 Subject: [PATCH 046/161] Upgrade to latest version --- ...entInstrumentAndShippingAddressCreation.cs | 145 ++++++++++++++++++ ...zationWithTMSTokenBypassingNetworkToken.cs | 68 ++++++++ cybersource-rest-samples-csharp.csproj | 6 +- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 5 files changed, 219 insertions(+), 4 deletions(-) create mode 100644 Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs create mode 100644 Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs diff --git a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs new file mode 100644 index 0000000..cd6f341 --- /dev/null +++ b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + + List processingInformationActionList = new List (); + processingInformationActionList.Add("TOKEN_CREATE"); + + List processingInformationActionTokenTypes = new List (); + processingInformationActionTokenTypes.Add("paymentInstrument"); + processingInformationActionTokenTypes.Add("shippingAddress"); + bool processingInformationCapture = false; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + ActionList: processingInformationActionList, + ActionTokenTypes: processingInformationActionTokenTypes, + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardSecurityCode = "123"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + SecurityCode: paymentInformationCardSecurityCode + ); + + string paymentInformationCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; + Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + Customer: paymentInformationCustomer + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + string orderInformationShipToFirstName = "John"; + string orderInformationShipToLastName = "Doe"; + string orderInformationShipToAddress1 = "1 Market St"; + string orderInformationShipToLocality = "san francisco"; + string orderInformationShipToAdministrativeArea = "CA"; + string orderInformationShipToPostalCode = "94105"; + string orderInformationShipToCountry = "US"; + Ptsv2paymentsOrderInformationShipTo orderInformationShipTo = new Ptsv2paymentsOrderInformationShipTo( + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName, + Address1: orderInformationShipToAddress1, + Locality: orderInformationShipToLocality, + AdministrativeArea: orderInformationShipToAdministrativeArea, + PostalCode: orderInformationShipToPostalCode, + Country: orderInformationShipToCountry + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + bool tokenInformationPaymentInstrument_default = true; + Ptsv2paymentsTokenInformationPaymentInstrument tokenInformationPaymentInstrument = new Ptsv2paymentsTokenInformationPaymentInstrument( + _Default: tokenInformationPaymentInstrument_default + ); + + bool tokenInformationShippingAddress_default = true; + Ptsv2paymentsTokenInformationShippingAddress tokenInformationShippingAddress = new Ptsv2paymentsTokenInformationShippingAddress( + _Default: tokenInformationShippingAddress_default + ); + + Ptsv2paymentsTokenInformation tokenInformation = new Ptsv2paymentsTokenInformation( + PaymentInstrument: tokenInformationPaymentInstrument, + ShippingAddress: tokenInformationShippingAddress + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs b/Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs new file mode 100644 index 0000000..9097604 --- /dev/null +++ b/Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class AuthorizationWithTMSTokenBypassingNetworkToken + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationInstrumentIdentifierId = "7010000000016241111"; + Ptsv2paymentsPaymentInformationInstrumentIdentifier paymentInformationInstrumentIdentifier = new Ptsv2paymentsPaymentInformationInstrumentIdentifier( + Id: paymentInformationInstrumentIdentifierId + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + InstrumentIdentifier: paymentInformationInstrumentIdentifier + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string tokenInformationNetworkTokenOption = "ignore"; + Ptsv2paymentsTokenInformation tokenInformation = new Ptsv2paymentsTokenInformation( + NetworkTokenOption: tokenInformationNetworkTokenOption + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index ff3f1ed..c2e22f9 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,9 +41,9 @@ False packages\CyberSource.Authentication.0.0.0.9\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.9\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.10\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -144,6 +144,7 @@ + @@ -160,6 +161,7 @@ + diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index c747b62..e8adabc 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -37,7 +37,7 @@ - + diff --git a/packages.config b/packages.config index f51802d..2f678ed 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From cebd0be5ea065cfe089642511c189b9796d9ad40 Mon Sep 17 00:00:00 2001 From: snavinch Date: Fri, 23 Apr 2021 00:40:58 +0530 Subject: [PATCH 047/161] + StandAloneMetaKey Sample Code + Changes to failing Sample codes --- .../Authentication/StandAloneMetaKey.cs | 119 ++++++++++++++++++ .../ListPaymentInstrumentsForCustomer.cs | 4 +- ...ymentInstrumentsForInstrumentIdentifier.cs | 4 +- cybersource-rest-samples-csharp.csproj | 1 + 4 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 Source/Samples/Authentication/StandAloneMetaKey.cs diff --git a/Source/Samples/Authentication/StandAloneMetaKey.cs b/Source/Samples/Authentication/StandAloneMetaKey.cs new file mode 100644 index 0000000..b50984b --- /dev/null +++ b/Source/Samples/Authentication/StandAloneMetaKey.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using CyberSource.Model; +using CyberSource.Api; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Authentication +{ + + public class StandAloneMetaKey + { + // initialize dictionary object + private static readonly Dictionary _configurationDictionary = new Dictionary(); + + public static Dictionary GetConfiguration() + { + _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); + _configurationDictionary.Add("merchantID", "merchannt998"); + _configurationDictionary.Add("merchantsecretKey", "X+ynT3aTCD643tZgnEnnLD+sd5pplDGMw5vG5klPvVY="); + _configurationDictionary.Add("merchantKeyId", "7a7f20a6-1f7f-4780-9a79-3ff8acf7cc83"); + _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + + // Configs related to meta key + _configurationDictionary.Add("portfolioID", "developercp"); + _configurationDictionary.Add("useMetaKey", "true"); + return _configurationDictionary; + } + + public static void Run() + { + SimpleAuthorizationInternet(); + } + + public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs index 063bcbb..1775131 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class ListPaymentInstrumentsForCustomer { - public static PaymentInstrumentListForCustomer Run() + public static PaymentInstrumentList Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string profileid = null; @@ -21,7 +21,7 @@ public static PaymentInstrumentListForCustomer Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); - PaymentInstrumentListForCustomer result = apiInstance.GetCustomerPaymentInstrumentsList(customerTokenId, profileid, offset, limit); + PaymentInstrumentList result = apiInstance.GetCustomerPaymentInstrumentsList(customerTokenId, profileid, offset, limit); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs index 5d5113f..513bd53 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class ListPaymentInstrumentsForInstrumentIdentifier { - public static PaymentInstrumentListForCustomer Run() + public static PaymentInstrumentList Run() { string instrumentIdentifierTokenId = "7010000000016241111"; string profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -21,7 +21,7 @@ public static PaymentInstrumentListForCustomer Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - PaymentInstrumentListForCustomer result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, offset, limit); + PaymentInstrumentList result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, offset, limit); Console.WriteLine(result); return result; } diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index c2e22f9..0c7b23b 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -97,6 +97,7 @@ + From 44ae68f8c25205f2e594eab7b8f2460b5bd93c31 Mon Sep 17 00:00:00 2001 From: snavinch Date: Fri, 23 Apr 2021 12:06:05 +0530 Subject: [PATCH 048/161] + Code Review Changes --- Source/Samples/Authentication/StandAloneMetaKey.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Samples/Authentication/StandAloneMetaKey.cs b/Source/Samples/Authentication/StandAloneMetaKey.cs index b50984b..8382c93 100644 --- a/Source/Samples/Authentication/StandAloneMetaKey.cs +++ b/Source/Samples/Authentication/StandAloneMetaKey.cs @@ -14,7 +14,7 @@ public class StandAloneMetaKey // initialize dictionary object private static readonly Dictionary _configurationDictionary = new Dictionary(); - public static Dictionary GetConfiguration() + private static Dictionary GetConfiguration() { _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); _configurationDictionary.Add("merchantID", "merchannt998"); @@ -30,10 +30,10 @@ public static Dictionary GetConfiguration() public static void Run() { - SimpleAuthorizationInternet(); + SimplePaymentUsingMetaKey(); } - public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() + public static PtsV2PaymentsPost201Response SimplePaymentUsingMetaKey() { string clientReferenceInformationCode = "TC50171_3"; Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( From 917636936473bf2fa4c2fef636183d4826e98bc2 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Mon, 26 Apr 2021 19:56:24 +0530 Subject: [PATCH 049/161] Updated to new version of Auth SDK with removed hostnames --- README.md | 39 +++++++++++++++++++++++++++++++++++ README_Net461.md | 14 ++++++------- README_NetCore.md | 14 ++++++------- Source/Configuration.cs | 2 +- Source/lib/net461/ApiSdk.dll | Bin 28672 -> 26624 bytes 5 files changed, 54 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 61cd3fb..0f9158a 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,42 @@ For a more detailed explanation of how to use this application, please refer to The application `cybersource-rest-samples-netcore.sln` contains working code samples in a .NET Core 3.1 application the [CyberSource .NET Standard SDK](https://github.com/CyberSource/cybersource-rest-client-dotnetstandard). For a more detailed explanation of how to use this application, please refer to [README_NetCore.md](./README_NetCore.md). + +## Run Environments + +The run environments that were supported in CyberSource .NET SDK and CyberSource .NET Standard SDK have been deprecated. +Moving forward, the SDKs will only support the direct hostname as the run environment. + +For the old run environments previously used, they should be replaced by the following hostnames: + +| Old Run Environment | New Hostname Value | +|-----------------------------------------------|------------------------------------------------| +|`cybersource.environment.sandbox` |`apitest.cybersource.com` | +|`cybersource.environment.production` |`api.cybersource.com` | +|`cybersource.environment.mutualauth.sandbox` |`api-matest.cybersource.com` | +|`cybersource.environment.mutualauth.production`|`api-ma.cybersource.com` | +|`bankofamerica.environment.sandbox` |`apitest.merchant-services.bankofamerica.com` | +|`bankofamerica.environment.production` |`api.merchant-services.bankofamerica.com` | +|`cybersource.in.environment.sandbox` |`apitest.cybersource.com` | +|`cybesource.in.environment.production` |`api.in.cybersource.com` | +|`cybesource.environment.mutualauth.sit` |`pnrstage.ic3.com:8451` | + +For example, replace the following code in the Configuration file: + +```csharp +// For TESTING use +_configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + +// For PRODUCTION use +// _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); +``` + +with the following code: + +```csharp +// For TESTING use +_configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); + +// For PRODUCTION use +// _configurationDictionary.Add("runEnvironment", "api.cybersource.com"); +``` \ No newline at end of file diff --git a/README_Net461.md b/README_Net461.md index 4300d21..7d85cdf 100644 --- a/README_Net461.md +++ b/README_Net461.md @@ -103,11 +103,11 @@ To set your API credentials for an API request, configure the following informat Set the run environment to OAuth enabled URLs. OAuth only works in these run environments. - ``` + ```csharp // For TESTING use - _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + _configurationDictionary.Add("runEnvironment", "api-matest.cybersource.com") // For PRODUCTION use - // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") + // _configurationDictionary.Add("runEnvironment", "api-ma.cybersource.com") ``` To generate tokens, an Auth Code is required. The Auth Code can be generated by following the instructions given in [Integrating OAuth](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro/integrating_OAuth.html). @@ -156,19 +156,19 @@ CyberSource maintains a complete sandbox environment for testing and development ```csharp // For TESTING use -_configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); +_configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); // For PRODUCTION use -// _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); +// _configurationDictionary.Add("runEnvironment", "api.cybersource.com"); ``` To use OAuth, switch to OAuth enabled URLs ```csharp // For TESTING use - _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + _configurationDictionary.Add("runEnvironment", "api-matest.cybersource.com") // For PRODUCTION use - // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") + // _configurationDictionary.Add("runEnvironment", "api-ma.cybersource.com") ``` The [API Reference Guide](https://developer.cybersource.com/api/reference/api-reference.html) provides examples of what information is needed for a particular request and how that information would be formatted. Using those examples, you can easily determine what methods would be necessary to include that information in a request using this SDK. diff --git a/README_NetCore.md b/README_NetCore.md index db3fe24..aa64d4a 100644 --- a/README_NetCore.md +++ b/README_NetCore.md @@ -170,11 +170,11 @@ To set your API credentials for an API request, configure the following informat Set the run environment to OAuth enabled URLs. OAuth only works in these run environments. - ``` + ```csharp // For TESTING use - _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + _configurationDictionary.Add("runEnvironment", "api-matest.cybersource.com") // For PRODUCTION use - // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") + // _configurationDictionary.Add("runEnvironment", "api-ma.cybersource.com") ``` To generate tokens, an Auth Code is required. The Auth Code can be generated by following the instructions given in [Integrating OAuth](https://developer.cybersource.com/api/developer-guides/OAuth/cybs_extend_intro/integrating_OAuth.html). @@ -223,19 +223,19 @@ CyberSource maintains a complete sandbox environment for testing and development ```csharp // For TESTING use -_configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); +_configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); // For PRODUCTION use -// _configurationDictionary.Add("runEnvironment", "cybersource.environment.production"); +// _configurationDictionary.Add("runEnvironment", "api.cybersource.com"); ``` To use OAuth, switch to OAuth enabled URLs ```csharp // For TESTING use - _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox") + _configurationDictionary.Add("runEnvironment", "api-matest.cybersource.com") // For PRODUCTION use - // _configurationDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.production") + // _configurationDictionary.Add("runEnvironment", "api-ma.cybersource.com") ``` The [API Reference Guide](https://developer.cybersource.com/api/reference/api-reference.html) provides examples of what information is needed for a particular request and how that information would be formatted. Using those examples, you can easily determine what methods would be necessary to include that information in a request using this SDK. diff --git a/Source/Configuration.cs b/Source/Configuration.cs index a0665df..f45b627 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -15,7 +15,7 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); _configurationDictionary.Add("keysDirectory", "Resource"); _configurationDictionary.Add("keyFilename", "testrest"); - _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); _configurationDictionary.Add("keyAlias", "testrest"); _configurationDictionary.Add("keyPass", "testrest"); _configurationDictionary.Add("enableLog", "FALSE"); diff --git a/Source/lib/net461/ApiSdk.dll b/Source/lib/net461/ApiSdk.dll index d649a8d7d8d157515ac09ae6cbb9d480addf2f0b..4bf7285cc356569be043240f9775e0434645d84e 100644 GIT binary patch literal 26624 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 From 5332eddfc031a05e6199ed38d43c6eb27f144651 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 27 Apr 2021 20:25:56 +0530 Subject: [PATCH 050/161] Changes based on feedback --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 0f9158a..2cf0232 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,6 @@ For the old run environments previously used, they should be replaced by the fol |`cybersource.environment.production` |`api.cybersource.com` | |`cybersource.environment.mutualauth.sandbox` |`api-matest.cybersource.com` | |`cybersource.environment.mutualauth.production`|`api-ma.cybersource.com` | -|`bankofamerica.environment.sandbox` |`apitest.merchant-services.bankofamerica.com` | -|`bankofamerica.environment.production` |`api.merchant-services.bankofamerica.com` | |`cybersource.in.environment.sandbox` |`apitest.cybersource.com` | |`cybesource.in.environment.production` |`api.in.cybersource.com` | |`cybesource.environment.mutualauth.sit` |`pnrstage.ic3.com:8451` | From 7184bd09c894aae14aa6544c498ae06766a20f4b Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 28 Apr 2021 12:46:29 +0530 Subject: [PATCH 051/161] + Changes to make OAuth Samplecode StandAlone --- .../Samples/Authentication/StandAloneOAuth.cs | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/Source/Samples/Authentication/StandAloneOAuth.cs b/Source/Samples/Authentication/StandAloneOAuth.cs index 51368cd..008aa53 100644 --- a/Source/Samples/Authentication/StandAloneOAuth.cs +++ b/Source/Samples/Authentication/StandAloneOAuth.cs @@ -8,12 +8,29 @@ namespace Cybersource_rest_samples_dotnet.Samples.Authentication { + public class StandAloneOAuth { - private static string code = ""; - private static string grantType = ""; - private static string refreshToken = ""; - private static string accessToken = ""; + + private static Dictionary GetConfiguration() + { + Dictionary _configDictionary = new Dictionary(); + _configDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox"); + + // Configs related to OAuth + _configDictionary.Add("enableClientCert", "true"); + _configDictionary.Add("clientCertDirectory", "Source\\Resource"); + _configDictionary.Add("clientCertFile", ""); + _configDictionary.Add("clientCertPassword", ""); + _configDictionary.Add("clientId", ""); + _configDictionary.Add("clientSecret", ""); + return _configDictionary; + } + + private static string code; + private static string grantType; + private static string refreshToken; + private static string accessToken; private static Dictionary configDictionary; public static bool createUsingAuthCode = false; @@ -61,7 +78,7 @@ public static AccessTokenResponse postAccessTokenFromAuthCode() AccessTokenResponse result = null; try { - configDictionary = new Configuration().GetConfiguration(); + configDictionary = GetConfiguration(); configDictionary["authenticationType"] = "Mutual_Auth"; var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); @@ -90,7 +107,7 @@ public static AccessTokenResponse postAccessTokenFromRefreshToken() AccessTokenResponse result = null; try { - configDictionary = new Configuration().GetConfiguration(); + configDictionary = GetConfiguration(); configDictionary["authenticationType"] = "Mutual_Auth"; var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); From e8a33b30638add9f6f0002d059e5893656086e3d Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 28 Apr 2021 12:55:04 +0530 Subject: [PATCH 052/161] - Removed Credentials --- Source/Samples/Authentication/StandAloneMetaKey.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Samples/Authentication/StandAloneMetaKey.cs b/Source/Samples/Authentication/StandAloneMetaKey.cs index 8382c93..8031ca7 100644 --- a/Source/Samples/Authentication/StandAloneMetaKey.cs +++ b/Source/Samples/Authentication/StandAloneMetaKey.cs @@ -17,13 +17,13 @@ public class StandAloneMetaKey private static Dictionary GetConfiguration() { _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); - _configurationDictionary.Add("merchantID", "merchannt998"); - _configurationDictionary.Add("merchantsecretKey", "X+ynT3aTCD643tZgnEnnLD+sd5pplDGMw5vG5klPvVY="); - _configurationDictionary.Add("merchantKeyId", "7a7f20a6-1f7f-4780-9a79-3ff8acf7cc83"); + _configurationDictionary.Add("merchantID", ""); + _configurationDictionary.Add("merchantsecretKey", ""); + _configurationDictionary.Add("merchantKeyId", ""); _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); // Configs related to meta key - _configurationDictionary.Add("portfolioID", "developercp"); + _configurationDictionary.Add("portfolioID", ""); _configurationDictionary.Add("useMetaKey", "true"); return _configurationDictionary; } From e25b0cf597f5d834c1c2ee280d09e25e66c5e9b5 Mon Sep 17 00:00:00 2001 From: snavinch Date: Thu, 29 Apr 2021 11:22:00 +0530 Subject: [PATCH 053/161] + Upgraded to latest version --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 0c7b23b..0c35a81 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,9 +41,9 @@ False packages\CyberSource.Authentication.0.0.0.9\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.10\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.11\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index e8adabc..f226ce1 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -37,7 +37,7 @@ - + diff --git a/packages.config b/packages.config index 2f678ed..6a6a567 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From fdd9720347564b08982b04e9a0cf3ca1ceb65861 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 30 Apr 2021 15:45:20 +0530 Subject: [PATCH 054/161] Updated to new version of Auth SDK with removed hostnames --- Source/lib/netstandard/ApiSdk.dll | Bin 26112 -> 26112 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Source/lib/netstandard/ApiSdk.dll b/Source/lib/netstandard/ApiSdk.dll index 422b123f9e81fb0377e845a7fb0d206e89576983..2a2faa8fc6c14a4f408916db568c8b59535c413e 100644 GIT binary patch delta 154 zcmZoT!`N_!aY6^n4M(}#8+&fCa%pHXFmTm|GBB`APGM7;Jc-Q!DijYAI>4qq`8%6F zR45B1q{6N}Ihq|NR0 n0ag}KiS%!i8{$j^7AZ}gvEbGbk7?JF_e49tJhJ&noDDkwckD8q delta 142 zcmZoT!`N_!aY6^n^n#{)8+&fCPA+0oVAs%OVBo3^o!rZ2I{6%%CX^pP`4gMTWFvMM zKWlOryUFBf>@fAEn>Vtz8!<9$wzMji6Zlj9`3V24Wo|uLe=Q6-BdRy=i8#Q@l6 Date: Fri, 30 Apr 2021 16:42:08 +0530 Subject: [PATCH 055/161] Updated to new version of Auth SDK with removed hostnames --- Source/Configuration.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Configuration.cs b/Source/Configuration.cs index f45b627..30352d1 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -51,7 +51,7 @@ public Dictionary GetAlternativeConfiguration() _configurationDictionary.Add("merchantKeyId", "e547c3d3-16e4-444c-9313-2a08784b906a"); _configurationDictionary.Add("keysDirectory", "Resource"); _configurationDictionary.Add("keyFilename", "testrest_cpctv"); - _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); _configurationDictionary.Add("keyAlias", "testrest_cpctv"); _configurationDictionary.Add("keyPass", "testrest_cpctv"); _configurationDictionary.Add("enableLog", "FALSE"); From 650c23933efa1dbc071517a5ad4de9d48d22e786 Mon Sep 17 00:00:00 2001 From: snavinch Date: Tue, 15 Jun 2021 20:48:19 +0530 Subject: [PATCH 056/161] + Changes to StandaloneOAuth & StandAloneMetaKey --- Source/Samples/Authentication/StandAloneMetaKey.cs | 2 +- Source/Samples/Authentication/StandAloneOAuth.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Samples/Authentication/StandAloneMetaKey.cs b/Source/Samples/Authentication/StandAloneMetaKey.cs index 8031ca7..550cd07 100644 --- a/Source/Samples/Authentication/StandAloneMetaKey.cs +++ b/Source/Samples/Authentication/StandAloneMetaKey.cs @@ -20,7 +20,7 @@ private static Dictionary GetConfiguration() _configurationDictionary.Add("merchantID", ""); _configurationDictionary.Add("merchantsecretKey", ""); _configurationDictionary.Add("merchantKeyId", ""); - _configurationDictionary.Add("runEnvironment", "cybersource.environment.sandbox"); + _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); // Configs related to meta key _configurationDictionary.Add("portfolioID", ""); diff --git a/Source/Samples/Authentication/StandAloneOAuth.cs b/Source/Samples/Authentication/StandAloneOAuth.cs index 008aa53..3ffd760 100644 --- a/Source/Samples/Authentication/StandAloneOAuth.cs +++ b/Source/Samples/Authentication/StandAloneOAuth.cs @@ -15,7 +15,7 @@ public class StandAloneOAuth private static Dictionary GetConfiguration() { Dictionary _configDictionary = new Dictionary(); - _configDictionary.Add("runEnvironment", "cybersource.environment.mutualauth.sandbox"); + _configDictionary.Add("runEnvironment", "api-matest.cybersource.com"); // Configs related to OAuth _configDictionary.Add("enableClientCert", "true"); From 16123de308e99aa6440c651be2fda7a374034468 Mon Sep 17 00:00:00 2001 From: snavinch Date: Fri, 18 Jun 2021 01:08:57 +0530 Subject: [PATCH 057/161] + Changes to Samples based on latest SDK --- Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs | 2 +- .../RiskManagement/DecisionManager/AddDuplicateInformation.cs | 2 +- Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs | 2 +- .../Samples/RiskManagement/Verification/AddressMatchNotFound.cs | 2 +- .../Verification/ApartmentNumberMissingOrNotFound.cs | 2 +- .../RiskManagement/Verification/CanadianBillingDetails.cs | 2 +- .../RiskManagement/Verification/ComplianceStatusCompleted.cs | 2 +- .../Verification/CustomerMatchDeniedPartiesList.cs | 2 +- .../Verification/ExportComplianceInformationProvided.cs | 2 +- Source/Samples/RiskManagement/Verification/MultipleLineItems.cs | 2 +- .../RiskManagement/Verification/MultipleSanctionLists.cs | 2 +- Source/Samples/RiskManagement/Verification/NoCompanyName.cs | 2 +- .../RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs | 2 +- .../RiskManagement/Verification/VerboseRequestWithAllFields.cs | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs b/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs index bc95070..6000097 100644 --- a/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs +++ b/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs @@ -52,7 +52,7 @@ public static RiskV1UpdatePost201Response Run() SolutionId: clientReferenceInformationPartnerSolutionId ); - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner ); diff --git a/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs b/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs index da3cb3e..56658c9 100644 --- a/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs @@ -45,7 +45,7 @@ public static RiskV1UpdatePost201Response Run() ); string clientReferenceInformationCode = "54323007"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs b/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs index 689c08a..f6892f8 100644 --- a/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs +++ b/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs @@ -38,7 +38,7 @@ public static RiskV1UpdatePost201Response Run() SolutionId: clientReferenceInformationPartnerSolutionId ); - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner ); diff --git a/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs b/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs index 9542d64..c94225b 100644 --- a/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs +++ b/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-error response check"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs b/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs index 1021633..62ea260 100644 --- a/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs +++ b/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-error response check"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs b/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs index 2f74ba4..9f56a7f 100644 --- a/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs +++ b/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-All fields"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs index 354d7eb..6666225 100644 --- a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs +++ b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs @@ -12,7 +12,7 @@ public class ComplianceStatusCompleted public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs b/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs index 966e4be..f207bb5 100644 --- a/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs +++ b/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs @@ -20,7 +20,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() SolutionId: clientReferenceInformationPartnerSolutionId ); - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments, Partner: clientReferenceInformationPartner diff --git a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs index 151727b..2d7e51a 100644 --- a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs +++ b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs @@ -13,7 +13,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; string clientReferenceInformationComments = "Export -fields"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs b/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs index b8a21af..2962cf2 100644 --- a/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs +++ b/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-All fields"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs index 71f462c..4f9212f 100644 --- a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs +++ b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs @@ -13,7 +13,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; string clientReferenceInformationComments = "All fields"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/NoCompanyName.cs b/Source/Samples/RiskManagement/Verification/NoCompanyName.cs index 8538ab9..ffcaca3 100644 --- a/Source/Samples/RiskManagement/Verification/NoCompanyName.cs +++ b/Source/Samples/RiskManagement/Verification/NoCompanyName.cs @@ -12,7 +12,7 @@ public class NoCompanyName public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs b/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs index c7d3d5d..28b5d77 100644 --- a/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs +++ b/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs @@ -13,7 +13,7 @@ public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; string clientReferenceInformationComments = "dav-All fields"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments ); diff --git a/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs b/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs index 14fd6d9..3c42109 100644 --- a/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs +++ b/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs @@ -20,7 +20,7 @@ public static RiskV1AddressVerificationsPost201Response Run() SolutionId: clientReferenceInformationPartnerSolutionId ); - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1liststypeentriesClientReferenceInformation clientReferenceInformation = new Riskv1liststypeentriesClientReferenceInformation( Code: clientReferenceInformationCode, Comments: clientReferenceInformationComments, Partner: clientReferenceInformationPartner From 5f0619adf1a13449c0fd87a9b19223091f68d7e7 Mon Sep 17 00:00:00 2001 From: snavinch Date: Fri, 18 Jun 2021 01:26:53 +0530 Subject: [PATCH 058/161] + Upgraded to latest versions --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 4 ++-- packages.config | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 0c35a81..bf482a7 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -39,11 +39,11 @@ False - packages\CyberSource.Authentication.0.0.0.9\lib\AuthenticationSdk.dll + packages\CyberSource.Authentication.0.0.0.10\lib\AuthenticationSdk.dll False - packages\CyberSource.Rest.Client.0.0.1.11\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.13\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index f226ce1..1bdd374 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -36,8 +36,8 @@ - - + + diff --git a/packages.config b/packages.config index 6a6a567..7476249 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - - + + From 411212c5f1bd07a6cad55b363e4c1b18bc0eabcc Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 1 Jul 2021 11:42:35 +0530 Subject: [PATCH 059/161] Added NLog.config to output directory --- cybersource-rest-samples-csharp.csproj | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index bf482a7..6e757a3 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -97,7 +97,7 @@ - + @@ -291,7 +291,9 @@ - + + Always + Designer From e64794dfef1d15c7ee4149f4835a9d3312725850 Mon Sep 17 00:00:00 2001 From: snavinch Date: Wed, 22 Sep 2021 00:21:28 +0530 Subject: [PATCH 060/161] + Changes in SampleCode --- NLog.config | 19 ++++++++++++++----- Source/Configuration.cs | 2 +- .../CallHttpMethods/DeleteMethod.cs | 2 +- .../CallHttpMethods/GetMethod.cs | 2 +- .../CallHttpMethods/GetObjectMethod.cs | 2 +- .../CallHttpMethods/PostMethod.cs | 2 +- .../CallHttpMethods/PostObjectMethod.cs | 2 +- .../CallHttpMethods/PutMethod.cs | 2 +- .../DeleteGenerateHeaders.cs | 2 +- .../GetGenerateHeaders.cs | 2 +- .../PostGenerateHeaders.cs | 2 +- .../PutGenerateHeaders.cs | 2 +- .../ValidateAuthenticationResults.cs | 2 +- cybersource-rest-samples-csharp.csproj | 18 +++++++++--------- cybersource-rest-samples-netcore.csproj | 6 +++--- packages.config | 6 +++--- 16 files changed, 41 insertions(+), 32 deletions(-) diff --git a/NLog.config b/NLog.config index e6d0111..e674a33 100644 --- a/NLog.config +++ b/NLog.config @@ -3,21 +3,30 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="false" - internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> + throwConfigExceptions="true" + globalThreshold="Trace" + internalLogLevel="Off" internalLogFile=""> - + + + + - + + + \ No newline at end of file diff --git a/Source/Configuration.cs b/Source/Configuration.cs index 30352d1..1c88945 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -13,7 +13,7 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("merchantID", "testrest"); _configurationDictionary.Add("merchantsecretKey", "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="); _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); - _configurationDictionary.Add("keysDirectory", "Resource"); + _configurationDictionary.Add("keysDirectory", "Source\\Resource"); _configurationDictionary.Add("keyFilename", "testrest"); _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); _configurationDictionary.Add("keyAlias", "testrest"); diff --git a/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs b/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs index 81a7e0a..1b44dab 100644 --- a/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs @@ -36,7 +36,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs index 4a7c2bb..5c34b36 100644 --- a/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs @@ -36,7 +36,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs index 080f5ed..97b48d2 100644 --- a/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs @@ -40,7 +40,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs index 62630b6..d4a6dc7 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs @@ -41,7 +41,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs index 71d7af1..8413e83 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs @@ -43,7 +43,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs index deb8228..b6fc98d 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs @@ -42,7 +42,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs index 4ef0864..16951d5 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs @@ -44,7 +44,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs index 358cff6..63fc9b5 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs @@ -44,7 +44,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs index 695be37..c246e02 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs @@ -50,7 +50,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs index f7fc4f3..9d91d59 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs @@ -51,7 +51,7 @@ public static void Run() } catch (Exception e) { - ExceptionUtility.Exception(e.Message, e.StackTrace); + //ExceptionUtility.Exception(e.Message, e.StackTrace); } } } diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 05002f4..e88a29a 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -26,7 +26,7 @@ public static RiskV1AuthenticationResultsPost201Response Run() string orderInformationAmountDetailsCurrency = "USD"; string orderInformationAmountDetailsTotalAmount = "200.00"; - Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Riskv1authenticationresultsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationresultsOrderInformationAmountDetails( Currency: orderInformationAmountDetailsCurrency, TotalAmount: orderInformationAmountDetailsTotalAmount ); diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 6e757a3..280fee7 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,15 +37,15 @@ False Source\lib\net461\ApiSdk.dll - + False - packages\CyberSource.Authentication.0.0.0.10\lib\AuthenticationSdk.dll + packages\CyberSource.Authentication.0.0.0.11\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.13\lib\cybersource-rest-client-dotnet.dll - - + packages\CyberSource.Rest.Client.0.0.1.15\lib\cybersource-rest-client-dotnet.dll + + packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -56,9 +56,9 @@ packages\NLog.4.5.10\lib\net45\NLog.dll True - - packages\RestSharp.106.5.4\lib\net452\RestSharp.dll - True + + False + packages\RestSharp.106.12.0\lib\net452\RestSharp.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 1bdd374..9aafd9e 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -36,13 +36,13 @@ - - + + - + diff --git a/packages.config b/packages.config index 7476249..5a17c83 100644 --- a/packages.config +++ b/packages.config @@ -1,12 +1,12 @@ - - + + - + From eb76e38be1d974a1b7a6590c6fb0909037337ade Mon Sep 17 00:00:00 2001 From: snavinch <49395625+snavinch@users.noreply.github.com> Date: Fri, 24 Sep 2021 11:12:09 +0530 Subject: [PATCH 061/161] Update ValidateAuthenticationResults.cs --- .../PayerAuthentication/ValidateAuthenticationResults.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index e88a29a..05002f4 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -26,7 +26,7 @@ public static RiskV1AuthenticationResultsPost201Response Run() string orderInformationAmountDetailsCurrency = "USD"; string orderInformationAmountDetailsTotalAmount = "200.00"; - Riskv1authenticationresultsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationresultsOrderInformationAmountDetails( + Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( Currency: orderInformationAmountDetailsCurrency, TotalAmount: orderInformationAmountDetailsTotalAmount ); From 330660ec4f60452b4caa6b9f150863bbcb93e796 Mon Sep 17 00:00:00 2001 From: snavinch Date: Fri, 24 Sep 2021 11:21:45 +0530 Subject: [PATCH 062/161] + Changes for latest SDK --- .../PayerAuthentication/ValidateAuthenticationResults.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 05002f4..e88a29a 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -26,7 +26,7 @@ public static RiskV1AuthenticationResultsPost201Response Run() string orderInformationAmountDetailsCurrency = "USD"; string orderInformationAmountDetailsTotalAmount = "200.00"; - Riskv1authenticationsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationsOrderInformationAmountDetails( + Riskv1authenticationresultsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationresultsOrderInformationAmountDetails( Currency: orderInformationAmountDetailsCurrency, TotalAmount: orderInformationAmountDetailsTotalAmount ); From 255ae479ee30ac34d443cdd86a232238c49720b6 Mon Sep 17 00:00:00 2001 From: snavinch Date: Fri, 24 Sep 2021 14:51:01 +0530 Subject: [PATCH 063/161] + Upgrade to latest SDK versions --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 280fee7..ad00386 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,9 +41,9 @@ False packages\CyberSource.Authentication.0.0.0.11\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.15\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.16\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 9aafd9e..45c4139 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -37,7 +37,7 @@ - + diff --git a/packages.config b/packages.config index 5a17c83..27a2b20 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From 8d740c71559e45e27cf6babd6a0fe1575526dc27 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 13 Oct 2021 15:04:28 +0530 Subject: [PATCH 064/161] + Updated ApiSdk to latest version of Authentication SDK + Added documentation about Logging framework --- Logging_Net461.md | 83 ++++++++++++++++++ Logging_NetCore.md | 83 ++++++++++++++++++ NLog.config | 2 +- README_Net461.md | 24 +++-- README_NetCore.md | 33 ++++--- Source/Configuration.cs | 8 -- Source/Resource/jwsToken.txt | 2 +- Source/Resource/signatureHeaderValue.txt | 2 +- .../CallHttpMethods/DeleteMethod.cs | 3 +- .../CallHttpMethods/GetMethod.cs | 3 +- .../CallHttpMethods/GetObjectMethod.cs | 3 +- .../CallHttpMethods/PostMethod.cs | 3 +- .../CallHttpMethods/PostObjectMethod.cs | 3 +- .../CallHttpMethods/PutMethod.cs | 3 +- .../DeleteGenerateHeaders.cs | 3 +- .../GetGenerateHeaders.cs | 3 +- .../PostGenerateHeaders.cs | 3 +- .../PutGenerateHeaders.cs | 3 +- .../Payments/SimpleAuthorizationInternet.cs | 7 ++ .../GetUserInformationDeprecated.cs | 1 + Source/lib/net461/ApiSdk.dll | Bin 26624 -> 28672 bytes Source/lib/netstandard/ApiSdk.dll | Bin 26112 -> 28672 bytes cybersource-rest-samples-csharp.csproj | 4 +- cybersource-rest-samples-csharp.sln | 4 +- cybersource-rest-samples-netcore.csproj | 3 + 25 files changed, 240 insertions(+), 46 deletions(-) create mode 100644 Logging_Net461.md create mode 100644 Logging_NetCore.md diff --git a/Logging_Net461.md b/Logging_Net461.md new file mode 100644 index 0000000..9ae2c2c --- /dev/null +++ b/Logging_Net461.md @@ -0,0 +1,83 @@ +[![Generic badge](https://img.shields.io/badge/LOGGING-NEW-GREEN.svg)](https://shields.io/) + +# Logging in CyberSource REST Client SDK (.NET) + +Since v0.0.1.14, a new logging framework has been introduced in the SDK. This new logging framework makes use of NLog, and standardizes the logging so that it can be integrated with the logging in the client application. The decision to use NLog for building this logging framework has been taken based on benchmark studies that have been made on various logging platforms supported for C#/.NET. + +[One such study](https://www.loggly.com/blog/benchmarking-5-popular-net-logging-libraries/) performed benchmarking of five logging frameworks on the market — Log4Net, ELMAH, NLog, Microsoft Enterprise Library, and NSpring. In this study, + +> _For heavy-hitting applications that require file logging and speed, NLog was clearly the winner. NLog also has good support from the community with integrationsfor log management solutions._ + +## NLog Configuration + +NLog is a flexible and free logging platform for various .NET platforms, including .NET standard. NLog makes it easy to write to several targets (database, file, console) and change the logging configuration on-the-fly. + +Refer this [document of NLog Configuration](https://nlog-project.org/config/) for a complete and detailed description of all the configuration options. + +## Setup + +In order to leverage the new logging framework, it is required to install the **`NLog.Config`** package into the .NET project. This can be done using the Package Manager, steps for which can be found on the [NuGet page for the package](https://www.nuget.org/packages/NLog.Config/). + +When the **`NLog.Config`** package is installed, it will add two new files to the project — **`NLog.config`** and **`NLog.xsd`**. + +**Note that the package name is `NLog.Config` and the name of the newly added file is `NLog.config`.** + +The **`Copy To Output Directory`** property of this `NLog.config` file needs to be set to **`Copy Always`**. + +## Sample NLog.config File + +```xml + + + + + + + + + + + + + + + + +``` + +### Important Notes + +* The logger name in the rule must match the **'Logger name of the Logger object'**. It can include wildcard characters (`*`, `?`). +* The logger name can be the namespace from which logging statements should be honored. + * In case `name="*"` is used, all logging statements from all namespaces will be written to log. This will include logging statements from inside the SDK as well. + * If logging statements from inside the SDK should not be logged, provide specific namespaces in the rules. +* The `minlevel` field denotes the minimum level to log. In a production environment, this may be set to `Warn`. +* The variable `enableMasking` needs to be set to `true` if sensitive data in the request/response should be hidden/masked. + * Sensitive data fields are listed below: + * Card Security Code + * Card Number + * Any field with `number` in the name + * Card Expiration Month + * Card Expiration Year + * Account + * Routing Number + * Email + * First Name & Last Name + * Phone Number + * Type + * Token + * Signature diff --git a/Logging_NetCore.md b/Logging_NetCore.md new file mode 100644 index 0000000..8951c53 --- /dev/null +++ b/Logging_NetCore.md @@ -0,0 +1,83 @@ +[![Generic badge](https://img.shields.io/badge/LOGGING-NEW-GREEN.svg)](https://shields.io/) + +# Logging in CyberSource REST Client SDK (.NET Standard) + +Since v0.0.1.7, a new logging framework has been introduced in the SDK. This new logging framework makes use of NLog, and standardizes the logging so that it can be integrated with the logging in the client application. The decision to use NLog for building this logging framework has been taken based on benchmark studies that have been made on various logging platforms supported for C#/.NET. + +[One such study](https://www.loggly.com/blog/benchmarking-5-popular-net-logging-libraries/) performed benchmarking of five logging frameworks on the market — Log4Net, ELMAH, NLog, Microsoft Enterprise Library, and NSpring. In this study, + +> _For heavy-hitting applications that require file logging and speed, NLog was clearly the winner. NLog also has good support from the community with integrationsfor log management solutions._ + +## NLog Configuration + +NLog is a flexible and free logging platform for various .NET platforms, including .NET standard. NLog makes it easy to write to several targets (database, file, console) and change the logging configuration on-the-fly. + +Refer this [document of NLog Configuration](https://nlog-project.org/config/) for a complete and detailed description of all the configuration options. + +## Setup + +In order to leverage the new logging framework, it is required to install the **`NLog.Config`** package into the .NET project. This can be done using the Package Manager, steps for which can be found on the [NuGet page for the package](https://www.nuget.org/packages/NLog.Config/). + +When the **`NLog.Config`** package is installed, it will add two new files to the project — **`NLog.config`** and **`NLog.xsd`**. + +**Note that the package name is `NLog.Config` and the name of the newly added file is `NLog.config`.** + +The **`Copy To Output Directory`** property of this `NLog.config` file needs to be set to **`Copy Always`**. + +## Sample NLog.config File + +```xml + + + + + + + + + + + + + + + + +``` + +### Important Notes + +* The logger name in the rule must match the **'Logger name of the Logger object'**. It can include wildcard characters (`*`, `?`). +* The logger name can be the namespace from which logging statements should be honored. + * In case `name="*"` is used, all logging statements from all namespaces will be written to log. This will include logging statements from inside the SDK as well. + * If logging statements from inside the SDK should not be logged, provide specific namespaces in the rules. +* The `minlevel` field denotes the minimum level to log. In a production environment, this may be set to `Warn`. +* The variable `enableMasking` needs to be set to `true` if sensitive data in the request/response should be hidden/masked. + * Sensitive data fields are listed below: + * Card Security Code + * Card Number + * Any field with `number` in the name + * Card Expiration Month + * Card Expiration Year + * Account + * Routing Number + * Email + * First Name & Last Name + * Phone Number + * Type + * Token + * Signature diff --git a/NLog.config b/NLog.config index e674a33..0a7d747 100644 --- a/NLog.config +++ b/NLog.config @@ -15,7 +15,7 @@ GetConfiguration() _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); _configurationDictionary.Add("keyAlias", "testrest"); _configurationDictionary.Add("keyPass", "testrest"); - _configurationDictionary.Add("enableLog", "FALSE"); - _configurationDictionary.Add("logDirectory", string.Empty); - _configurationDictionary.Add("logFileName", string.Empty); - _configurationDictionary.Add("logFileMaxSize", "5242880"); _configurationDictionary.Add("timeout", "300000"); // Configs related to meta key @@ -54,10 +50,6 @@ public Dictionary GetAlternativeConfiguration() _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); _configurationDictionary.Add("keyAlias", "testrest_cpctv"); _configurationDictionary.Add("keyPass", "testrest_cpctv"); - _configurationDictionary.Add("enableLog", "FALSE"); - _configurationDictionary.Add("logDirectory", string.Empty); - _configurationDictionary.Add("logFileName", string.Empty); - _configurationDictionary.Add("logFileMaxSize", "5242880"); _configurationDictionary.Add("timeout", "300000"); // _configurationDictionary.Add("proxyAddress", string.Empty); // _configurationDictionary.Add("proxyPort", string.Empty); diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt index 086e5a0..5454606 100644 --- a/Source/Resource/jwsToken.txt +++ b/Source/Resource/jwsToken.txt @@ -1 +1 @@ -eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJUaHUsIDI1IEZlYiAyMDIxIDA4OjM5OjIzIEdNVCJ9.vZQQwKPxChmUN7xYvVFFuZF3q20RgykuPQtkRbsitdg5f_LcbjQD-ox_w6vhDfD7L5b6R6Va2IsJMFcbknVjoc920eRIaIL65dSm7d4XBwLQ1Mm-naYkp0vcyz2RFlo8uOW4Pe_iiSlIJsiWQD-yHu5VedjRQ558-lt3uA_CbufzoNJ-nGtKKj9XgQFycI9YIpgJH8skaBabyvVVR5vOimyKO7p72Gy1U4J6n4QpCqFCnWVCjKIe8mFEmWkMZRdJ_cZiOTpAxqjmMftdz8aAT1pOHOrqecqc1VwoXHA7edLEV6cizVHT3_ruMfhU6qFuLIAFBSGCjFfTmDlzFl0bBA \ No newline at end of file +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJXZWQsIDEzIE9jdCAyMDIxIDA4OjU1OjIzIEdNVCJ9.UL2HCVg1PZpD29ysgJ5mWiLPxBecGUxoHXHaYorfKKl3hPSlMdoFB5IHI4ORtv48LkYHfkIi5UKy57TfbJcza_cFeR7xBMy3hXluuLkvMS5LT_QO5zuAVPv3MMHLFf3fDodDflxal_feVlTc6hFZFAwQn4F7HiktPQG0yA9d6HnORYRXUZSjMraplVe00ghtp2DqbvHO2Gi-sGMOeV60y6w5-9vXeuAq0XuL3Z3oIyUGL349O1cLF-d3u3K5zHzychgghF1lDxr9XVRh_4oWFlgcA_zHqPeIDSVa0bUqHb3i6W8hCpNCdrZGWkwVkW3F1CvU9M0po-fRFc28fzU4NQ \ No newline at end of file diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt index 60114d8..ef55d14 100644 --- a/Source/Resource/signatureHeaderValue.txt +++ b/Source/Resource/signatureHeaderValue.txt @@ -1 +1 @@ -keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="M4CWv81cvaYIjS2Pdg94UXdtAS9NQf2k6bAent6negs=" \ No newline at end of file +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="krGUxk11hI9Hgf3sYwGl4rUt26RKFRRMpw8OhX2aiTg=" \ No newline at end of file diff --git a/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs b/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs index 1b44dab..68999c3 100644 --- a/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs @@ -36,7 +36,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs index 5c34b36..5e8d146 100644 --- a/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs @@ -36,7 +36,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs index 97b48d2..2e2aed9 100644 --- a/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs @@ -40,7 +40,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs index d4a6dc7..ad2d7f8 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs @@ -41,7 +41,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs index 8413e83..7ef35f2 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs @@ -43,7 +43,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs index b6fc98d..33ba232 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs @@ -42,7 +42,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs index 16951d5..8021717 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs @@ -44,7 +44,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs index 63fc9b5..7f0bc09 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs @@ -44,7 +44,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs index c246e02..0557501 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs @@ -50,7 +50,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs index 9d91d59..0f0d236 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs @@ -51,7 +51,8 @@ public static void Run() } catch (Exception e) { - //ExceptionUtility.Exception(e.Message, e.StackTrace); + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); } } } diff --git a/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs b/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs index 21c76f2..b019fe0 100644 --- a/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs +++ b/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs @@ -3,6 +3,7 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments @@ -91,6 +92,12 @@ public static PtsV2PaymentsPost201Response Run() Console.WriteLine(result); return result; } + catch(ApiException err) + { + Console.WriteLine("Error Code: " + err.ErrorCode); + Console.WriteLine("Error Message: " + err.Message); + return null; + } catch (Exception e) { Console.WriteLine("Exception on calling the API : " + e.Message); diff --git a/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs b/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs index fd3ea71..0c671a0 100644 --- a/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs +++ b/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs @@ -28,6 +28,7 @@ public static UmsV1UsersGet200Response Run() catch (Exception e) { Console.WriteLine("Exception on calling the API : " + e.Message); + Console.WriteLine(e.StackTrace); return null; } } diff --git a/Source/lib/net461/ApiSdk.dll b/Source/lib/net461/ApiSdk.dll index 4bf7285cc356569be043240f9775e0434645d84e..f41c3817a2a8bfd37ba7a6232e65c76a33dcc378 100644 GIT binary patch literal 28672 zcmeHw33yyrk#61Ft==TH)UD0C+gl=AmLfTh<2a5jS#oSSUSvz&f`ZhNuH}we-OBA& z97k?P1`;Mi0x`P+0Xvx&CWNpLB&;?JneYW3gmuC|um^@A1H-_O_n0tD^8TuGZuf0V zHZUKL;VmuSI#qS*)TvYFRNZrzZtuA9KJpNe7styl6FrWSKdk~U4JJ_?UigVHeKh#x zMUNZXzr3jDa3T{Mv(v+Nd^9!~Po>h?*nkzY$5XLHD%P>9J2sjgvYN`vLrb;luFXW- z4G(?vU5DaMZ|7)ntkh^GIt-3aai4rG${3DQIEX3*HRTDN6Ee`y#1buw0M zHz@hUi29rCj6DcSY&!*nC+cP#u1_nbtI4*KX$Z2dbOs0OO5t#QT8TEfNJ0OS{fZCU zW>N|LxQ(c%gUAr>?+>b)O}Y}z&^|(Drj{ra@}=ugl=`b*GRgugYw36t!>}PSRzC|B znb`oh`^y_BxPqMaFyGaF&J68$&(wagSw9!Dw4$onpwDXa?J0;(qCc;Fnlb41+K)1Z z3HRC`VGM5d+Mi^sgt0F$hBf82zs#7QvA<&sbLzEUWGu*-VE_v;R>fE;V@nvrJb3Mm zjFmICgRwAUM;NPMY>F`~O|SiK#v+XQO<>}lI>xHNTk)`Yob~3a0rc?5^yF%o^yc7U zuUV3VhrKH>-l}H5#4tt%|4pz^J=SfgvD}C0G)t}JVy0Orm^Z^2kFClRy$a#o2Uc+Jf1i1QpwcDn&4dreQeo~5u% z7+=mfmVwukhD)&iYRjVLOSLf2NH>5nw|*rcOkxk*$vQDKc;Iqh-Asbz!Ik9@e0^R} z`PobBVIx)x`OKs-Wfa7ny~hYx)k?fjr`U=AH77Me|G6UvC3!c^J4zG`y%S< z5hO*5w7*Q+0e>MPBbhgFQ(yfR@M&%zJm)iWH*(?0?dQUqJHSOr?jRR6xxHK*W5FoZ zBONp-qP_*~)ts6H8P400%o|<04|78^H_C-4m*B#iyP1oU+z1z8Z!XDYO%8L3KDYt; zK%zk(Oib$o*&~v{BG22Ob=pra2a ziuzz5g}9HmyZXSGxR1AT;mN&;3vcetT$JQs3+q0~#W5CyZUi87Gof@hNia?#?7b@% zm=g$g?~27pMS_5Vm{tryz(9N}h9F=d))hk#FfMl(f`C!)Fa!Yu(X5&X0tTi^F$4hv zF|8PafPwH<3_-wXbQpqwfiP4Of`EZFq!@yLf$fK42m%IHiDC!>#wv#)2pBl;DG5Qq zSnV(b0plu%AqW_29EKoZT|FjSfQ)Fj^gkAYimP3_-xyE|-AVJ>mI?L`v4NkASxbWt>xG+8S zM-WuG-P{O`S%gcL;gW^8lzPs!8N^~KVv#&`_hJzn%W98TLgvBRG*(V1M84A6vW9kl z;Qn$7*4+ypBo?lFAdO`ds`5s>wf9$*L`uB%SVf^KU&OaEN)d0}{Z;;mKaGVHstPnz zQ=slZS-}7L#Hx=U$68_@MFMI+^*QukCjFQCL%!G-K{nUTV##Y1+LOnE=Fn z$czU!mjFk9a*oTQ#EcQVMJ)b8UIMn#9voPCvbBWAsiDhW=Ap5&e7V)`7P{3Qk#ep5 zHYuC!N2RQ{KPzR-{)v>cY>$`QSK19y24q0$)P-}GhmaYlT*hPH013MrpdRrOsx&kgFqeem&Z=iyarwFZ+f+<~%*U_G4)I;IcaV(^Af|zbNHw`}DIy|*hg3*Z8IAg)tMXn z9m39BDE$RtkLTH#GKr19K#8eCuHhYyFXTxh8v`N*17f9yG6-!%M%ss>ERaU#4W+Sq zLdOvv-VD-gD2>z_B2{Jo5*_){oyj24_*RA=7ShvS`PLDn|b+`~GA4d2X|p z=6En>_}QF*m%Jfg-5RsOY*;KV!tyA#1|9|SNbxGIe#*MN1j65AkOU6Z%L->_%x-I#OaW9~&sWuP^b zhLTVky@pDoMm-vb8r#j9Sc3M5L*LS_#jRI<^)%ko5#3#sRmwgTj;6BatP(1nJwfZhyK|@%@Y64 zXVwH)q;G>ub1;d;#as+LB==Nuun|&fB+^U`Lb16?<`!V@|MCdLtXSfwj#9o3NJ$Q3)~(G6#$Ed%-BP&jmT+XXEIG$WUZiX!m+8EbOg%RTy)1l5tsYr4k&^mh zHsHDHVt)N$=HkTNb`1In`3Mun$5IfpK|3F873dl8w}6kK5C#s4$l>1!{yNZ0zz0fK z;J6>i7jd}tU|G-)!TSl0Ia=O_{^w%9@)i$KwZtiG{cUlI&5bvg0#I>Uvi3dD#sQq< ziZp;Zfh6Y+&1WPug{jsPOUZgtp^C=Lkqny~6AcV!Otnr<7!k3X0aZ@G0-N5k$_ZRG zLr&;k`{!c$1dqs^Pzt19FlI~&>>VV9+qpoA}Mg;N($1_ zNebA{aSU;h!L)a!n#vsHA|MD2t1Eg`|KLs%Jzmh?p=Go0}9T z1>KM6s?M>L6K|}S<4yGE~5_@xdl@Sx6B~IVnQ?Ela34MHKk?6p_yncVPZFN1Vh;bI11IV;z4D{Evd~&Jhm( zU%_7o8F!B06IKTfw;n%a`oKGcV~&=0@573-iMXu6PZAIq@n$ z*Qs0O2VtuGz*5EefjKHa+$kCuUNS#Sir5{1DnHyM^aUNO{J>S0$`3pub3!SQevx%% z%n$4x88K;BlA}TYS|D>Krd1$7GHVHkr#peqhSU58`iGLdE%^!2eUp z4{D!ZEBWChM(|tq`EP< z4p|j)ncez4^>^qgXm{$nd2bepdMk38r$SO8BDGpiPkLaq-v6Qp^Sud}D(Vq`lrt%^C zZYF+f$gag5|e%0_Zo2vVk;AQcbGqA3p20zV(5|CRgv zP2Jlz8S1h@-VwQVbyIWGmCaYSTtoPjP!jORSOH6pCE$tv@ z|^Wwm=$0rpwr1a61WmC8vc}n1K zLi?&J=!q)Uy0P?lrH^XM82(D|*9zV(Fe&i$!fzSF zSIV~CQo0XtcKB<6Uk@=S7-YDermDhpQ(z?Gqo*sm_J@_+sy@oKpF^uKwbgR%>o6`K zRf?YXl|LM=rB}{+ZA~rR1Q@2fVS|tEtL3&I4nG`@(stP6qgaGF@oI*D1H6{D)?HOS zhwiEUS!I}>uFh76shJph%Nf2;IR8|}_%8GtrpJZz8E|T8f0TQ?CdlxYu)#;m>1$QB zWCqxVw?ooLcLp8~^Rzr6lfx^{!2RfNM{fwX34Q_(7M9c~$}4qO&0?w=v&@oH{wMuy z*m?SeI$yB@bxUwtkn23vOkGB^gldT}RZsJU8u2rA6|Gg0(rz8K3-z#2*WwuoYiX!t z$?NC_p&DzL+CV#n>J`a$tV)*rywr72uTY5)OYWpw6jiG`sEiUj4ynxu z-YGIKl(76?NZW|OsK|UsYQG`1EyDkIX?36QZx=XQ;Hi?muqWv|2>6)iCctyvIAB?c z1-Q2)0eEG}DB!V@TL3#nTeoOa)+!sO+o{H=tbI!QVyhO>_dVO-pSMB7B6=OPEuzO^ z=OUt-aqyKVKj1&=@zH~!ZGao2Il!0Tc^^H1SwNnE=Y8~4)lt|pmv}~U#D4e`y$bkm z1lAeM=@6I`_)dWj8Lx$mLH7VIrjvm0pm)sJ*Lz)kr7_FJJ>DxlK1~ln!%qcYY;f;; z1=`Zr>jXY3FeEZj;@-2rL+_9Om-c?ItM@;opSxm60Q6RRCis`|!+o0iX7~dhlfEL< zU9&oo_dWEtLYLLFYJBsU24K}`+UJdJi`%T(RRYro+M(U_+G0aTd2p{d70PkW-&co|D7 zJ8S3~q3#NNrRF(L4Yg_N`!zoRwM|q17?`43+M}tT2P#3mLQ|hJrl^hvHT8Am!MY;9 z%%Y^OdqwRO&I?&hjnr0x%4zBgbyL`L+^MOr)m4IWdv^}KUf2B!l5^;-n)1x51oduB z-48qG(t9-Z9@sgTKB%b&X$o%#Kdz|{;M_5f&T8sL)Xk?aYHApD^XY4v`lf%17SMMz z^+SIps2^ymV%8Kbq@QSN9&A}iFKB9sIYlx0ji%O_m7q#4mpKYN4LcW6xu%|lor|be zQ(uZqA<7qM>bsFjP?u|JN6i$@v{z{A#u}WbX|1Myigrt>RZ}mc-BRk*)c4`DWwcvU zKY@3b(T$qAIy{B*^?;_@!j+)hp1+(%blqw6a5-f(^-=V2IUUnfG&+Uz{A)BdKUxXu zUWdYHm(yD`)r8S5r*~=U>GCPuUVm6q-!HEO^#M)&WpE0&J3g+d4+XI=D6(uNozZn0 z(Zfo5N>f|W!^$GbMtVlqt&KeIX{2X0)gJj7sK3`#r1}L<6aAB>mQ=q8%I%3O=$E=~ z%>T0I3i@|V9rb&?R}@J$+U8Qyg*E(0|huN8B~^eob-2t)q`=iX(0veO6N(ao5t{Xo@55TKcM{I7_Xkztt3H zsr7VTQyh)g(es+(XuOX8Ra5_r2-rZs*3`ct0ydCmxf&lw$3`mE6i3I#A}_U4wW>p& zZ}YZNtCswwf2+5hwrXlOdT*yLP2E$?)B#QHgqPZ>Us3e+vh8ShPN)-fQ)G{KGktJ{ z*h04i_It0V9}0DXD#QD|Td1``>f{WxmF~+^SL53Pf2}C0s(sSaN&G@JW{egHb&sZ2 z2=#MKl?c_-$dV`M=T*JlPWqBiKQb~k1Kw?PtcmM>Wc+pQfcFOC*Ls=y1*q-x4NZM2 zG~nG)5FtffG)mR+g}b*!Z;PqCKW^qOX7sNVO`3!36~-89ys>bPAG{Zv!j zZf{ZV`!1k*S8==Z#>P5a`waIwsEcZF)Z&_<4hMEk*d664NS*jbO9T-2EdWEb9I%pF1YRSsO<0dU@kebMvu7d1XwWV|Ny z3BbE*&j8khzYLj2YF-u?G&+stvnl}}LssuJcFd|Zri@qlml>yx>uOelzourHagxTN z|18}Zd?nyiaGf#R*p1$wpqH?#nQiDb>GiPZZh9Zuo~ADV{~}s#gN9_~ zJw}UYc*eM=`m}Lg@MjGx_#WeVV@3H>fJeh$h9z(Ef5UiDY9FCT%^w)m^vme4jd}D7 zv)o){e8-HK^XLOL%gvziOMesKRkf?lXN)Oxow-ybSBm6HEptzGuQ}U17Gi&%uN;7e zC*a#h@Z|E<<|FhOf%l@9Cfo;nm$wOT54{I)EKl)y6rKQHhH0?EVj9)U4|O9ZwG>=$@S;2DAE1d^9q#RRqr>=zi<@KHMEn-u(n zhRiu7_-PH9b4Kv98Zzgc;O8}D4wZ0UhK9_E3BE`}=ClglrXh3s1&?dUoJqk?XvmyX zf}hrqIcEevt08mF34UHf=8#Y9(U3VY!53-BoL0fxG-OV{;BgI^Gb#894ViOF@Y5PH z=ZxTIHDu0t!O!~`C%;&tA#-AaFVc`Xt%A2{$eez`;~Fw&Qt%TRGUt@wr!{2G8NttL z$eeS6pVyE%6cBqfWKK-*MH(`vP4Kn=&S}9vWKNslZ9&HS1&?dUoJqk?Xvmz?f}a-oGlHMhkZaEgeqKZ7P)Kah zkU25I7iq|xR>AuPP6|9F@QlE70%N7Dr&Zvjz*7Rx2s|f{%2*~QuvK8cz)69p1fCIi zP9T+wyuen0{Q@Tio)UOQ;5mVG@F?YlKnn2N2E%kM!*A6w^v`1WsMLOh7#|V%V?X0Dsoh{Q z{ymX77h(LBH4HsbhW{dZHisF1Txu5yf0fAppq%-C6=b+wI9nn%@XM=@0OtJ10NW}~ z0Nz(|7hp~0>j1x6aUbBpN_;Pa7F2QDe;3P@waSL+cB(NdYkwp5D64#d`=Q}>8O6`5 zSzABsH2D=|crprT!i)S=f}c&8*d_5ZiCRDto(%$@4QS#HQ7Q1bfF|zjlmlM?XyR^7 z1@IW43D5HrjKzQ^&S6!+mjar&Q&I!`GC&jeJL-Vf1De=t%?7>#(4+?F#;y&}q(*t# z(FADX3E4vMn*mMi$`%1%1<2pNUIKhIpoy#QWx&?}nz%l`9QZYWCa!sx1HTr~#C2=~ z@aq6gT$?rm-w0?@D|#@f4ba3jWDD>PK>nu5mB6}Y#8+f91HSnG2 z$G~@Pt^wYKehk_TXySRvb-=p;P3l2ExIYYN;@YSU_Nr%wCLBoJ1zFfZ>cmmMGm*=~Ij{ur@ z>bV#AD4>Zi%kKxC1~kcr6()8JuK>)Vf0M@1b1lV;Wq^wfo~z4%*Wr7lmt!@o1U`$J zfX}8?z-QBH;I{D#!)vyi+f45y@4VfgUt#x;C71t%J+Hx4f%D-fp!|6WQpIw0o{`9f zyqM=B)8xXQhjAT2Se1p(a?j5ynX07{SY85)OJHdU{P+}(Z{s+R<0sfPKWBWB=9!g7qizmme_H;674Q3PR6zW){?MOV4wQNwsR<iIO= z0NS>08MiW7O>xJo+#ji%+b`~7Aw192qRd1 zL3f~e#3&ret~9!4(W_|vP&^xFGk{_Q`CdTgrN@=<8YR2~gSUpb2^g#xg(KQwC9SL_ zs;@4n26|XLnc-HtqM&B2QiDRqcTJHrs2%B{@uamu`Db|8wua-`w2g=P;%hg9XJRmJ z548;rT4M#73s`OA*~2|Y$E>YAJzeAw+xGY92^dYJ5}B+W&n9lQ+H5PXr(znLJL`b+ zq}d)dpW8C&l<@lW1m_v-W*W^5rtM^6fRvwP)@To0)0R=ILvb*X3gLOu*tkZx*BzEU zcsQQQb`DY75Ds36dsCVCA!}EvJv}gFoWQcKj;K^t$eBJUfoz&QzDN1`&YS zqchhI&e$dy&t!MTM`!5iP{O`gRcgitSuD2c23xm{C3uykQ#%mOhi4ENjVF@R*;xN* zGo3$}Odu!hu?|_bl^V1wNP z1j55Zi9t?9)BBB&rpHs+4l9cp%uKIV=am^MhB)&i2D8(fWX1=au%BL;O(QJYq|fP< zSo*vmj?PenToF&rSOM$p87lCrJ@F(0X__vT-+R*6CsISyj^LH_!%-~hQ;zLnBQYEydZekQAgV7s<7Sv><167ulD| zXACjPog_q45rcJcqEN$OL}lVkCO&M5>OK1GxdVa4JU+oW_^9S}b|i3$&BO=fSeGEh{qXeTENamf7@ZhSA?qt*@7S1Sx5qPBQE-%t8g~)u#JfFx zM2kX6f#7y7YTQMrcFq)Y-+7!{6^QWyjy-_dPm!8+i`ucB$XYo24~!2FTlOY9eMHuR zI3K&9mOfdO78UQOxI1_?rS_lKr)^~o@wq*bwCpWb%EFn%8fwcTdkl=Di!I{`7o|Gn zRacOhW<;S1diNzVi6Zf~OvV}=NFMD;WZhb(t)+q%r-SaSHP&<3PLB^CE>z~#+1O!^ z#_f?pRZrX=wzAjbN7<|+X?KOAaBE^{$VwF&IJ&NfFZNk>28(feCH!|NF+8qLxYMgU ztjwUD7~_Rps8s%y)xF0`#%~iWQ>b@3Mq~_)4`!!Vw5P|8+KJ)AGge9NEwsUuXAz#< zC;Gw35NWnhyTckv#5sgqmn800=w=tki@PSTWq%@jc=x!Za(Df$e5E6SxB0d)thScs zW{&1W3S8EjwiCA_vFYunaw+xk$&k0Bn&!NRvnu!+={}mtTBA*RfK7UeSfnSdw!P#; ziZVuThH2;a^suB+$Rd65{C35&hb8$G&it}_5~DBV?X?r6P8ec+Ay*-Xh+fge7js&y ziA~PqNb*V57jMK=4}$5F(0CTyVrO%5Qfzge8cM2m-FgG+~t(!(MSvm*>*%DI7y|HoZ2Uf*&1!X=nhd7Uwi{8 zN-j~2VNKsoiq5eaYdE#fT(j$f9j7R{a2qP-Ok=jqv=x>1Gj38v$;>r+N8;M8s$4^>A zn{VSwU8F5Oi5G~S){!i37^DwnoA?qGG3(?HY!p*N#XO-@Bue_R6WnBz?8jx~YHKc| z)hIHw-dgdv3Vg7>O5c9hwfa6ss&mFz@H3!wXpLhrwr2*VbN5 zLt(40Y%bc}E8B}%tVQkdrB}}u#oVEHgOxv#>qL`*C$sDAdr`K#8Yvc!r^t< zuXd#qsjS1>g44BZy0h)r%4HzUl6^^4vP<;7aBDm@g!8uqxC%~((}#pARc&3oP_j1P zezKj^gtd_86nS#1mBc29REpqP(RZn6vu)$oT6n~R7hb){;HPt)Esc|stubUNT9w{;@*{=9@CDSR?RDrH#PZs zb=t=%0QZ5c3?^cAUtbnK-RkJY-U4?}P~XI}mZ8nJ;KY{UIdX=eufs@PAvqK~qv$$K z98t{C!|TD%pCWdL$CGh;^KD}|Tk$3XU181e&PxatK;2_Faqp6d%vri|=iT$VCT6Ag-t2=LmD~2Q-pOMayux~qxdq+GH za&BH?KbgYLKb6fm*JK%HVSCT3Jb~T9?bfb=n~{V>hjXneZp#zS&J}Bq*B{y!wyn%7 z{%66)Td5f`o5da@7#xj z@+LlykLS^0xK%r!oCGOTp+Z(oi`e421Q%P}G;2|}B%vg3XNeOo)ZS_V=SrE5t~4lI z&1zmpVi-4w^H&0F;53H{lNIn*Vb{1z8u*qAyx#>LpO{!S4ZM%Hn~Y4~!d#G^Z$6Tx z9qC)Go%}1n2m|Xj%#@u%$aUG)p~P+C3~aVsRHi^m>d{p=>q`UdtZZo(SHJ~u&?af$o@NFrM7R z@sws9Pi-vl_5dm>1#AeM0Xhnp#Zw@zZ-XS`-KZPEk7~H}_2Bu>2&7WKzaIY);25-L&^P(V#0DxKLQPU?Eu#5bA>D)LWqoMhiRWB9VQUX` z?15(TZ^M%*Xp0<%hAfRi(>gqx!)uWh4oA~-oe`$tkp$f?-btYE6uvsQ3BAR|Q~2?O z<#Fg4g9QmZKVu&%sVm@}IJgaXR+dri7F|p-FHus?zp*mhL``^Vry$S7Asjp}DfEEr zAk?*?$AtF&g%r2o9(gWVz86pO@U#GPl7NO`=p7O}sbVuEY)IPhLJU7Kv>$vMGD=Q( z9=tX=!Lyszvv~{jvi>aSZLnY$>SB1R$s>;g8w1SXPpz7)v~yNXH@G%_afLm_tLTvQ zU07AltjF-&l6{vXI{L@!o7b7E=f)n`8izMBfP?vY<#-tft!5&FF>oAF-6lwJoUr!` zKB5L^9r5h(+HkLt7@h;i!Q<6C1pi+z{ulsf2!Gsys@U`FYpxpy2XYOaqKkdWQLAED zd6r=eE8Usbf?Zo6nT5_HD39VLfo@3c!87Ad_*r|DOqJVM6+hX9-KOuP|KgBx@$o}rg4 z22ORoScScGpy&_$ia|Z{EJg*(OD*)TyheCakyq>xY##@A0CpiF=UezjA;$;LpA(O2 zg(5>loHp&y%U-4`htmW7W8feb8gGS_gK}_uaP%cz+8Sk!*5SK~&3Mn#SoXU}8%tDV zat7m7#r-%oIGSkrbeSEHJqnhaCvl##P0uI7H#H&>h-K|8GXa1qwU!pmaQ@Z^>tEykj_WJ@g zk;xO#b7%B`VBzTG-RK>*87ABbf4&%OHa$jo0WC1RAq=KGX4FJau`attzyMFZHhu{Ct9$$1Xj)ORE!qI`F6GxZn3!rGl zu^vYZ$2=TMan$2ji(?j!l{lI`zWHI4)m|S~u-Au)VQ@EtdxJhP6g9 zmkAB5jZVBWWB6j2WGqTJc`t+3K+F>zkM89~?Nx|WuIF_YUC$yhL1T>06LcP-u_}I>LDt{-9pIjWt7?ATD z$Zk{y1ove6x;t(lDiKy4Uck%W>5qNxkyvb1bIV$6Sn=ZAfOTlq;Oay1#zSilt!Z3+ z%|J`zKui3}#`xNnwJmGbwp_Eyf+Q<#!B1S^j|l(!#=NGTn|tz4KvwEI=GWn8FxE8T zoAy27>UpZWYVd#6)_%L01<)G;Pw?x%$#u-)Cvazr(X7{~8f_d3@Iy zwD$MYz?Y@^^&E62~fm;z{>E8B(o4SEF z;&v|Xpd7Y_dIyi<6@yHA9Ipj5f|YILOX$X-bT(yWd({w}B0X?(uiVqpjHa=nfg&sa zw1{`UwqVc47>^ZbH|G4`Jc@_ACU!?Mxg(xPskfditBD_m@aN@a&>`>kDcS!lA64R4dF0~-iXuAkH3=<(3k+DqI7(cfVXu^g(YD zO8HGx-kGaw#_5{2icB-ct^QVH_XZ!}jbHW$?*K>TdV=?&@*_E@TkNXi>&X=M#hbM-= zRj{E2ZyOWdUuHiQ^r#u(>lWVU^RC+Q8vkY?+qz5l!85`=J9EO6^5Dg6R=(*%d%iN_ ztK4jn-!Js#YVl>U{DmI9(4T7F+F&(b0r53k5?baS- z^8egju`I%89`tT!VvJ~j9Wn89il`W}mv11NIWg_c_z00NFWm=zV;*0hHjbph-*7De zY0_3@H#qr3Ag#AjRv$RAZ43l=R4=Z)Pcyo!-ZBy=~8 z6(6=urvf_Fg#KtI(pdOAd~VlM;#de4TTnJsQwd3`3UK`*C)2e2OgkoI znyuGdg!Dy3;RcN!Rkm1nBik4hx~3*pGgZXYT&Cbtw{;~`B}{E)D!|lXrb?N*n<)%4xAhUG zf=qdJP}2S?roxadx>rBOdNc5m+isuk%D`7{-JOAh+}#(8MxT3 z>!W;2RkMI~>7#6fUEvIUG*5Ifvee84nDYR3(xPyKi{1k}(JMi{W8<5>LykPfqPRE}<(jUATKjnL|&8s0L%FHbghD zpk@g&!u9aIPFLZMcozM=AX$Hp+})X&+zT?8_8e_<|? z_8>f@JtJ~=XO76dAahvmw)$bAD>7-^J)_Lo>fsYs&jMThY<(2L>0Wd(CKMqcK%m+J zAt0FN2!wzD!D{Ca0s=&)Ef4|%gr_YK0s;i7Ef4|%1gR|$0s{1%Ef4|%M3^lQ0s@4X zEf4|%j15~L1O)YtKnMshDC`_UK!E*$Ef4~NMn@n71WO%(5D+YL1VTWt+z|)?!KIEs z2naBL*tG}&!DWs>2nbd>0wEw+;> zpxqG&0l_9mAOr-P9f1%KY;goad_22SZiO66m%%-B)R1B>DZ7MYW4P-VavYieZGbIjcWxg7O#p zDnID1!ASBiF7#D>(8Lh(FY;FHE%JKa7hn4AV;Dj9UPY&Sp`Sml$P>VZkSp?a-0Qd4 zeEp`{W3I?;nDF+kD_}V;6qZ#61B9A!xgxJ*(-DY-PA7y4p?bnFquM5GzKezyDeM&b zpx_4t9}s+0@FhW)oAcK)=4^FQHMIHI7uIGZS)G6yjD3HZ=BmMv_hXr?!Mx-_D9c)i zaX^L0uaEA4&)8W@;jCh77Yh2UZZ3|%@Rzs>tv?ab`yG)|n|0aOU5-wSKKbY~RexBY zMxp!WS6N?{`!wqbxnE@cNbb|E*X2ILDlI_13|pc$i+`hrioFX#M`Kq3hxuy|i~dVo zHE^(Bccsw#o=hiF7tO#LgBgYV(k2#}a0l-WYTkvrr|4{DvCl-D`h6yX(_e#t^p_W% zCGR5AFl_i!RYjGUP_-#^!Bu}ST`=(vrmN_8)y4avnB8pbOWDEJTy%oVWu~Cg+5y_c zqU13#WU;G~42L;`d5EQ$tQ_e*BDE&ueO#nzM~c0roBkB_!Qh~acL^T9%WQ@gm)RnS zxy+wJ9C=I+V7`gL0zCp$AB2U$dnN>BA_#@nlHM>CJNl_ zM{qAtRieO%{4&fxWWN7*W(QH=owXT#&gH3uME)N+G7GoT+LHXg!t5{{XMyYqoN zX$NGV$2AA^T&(?^=E$D{R|S3^1x=7_;VGj*gO+Q-# z?_<5qART!zp3%2Fp3w^z9M3&S%b;yCo>Tg06y&(^`xJa@cc4%DPlmEjrjU}tsU{H> z6X;$HF}T%^iLiTOPz2phRIJDN#A7EmCFm|R2hbEdBs?Kcen@b0^q?n$wqh`1%(_D! zy$1WQ+GpPjzv!c!fbn$$-}6F(%Rv)|M7Tf?7G%(E*`Q!LKPZHs5ETB9KR+mJJNy|K z>e%7eYp{27f`Svme*Ff%=LLn>;kSbVLtcWyYX^l-AC-!8K~d-gMPbl4IVd=ZUjH!9#%+^F13B%pfRAc=Su-#reUKyr9U5?V!N; zbmC$T`iA4;d${M1=TAV^0olLf%8v_2UWsu$F)sMw93G;L)5CGG7P1apd2zwx;{tIJ zM-t*<5Vs4>^9PZZ!Cd6TMFQj>BrcLrq>q|FSu5T`T(Bt|7qEKjxZvh+TwrsI@pv7O z;{r>Q6BnGoal!YzxZrZ*;sSf_Y+Nv%9~Z)-m-82k32|ZD;m=@e@7RI3D9XhJCvaTw zJufcAjtjCF_{fWk z{QVEkQ5+XXal24lj36y@Js^Moa~QlndIb2^_CKsd?SEj+)cYT{h4(*LTrrq%M#TO| z=O^yY{)ZEI|HJpZLCxjz_CKRwo&68f`9oUx2}63q{>Qe$m&u^0vI6@b>=vD=o)dWg z!}q))EmmA`|05OWhV+~7e>gLbJSpT1X=Z-k{SWsdE9QH4NHgQ?f28r^`f>Z8ocJBF z|KXvL9nWh!H?7sw+enNR8d+Z7P`|8US>q}&cwdQWoYFI}2RlY|4)-1`FmpT8Ry^5{ zNeNHWmJz+;foxYNEnjWF`<=UCS9=@M+Q9obZEeEr<;?hC$ zxmydC*CGrHdOxmxxKNZZ-09D7@tTE+QTBRQ;f_rVth381W%1UHmDaFUa&ug^brqYP~NN3eX>UH%yW#auc1mver_^OC29rsIh+ zbB_i5NV^ymbI*pDn~z-&bHOs^7T|jX%-!Z;ZaG~h+;b(&t-=d>PCFr5R?|A+ib^@H zi8cx6Eobfu+A3U=v#SUB!%@ zlCuU_P2Ga8gqa?zV0;Ov(f7;0scZDU;FEeaz2If}9jL3CqQUP%vZMG1z*WW10KZmp z4mnqNp9h{U{4wykf|r1|xLD6sIwN@)X9;!)c1dcpq+TNUzXjuxdY8~i$#YQwmwiHT zh2Uk9=X;X+Yd5Fv7I{P@4+?%naE;*O?tg_nCkuW7{Eq(bzykMgfQ|0o0jzsaXZZbtx*JcEiIa|?49T% zyOg8nCg}P7G~E6+HQ4s||6lFzh+yFJGwZ^oXwk6Z9xPeq(&>Z3otQQkbES(uD%{Cw z3q#E=7n#*4Mx53L?k=07C(1X&BW)KuX$#@eOPgCKxZ|5TydW&8^H?m8O8l|SsA#86t|#!1ka-$ zRowFOGH_p4+&58f9zChJAEDeldRlQ`gq`#0yy6~*o%88m6jxO;LYL6b6<1wS1}@+8 z3+Oj0?Ko;!K&}OLYwtu23#eFeKSx>(l`HObq}9+Y#jQna7t(yib)vNksa|mp6pzp% zTA{c{i_5@WskrZB)YZ}k#ht^bs~uv7#ZUX7;~#HPg3M&S~E7xLWCZiW@=gt#np#2g1y~ zptyQ?sg-_ebM%Fx@1b1BLiY7>x}xkE*E)JlxD)iJ-t(^Yw0M!7_S53?t_?IMoW163 zq<_eA3-~*qwbEnslkyH%J8e3PNdJ-97&Q@x$`-NKh$TgQ268z*I1e={Ci2xlVdbaa^v81{&;~TyEF6+IQ2Fl6GFZsM15b={B4iiOy>+ zz6iKeisQ6B^vM;uv_15&;y7(DosmlpFNLP z@VDt+20HQ|l(YOWPN6RBpjd88ZpupBbf=b+-+lpke^##HxhLoU{~0fXCw2M`e2!h1 zcrOE==yaopJ;SLQ-6wb)XG5ni?kmjE`F;1h(K~#sZ9ImlgDP-UBC@M+O~Z8&u0om{ z(kKY@fS()k(?VbwH43g0Y!Pf1+#$G6Fbb@oxX_0Lj|x5woK8OjdPtLTugQ2{sIg=f zZ~>4C>!?L5D_=_0kYEnh9xPc2i#Sh<)=+f?PK-?7uOwyVYpGpw-cM_)HbK6#szUPY zps4m&-n|spT0_@B@}r6v9nv-j579|_8mse3dKc!vla#?6eVo!*^;@*BhOUPsfj!N6 zI#%wX7wHRye*)~OxD)ux;?u};WBGRkp8>k6o&(;B8M#GUS@j~`+BiYFPknH(N5BHn2S%6g`Me1 z`U3DYJshspPHVd=8nw?!ON;3@+B)qPdKvbAQTvTH9rSF}a*MR<7D~dNTj&JJ-c26^ z{TND3hlVYs9a^JkctSf6-lIJ&^i$fMzH7Aen!otnzOuX1 zLiXolr5Ecj(jDSkp6yQ4)7lRGG(9KydDK;p=UO%HdJ5xQS&!Xv2XHR!1J=?3;4;C> z1zSbFnG%q9isWj+KDr5#gY+3-ioWC?(?+SV;1qCu!5QF91?PZ|6_9=-X`YB+vtWGlGu^o)bJTNFLEI7!j-%Y!+-0 z>=BF#jtL$YJSBKq@G-%2g69RvE1Cr(g4Ke}f-QnQf>FUS!Q+Cb1WyZ|5qwPWoZxvu z@`--IYQbi~7Qr6DsNiwIQ-Y@j&j>yycuw%VAQg&E!D_)~!4|FoeQ-Ws%BLU9YEZ8GBCU`D*58D=E>=8UAc#v+Schkq|^Yj(^2E9zL zkzcz++pNX3g?LV*;Yp?&&q+O4b;5WmJPq-G5xy}q1JAE#;yHIUp1<<*P2Ti{egPi5AxIxcxql2Ur~_0uBYrfWHh>06!a;4qR0_2ly+| z77-h4Yi%1Q+iADaw)PpZ$F{20I}dt3A{xFCW_y}prw;$P;K?9Rr;t1;4g+;OHRk8U z6+j&;d?Dy*Kph?~0zDn5!^9s+fI(|9iEWk4Oz zsON*e6sY6uwgB`>ppNs{LeQ&$I?h1@ zGSKURI&FY%4X2SyL2r`h;hTXvo?Nejd>c^5-{@Tqx&z36b8-dfoj@I{%$1o^T`hK8J*Pu3j&bR?|H?@QA0qPW`&7gaMI`yGu4c~Iz3fe%; z8XW-Y)Q_4q8UX6pPj!O64ya>Y+XXrS)M*eW1UzX4>U0S8>tvyR9jo3oz%=Ttq?y`W z;B1ZG3q(Ly(Z!&r(LB)8=n~Ku;SXZw0vCa9!Y<=)HJ9$!-DA9C%>R5JyH*Up?B|pE z{dpO%U6s#SI#~ z>(jWti0g4s_i7K(Gq{5KL)3$75Z4i0H{-eu*N1heX<9Sf-Q7rC(bU17M%tK84{bD} zF~iy&O$-~YW+GwqrQ>E2X`H3ya5SDaEO1S0F6-_-Y(<9}sozL%CqbBGXGLtD|&86MlV4WNtX3Ea8JWn=ki!RNH z+KhyeHbfWRV{A2J!wF-JZ9#v(W%NhWriHhUVrIU88_^fFVl91r#!xQL1X0UydZ6p* zkg>6=tAiY7)1EHX#KCwno=RKMbbQ2Uv5cr{>?AQ)))q}irPxm6(6Et8Z%Ua-k#$=W z1ToGznCdgFM7)>m28z>YC%UR7WxsBok&Y4YrrAsjlgOLqh~~z}o7NXSItb(5R8?<0k?1lf+iG_# z7oD7z^Wi=tYE4cb8ZeW_w&B5EV~WJy;dmkj7hEVkd4Y0$=HMVA5FU=j`*DNWh=RM-vF7NxBAPz3DR7$CEK?Mexe>!%-~Lrw}`hp+vOLkQ8)k-@z`6*$#Vb zs2Q}=utwsLb`MP{ZW)Sq#tzn}R4$$kbCZHpmB(^wZd#CaF^}y|WoHaADSwg>P2&Wt zizf=ZIZW6yaVizKAIM&5fv^QZ;m)T|xGr@|S*+$f7 z8BW=VIgjTd>Km{<;(`bifrp-PxAwpKqizvdIqXAQshY_Hk;~V;h{B-HPOhI z!Hj&CHK(~=)+NOFdUzmUJvC?p%#ZgcG5_1luAw2rYK^8aw&1cnZa9yzm*6etVU-n1 zatxQtb4e}h`Fu}B-(fHii@I5f!FBH8*`FWi^3 zH*V`qONn_ok0%UkgON0_co?ykG$xGRVd&a09M9w0jNak?ejaGK94Ndyo{Eo?wWLzU zU~l4RS3I4cbQ*BbkMfw$+mq)Hn|$&30iK_d)v_m^ z9@sG~vv7X;2ygWzQq~ zE;n(~6SdjtrXz~MPB=~tlI<(%vf_ip6KyBfR#_Oj%!5W!imk;a#jtE10d5nU4l4rd zOVZ9~Z}G%zMYdjWb0>-~y!R6&Z<34vn7k7dom1`+McvdX+b3)mMaje+q?Df|Y?*2o zDdnf!Uy72cQ`BZ6Z=-3qWzzoBZphSPCthUIQ2knujkP*PQ#-;%&CJAy$UGLu$UIJs zHttt@BA4@bYZTk_gb`bJgiooMws`%`G24v8X&jx+1L=A`P9kQV`2%~rWNf@lI6D$$ z`my3%WUXwarRDanT3V|}%+P9A#9orcQ#L}vses>Rr0e-H!W1zQ9k^r+eZRs{flQFEr65w`l zI+AWosFKvu!2>02@$(nUnVK*bvXXJ0+-M}QYax4z;9gOWX~ZLa6OSCy?8#DR_u)*& z#t`NwoKUE~&qleaPHu}w`;*wR#QRdT-ZBTbV${U3={1wFRCd(cOIv+Ac5;?Eq+B*B zna3V)OS0+qf{)1`4{wYVx?p*CcN#xz=IHGjzy>IW^m^{E6sgG2K`a170t<S=nWIR-vJpPe>krRx|=teOibRq zOqiIjJDjGi=7_P4ereDSxJOkhh-dy9}#C@o0Z3Q`?3UiS5?9!678Gd!;X_eUH&=Q!Lw+GHeDvZWzHE zlwrJ`NZ|cZC*E81&u?vQFK7+&W$Rk*CTjC$G%Gt9sSR%o5xvR&2?R{H41N}fPLBC=XeXBs*W<9?KAK__zU#Cy?p_<9}6?2<^~ z_oVpFCvYtg5i@6exd?m|$NNk}tl=o!5C7n6p!iN$4My62yo07C_I+#;V4(|eMRVv;V7hDXQs`g_P?#DaY{C|*__NkVq(JEM8WT1ZAYgEDBw4j$~vq8*J z+LGIde7IMT2S8A@-n$2 zn&xvwF#JFSgUkjPbml{G598QzVcOjh3gLIz^gsYvD74j$-|z_F8!_Mm0XygY_6kgC#7&y}+vnf>FGZ5A8#J0Ux=bC^+_Iw^s}8@Obs$-rz7&gTvkiP1DL| z0}reii8^Lkyg0=`*+!iYXAFbj$wL%pC}Fc=l-o`B1% z!6X+O3-baqyt8l;gd`q;#E1+Zl7DSw12LSz2~r#$U* z2=-2xIMY_U`R66?i#GF{e8W|1e0?`OBukv0oN8 z=q@cV8{dM!AE*ZcB@qo3z0T!AW54D~g)W34tS(GGM=ji{`x|tfomVznEB5P7iue)V zvccD6j-#j1kblM(8bwvWxlau%4%VRlt%=ggs`*&Zo{M;?R&tBR6uHZlUSNnEE&Tnx&xv$CB@agR@ zeE#E~`H9OD+JS2qu6?-LaJA#=&^gr7S?Z$m%kd=LISkH-|;wS%GA7jcCSg?0om7Tq=>iA_9C zLQR|{B4mWgnL^HFa-NX$n5+@9hRKyeu4HnWkkgo4EaYM)8-#3NGccMl2z(g3VvrW_ zA(nY8qvB@tWN1gI-CaX)L=Aov7DR+$Cc`|28ith&(-;;rG$60fr^%mf69y#~xh}nO z558Wq%}i!D;W+u5hf^Bz>6m8lV_^8M9G;YPceZWDUwdmTs?sQwef}Q#oBJb?r45ZM zv31mFUaxUrY2We#(YgaG53HzLzN)veuD3C|tS-8;ab@F*m5r;G8pz2?8}Uc(_(z1_ znx0v|ZCzLPy~JYm9Qz9VA^eK^Mwl5W&nEI4nnd&{zj7<*Qju&*L~=LbyY1uOLe{G@ zs5%y_XCSrNFTHHYel3Qsz}LRsUSU2h$`@gl<7+-|yJ{RCrSPRh`0ef0Z?9_mm6Q4w z4!NakxO=j{GtV736Jj5hG9P|fW@l$xXVX1rUVW|jzO@g3^z=&)oO>n1rCL|-Pa222 z`H|*fJOJOnA&!RwL+1Y0eQP^G*WuABo@opivHg8V@uogy4&&{59YpCmKGfF5%yiO7 z@3*aYZf5Uw`|)bWh^7oBsvnB=vU%^w&ldc)g7Z1Rbj0Dt-<{u*x21TFVYMX^Tch!$ z{pBIUsOJ|G{Q2#C=#X!q*?IpP-x(g@-yV?PVj3H756_4AC0n9Na?XdpBcr`YDaJzK ze2QHNdYm~raXR0Pz1mJt?Q(+TZ(VM~8E3m>{j&RC->|>c$TjfCzF%oG^6f@@vQ+}y z+9cO*>}oCOvCmY_o|tpZlTx`eUH)#K)A1c(cLGW^*u*Cd`wTo;(?-eDfOgyemSZ;x zAK+WM><`}24$Aq6_tq)VOE?qd()fIw#5rRd?z|UwJ}a@z@ONKr%iCnH+b4DmW%tIM zw*}8O+U4m+8@`vy{?9MB8|Cn>0$Sur1=1U_KW@lgMEDy_)HCq}nX@MU$pSwqkW)DH zY{WN~HSF#2^$u8`kd_Xi9qg%o?8I>voI)0%`w`R;d~>(~mS7>ncaGT?IX!ld@Hvdn zEqqFFyvDz9%(iYr=l6-eTrR#GpMRo9C;HRw sw-#8^;1Ux{zYcAS{VW9eC%cr;Ib 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 Np?~MT_&aR={|2CfF?|34 literal 26112 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 False packages\CyberSource.Rest.Client.0.0.1.16\lib\cybersource-rest-client-dotnet.dll - - + + packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-csharp.sln b/cybersource-rest-samples-csharp.sln index c0fd272..a12c9b0 100644 --- a/cybersource-rest-samples-csharp.sln +++ b/cybersource-rest-samples-csharp.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.645 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31624.102 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-samples-csharp", "cybersource-rest-samples-csharp.csproj", "{97FF11A4-924D-4C87-A028-2AAF64655954}" EndProject diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 45c4139..f3ec0bd 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -20,12 +20,15 @@ + + + From 873a9268404b9084ac09d36d11c9de880e68ce52 Mon Sep 17 00:00:00 2001 From: snavinch Date: Thu, 21 Oct 2021 21:10:17 +0530 Subject: [PATCH 065/161] + Upgrade to latest dependencies and added samples --- .../ChargebackDetails/GetChargebackDetails.cs | 35 +++++++++++++++++++ .../GetChargebackSummaries.cs | 35 +++++++++++++++++++ ...geClearingLevelDataForAccountOrMerchant.cs | 35 +++++++++++++++++++ .../RetrievalDetails/GetRetrievalDetails.cs | 35 +++++++++++++++++++ .../GetRetrievalSummaries.cs | 35 +++++++++++++++++++ cybersource-rest-samples-csharp.csproj | 9 +++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 8 files changed, 184 insertions(+), 4 deletions(-) create mode 100644 Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs create mode 100644 Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs create mode 100644 Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs create mode 100644 Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs create mode 100644 Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs diff --git a/Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs b/Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs new file mode 100644 index 0000000..a64d0da --- /dev/null +++ b/Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetChargebackDetails + { + public static ReportingV3ChargebackDetailsGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ChargebackDetailsApi(clientConfig); + ReportingV3ChargebackDetailsGet200Response result = apiInstance.GetChargebackDetails(startTime, endTime, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs b/Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs new file mode 100644 index 0000000..0327fb2 --- /dev/null +++ b/Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetChargebackSummaries + { + public static ReportingV3ChargebackSummariesGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ChargebackSummariesApi(clientConfig); + ReportingV3ChargebackSummariesGet200Response result = apiInstance.GetChargebackSummaries(startTime, endTime, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs b/Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs new file mode 100644 index 0000000..e3172d5 --- /dev/null +++ b/Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class InterchangeClearingLevelDataForAccountOrMerchant + { + public static ReportingV3InterchangeClearingLevelDetailsGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InterchangeClearingLevelDetailsApi(clientConfig); + ReportingV3InterchangeClearingLevelDetailsGet200Response result = apiInstance.GetInterchangeClearingLevelDetails(startTime, endTime, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs b/Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs new file mode 100644 index 0000000..8099c7e --- /dev/null +++ b/Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetRetrievalDetails + { + public static ReportingV3RetrievalDetailsGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new RetrievalDetailsApi(clientConfig); + ReportingV3RetrievalDetailsGet200Response result = apiInstance.GetRetrievalDetails(startTime, endTime, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs b/Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs new file mode 100644 index 0000000..5e87269 --- /dev/null +++ b/Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Reporting +{ + public class GetRetrievalSummaries + { + public static ReportingV3RetrievalSummariesGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new RetrievalSummariesApi(clientConfig); + ReportingV3RetrievalSummariesGet200Response result = apiInstance.GetRetrievalSummary(startTime, endTime, organizationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 3dda899..7017008 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,9 +41,9 @@ False packages\CyberSource.Authentication.0.0.0.11\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.16\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.17\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -203,7 +203,10 @@ + + + @@ -219,6 +222,8 @@ + + diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index f3ec0bd..b1ecef2 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 27a2b20..180c1c3 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From abb3ac3d0a5af9e5127e1c4a18f35abaacc14760 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 29 Oct 2021 12:29:07 +0530 Subject: [PATCH 066/161] Upgrade to latest SDK versions --- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index f3ec0bd..b1ecef2 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 27a2b20..180c1c3 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From 3c38988ff36599dd044975fee6ecffa8967ec584 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 23 Nov 2021 16:22:12 +0530 Subject: [PATCH 067/161] Updated to new version of SDK --- Source/Resource/jwsToken.txt | 2 +- Source/Resource/signatureHeaderValue.txt | 2 +- Source/Samples/Authentication/CallHttpMethods/PostMethod.cs | 2 +- Source/Samples/Authentication/CallHttpMethods/PutMethod.cs | 2 +- .../GenerateHttpRequestHeaders/PostGenerateHeaders.cs | 2 +- .../GenerateHttpRequestHeaders/PutGenerateHeaders.cs | 2 +- Source/Samples/Authentication/StandAloneHttpSignature.cs | 2 +- Source/Samples/Authentication/StandAloneJWT.cs | 4 ++-- Source/Samples/Authentication/StandAloneOAuth.cs | 3 --- Source/Samples/Reporting/Reports/CreateAdhocReport.cs | 4 ++-- Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs | 4 ++-- Source/Samples/TokenManagement/Customer/DeleteCustomer.cs | 1 + .../DeleteCustomerPaymentInstrument.cs | 1 + .../CustomerShippingAddress/DeleteCustomerShippingAddress.cs | 1 + .../InstrumentIdentifier/DeleteInstrumentIdentifier.cs | 1 + .../EnrollInstrumentIdentifierForNetworkTokenization.cs | 1 + .../UpdateInstrumentIdentifierPreviousTransactionId.cs | 1 + .../PaymentInstrument/DeletePaymentInstrument.cs | 1 + cybersource-rest-samples-csharp.csproj | 4 ++-- 19 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt index 5454606..f5f0646 100644 --- a/Source/Resource/jwsToken.txt +++ b/Source/Resource/jwsToken.txt @@ -1 +1 @@ -eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJXZWQsIDEzIE9jdCAyMDIxIDA4OjU1OjIzIEdNVCJ9.UL2HCVg1PZpD29ysgJ5mWiLPxBecGUxoHXHaYorfKKl3hPSlMdoFB5IHI4ORtv48LkYHfkIi5UKy57TfbJcza_cFeR7xBMy3hXluuLkvMS5LT_QO5zuAVPv3MMHLFf3fDodDflxal_feVlTc6hFZFAwQn4F7HiktPQG0yA9d6HnORYRXUZSjMraplVe00ghtp2DqbvHO2Gi-sGMOeV60y6w5-9vXeuAq0XuL3Z3oIyUGL349O1cLF-d3u3K5zHzychgghF1lDxr9XVRh_4oWFlgcA_zHqPeIDSVa0bUqHb3i6W8hCpNCdrZGWkwVkW3F1CvU9M0po-fRFc28fzU4NQ \ No newline at end of file +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJUdWUsIDIzIE5vdiAyMDIxIDA5OjA3OjI2IEdNVCJ9.nHPjAJhNgpKYHstJWnUBIRfAopH9VPqXfwqCoZuDuM5DwxT3LV6u7hC4szZVd1ZnS2B19MYPBdF5TecLEIQFhWZAE8wSGnCSRBIf5MeL5MriLevXC9E3Fg2-OEF4I1jIDLahePzTC9YEJZzloSwsXK7EJwwnhuPJN84ZFtja-BEee1hikvfRbmG2Uyvq50Ver0oRh8EnI5AdKJPO1XfYrPu-ivoBJMUqYT31BZocEaIqa75otovs8Yk-drFZBW9mgp5TLyTDlUbrpZqgVLL3A6Vdix37BzW9ap13nv50UPoHGvfOM1O9Gr2aQwwtrnxvC5T1U4k9VjoNjFxC66tubg \ No newline at end of file diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt index ef55d14..79e94ce 100644 --- a/Source/Resource/signatureHeaderValue.txt +++ b/Source/Resource/signatureHeaderValue.txt @@ -1 +1 @@ -keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="krGUxk11hI9Hgf3sYwGl4rUt26RKFRRMpw8OhX2aiTg=" \ No newline at end of file +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="Msmnl9IvKlnm2liXbMAcqiRb+Cvc+OBS5GDXyxoGljU=" \ No newline at end of file diff --git a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs index ad2d7f8..307c764 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs @@ -11,7 +11,7 @@ public class PostMethod // POST Request to Authorize the payment for a transaction. // Transaction details provided in the JSON File are sent along with the Request as Request Body private const string RequestTarget = "/pts/v2/payments/"; - private const string RequestJsonFilePath = "Source/Resource/request_payments.json"; + private const string RequestJsonFilePath = "../../../Source/Resource/request_payments.json"; public static void Run() { diff --git a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs index 33ba232..9c600ca 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs @@ -12,7 +12,7 @@ public class PutMethod // Report Details provided in the JSON File are sent along with the Request as Request Body // Below request subscribes 'TRR Report' for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; - private const string RequestJsonFilePath = "Source/Resource/TRRReport.json"; + private const string RequestJsonFilePath = "../../../Source/Resource/TRRReport.json"; public static void Run() { diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs index 0557501..94a1b02 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs @@ -10,7 +10,7 @@ public class PostGenerateHeaders // POST Request to Authorize the payment for a transaction. // Transaction details provided in the JSON File are sent along with the Request as Request Body private const string RequestTarget = "/pts/v2/payments"; - private const string RequestJsonFilePath = "Source/Resource/request_payments.json"; + private const string RequestJsonFilePath = "../../../Source/Resource/request_payments.json"; public static void Run() { diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs index 0f0d236..c2b3c94 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs @@ -11,7 +11,7 @@ public class PutGenerateHeaders // Report Details provided in the JSON File are sent along with the Request as Request Body // Below request subscribes 'TRR Report' for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; - private const string RequestJsonFilePath = "Source/Resource/TRRReport.json"; + private const string RequestJsonFilePath = "../../../Source/Resource/TRRReport.json"; public static void Run() { diff --git a/Source/Samples/Authentication/StandAloneHttpSignature.cs b/Source/Samples/Authentication/StandAloneHttpSignature.cs index c902b4d..f320619 100644 --- a/Source/Samples/Authentication/StandAloneHttpSignature.cs +++ b/Source/Samples/Authentication/StandAloneHttpSignature.cs @@ -311,7 +311,7 @@ public static StringBuilder GenerateSignature(string request, string digest, str signatureHeaderValue.Append(", signature=\"" + base64EncodedSignature + "\""); // Writing Generated Token to file. - File.WriteAllText(@"./Source/Resource/" + "signatureHeaderValue.txt", signatureHeaderValue.ToString()); + File.WriteAllText(@"../../../Source/Resource/" + "signatureHeaderValue.txt", signatureHeaderValue.ToString()); } catch (Exception ex) { diff --git a/Source/Samples/Authentication/StandAloneJWT.cs b/Source/Samples/Authentication/StandAloneJWT.cs index df46906..361ebdb 100644 --- a/Source/Samples/Authentication/StandAloneJWT.cs +++ b/Source/Samples/Authentication/StandAloneJWT.cs @@ -181,7 +181,7 @@ public static string GenerateJWT(string request, string method) Console.WriteLine("\tJWT BODY : " + jwtBody); // P12 certificate public key is sent in the header and the private key is used to sign the token - X509Certificate2 x5Cert = new X509Certificate2(Path.Combine($"Source/Resource", $"testrest.p12"), merchantID, X509KeyStorageFlags.MachineKeySet); + X509Certificate2 x5Cert = new X509Certificate2(Path.Combine($"../../../Source/Resource", $"testrest.p12"), merchantID, X509KeyStorageFlags.MachineKeySet); // Extracting Public Key from .p12 file string x5cPublicKey = Convert.ToBase64String(x5Cert.RawData); @@ -223,7 +223,7 @@ public static string GenerateJWT(string request, string method) token = Jose.JWT.Encode(jwtBody, privateKey, Jose.JwsAlgorithm.RS256, cybsHeaders); // Writing Generated Token to file. - File.WriteAllText(Path.Combine($"Source/Resource", $"jwsToken.txt"), token); + File.WriteAllText(Path.Combine($"../../../Source/Resource", $"jwsToken.txt"), token); } catch (Exception ex) { diff --git a/Source/Samples/Authentication/StandAloneOAuth.cs b/Source/Samples/Authentication/StandAloneOAuth.cs index 3ffd760..c7d35c0 100644 --- a/Source/Samples/Authentication/StandAloneOAuth.cs +++ b/Source/Samples/Authentication/StandAloneOAuth.cs @@ -2,9 +2,6 @@ using System.Collections.Generic; using CyberSource.Model; using CyberSource.Api; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Cybersource_rest_samples_dotnet.Samples.Authentication { diff --git a/Source/Samples/Reporting/Reports/CreateAdhocReport.cs b/Source/Samples/Reporting/Reports/CreateAdhocReport.cs index cbe7f92..51041fe 100644 --- a/Source/Samples/Reporting/Reports/CreateAdhocReport.cs +++ b/Source/Samples/Reporting/Reports/CreateAdhocReport.cs @@ -20,8 +20,8 @@ public static void Run() string reportMimeType = "application/xml"; string reportName = "testrest_v2"; string timezone = "GMT"; - var reportStartTime = DateTime.Parse("2020-03-01T17:30:00.000+05:30"); - var reportEndTime = DateTime.Parse("2020-03-02T17:30:00.000+05:30"); + var reportStartTime = DateTime.Parse("2021-03-01T17:30:00.000+05:30"); + var reportEndTime = DateTime.Parse("2021-03-02T17:30:00.000+05:30"); bool reportPreferencesSignedAmounts = true; string reportPreferencesFieldNameConvention = "SOAPI"; Reportingv3reportsReportPreferences reportPreferences = new Reportingv3reportsReportPreferences( diff --git a/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs b/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs index 33019b0..d8008c3 100644 --- a/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs +++ b/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs @@ -12,8 +12,8 @@ public class RetrieveAvailableReports public static ReportingV3ReportsGet200Response Run() { string organizationId = null; - var startTime = DateTime.ParseExact("2020-04-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2020-04-03T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2021-04-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2021-04-03T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string timeQueryType = "executedTime"; string reportMimeType = "application/xml"; string reportFrequency = null; diff --git a/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs b/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs index 3bdb29f..dca3f5d 100644 --- a/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs @@ -19,6 +19,7 @@ public static void Run() var apiInstance = new CustomerApi(clientConfig); apiInstance.DeleteCustomer(customerTokenId); + Console.WriteLine($"Customer {customerTokenId} has been deleted."); } catch (Exception e) { diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs index 5965d28..799030c 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs @@ -20,6 +20,7 @@ public static void Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); apiInstance.DeleteCustomerPaymentInstrument(customerTokenId, paymentInstrumentTokenId); + Console.WriteLine($"Customer Payment Instrument {customerTokenId} --> {paymentInstrumentTokenId} has been deleted."); } catch (Exception e) { diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs index 6f483e0..046492d 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs @@ -20,6 +20,7 @@ public static void Run() var apiInstance = new CustomerShippingAddressApi(clientConfig); apiInstance.DeleteCustomerShippingAddress(customerTokenId, shippingAddressTokenId); + Console.WriteLine($"Customer Shipping Address {customerTokenId} --> {shippingAddressTokenId} has been deleted."); } catch (Exception e) { diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs index c85547a..5b40811 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs @@ -20,6 +20,7 @@ public static void Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); apiInstance.DeleteInstrumentIdentifier(tokenId, profileid); + Console.WriteLine($"Instrument Identifier {tokenId} has been deleted."); } catch (Exception e) { diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs index eb7fdf3..3b5baee 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs @@ -50,6 +50,7 @@ public static void Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); apiInstance.PostInstrumentIdentifierEnrollment(instrumentIdentifierTokenId, requestObj, profileid); + Console.WriteLine($"Instrument Identifier for Network Tokenized Card {instrumentIdentifierTokenId} has been enrolled."); } catch (Exception e) { diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs index cefb8a6..409fe36 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs @@ -40,6 +40,7 @@ public static void Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); apiInstance.PatchInstrumentIdentifier(instrumentIdentifierTokenId, requestObj); + Console.WriteLine($"Instrument Identifier {instrumentIdentifierTokenId} has been updated with previous transaction ID."); } catch (Exception e) { diff --git a/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs index e2d734c..b74d29b 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs @@ -21,6 +21,7 @@ public static void Run() var apiInstance = new PaymentInstrumentApi(clientConfig); apiInstance.DeletePaymentInstrument(tokenId, profileid); + Console.WriteLine($"Payment Instrument {tokenId} has been deleted."); } catch (Exception e) { diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 7017008..2e19b9b 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,9 +41,9 @@ False packages\CyberSource.Authentication.0.0.0.11\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.17\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.18\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll From 824f1046387910f7bd89830a154265497d0953fd Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 23 Nov 2021 17:02:32 +0530 Subject: [PATCH 068/161] Updated to new version of SDK --- Source/Resource/jwsToken.txt | 2 +- Source/Resource/signatureHeaderValue.txt | 2 +- cybersource-rest-samples-netcore.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt index f5f0646..e0957c1 100644 --- a/Source/Resource/jwsToken.txt +++ b/Source/Resource/jwsToken.txt @@ -1 +1 @@ -eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJUdWUsIDIzIE5vdiAyMDIxIDA5OjA3OjI2IEdNVCJ9.nHPjAJhNgpKYHstJWnUBIRfAopH9VPqXfwqCoZuDuM5DwxT3LV6u7hC4szZVd1ZnS2B19MYPBdF5TecLEIQFhWZAE8wSGnCSRBIf5MeL5MriLevXC9E3Fg2-OEF4I1jIDLahePzTC9YEJZzloSwsXK7EJwwnhuPJN84ZFtja-BEee1hikvfRbmG2Uyvq50Ver0oRh8EnI5AdKJPO1XfYrPu-ivoBJMUqYT31BZocEaIqa75otovs8Yk-drFZBW9mgp5TLyTDlUbrpZqgVLL3A6Vdix37BzW9ap13nv50UPoHGvfOM1O9Gr2aQwwtrnxvC5T1U4k9VjoNjFxC66tubg \ No newline at end of file +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJUdWUsIDIzIE5vdiAyMDIxIDExOjEyOjQ2IEdNVCJ9.FlZyVcIllkpLWPeID8iOiuvypQuSDwRHQbepEWSIrY9GtrV-iSPcxNXK_Clu2Bdq1EsFumYVaN4yc5c05pe0ydLEpDrVhnEiyi-cQLJsfCcjBCAc2r2bMw4W3Ve4TDoQgV9B0eeGcSIxgQjkQnXl2PfTRyQxpPFq2d61noCvBkwRs1VidzAC6Q94AfgX9wbyAPQrQmusv5fYeiG6OdSurTjGdYBrPSle4jFvb9bXrrDEFSbVsCKieywjzy_-9I78YXt2LsNqbFypqtmBtXxNLblajT-OgSSDqKrKo3BWQq9HnHflUOoMh7Oxewo0Y1mGG1RJEyTPtornA-smjanbLw \ No newline at end of file diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt index 79e94ce..b1d4060 100644 --- a/Source/Resource/signatureHeaderValue.txt +++ b/Source/Resource/signatureHeaderValue.txt @@ -1 +1 @@ -keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="Msmnl9IvKlnm2liXbMAcqiRb+Cvc+OBS5GDXyxoGljU=" \ No newline at end of file +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="uSkBBjN6ojmxWj1UL+FSPvVz8+IWUwr07iuhwlInxB4=" \ No newline at end of file diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index b1ecef2..1d9a2fc 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + From b3dce7e1c5c825c80a30c457f1229f25bfa3b46c Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Wed, 1 Dec 2021 15:54:39 +0530 Subject: [PATCH 069/161] Updated to new version of SDK --- packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages.config b/packages.config index 180c1c3..625b0a6 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From 55c5e8e8d277ceb802cb3d66ef24a9ffd8baa3fa Mon Sep 17 00:00:00 2001 From: Gabriel B Nongsiej Date: Wed, 19 Jan 2022 15:07:44 +0530 Subject: [PATCH 070/161] Testing Modified LogUtility --- NLog.config | 10 +- .../Samples/Payments/Payments/ParallelAuth.cs | 100 ++++++++++++++++++ cybersource-rest-samples-csharp.csproj | 2 + 3 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 Source/Samples/Payments/Payments/ParallelAuth.cs diff --git a/NLog.config b/NLog.config index 0a7d747..8c3e406 100644 --- a/NLog.config +++ b/NLog.config @@ -15,7 +15,7 @@ - - - + + + \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/ParallelAuth.cs b/Source/Samples/Payments/Payments/ParallelAuth.cs new file mode 100644 index 0000000..999811d --- /dev/null +++ b/Source/Samples/Payments/Payments/ParallelAuth.cs @@ -0,0 +1,100 @@ +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class ParallelAuth + { + public static async Task Run() + { + var task1 = Task.Run(() => AuthPayment()); + var task2 = Task.Run(() => AuthPayment()); + var task3 = Task.Run(() => AuthPayment()); + var task4 = Task.Run(() => AuthPayment()); + var task5 = Task.Run(() => AuthPayment()); + var task6 = Task.Run(() => AuthPayment()); + + await task1; + await task2; + await task3; + await task4; + await task5; + await task6; + + Console.WriteLine("COMPLETE"); + } + + public static PtsV2PaymentsPost201Response AuthPayment() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = new Random().Next(100, 1000).ToString(); + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (ApiException err) + { + Console.WriteLine("Error Code: " + err.ErrorCode); + Console.WriteLine("Error Message: " + err.Message); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 2e19b9b..4363831 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -170,6 +170,7 @@ + @@ -304,6 +305,7 @@ Designer + Always Designer From 219e9b5a714c4047d05f632f2aa7962c9450d4e6 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 28 Jan 2022 16:29:38 +0530 Subject: [PATCH 071/161] Update to latest version of SDK --- Source/Configuration.cs | 10 +- Source/Resource/jwsToken.txt | 2 +- .../CallHttpMethods/PostMethod.cs | 3 +- .../CallHttpMethods/PutMethod.cs | 3 +- .../PostGenerateHeaders.cs | 3 +- .../Samples/Authentication/StandAloneJWT.cs | 4 +- .../Samples/Authentication/StandAloneOAuth.cs | 3 +- .../ElectronicCheckStandAloneCredits.cs | 2 +- .../Samples/Payments/Payments/ParallelAuth.cs | 100 ------------------ cybersource-rest-samples-csharp.csproj | 8 +- cybersource-rest-samples-netcore.csproj | 4 +- 11 files changed, 24 insertions(+), 118 deletions(-) delete mode 100644 Source/Samples/Payments/Payments/ParallelAuth.cs diff --git a/Source/Configuration.cs b/Source/Configuration.cs index 9ec4054..dbefd7f 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -1,5 +1,7 @@ -using System.Collections.Generic; - +using System; +using System.Collections.Generic; +using System.IO; + namespace Cybersource_rest_samples_dotnet { public class Configuration @@ -13,7 +15,7 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("merchantID", "testrest"); _configurationDictionary.Add("merchantsecretKey", "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="); _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); - _configurationDictionary.Add("keysDirectory", "Source\\Resource"); + _configurationDictionary.Add("keysDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\Source\\Resource")); _configurationDictionary.Add("keyFilename", "testrest"); _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); _configurationDictionary.Add("keyAlias", "testrest"); @@ -45,7 +47,7 @@ public Dictionary GetAlternativeConfiguration() _configurationDictionary.Add("merchantID", "testrest_cpctv"); _configurationDictionary.Add("merchantsecretKey", "JXm4dqKYIxWofM1TIbtYY9HuYo7Cg1HPHxn29f6waRo="); _configurationDictionary.Add("merchantKeyId", "e547c3d3-16e4-444c-9313-2a08784b906a"); - _configurationDictionary.Add("keysDirectory", "Resource"); + _configurationDictionary.Add("keysDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\Source\\Resource")); _configurationDictionary.Add("keyFilename", "testrest_cpctv"); _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); _configurationDictionary.Add("keyAlias", "testrest_cpctv"); diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt index e0957c1..64375b3 100644 --- a/Source/Resource/jwsToken.txt +++ b/Source/Resource/jwsToken.txt @@ -1 +1 @@ -eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJUdWUsIDIzIE5vdiAyMDIxIDExOjEyOjQ2IEdNVCJ9.FlZyVcIllkpLWPeID8iOiuvypQuSDwRHQbepEWSIrY9GtrV-iSPcxNXK_Clu2Bdq1EsFumYVaN4yc5c05pe0ydLEpDrVhnEiyi-cQLJsfCcjBCAc2r2bMw4W3Ve4TDoQgV9B0eeGcSIxgQjkQnXl2PfTRyQxpPFq2d61noCvBkwRs1VidzAC6Q94AfgX9wbyAPQrQmusv5fYeiG6OdSurTjGdYBrPSle4jFvb9bXrrDEFSbVsCKieywjzy_-9I78YXt2LsNqbFypqtmBtXxNLblajT-OgSSDqKrKo3BWQq9HnHflUOoMh7Oxewo0Y1mGG1RJEyTPtornA-smjanbLw \ No newline at end of file +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJGcmksIDIxIEphbiAyMDIyIDA1OjQzOjI1IEdNVCJ9.q6vWvNuzSsuLsaWmBm9aez1DwjnaA9U4fgm4hmhM7ZfDzt1gvUt8rlDxYLplTJUsC1fDW9eZittAvSjqMJJszZO5VG8bPr4G3ypQ25NJkZl7d2lDtAbyyMeZGafFsUzQwy8UUQ1SdpwPwo5WyIcYxMu-yMnqhLNugh_JkFvnAtlYdfbbt58QkctIky3U4vebQY10S2B2W5xGasaOsaLQDd8TC2Grp3CdmaUy1XjA8k5Yu336QXKToi9_tWYgBfX2TMP8NIuk8twqXdgeIsg6zhxvjU9Db1gf6sbfoUIm4cYivkG2uffuNTN31lG2zoE2GhPEM3xugMU5Hs9XjlCRyQ \ No newline at end of file diff --git a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs index 307c764..e73046f 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using ApiSdk.controller; using AuthenticationSdk.core; using AuthenticationSdk.util; @@ -11,7 +12,7 @@ public class PostMethod // POST Request to Authorize the payment for a transaction. // Transaction details provided in the JSON File are sent along with the Request as Request Body private const string RequestTarget = "/pts/v2/payments/"; - private const string RequestJsonFilePath = "../../../Source/Resource/request_payments.json"; + private static string RequestJsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../Source/Resource/request_payments.json").ToString(); public static void Run() { diff --git a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs index 9c600ca..39f6f09 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using ApiSdk.controller; using AuthenticationSdk.core; using AuthenticationSdk.util; @@ -12,7 +13,7 @@ public class PutMethod // Report Details provided in the JSON File are sent along with the Request as Request Body // Below request subscribes 'TRR Report' for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; - private const string RequestJsonFilePath = "../../../Source/Resource/TRRReport.json"; + private static string RequestJsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../Source/Resource/TRRReport.json"); public static void Run() { diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs index 94a1b02..972e9eb 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using AuthenticationSdk.core; using AuthenticationSdk.util; using SampleCode.data; @@ -10,7 +11,7 @@ public class PostGenerateHeaders // POST Request to Authorize the payment for a transaction. // Transaction details provided in the JSON File are sent along with the Request as Request Body private const string RequestTarget = "/pts/v2/payments"; - private const string RequestJsonFilePath = "../../../Source/Resource/request_payments.json"; + private static string RequestJsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../Source/Resource/request_payments.json"); public static void Run() { diff --git a/Source/Samples/Authentication/StandAloneJWT.cs b/Source/Samples/Authentication/StandAloneJWT.cs index 361ebdb..786c66e 100644 --- a/Source/Samples/Authentication/StandAloneJWT.cs +++ b/Source/Samples/Authentication/StandAloneJWT.cs @@ -181,7 +181,7 @@ public static string GenerateJWT(string request, string method) Console.WriteLine("\tJWT BODY : " + jwtBody); // P12 certificate public key is sent in the header and the private key is used to sign the token - X509Certificate2 x5Cert = new X509Certificate2(Path.Combine($"../../../Source/Resource", $"testrest.p12"), merchantID, X509KeyStorageFlags.MachineKeySet); + X509Certificate2 x5Cert = new X509Certificate2(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"../../../Source/Resource", $"testrest.p12"), merchantID, X509KeyStorageFlags.MachineKeySet); // Extracting Public Key from .p12 file string x5cPublicKey = Convert.ToBase64String(x5Cert.RawData); @@ -223,7 +223,7 @@ public static string GenerateJWT(string request, string method) token = Jose.JWT.Encode(jwtBody, privateKey, Jose.JwsAlgorithm.RS256, cybsHeaders); // Writing Generated Token to file. - File.WriteAllText(Path.Combine($"../../../Source/Resource", $"jwsToken.txt"), token); + File.WriteAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"../../../Source/Resource", $"jwsToken.txt"), token); } catch (Exception ex) { diff --git a/Source/Samples/Authentication/StandAloneOAuth.cs b/Source/Samples/Authentication/StandAloneOAuth.cs index c7d35c0..33c902b 100644 --- a/Source/Samples/Authentication/StandAloneOAuth.cs +++ b/Source/Samples/Authentication/StandAloneOAuth.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using CyberSource.Model; using CyberSource.Api; +using System.IO; namespace Cybersource_rest_samples_dotnet.Samples.Authentication { @@ -16,7 +17,7 @@ private static Dictionary GetConfiguration() // Configs related to OAuth _configDictionary.Add("enableClientCert", "true"); - _configDictionary.Add("clientCertDirectory", "Source\\Resource"); + _configDictionary.Add("clientCertDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Source\\Resource")); _configDictionary.Add("clientCertFile", ""); _configDictionary.Add("clientCertPassword", ""); _configDictionary.Add("clientId", ""); diff --git a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs index a210993..45714eb 100644 --- a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs +++ b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs @@ -26,7 +26,7 @@ public static PtsV2CreditsPost201Response Run() ); string paymentInformationBankRoutingNumber = "071923284"; - Ptsv2paymentsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsPaymentInformationBank( + Ptsv2paymentsidrefundsPaymentInformationBank paymentInformationBank = new Ptsv2paymentsidrefundsPaymentInformationBank( Account: paymentInformationBankAccount, RoutingNumber: paymentInformationBankRoutingNumber ); diff --git a/Source/Samples/Payments/Payments/ParallelAuth.cs b/Source/Samples/Payments/Payments/ParallelAuth.cs deleted file mode 100644 index 999811d..0000000 --- a/Source/Samples/Payments/Payments/ParallelAuth.cs +++ /dev/null @@ -1,100 +0,0 @@ -using CyberSource.Api; -using CyberSource.Client; -using CyberSource.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Cybersource_rest_samples_dotnet.Samples.Payments -{ - public class ParallelAuth - { - public static async Task Run() - { - var task1 = Task.Run(() => AuthPayment()); - var task2 = Task.Run(() => AuthPayment()); - var task3 = Task.Run(() => AuthPayment()); - var task4 = Task.Run(() => AuthPayment()); - var task5 = Task.Run(() => AuthPayment()); - var task6 = Task.Run(() => AuthPayment()); - - await task1; - await task2; - await task3; - await task4; - await task5; - await task6; - - Console.WriteLine("COMPLETE"); - } - - public static PtsV2PaymentsPost201Response AuthPayment() - { - string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( - Code: clientReferenceInformationCode - ); - - bool processingInformationCapture = false; - - Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( - Capture: processingInformationCapture - ); - - string paymentInformationCardNumber = "4111111111111111"; - string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2031"; - Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( - Number: paymentInformationCardNumber, - ExpirationMonth: paymentInformationCardExpirationMonth, - ExpirationYear: paymentInformationCardExpirationYear - ); - - Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( - Card: paymentInformationCard - ); - - string orderInformationAmountDetailsTotalAmount = new Random().Next(100, 1000).ToString(); - string orderInformationAmountDetailsCurrency = "USD"; - Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( - TotalAmount: orderInformationAmountDetailsTotalAmount, - Currency: orderInformationAmountDetailsCurrency - ); - - Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); - - var requestObj = new CreatePaymentRequest( - ClientReferenceInformation: clientReferenceInformation, - ProcessingInformation: processingInformation, - PaymentInformation: paymentInformation, - OrderInformation: orderInformation - ); - - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - - var apiInstance = new PaymentsApi(clientConfig); - PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); - Console.WriteLine(result); - return result; - } - catch (ApiException err) - { - Console.WriteLine("Error Code: " + err.ErrorCode); - Console.WriteLine("Error Message: " + err.Message); - return null; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } -} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 4363831..20f77ec 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,13 +37,13 @@ False Source\lib\net461\ApiSdk.dll - + False - packages\CyberSource.Authentication.0.0.0.11\lib\AuthenticationSdk.dll + packages\CyberSource.Authentication.0.0.0.12\lib\AuthenticationSdk.dll - + False - packages\CyberSource.Rest.Client.0.0.1.18\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.19\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 1d9a2fc..48c892c 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + From 5e1cbc292eea7164eade0da1868cbed9370d63bb Mon Sep 17 00:00:00 2001 From: Gabriel B Nongsiej Date: Fri, 4 Feb 2022 03:22:41 +0530 Subject: [PATCH 072/161] Fix for JWT cache issue --- Source/Configuration.cs | 4 +-- Source/SampleCode.cs | 39 ++++++++++++++++++++++++++ cybersource-rest-samples-csharp.csproj | 24 +++++++++------- cybersource-rest-samples-csharp.sln | 12 ++++++++ 4 files changed, 67 insertions(+), 12 deletions(-) diff --git a/Source/Configuration.cs b/Source/Configuration.cs index dbefd7f..541f11c 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -11,7 +11,7 @@ public class Configuration public Dictionary GetConfiguration() { - _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); + _configurationDictionary.Add("authenticationType", "JWT"); _configurationDictionary.Add("merchantID", "testrest"); _configurationDictionary.Add("merchantsecretKey", "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="); _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); @@ -43,7 +43,7 @@ public Dictionary GetConfiguration() public Dictionary GetAlternativeConfiguration() { - _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); + _configurationDictionary.Add("authenticationType", "JWT"); _configurationDictionary.Add("merchantID", "testrest_cpctv"); _configurationDictionary.Add("merchantsecretKey", "JXm4dqKYIxWofM1TIbtYY9HuYo7Cg1HPHxn29f6waRo="); _configurationDictionary.Add("merchantKeyId", "e547c3d3-16e4-444c-9313-2a08784b906a"); diff --git a/Source/SampleCode.cs b/Source/SampleCode.cs index 38bb89c..4cc38c0 100644 --- a/Source/SampleCode.cs +++ b/Source/SampleCode.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Net; +using System.Threading.Tasks; using NLog; namespace Cybersource_rest_samples_dotnet @@ -64,6 +65,40 @@ public static void Main(string[] args) logger.Trace("PROGRAM EXECUTION ENDS"); } + public static async Task MultiThreadedTogglingCredentials() + { + int taskCount = 10; + + List tasks = new List(); + for (int i = 0; i < taskCount; i++) + { + string program = string.Empty; + tasks.Add(new Task(() => + { + for (int j = 0; j < taskCount; j++) + { + if (j % 2 == 0) + { + program = "SimpleAuthorizationInternet"; + } + else + { + program = "IncrementalAuthorization"; + } + + RunSample(program); + } + })); + } + + foreach (var task in tasks) + { + task.Start(); + } + + await Task.WhenAll(tasks); + } + public static void RunSample(string cmdLineArg = null) { try @@ -87,6 +122,10 @@ public static void RunSample(string cmdLineArg = null) Console.WriteLine("\n\nTotal number of Sample run : " + sampleCount); } + else if (_sampleToRun.ToUpper().Contains("GAMWOR")) + { + MultiThreadedTogglingCredentials(); + } else { foreach (var path in SampleCodeClassesPathList) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 20f77ec..4fc3491 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,17 +37,10 @@ False Source\lib\net461\ApiSdk.dll - - False - packages\CyberSource.Authentication.0.0.0.12\lib\AuthenticationSdk.dll - - - False - packages\CyberSource.Rest.Client.0.0.1.19\lib\cybersource-rest-client-dotnet.dll - packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll + packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll True @@ -56,6 +49,9 @@ packages\NLog.4.5.10\lib\net45\NLog.dll True + + packages\NUnit.3.10.1\lib\net45\nunit.framework.dll + False packages\RestSharp.106.12.0\lib\net452\RestSharp.dll @@ -170,7 +166,6 @@ - @@ -328,7 +323,16 @@ - + + + {910f28d1-8bd0-4359-aacb-b96c04cf68e8} + AuthenticationSdk + + + {8c08b6dc-4da0-4434-a6c5-709932dddde5} + cybersource-rest-client-dotnet + + DEL /S /Q ..\..\..\obj\* diff --git a/cybersource-rest-samples-csharp.sln b/cybersource-rest-samples-csharp.sln index a12c9b0..cdf612b 100644 --- a/cybersource-rest-samples-csharp.sln +++ b/cybersource-rest-samples-csharp.sln @@ -5,6 +5,10 @@ VisualStudioVersion = 16.0.31624.102 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-samples-csharp", "cybersource-rest-samples-csharp.csproj", "{97FF11A4-924D-4C87-A028-2AAF64655954}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthenticationSdk", "..\cybersource-rest-auth-dotnet\AuthenticationSdk\AuthenticationSdk\AuthenticationSdk.csproj", "{910F28D1-8BD0-4359-AACB-B96C04CF68E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-client-dotnet", "..\cybersource-rest-client-dotnet\cybersource-rest-client-dotnet.csproj", "{8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +19,14 @@ Global {97FF11A4-924D-4C87-A028-2AAF64655954}.Debug|Any CPU.Build.0 = Debug|Any CPU {97FF11A4-924D-4C87-A028-2AAF64655954}.Release|Any CPU.ActiveCfg = Release|Any CPU {97FF11A4-924D-4C87-A028-2AAF64655954}.Release|Any CPU.Build.0 = Release|Any CPU + {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Release|Any CPU.Build.0 = Release|Any CPU + {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 20c7304373ac3ad8e3e0d14012764395cce4655c Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 3 Mar 2022 19:13:29 +0530 Subject: [PATCH 073/161] Update to new version of SDK --- Source/Configuration.cs | 4 +- Source/Resource/jwsToken.txt | 2 +- Source/Resource/signatureHeaderValue.txt | 2 +- Source/SampleCode.cs | 39 ------------------- .../PutGenerateHeaders.cs | 3 +- .../Authentication/StandAloneHttpSignature.cs | 2 +- cybersource-rest-samples-csharp.csproj | 22 ++++------- cybersource-rest-samples-csharp.sln | 12 ------ cybersource-rest-samples-netcore.csproj | 4 +- packages.config | 4 +- 10 files changed, 18 insertions(+), 76 deletions(-) diff --git a/Source/Configuration.cs b/Source/Configuration.cs index 541f11c..dbefd7f 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -11,7 +11,7 @@ public class Configuration public Dictionary GetConfiguration() { - _configurationDictionary.Add("authenticationType", "JWT"); + _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); _configurationDictionary.Add("merchantID", "testrest"); _configurationDictionary.Add("merchantsecretKey", "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="); _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); @@ -43,7 +43,7 @@ public Dictionary GetConfiguration() public Dictionary GetAlternativeConfiguration() { - _configurationDictionary.Add("authenticationType", "JWT"); + _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); _configurationDictionary.Add("merchantID", "testrest_cpctv"); _configurationDictionary.Add("merchantsecretKey", "JXm4dqKYIxWofM1TIbtYY9HuYo7Cg1HPHxn29f6waRo="); _configurationDictionary.Add("merchantKeyId", "e547c3d3-16e4-444c-9313-2a08784b906a"); diff --git a/Source/Resource/jwsToken.txt b/Source/Resource/jwsToken.txt index 64375b3..9d53fa6 100644 --- a/Source/Resource/jwsToken.txt +++ b/Source/Resource/jwsToken.txt @@ -1 +1 @@ -eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.ewoiZGlnZXN0IjoiRkp6bDZnMUI2Nzh1OWc1Zy82MnFYSkIrTkVYY2tnSEkvb0hocmtnSkI5TT0iLCAiZGlnZXN0QWxnb3JpdGhtIjoiU0hBLTI1NiIsICJpYXQiOiJGcmksIDIxIEphbiAyMDIyIDA1OjQzOjI1IEdNVCJ9.q6vWvNuzSsuLsaWmBm9aez1DwjnaA9U4fgm4hmhM7ZfDzt1gvUt8rlDxYLplTJUsC1fDW9eZittAvSjqMJJszZO5VG8bPr4G3ypQ25NJkZl7d2lDtAbyyMeZGafFsUzQwy8UUQ1SdpwPwo5WyIcYxMu-yMnqhLNugh_JkFvnAtlYdfbbt58QkctIky3U4vebQY10S2B2W5xGasaOsaLQDd8TC2Grp3CdmaUy1XjA8k5Yu336QXKToi9_tWYgBfX2TMP8NIuk8twqXdgeIsg6zhxvjU9Db1gf6sbfoUIm4cYivkG2uffuNTN31lG2zoE2GhPEM3xugMU5Hs9XjlCRyQ \ No newline at end of file +eyJhbGciOiJSUzI1NiIsInYtYy1tZXJjaGFudC1pZCI6InRlc3RyZXN0IiwieDVjIjpbIk1JSUNYekNDQWNpZ0F3SUJBZ0lXTlRjME5qWTBNalF6TURZNU1ERTNOekV3TnpBME5qQU5CZ2txaGtpRzl3MEJBUXNGQURBZU1Sd3dHZ1lEVlFRRERCTkRlV0psY2xOdmRYSmpaVU5sY25SQmRYUm9NQjRYRFRFNU1URXlOVEEyTkRRd00xb1hEVEl4TVRFeU5UQTJORFF3TTFvd05ERVJNQThHQTFVRUF3d0lkR1Z6ZEhKbGMzUXhIekFkQmdOVkJBVVRGalUzTkRZMk5ESTBNekEyT1RBeE56Y3hNRGN3TkRZd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMrQnRkTWNva2FLd1RlczlPK3NucWpXc2VoTzAvWTRDSnJ3bzRjZEdDYWZSTzZvd3MzbUMxeG1wU1l0dFRLSWRlR1IxcU9ZcFRTZVk5dUpoMmNDZmF5TUtYbWhRZjRkNXY4cE5Ebm1ZQk1HQndVMXdXamxZc01MRmJjUEZXamRQdEtsb3UyUklXWjU2NllXSWJXQ0JmK0c0ZEhrQTBEN0NzcDNGVDNsblVOMm1lNGxKa2x5c2ZxcDFYOHEzSkRxVklRRlZBZHVhbWhXQ1lNUlM1S2c4c0t3TWpsZEdRVWJ5ODhTK01Pd2NDQTNIT0hUNjRiYXJ2UElkMkV4cUFxdmZ5QkNQQVI0OVY2L3l3RFZzSDlTeUhld2cxMjFja01jQTlnNTV0SXFkc3lIR1JaTjlmczIwa015cUVQNzhMNGN4ZmlzdVZRQzhrbmxmWnRkY3FWQVk3RkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnWUVBdHBDL0VocS8yUDdWYXp6WTgxZ1ZucFBnRWpIWFB5S2t0emJSU1ZkUkcvTUdiVko1OVFWSmVMbnpnbXpIbXlxMGNKK1FTUVBWTzQ2YmxvTkYrMjlJWVErelZZWGFOZ3ZqcVlRU2hYUEM2bllJbkZDZk9uMXByUklJY0l0KzViWkpZRmtRR1R6OGprRUF2QlpsYjBsdm02S3REVWI5T0xPMzhIMDV5U0xpbDY4PSJdfQ.eyJpYXQiOiJXZWQsIDAyIE1hciAyMDIyIDA3OjU0OjM3IEdNVCJ9.Mxko9nrb6kja6JH5zOna0SzEShZFgrsMxBNpl5bhA9loJNuEZ9IIR6Ij25uJoN6yFQ2IphlKaZKEwvuHkoQWPS_9SUu7Nq9Q4jhrJebNXfhyEew_NFs24LSwgrZvmfq7UOvNmIQX6gsNzNeSSmUgS1IB676mHeFpBIEN6GjuDu44SA-G1_J4MCYj3I-qFoijqOCLPbbZFTqI6De33oV8o5sLDjZ-LJg0xrwgJ4wlQCe5FwXIg9n9yvHswlAhYTq_EDYP_5r9fX7bGDy7KCMfJsADYgLE_SM5jV9ArRNHErXws3cvJop1dnH55V2Gjl3Lz2Lkk07HBiEFakJMGcF5Jg \ No newline at end of file diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt index b1d4060..5d28d48 100644 --- a/Source/Resource/signatureHeaderValue.txt +++ b/Source/Resource/signatureHeaderValue.txt @@ -1 +1 @@ -keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="uSkBBjN6ojmxWj1UL+FSPvVz8+IWUwr07iuhwlInxB4=" \ No newline at end of file +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="I/3BC76nsQmZGOlnsrvslZk/VLVaXA2Jb0iVtce++JE=" \ No newline at end of file diff --git a/Source/SampleCode.cs b/Source/SampleCode.cs index 4cc38c0..38bb89c 100644 --- a/Source/SampleCode.cs +++ b/Source/SampleCode.cs @@ -3,7 +3,6 @@ using System.IO; using System.Linq; using System.Net; -using System.Threading.Tasks; using NLog; namespace Cybersource_rest_samples_dotnet @@ -65,40 +64,6 @@ public static void Main(string[] args) logger.Trace("PROGRAM EXECUTION ENDS"); } - public static async Task MultiThreadedTogglingCredentials() - { - int taskCount = 10; - - List tasks = new List(); - for (int i = 0; i < taskCount; i++) - { - string program = string.Empty; - tasks.Add(new Task(() => - { - for (int j = 0; j < taskCount; j++) - { - if (j % 2 == 0) - { - program = "SimpleAuthorizationInternet"; - } - else - { - program = "IncrementalAuthorization"; - } - - RunSample(program); - } - })); - } - - foreach (var task in tasks) - { - task.Start(); - } - - await Task.WhenAll(tasks); - } - public static void RunSample(string cmdLineArg = null) { try @@ -122,10 +87,6 @@ public static void RunSample(string cmdLineArg = null) Console.WriteLine("\n\nTotal number of Sample run : " + sampleCount); } - else if (_sampleToRun.ToUpper().Contains("GAMWOR")) - { - MultiThreadedTogglingCredentials(); - } else { foreach (var path in SampleCodeClassesPathList) diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs index c2b3c94..062a2a3 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs @@ -11,10 +11,9 @@ public class PutGenerateHeaders // Report Details provided in the JSON File are sent along with the Request as Request Body // Below request subscribes 'TRR Report' for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; - private const string RequestJsonFilePath = "../../../Source/Resource/TRRReport.json"; - public static void Run() { + string RequestJsonFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../", "Source/Resource/TRRReport.json"); try { // Setting up Merchant Config diff --git a/Source/Samples/Authentication/StandAloneHttpSignature.cs b/Source/Samples/Authentication/StandAloneHttpSignature.cs index f320619..42584b7 100644 --- a/Source/Samples/Authentication/StandAloneHttpSignature.cs +++ b/Source/Samples/Authentication/StandAloneHttpSignature.cs @@ -311,7 +311,7 @@ public static StringBuilder GenerateSignature(string request, string digest, str signatureHeaderValue.Append(", signature=\"" + base64EncodedSignature + "\""); // Writing Generated Token to file. - File.WriteAllText(@"../../../Source/Resource/" + "signatureHeaderValue.txt", signatureHeaderValue.ToString()); + File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + @"../../../Source/Resource/" + "signatureHeaderValue.txt", signatureHeaderValue.ToString()); } catch (Exception ex) { diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 4fc3491..98f3490 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -36,11 +36,18 @@ False Source\lib\net461\ApiSdk.dll + + + False + packages\CyberSource.Authentication.0.0.0.13\lib\AuthenticationSdk.dll + + + False + packages\CyberSource.Rest.Client.0.0.1.20\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll - packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll True @@ -49,9 +56,6 @@ packages\NLog.4.5.10\lib\net45\NLog.dll True - - packages\NUnit.3.10.1\lib\net45\nunit.framework.dll - False packages\RestSharp.106.12.0\lib\net452\RestSharp.dll @@ -323,16 +327,6 @@ - - - {910f28d1-8bd0-4359-aacb-b96c04cf68e8} - AuthenticationSdk - - - {8c08b6dc-4da0-4434-a6c5-709932dddde5} - cybersource-rest-client-dotnet - - DEL /S /Q ..\..\..\obj\* diff --git a/cybersource-rest-samples-csharp.sln b/cybersource-rest-samples-csharp.sln index cdf612b..a12c9b0 100644 --- a/cybersource-rest-samples-csharp.sln +++ b/cybersource-rest-samples-csharp.sln @@ -5,10 +5,6 @@ VisualStudioVersion = 16.0.31624.102 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-samples-csharp", "cybersource-rest-samples-csharp.csproj", "{97FF11A4-924D-4C87-A028-2AAF64655954}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthenticationSdk", "..\cybersource-rest-auth-dotnet\AuthenticationSdk\AuthenticationSdk\AuthenticationSdk.csproj", "{910F28D1-8BD0-4359-AACB-B96C04CF68E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-client-dotnet", "..\cybersource-rest-client-dotnet\cybersource-rest-client-dotnet.csproj", "{8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,14 +15,6 @@ Global {97FF11A4-924D-4C87-A028-2AAF64655954}.Debug|Any CPU.Build.0 = Debug|Any CPU {97FF11A4-924D-4C87-A028-2AAF64655954}.Release|Any CPU.ActiveCfg = Release|Any CPU {97FF11A4-924D-4C87-A028-2AAF64655954}.Release|Any CPU.Build.0 = Release|Any CPU - {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {910F28D1-8BD0-4359-AACB-B96C04CF68E8}.Release|Any CPU.Build.0 = Release|Any CPU - {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C08B6DC-4DA0-4434-A6C5-709932DDDDE5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 48c892c..cbbf078 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + diff --git a/packages.config b/packages.config index 625b0a6..9a9e7b9 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - - + + From 2662b5d2d2b962e8a5eb8646beec0a827496aaec Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Thu, 24 Mar 2022 11:46:36 +0530 Subject: [PATCH 074/161] Update to latest version of the SDK --- NLog.config | 4 ++-- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/NLog.config b/NLog.config index 8c3e406..cfbca0f 100644 --- a/NLog.config +++ b/NLog.config @@ -26,7 +26,7 @@ - - + \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 98f3490..badd2f1 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,13 +37,13 @@ False Source\lib\net461\ApiSdk.dll - + False packages\CyberSource.Authentication.0.0.0.13\lib\AuthenticationSdk.dll False - packages\CyberSource.Rest.Client.0.0.1.20\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.21\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index cbbf078..64014f9 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 9a9e7b9..277cda4 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From 203fb29b03391a442cd576fa781b48cd449e29d4 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Thu, 28 Apr 2022 10:43:13 +0530 Subject: [PATCH 075/161] sdk version updated- april 22 release --- Source/Samples/Payments/Payments/IncrementalAuthorization.cs | 2 +- cybersource-rest-samples-csharp.csproj | 2 +- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Samples/Payments/Payments/IncrementalAuthorization.cs b/Source/Samples/Payments/Payments/IncrementalAuthorization.cs index 0ae7dea..e2e325b 100644 --- a/Source/Samples/Payments/Payments/IncrementalAuthorization.cs +++ b/Source/Samples/Payments/Payments/IncrementalAuthorization.cs @@ -17,7 +17,7 @@ public static PtsV2IncrementalAuthorizationPatch201Response Run() Code: clientReferenceInformationCode ); - bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + string processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = "true"; Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator( StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed ); diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index badd2f1..b5f041b 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -43,7 +43,7 @@ False - packages\CyberSource.Rest.Client.0.0.1.21\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.22\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 64014f9..06c0d4d 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 277cda4..e6af9b7 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + From 5248e3ac92075f2ad5de2e5ef8d4e927bcf8ac1d Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Sat, 21 May 2022 01:45:14 +0530 Subject: [PATCH 076/161] Update to latest version of SDKs --- cybersource-rest-samples-csharp.csproj | 10 ++++------ packages.config | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index b5f041b..227b5b4 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,13 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - False - packages\CyberSource.Authentication.0.0.0.13\lib\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.14\lib\AuthenticationSdk.dll - - False - packages\CyberSource.Rest.Client.0.0.1.22\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.23\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/packages.config b/packages.config index e6af9b7..24aa4ef 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@ - + - - + + From d7d8a848f4febd4bf41eb0de78177c476de0bcb4 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Sat, 21 May 2022 01:48:46 +0530 Subject: [PATCH 077/161] Update to latest version of SDKs --- cybersource-rest-samples-netcore.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 06c0d4d..76f4843 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + From 4252671adb6c9dc74a69595230114aaa54bf1ed8 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Fri, 24 Jun 2022 10:38:00 +0530 Subject: [PATCH 078/161] updating version for june release --- .../Samples/Payments/Payments/IncrementalAuthorization.cs | 2 +- cybersource-rest-samples-csharp.csproj | 8 ++++---- cybersource-rest-samples-netcore.csproj | 4 ++-- packages.config | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Source/Samples/Payments/Payments/IncrementalAuthorization.cs b/Source/Samples/Payments/Payments/IncrementalAuthorization.cs index e2e325b..cc22119 100644 --- a/Source/Samples/Payments/Payments/IncrementalAuthorization.cs +++ b/Source/Samples/Payments/Payments/IncrementalAuthorization.cs @@ -17,7 +17,7 @@ public static PtsV2IncrementalAuthorizationPatch201Response Run() Code: clientReferenceInformationCode ); - string processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = "true"; + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator( StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed ); diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 227b5b4..2c423fa 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,11 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - packages\CyberSource.Authentication.0.0.0.14\lib\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.15\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.23\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.24\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 76f4843..f97b7b8 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + diff --git a/packages.config b/packages.config index 24aa4ef..beda8b2 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - - + + From 475cbc9c86d9157f543e632fee6ecc49b25d2f96 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Tue, 26 Jul 2022 14:25:24 +0530 Subject: [PATCH 079/161] Updates to latest versions --- cybersource-rest-samples-csharp.csproj | 8 ++++---- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 2c423fa..246db4a 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,14 +40,14 @@ packages\CyberSource.Authentication.0.0.0.15\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.24\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.25\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll - - packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll True diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index f97b7b8..8d19024 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -42,7 +42,7 @@ - + diff --git a/packages.config b/packages.config index beda8b2..6fee89a 100644 --- a/packages.config +++ b/packages.config @@ -1,9 +1,9 @@  - + - + From 1bf0fc38ccb139ceec74476894cc3b3ac6faa45d Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Sat, 29 Oct 2022 02:15:51 +0530 Subject: [PATCH 080/161] version updated --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 12 +++--------- packages.config | 2 +- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 246db4a..25d9391 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,8 +40,8 @@ packages\CyberSource.Authentication.0.0.0.15\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.25\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.27\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 8d19024..f3ebf0a 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + @@ -63,11 +63,5 @@ - - - - - - - + diff --git a/packages.config b/packages.config index 6fee89a..8b1d209 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From a3b1615708a839e49b4e4bcae84d0e17a72666ce Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Wed, 28 Dec 2022 19:00:25 +0530 Subject: [PATCH 081/161] sample case added for azure intermediate host testing --- Source/Configuration.cs | 35 +++++++ .../SampleTestingForAzureIntermediateHost.cs | 96 +++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs diff --git a/Source/Configuration.cs b/Source/Configuration.cs index dbefd7f..a947167 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -73,5 +73,40 @@ public Dictionary GetAlternativeConfiguration() return _configurationDictionary; } + + public Dictionary GetIntermediateConfiguration() + { + _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); + _configurationDictionary.Add("merchantID", "testrest"); + _configurationDictionary.Add("merchantsecretKey", "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="); + _configurationDictionary.Add("merchantKeyId", "08c94330-f618-42a3-b09d-e1e43be5efda"); + _configurationDictionary.Add("keysDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\Source\\Resource")); + _configurationDictionary.Add("keyFilename", "testrest"); + _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); + //new property has been added for user to configure the base path so that request can route the API calls via Azure Management URL. + //Example: If intermediate url is https://manage.windowsazure.com, then don't append the "https://" in property value. + _configurationDictionary.Add("intermediateHost", "manage.windowsazure.com"); + _configurationDictionary.Add("keyAlias", "testrest"); + _configurationDictionary.Add("keyPass", "testrest"); + _configurationDictionary.Add("timeout", "300000"); + + // Configs related to meta key + _configurationDictionary.Add("portfolioID", string.Empty); + _configurationDictionary.Add("useMetaKey", "false"); + + // Configs related to OAuth + _configurationDictionary.Add("enableClientCert", "false"); + _configurationDictionary.Add("clientCertDirectory", "Resource"); + _configurationDictionary.Add("clientCertFile", ""); + _configurationDictionary.Add("clientCertPassword", ""); + _configurationDictionary.Add("clientId", ""); + _configurationDictionary.Add("clientSecret", ""); + + // _configurationDictionary.Add("proxyAddress", string.Empty); + // _configurationDictionary.Add("proxyPort", string.Empty); + // _configurationDictionary.Add("proxyUsername", string.Empty); + // _configurationDictionary.Add("proxyPassword", string.Empty); + return _configurationDictionary; + } } } diff --git a/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs b/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs new file mode 100644 index 0000000..24db03d --- /dev/null +++ b/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AzureIntermediateTesting +{ + public class AzureIntermediateTesting + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "12345678"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "03"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsidrefundsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsidrefundsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "200"; + string orderInformationAmountDetailsCurrency = "usd"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Deo"; + string orderInformationBillToAddress1 = "900 Metro Center Blvd"; + string orderInformationBillToLocality = "Foster City"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "48104-2201"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "9321499232"; + Ptsv2paymentsidcapturesOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsidcapturesOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + //adding additional headers for azure host + Dictionary dict = new Dictionary(); + dict.Add("Ocp-Apim-Subscription-Key", "=fchgfchgvjhvjh5536hg"); + dict.Add("Ocp-Apim-Trace", "dfgcjgvjkhbkjkjhnkjvjgchdxh"); + + var configDictionary = new Configuration().GetIntermediateConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(defaultHeader: dict, merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From e122561a48349de055f0f1a41100bcf817dee8dc Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Wed, 28 Dec 2022 19:01:41 +0530 Subject: [PATCH 082/161] variable renamed --- .../SampleTestingForAzureIntermediateHost.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs b/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs index 24db03d..3f06de2 100644 --- a/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs +++ b/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs @@ -73,12 +73,12 @@ public static PtsV2CreditsPost201Response Run() try { //adding additional headers for azure host - Dictionary dict = new Dictionary(); - dict.Add("Ocp-Apim-Subscription-Key", "=fchgfchgvjhvjh5536hg"); - dict.Add("Ocp-Apim-Trace", "dfgcjgvjkhbkjkjhnkjvjgchdxh"); + Dictionary additionalHeaders = new Dictionary(); + additionalHeaders.Add("Ocp-Apim-Subscription-Key", "=fchgfchgvjhvjh5536hg"); + additionalHeaders.Add("Ocp-Apim-Trace", "dfgcjgvjkhbkjkjhnkjvjgchdxh"); var configDictionary = new Configuration().GetIntermediateConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(defaultHeader: dict, merchConfigDictObj: configDictionary); + var clientConfig = new CyberSource.Client.Configuration(defaultHeader: additionalHeaders, merchConfigDictObj: configDictionary); var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); From 79166f2d32edba574ea4ce6dd6854011304f860a Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Tue, 3 Jan 2023 14:12:04 +0530 Subject: [PATCH 083/161] host header added in sample code --- .../SampleTestingForAzureIntermediateHost.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs b/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs index 3f06de2..b782b04 100644 --- a/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs +++ b/Source/Samples/AzureIntermediateTesting/SampleTestingForAzureIntermediateHost.cs @@ -76,6 +76,7 @@ public static PtsV2CreditsPost201Response Run() Dictionary additionalHeaders = new Dictionary(); additionalHeaders.Add("Ocp-Apim-Subscription-Key", "=fchgfchgvjhvjh5536hg"); additionalHeaders.Add("Ocp-Apim-Trace", "dfgcjgvjkhbkjkjhnkjvjgchdxh"); + additionalHeaders.Add("Host", "manage.windowsazure.com"); var configDictionary = new Configuration().GetIntermediateConfiguration(); var clientConfig = new CyberSource.Client.Configuration(defaultHeader: additionalHeaders, merchConfigDictObj: configDictionary); From 2c1b1db898df2f2c4504544a35e6ef72d8472208 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Tue, 3 Jan 2023 14:18:37 +0530 Subject: [PATCH 084/161] added sample for testing in csproj file for .net --- cybersource-rest-samples-csharp.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 25d9391..e8339fb 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -96,6 +96,7 @@ + From 9606e80cf2ea9455d42995fedebfdfaa19c40fc2 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Tue, 3 Jan 2023 14:42:36 +0530 Subject: [PATCH 085/161] indentation fixes --- cybersource-rest-samples-csharp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index e8339fb..ac533b2 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -96,7 +96,7 @@ - + From 70b870e5fb97a0a729feac2b2ec6adfa90f681b0 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Fri, 13 Jan 2023 13:34:57 +0530 Subject: [PATCH 086/161] config file updated for intermediate host url --- Source/Configuration.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Configuration.cs b/Source/Configuration.cs index a947167..48f2d71 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -84,8 +84,8 @@ public Dictionary GetIntermediateConfiguration() _configurationDictionary.Add("keyFilename", "testrest"); _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); //new property has been added for user to configure the base path so that request can route the API calls via Azure Management URL. - //Example: If intermediate url is https://manage.windowsazure.com, then don't append the "https://" in property value. - _configurationDictionary.Add("intermediateHost", "manage.windowsazure.com"); + //Example: If intermediate url is https://manage.windowsazure.com then in property input can be same url or manage.windowsazure.com. + _configurationDictionary.Add("intermediateHost", "https://manage.windowsazure.com"); _configurationDictionary.Add("keyAlias", "testrest"); _configurationDictionary.Add("keyPass", "testrest"); _configurationDictionary.Add("timeout", "300000"); From dd022e775dec5562c07858a8e1b0abd531c5e7c8 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Tue, 31 Jan 2023 12:23:31 +0530 Subject: [PATCH 087/161] pre-released changes --- .../Payments/Credit/ElectronicCheckStandAloneCredits.cs | 2 +- .../Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs | 4 ++-- Source/Samples/Payments/Refund/RefundCapture.cs | 2 +- Source/Samples/Payments/Refund/RefundPayment.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs index 45714eb..dbdcbb9 100644 --- a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs +++ b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs @@ -32,7 +32,7 @@ public static PtsV2CreditsPost201Response Run() ); string paymentInformationPaymentTypeName = "CHECK"; - Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Ptsv2paymentsidrefundsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsidrefundsPaymentInformationPaymentType( Name: paymentInformationPaymentTypeName ); diff --git a/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs b/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs index a4a18c7..91bd42a 100644 --- a/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs +++ b/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs @@ -14,7 +14,7 @@ public static PtsV2PaymentsRefundPost201Response Run() var id = ElectronicCheckDebits.Run().Id; string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Ptsv2paymentsidrefundsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidrefundsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -22,7 +22,7 @@ public static PtsV2PaymentsRefundPost201Response Run() ); string paymentInformationPaymentTypeName = "CHECK"; - Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Ptsv2paymentsidrefundsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsidrefundsPaymentInformationPaymentType( Name: paymentInformationPaymentTypeName ); diff --git a/Source/Samples/Payments/Refund/RefundCapture.cs b/Source/Samples/Payments/Refund/RefundCapture.cs index 1af5f43..c9fa363 100644 --- a/Source/Samples/Payments/Refund/RefundCapture.cs +++ b/Source/Samples/Payments/Refund/RefundCapture.cs @@ -14,7 +14,7 @@ public static PtsV2PaymentsRefundPost201Response Run() var id = CapturePayment.Run().Id; string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Ptsv2paymentsidrefundsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidrefundsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/Payments/Refund/RefundPayment.cs b/Source/Samples/Payments/Refund/RefundPayment.cs index 2a11555..47d056e 100644 --- a/Source/Samples/Payments/Refund/RefundPayment.cs +++ b/Source/Samples/Payments/Refund/RefundPayment.cs @@ -15,7 +15,7 @@ public static PtsV2PaymentsRefundPost201Response Run() var id = SimpleAuthorizationInternet.Run().Id; string clientReferenceInformationCode = "TC50171_3"; - Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Ptsv2paymentsidrefundsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidrefundsClientReferenceInformation( Code: clientReferenceInformationCode ); From 41a58da9b3f4d460b37edc90dc20982260e38ead Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Date: Wed, 1 Feb 2023 16:16:26 +0530 Subject: [PATCH 088/161] Updated dates in requests --- .../ConversionDetails/GetConversionDetailTransactions.cs | 4 ++-- .../GetNetfundingInformationForAccountOrMerchant.cs | 4 ++-- .../NotificationOfChanges/GetNotificationOfChanges.cs | 4 ++-- .../PaymentBatchSummaries/GetPaymentBatchSummaryData.cs | 4 ++-- .../PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs | 4 ++-- Source/Samples/Reporting/Reports/CreateAdhocReport.cs | 4 ++-- Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs | 4 ++-- .../RiskManagement/DecisionManager/BasicDMTransaction.cs | 2 +- .../RiskManagement/DecisionManager/DMWithBuyerInformation.cs | 2 +- .../DecisionManager/DMWithDecisionProfileRejectResponse.cs | 2 +- .../RiskManagement/DecisionManager/DMWithDeviceInformation.cs | 2 +- .../DecisionManager/DMWithMerchantDefinedInformation.cs | 2 +- .../DecisionManager/DMWithScoreExceedsThresholdResponse.cs | 2 +- .../DecisionManager/DMWithShippingInformation.cs | 2 +- .../RiskManagement/DecisionManager/DMWithTravelInformation.cs | 2 +- 15 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs b/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs index 20e5f5b..1b2b870 100644 --- a/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs +++ b/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs @@ -11,8 +11,8 @@ public class GetConversionDetailTransactions { public static ReportingV3ConversionDetailsGet200Response Run() { - var startTime = DateTime.ParseExact("2020-09-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2020-09-21T23:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2023-01-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2023-01-21T23:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; try { diff --git a/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs b/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs index bf102d7..454a4c8 100644 --- a/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs +++ b/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs @@ -11,8 +11,8 @@ public class GetNetfundingInformationForAccountOrMerchant { public static ReportingV3NetFundingsGet200Response Run() { - var startTime = DateTime.ParseExact("2021-01-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2021-01-02T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2023-01-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2023-01-02T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; string groupName = null; try diff --git a/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs b/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs index 8f4d0d4..4bd653a 100644 --- a/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs +++ b/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs @@ -11,8 +11,8 @@ public class GetNotificationOfChanges { public static ReportingV3NotificationofChangesGet200Response Run() { - var startTime = DateTime.ParseExact("2020-09-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2020-09-10T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2023-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2023-01-10T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); try { var configDictionary = new Configuration().GetConfiguration(); diff --git a/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs b/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs index 6084062..3489e18 100644 --- a/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs +++ b/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs @@ -11,8 +11,8 @@ public class GetPaymentBatchSummaryData { public static ReportingV3PaymentBatchSummariesGet200Response Run() { - var startTime = DateTime.ParseExact("2020-10-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2020-10-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2023-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2023-01-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; string rollUp = null; string breakdown = null; diff --git a/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs b/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs index 2f8b879..b74dc5a 100644 --- a/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs +++ b/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs @@ -11,8 +11,8 @@ public class GetPurchaseAndRefundDetails { public static ReportingV3PurchaseRefundDetailsGet200Response Run() { - var startTime = DateTime.ParseExact("2020-09-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2020-09-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2023-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2023-01-30T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string organizationId = "testrest"; string paymentSubtype = "VI"; string viewBy = "requestDate"; diff --git a/Source/Samples/Reporting/Reports/CreateAdhocReport.cs b/Source/Samples/Reporting/Reports/CreateAdhocReport.cs index 51041fe..3a1748c 100644 --- a/Source/Samples/Reporting/Reports/CreateAdhocReport.cs +++ b/Source/Samples/Reporting/Reports/CreateAdhocReport.cs @@ -20,8 +20,8 @@ public static void Run() string reportMimeType = "application/xml"; string reportName = "testrest_v2"; string timezone = "GMT"; - var reportStartTime = DateTime.Parse("2021-03-01T17:30:00.000+05:30"); - var reportEndTime = DateTime.Parse("2021-03-02T17:30:00.000+05:30"); + var reportStartTime = DateTime.Parse("2023-02-01T17:30:00.000+05:30"); + var reportEndTime = DateTime.Parse("2023-02-02T17:30:00.000+05:30"); bool reportPreferencesSignedAmounts = true; string reportPreferencesFieldNameConvention = "SOAPI"; Reportingv3reportsReportPreferences reportPreferences = new Reportingv3reportsReportPreferences( diff --git a/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs b/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs index d8008c3..bd51969 100644 --- a/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs +++ b/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs @@ -12,8 +12,8 @@ public class RetrieveAvailableReports public static ReportingV3ReportsGet200Response Run() { string organizationId = null; - var startTime = DateTime.ParseExact("2021-04-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); - var endTime = DateTime.ParseExact("2021-04-03T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var startTime = DateTime.ParseExact("2023-01-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + var endTime = DateTime.ParseExact("2023-01-03T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); string timeQueryType = "executedTime"; string reportMimeType = "application/xml"; string reportFrequency = null; diff --git a/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs b/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs index 04d7c69..3316d04 100644 --- a/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs +++ b/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs @@ -28,7 +28,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs index 937cdc7..93ab5f8 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs @@ -18,7 +18,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs index e1e4b63..d42fe52 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs @@ -18,7 +18,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs index af0e932..cb15190 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs @@ -18,7 +18,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs index cb65ea5..18c6564 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs @@ -18,7 +18,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs index a5c6773..db8b401 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs @@ -18,7 +18,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs index 04f9580..53d0588 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs @@ -18,7 +18,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs index e815528..5880ba2 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs @@ -18,7 +18,7 @@ public static RiskV1DecisionsPost201Response Run() string paymentInformationCardNumber = "4444444444444448"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2020"; + string paymentInformationCardExpirationYear = "2025"; Riskv1decisionsPaymentInformationCard paymentInformationCard = new Riskv1decisionsPaymentInformationCard( Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, From a37945d6f7c79290f0c062498b68972149a0254f Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Tue, 7 Feb 2023 15:09:51 +0530 Subject: [PATCH 089/161] version update --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 25d9391..c968f8e 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,8 +40,8 @@ packages\CyberSource.Authentication.0.0.0.15\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.27\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.29\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index f3ebf0a..dd1413c 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 8b1d209..516a7a9 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From 10228cf2fe6587f0c0cbf9161eee0fe2036207e7 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Nongsiej Date: Fri, 17 Feb 2023 21:33:55 +0530 Subject: [PATCH 090/161] Updated README.md file --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 2cf0232..0dee6e7 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,6 @@ For the old run environments previously used, they should be replaced by the fol |`cybersource.environment.mutualauth.production`|`api-ma.cybersource.com` | |`cybersource.in.environment.sandbox` |`apitest.cybersource.com` | |`cybesource.in.environment.production` |`api.in.cybersource.com` | -|`cybesource.environment.mutualauth.sit` |`pnrstage.ic3.com:8451` | For example, replace the following code in the Configuration file: @@ -51,4 +50,4 @@ _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); // For PRODUCTION use // _configurationDictionary.Add("runEnvironment", "api.cybersource.com"); -``` \ No newline at end of file +``` From b760d3d310c6953cdd98f77751da3f312e2022eb Mon Sep 17 00:00:00 2001 From: Brian McManus Date: Sat, 18 Feb 2023 16:09:11 -0800 Subject: [PATCH 091/161] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0dee6e7..488a1be 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # C# Sample Code for the CyberSource SDK -[![Travis CI Status](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp.svg?branch=master)](https://travis-ci.org/CyberSource/cybersource-rest-samples-csharp) +[![Build Status](https://app.travis-ci.com/CyberSource/cybersource-rest-samples-csharp.svg?branch=master)](https://app.travis-ci.com/CyberSource/cybersource-rest-samples-csharp) This repository contains two applications that demonstrate integration with the CyberSource REST APIs through our SDKs. From d75ddced4235d2d3020712dfdaee231999260bf1 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Date: Mon, 6 Mar 2023 13:33:52 +0530 Subject: [PATCH 092/161] Upgraded RestSharp dependency --- Source/App.config | 18 +++++++++++- cybersource-rest-samples-csharp.csproj | 37 +++++++++++++++++++++---- cybersource-rest-samples-csharp.sln | 4 +-- cybersource-rest-samples-netcore.csproj | 4 +-- packages.config | 13 +++++++-- 5 files changed, 64 insertions(+), 12 deletions(-) diff --git a/Source/App.config b/Source/App.config index aaf5744..9065e05 100644 --- a/Source/App.config +++ b/Source/App.config @@ -1,4 +1,4 @@ - +

@@ -27,4 +27,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index c968f8e..61f242b 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,12 +40,15 @@ packages\CyberSource.Authentication.0.0.0.15\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.29\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.30\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll + + packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll True @@ -54,18 +57,42 @@ packages\NLog.4.5.10\lib\net45\NLog.dll True - - False - packages\RestSharp.106.12.0\lib\net452\RestSharp.dll + + packages\RestSharp.108.0.3\lib\netstandard2.0\RestSharp.dll + + packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll + + + packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll + + + packages\System.Text.Json.5.0.1\lib\net461\System.Text.Json.dll + + + packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + diff --git a/cybersource-rest-samples-csharp.sln b/cybersource-rest-samples-csharp.sln index a12c9b0..2acf725 100644 --- a/cybersource-rest-samples-csharp.sln +++ b/cybersource-rest-samples-csharp.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31624.102 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cybersource-rest-samples-csharp", "cybersource-rest-samples-csharp.csproj", "{97FF11A4-924D-4C87-A028-2AAF64655954}" EndProject diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index dd1413c..85ffce2 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,12 +40,12 @@ - + - + diff --git a/packages.config b/packages.config index 516a7a9..18a09bf 100644 --- a/packages.config +++ b/packages.config @@ -3,10 +3,19 @@ + - + - + + + + + + + + + \ No newline at end of file From ed951d42ca5a81722bf617563315555ca70e830e Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Mon, 3 Apr 2023 18:34:21 +0530 Subject: [PATCH 093/161] generate unified checkout sample code added --- .../GenerateUnifiedCheckout.cs | 59 +++++++++++++++++++ cybersource-rest-samples-csharp.csproj | 10 +++- 2 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs diff --git a/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs b/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs new file mode 100644 index 0000000..4dca0fe --- /dev/null +++ b/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.UnifiedCheckout +{ + public class GenerateUnifiedCheckout + { + public static String Run() + { + + Upv1capturecontextsCaptureMandate captureMandate = new Upv1capturecontextsCaptureMandate( + BillingType: "FULL", + RequestEmail:true, + RequestPhone:true, + RequestShipping:true, + ShipToCountries: new List(){"US","GB" }, + ShowAcceptedNetworkIcons: true + ); + Upv1capturecontextsOrderInformationAmountDetails amountDetails= new Upv1capturecontextsOrderInformationAmountDetails( + TotalAmount: "21.00", + Currency: "USD" + ); + Upv1capturecontextsOrderInformation orderInformation = new Upv1capturecontextsOrderInformation( + AmountDetails: amountDetails + ); + + var requestObj = new GenerateUnifiedCheckoutCaptureContextRequest( + TargetOrigins: new List() { "https://the-up-demo.appspot.com" }, + ClientVersion: "0.15", + AllowedCardNetworks: new List() { "VISA","MASTERCARD", "AMEX" }, + AllowedPaymentTypes: new List() { "PANENTRY","SRC" }, + Country : "US", + Locale: "en_US", + CaptureMandate: captureMandate, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new UnifiedCheckoutCaptureContextApi(clientConfig); + String result = apiInstance.GenerateUnifiedCheckoutCaptureContext(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 78e38ce..72fb63c 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -38,10 +38,12 @@ Source\lib\net461\ApiSdk.dll - packages\CyberSource.Authentication.0.0.0.15\lib\AuthenticationSdk.dll + False + ..\cybersource-rest-auth-dotnet\AuthenticationSdk\AuthenticationSdk\bin\Release\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.30\lib\cybersource-rest-client-dotnet.dll + + False + ..\cybersource-rest-client-dotnet\bin\Release\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -320,6 +322,7 @@ + @@ -353,6 +356,7 @@ + DEL /S /Q ..\..\..\obj\* From bbbd83fa39dbdec694886d193b2cfba4f187d8ec Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Mon, 3 Apr 2023 18:34:49 +0530 Subject: [PATCH 094/161] disabled the flex token api's sample code --- Source/Samples/FlexMicroform/FlexTokenizeCard.cs | 4 ++-- Source/Samples/FlexMicroform/GenerateKey.cs | 4 ++-- Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Samples/FlexMicroform/FlexTokenizeCard.cs b/Source/Samples/FlexMicroform/FlexTokenizeCard.cs index 2734932..caa4b5a 100644 --- a/Source/Samples/FlexMicroform/FlexTokenizeCard.cs +++ b/Source/Samples/FlexMicroform/FlexTokenizeCard.cs @@ -11,7 +11,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { public class FlexTokenizeCard { - public static FlexV1TokensPost200Response Run() + /* public static FlexV1TokensPost200Response Run() { var generateKeyResult = GenerateKeyLegacyTokenFormat.Run(); string keyId = generateKeyResult.KeyId; @@ -78,6 +78,6 @@ public static FlexV1TokensPost200Response Run() Console.WriteLine("Exception on calling the API : " + e.Message); return null; } - } + } */ } } diff --git a/Source/Samples/FlexMicroform/GenerateKey.cs b/Source/Samples/FlexMicroform/GenerateKey.cs index 42d8fed..3519419 100644 --- a/Source/Samples/FlexMicroform/GenerateKey.cs +++ b/Source/Samples/FlexMicroform/GenerateKey.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { public class GenerateKey { - public static FlexV1KeysPost200Response Run() + /*public static FlexV1KeysPost200Response Run() { string encryptionType = "RsaOaep"; string targetOrigin = "https://www.test.com"; @@ -34,6 +34,6 @@ public static FlexV1KeysPost200Response Run() Console.WriteLine("Exception on calling the API : " + e.Message); return null; } - } + } */ } } diff --git a/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs b/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs index 6b7096b..6632799 100644 --- a/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs +++ b/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { public class GenerateKeyLegacyTokenFormat { - public static FlexV1KeysPost200Response Run() + /*public static FlexV1KeysPost200Response Run() { string encryptionType = "None"; string targetOrigin = "https://www.test.com"; @@ -34,6 +34,6 @@ public static FlexV1KeysPost200Response Run() Console.WriteLine("Exception on calling the API : " + e.Message); return null; } - } + } */ } } From 1ea2d867530981d5f1b06aab672d1702e11ff05b Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Mon, 24 Apr 2023 13:20:19 +0530 Subject: [PATCH 095/161] version update --- cybersource-rest-samples-csharp.csproj | 10 ++++------ cybersource-rest-samples-netcore.csproj | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 72fb63c..84a0e9b 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,13 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - False - ..\cybersource-rest-auth-dotnet\AuthenticationSdk\AuthenticationSdk\bin\Release\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.16\lib\AuthenticationSdk.dll - - False - ..\cybersource-rest-client-dotnet\bin\Release\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.30\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 85ffce2..0298af4 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,7 +39,7 @@ - + From c1d7f90c9c842a3e8f26dc915bb3c4372513d4e2 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Mon, 24 Apr 2023 15:01:18 +0530 Subject: [PATCH 096/161] version update --- packages.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages.config b/packages.config index 18a09bf..9c3d63f 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - - + + From 6f6dbd628eb46080e305de8eedbbc74bc5b138ab Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Mon, 24 Apr 2023 15:03:07 +0530 Subject: [PATCH 097/161] changes for april release --- .../RiskManagement/Verification/ComplianceStatusCompleted.cs | 2 +- .../Verification/ExportComplianceInformationProvided.cs | 2 +- .../RiskManagement/Verification/MultipleSanctionLists.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs index 6666225..1cee5d3 100644 --- a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs +++ b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs @@ -68,7 +68,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() string exportComplianceInformationWeightsAddress = "abc"; string exportComplianceInformationWeightsCompany = "def"; string exportComplianceInformationWeightsName = "adb"; - Riskv1exportcomplianceinquiriesExportComplianceInformationWeights exportComplianceInformationWeights = new Riskv1exportcomplianceinquiriesExportComplianceInformationWeights( + Ptsv2paymentsWatchlistScreeningInformationWeights exportComplianceInformationWeights = new Ptsv2paymentsWatchlistScreeningInformationWeights( Address: exportComplianceInformationWeightsAddress, Company: exportComplianceInformationWeightsCompany, Name: exportComplianceInformationWeightsName diff --git a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs index 2d7e51a..ad9fd3e 100644 --- a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs +++ b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs @@ -77,7 +77,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() string exportComplianceInformationWeightsAddress = "low"; string exportComplianceInformationWeightsCompany = "exact"; string exportComplianceInformationWeightsName = "exact"; - Riskv1exportcomplianceinquiriesExportComplianceInformationWeights exportComplianceInformationWeights = new Riskv1exportcomplianceinquiriesExportComplianceInformationWeights( + Ptsv2paymentsWatchlistScreeningInformationWeights exportComplianceInformationWeights = new Ptsv2paymentsWatchlistScreeningInformationWeights( Address: exportComplianceInformationWeightsAddress, Company: exportComplianceInformationWeightsCompany, Name: exportComplianceInformationWeightsName diff --git a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs index 4f9212f..42b239e 100644 --- a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs +++ b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs @@ -95,7 +95,7 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() string exportComplianceInformationWeightsAddress = "low"; string exportComplianceInformationWeightsCompany = "exact"; string exportComplianceInformationWeightsName = "exact"; - Riskv1exportcomplianceinquiriesExportComplianceInformationWeights exportComplianceInformationWeights = new Riskv1exportcomplianceinquiriesExportComplianceInformationWeights( + Ptsv2paymentsWatchlistScreeningInformationWeights exportComplianceInformationWeights = new Ptsv2paymentsWatchlistScreeningInformationWeights( Address: exportComplianceInformationWeightsAddress, Company: exportComplianceInformationWeightsCompany, Name: exportComplianceInformationWeightsName From 241704755457f4d21dbbbe0fc9df9686db0ed33a Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Thu, 4 May 2023 15:33:02 +0530 Subject: [PATCH 098/161] updating the version of System.Text.Encodings.Web --- cybersource-rest-samples-csharp.csproj | 4 ++-- packages.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 84a0e9b..186e10d 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -80,8 +80,8 @@ - - packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll + + packages\System.Text.Encodings.Web.5.0.1\lib\net461\System.Text.Encodings.Web.dll packages\System.Text.Json.5.0.1\lib\net461\System.Text.Json.dll diff --git a/packages.config b/packages.config index 9c3d63f..06078d3 100644 --- a/packages.config +++ b/packages.config @@ -14,7 +14,7 @@ - + From 69e2762217292c7e368f882739006fafba772896 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Thu, 4 May 2023 15:45:38 +0530 Subject: [PATCH 099/161] version update of sdk --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 186e10d..69dbb49 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,8 +40,8 @@ packages\CyberSource.Authentication.0.0.0.16\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.30\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.31\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 0298af4..b6647a9 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 06078d3..ac79dec 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From 001d0b9e468ede70d28d6d4c9615cf2fd687b12d Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Fri, 19 May 2023 16:36:23 +0530 Subject: [PATCH 100/161] update the credential of testrest_cpctv --- Source/Configuration.cs | 4 ++-- .../Payments/AuthorizationForIncrementalAuthorizationFlow.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Configuration.cs b/Source/Configuration.cs index 48f2d71..6f5ad57 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -45,8 +45,8 @@ public Dictionary GetAlternativeConfiguration() { _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); _configurationDictionary.Add("merchantID", "testrest_cpctv"); - _configurationDictionary.Add("merchantsecretKey", "JXm4dqKYIxWofM1TIbtYY9HuYo7Cg1HPHxn29f6waRo="); - _configurationDictionary.Add("merchantKeyId", "e547c3d3-16e4-444c-9313-2a08784b906a"); + _configurationDictionary.Add("merchantsecretKey", "zXKpCqMQPmOR/JRldSlkQUtvvIzOewUVqsUP0sBHpxQ="); + _configurationDictionary.Add("merchantKeyId", "964f2ecc-96f0-4432-a742-db0b44e6a73a"); _configurationDictionary.Add("keysDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\Source\\Resource")); _configurationDictionary.Add("keyFilename", "testrest_cpctv"); _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); diff --git a/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs b/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs index 432be51..1c804c7 100644 --- a/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs +++ b/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs @@ -20,7 +20,7 @@ public static PtsV2PaymentsPost201Response Run() string paymentInformationCardNumber = "4111111111111111"; string paymentInformationCardExpirationMonth = "12"; - string paymentInformationCardExpirationYear = "2021"; + string paymentInformationCardExpirationYear = "2031"; string paymentInformationCardType = "001"; Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( Number: paymentInformationCardNumber, From d2f41437aadb0b60448893e6a6919210e197dab4 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Mon, 5 Jun 2023 16:56:11 +0530 Subject: [PATCH 101/161] version update --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 69dbb49..a92a113 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,8 +40,8 @@ packages\CyberSource.Authentication.0.0.0.16\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.31\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.32\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index b6647a9..aed548b 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index ac79dec..4144038 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From c634500e3668fbb4e1127deea991fe2eece128b6 Mon Sep 17 00:00:00 2001 From: Shetty Date: Thu, 15 Jun 2023 07:06:03 +0530 Subject: [PATCH 102/161] pin debit samples --- ...hContactlessReadWithVisaPlatformConnect.cs | 94 +++++++++++++++++++ ...gSwipedTrackDataWithVisaPlatformConnect.cs | 82 ++++++++++++++++ ...hContactlessReadWithVisaPlatformConnect.cs | 84 +++++++++++++++++ ...gSwipedTrackDataWithVisaPlatformConnect.cs | 78 +++++++++++++++ .../Void/PinDebitPurchaseReversalVoid.cs | 61 ++++++++++++ cybersource-rest-samples-csharp.csproj | 6 +- 6 files changed, 404 insertions(+), 1 deletion(-) create mode 100644 Source/Samples/Payments/Credit/PinDebitCreditUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs create mode 100644 Source/Samples/Payments/Credit/PinDebitCreditUsingSwipedTrackDataWithVisaPlatformConnect.cs create mode 100644 Source/Samples/Payments/Payments/PinDebitPurchaseUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs create mode 100644 Source/Samples/Payments/Payments/PinDebitPurchaseUsingSwipedTrackDataWithVisaPlatformConnect.cs create mode 100644 Source/Samples/Payments/Void/PinDebitPurchaseReversalVoid.cs diff --git a/Source/Samples/Payments/Credit/PinDebitCreditUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs b/Source/Samples/Payments/Credit/PinDebitCreditUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs new file mode 100644 index 0000000..eab20d8 --- /dev/null +++ b/Source/Samples/Payments/Credit/PinDebitCreditUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PinDebitCreditUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "2.2 Credit"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string processingInformationCommerceIndicator = "retail"; + Ptsv2creditsProcessingInformation processingInformation = new Ptsv2creditsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationPaymentTypeName = "CARD"; + string paymentInformationPaymentTypeSubTypeName = "DEBIT"; + Ptsv2paymentsidrefundsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsidrefundsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName, + SubTypeName: paymentInformationPaymentTypeSubTypeName + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "202.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + Ptsv2paymentsidrefundsMerchantInformation merchantInformation = new Ptsv2paymentsidrefundsMerchantInformation( + ); + + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Payments/Credit/PinDebitCreditUsingSwipedTrackDataWithVisaPlatformConnect.cs b/Source/Samples/Payments/Credit/PinDebitCreditUsingSwipedTrackDataWithVisaPlatformConnect.cs new file mode 100644 index 0000000..04dfb7a --- /dev/null +++ b/Source/Samples/Payments/Credit/PinDebitCreditUsingSwipedTrackDataWithVisaPlatformConnect.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PinDebitCreditUsingSwipedTrackDataWithVisaPlatformConnect + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "2.2 Credit"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string processingInformationCommerceIndicator = "retail"; + Ptsv2creditsProcessingInformation processingInformation = new Ptsv2creditsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationPaymentTypeName = "CARD"; + string paymentInformationPaymentTypeSubTypeName = "DEBIT"; + Ptsv2paymentsidrefundsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsidrefundsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName, + SubTypeName: paymentInformationPaymentTypeSubTypeName + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "202.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + Ptsv2paymentsidrefundsMerchantInformation merchantInformation = new Ptsv2paymentsidrefundsMerchantInformation( + ); + + string pointOfSaleInformationEntryMode = "swiped"; + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Payments/Payments/PinDebitPurchaseUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/PinDebitPurchaseUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs new file mode 100644 index 0000000..34bf389 --- /dev/null +++ b/Source/Samples/Payments/Payments/PinDebitPurchaseUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PinDebitPurchaseUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "2.2 Purchase"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + ); + + string orderInformationAmountDetailsTotalAmount = "202.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "contactless"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationEmvTags = "9F3303204000950500000000009F3704518823719F100706011103A000009F26081E1756ED0E2134E29F36020015820200009C01009F1A0208409A030006219F02060000000020005F2A0208409F0306000000000000"; + string pointOfSaleInformationEmvCardSequenceNumber = "1"; + bool pointOfSaleInformationEmvFallback = false; + Ptsv2paymentsPointOfSaleInformationEmv pointOfSaleInformationEmv = new Ptsv2paymentsPointOfSaleInformationEmv( + Tags: pointOfSaleInformationEmvTags, + CardSequenceNumber: pointOfSaleInformationEmvCardSequenceNumber, + Fallback: pointOfSaleInformationEmvFallback + ); + + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + Emv: pointOfSaleInformationEmv, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Payments/Payments/PinDebitPurchaseUsingSwipedTrackDataWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/PinDebitPurchaseUsingSwipedTrackDataWithVisaPlatformConnect.cs new file mode 100644 index 0000000..716752b --- /dev/null +++ b/Source/Samples/Payments/Payments/PinDebitPurchaseUsingSwipedTrackDataWithVisaPlatformConnect.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PinDebitPurchaseUsingSwipedTrackDataWithVisaPlatformConnect + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "2.2 Purchase"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string processingInformationCommerceIndicator = "retail"; + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator + ); + + string paymentInformationPaymentTypeName = "CARD"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "202.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + int pointOfSaleInformationTerminalCapability = 1; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TrackData: pointOfSaleInformationTrackData, + TerminalCapability: pointOfSaleInformationTerminalCapability + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Payments/Void/PinDebitPurchaseReversalVoid.cs b/Source/Samples/Payments/Void/PinDebitPurchaseReversalVoid.cs new file mode 100644 index 0000000..7f3ad0f --- /dev/null +++ b/Source/Samples/Payments/Void/PinDebitPurchaseReversalVoid.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class PinDebitPurchaseReversalVoid + { + public static PtsV2PaymentsVoidsPost201Response Run() + { + var id = PinDebitPurchaseUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.Run().Id; + string clientReferenceInformationCode = "Pin Debit Purchase Reversal(Void)"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationPaymentTypeName = "CARD"; + Ptsv2paymentsidrefundsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsidrefundsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName + ); + + Ptsv2paymentsidvoidsPaymentInformation paymentInformation = new Ptsv2paymentsidvoidsPaymentInformation( + PaymentType: paymentInformationPaymentType + ); + + + string amountDetailsCurrency = "USD"; + string amountDetailsTotalAmount = "202.00"; + Ptsv2paymentsidreversalsReversalInformationAmountDetails amountDetails = new Ptsv2paymentsidreversalsReversalInformationAmountDetails( + Currency: amountDetailsCurrency, + TotalAmount: amountDetailsTotalAmount + ); + Ptsv2paymentsidvoidsOrderInformation orderInformation = new Ptsv2paymentsidvoidsOrderInformation( + AmountDetails: amountDetails); + + var requestObj = new VoidPaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + var apiInstance = new VoidApi(clientConfig); + PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidPayment(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index a92a113..0d3ffc6 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -159,6 +159,7 @@ + @@ -200,6 +201,8 @@ + + @@ -222,6 +225,7 @@ + @@ -320,7 +324,7 @@ - + From 631b18f925416980887179ab35fef08aac551241 Mon Sep 17 00:00:00 2001 From: Shetty Date: Thu, 15 Jun 2023 07:08:36 +0530 Subject: [PATCH 103/161] pin debit samples --- cybersource-rest-samples-csharp.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 0d3ffc6..f05b102 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -160,6 +160,7 @@ + From fa56d3c372c898f3d8309a3e64fef68df58cff83 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Fri, 30 Jun 2023 18:29:23 +0530 Subject: [PATCH 104/161] adding sample for generate capture context for flex microform API --- .../FlexMicroform/GenerateCaptureContext.cs | 59 +++++++++++++++++++ cybersource-rest-samples-csharp.csproj | 1 + 2 files changed, 60 insertions(+) create mode 100644 Source/Samples/FlexMicroform/GenerateCaptureContext.cs diff --git a/Source/Samples/FlexMicroform/GenerateCaptureContext.cs b/Source/Samples/FlexMicroform/GenerateCaptureContext.cs new file mode 100644 index 0000000..a06904d --- /dev/null +++ b/Source/Samples/FlexMicroform/GenerateCaptureContext.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform +{ + class GenerateCaptureContext + { + public static String Run() + { + List targetOrigins = new List() + { + "https://www.test.com" + }; + + List allowedCardNetworks = new List() + { + "VISA", + "MAESTRO", + "MASTERCARD", + "AMEX", + "DISCOVER", + "DINERSCLUB", + "JCB", + "CUP", + "CARTESBANCAIRES" + }; + + string clientVerison = "v2.0"; + + var requestObj = new GenerateCaptureContextRequest( + TargetOrigins: targetOrigins, + AllowedCardNetworks: allowedCardNetworks, + ClientVersion: clientVerison + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MicroformIntegrationApi(clientConfig); + String result = apiInstance.GenerateCaptureContext(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index a92a113..ec4ffd9 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -124,6 +124,7 @@ + From 40bfb1fbd420fac459e0210193cbe658a2daf47f Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Fri, 7 Jul 2023 11:46:33 +0530 Subject: [PATCH 105/161] version update --- cybersource-rest-samples-csharp.csproj | 4 ++-- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index ec4ffd9..6972ea9 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,8 +40,8 @@ packages\CyberSource.Authentication.0.0.0.16\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.32\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.33\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index aed548b..84bd44c 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 4144038..5ea4b43 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From 1ae658c210b9571d75c0149bfd57f314d69b2801 Mon Sep 17 00:00:00 2001 From: Shetty Date: Fri, 14 Jul 2023 12:11:01 +0530 Subject: [PATCH 106/161] RB Samples --- ...TMerchandiseReturnCreditVoucherFromSNAP.cs | 110 ++++++++++++++++++ ...eFromSNAPAccountWithVisaPlatformConnect.cs | 106 +++++++++++++++++ ...haseFromCashBenefitsAccountWithCashback.cs | 108 +++++++++++++++++ ...eFromSNAPAccountWithVisaPlatformConnect.cs | 100 ++++++++++++++++ .../EBTReversalOfPurchaseFromSNAPAccount.cs | 65 +++++++++++ .../Plans/CreatePlan.cs | 69 +++++++++++ .../Plans/DeletePlan.cs | 29 +++++ .../Plans/GetPlan.cs | 29 +++++ .../Plans/UpdatePlan.cs | 78 +++++++++++++ .../Subscriptions/CreateSubscription.cs | 87 ++++++++++++++ .../Subscriptions/GetSubscription.cs | 29 +++++ .../Subscriptions/UpdateSubscription.cs | 82 +++++++++++++ cybersource-rest-samples-csharp.csproj | 14 ++- 13 files changed, 905 insertions(+), 1 deletion(-) create mode 100644 Source/Samples/Payments/Credit/EBTMerchandiseReturnCreditVoucherFromSNAP.cs create mode 100644 Source/Samples/Payments/Payments/EBTElectronicVoucherPurchaseFromSNAPAccountWithVisaPlatformConnect.cs create mode 100644 Source/Samples/Payments/Payments/EBTPurchaseFromCashBenefitsAccountWithCashback.cs create mode 100644 Source/Samples/Payments/Payments/EBTPurchaseFromSNAPAccountWithVisaPlatformConnect.cs create mode 100644 Source/Samples/Payments/Void/EBTReversalOfPurchaseFromSNAPAccount.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/DeletePlan.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscription.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/UpdateSubscription.cs diff --git a/Source/Samples/Payments/Credit/EBTMerchandiseReturnCreditVoucherFromSNAP.cs b/Source/Samples/Payments/Credit/EBTMerchandiseReturnCreditVoucherFromSNAP.cs new file mode 100644 index 0000000..f698cb1 --- /dev/null +++ b/Source/Samples/Payments/Credit/EBTMerchandiseReturnCreditVoucherFromSNAP.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class EBTMerchandiseReturnCreditVoucherFromSNAP + { + public static PtsV2CreditsPost201Response Run() + { + string clientReferenceInformationCode = "Merchandise Return / Credit Voucher from SNAP"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string processingInformationCommerceIndicator = "retail"; + bool processingInformationPurchaseOptionsIsElectronicBenefitsTransfer = true; + Ptsv2creditsProcessingInformationPurchaseOptions processingInformationPurchaseOptions = new Ptsv2creditsProcessingInformationPurchaseOptions( + IsElectronicBenefitsTransfer: processingInformationPurchaseOptionsIsElectronicBenefitsTransfer + ); + + string processingInformationElectronicBenefitsTransferCategory = "FOOD"; + Ptsv2creditsProcessingInformationElectronicBenefitsTransfer processingInformationElectronicBenefitsTransfer = new Ptsv2creditsProcessingInformationElectronicBenefitsTransfer( + Category: processingInformationElectronicBenefitsTransferCategory + ); + + Ptsv2creditsProcessingInformation processingInformation = new Ptsv2creditsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator, + PurchaseOptions: processingInformationPurchaseOptions, + ElectronicBenefitsTransfer: processingInformationElectronicBenefitsTransfer + ); + + string paymentInformationCardType = "001"; + Ptsv2paymentsidrefundsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsidrefundsPaymentInformationCard( + Type: paymentInformationCardType + ); + + string paymentInformationPaymentTypeName = "CARD"; + string paymentInformationPaymentTypeSubTypeName = "DEBIT"; + Ptsv2paymentsidrefundsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsidrefundsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName, + SubTypeName: paymentInformationPaymentTypeSubTypeName + ); + + Ptsv2paymentsidrefundsPaymentInformation paymentInformation = new Ptsv2paymentsidrefundsPaymentInformation( + Card: paymentInformationCard, + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "204.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidcapturesOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidcapturesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidrefundsOrderInformation orderInformation = new Ptsv2paymentsidrefundsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + int merchantInformationCategoryCode = 5411; + Ptsv2paymentsidrefundsMerchantInformation merchantInformation = new Ptsv2paymentsidrefundsMerchantInformation( + CategoryCode: merchantInformationCategoryCode + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + int pointOfSaleInformationPinBlockEncodingFormat = 1; + string pointOfSaleInformationEncryptedPin = "52F20658C04DB351"; + string pointOfSaleInformationEncryptedKeySerialNumber = "FFFF1B1D140000000005"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData, + PinBlockEncodingFormat: pointOfSaleInformationPinBlockEncodingFormat, + EncryptedPin: pointOfSaleInformationEncryptedPin, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreateCreditRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + MerchantInformation: merchantInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreditApi(clientConfig); + PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/EBTElectronicVoucherPurchaseFromSNAPAccountWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/EBTElectronicVoucherPurchaseFromSNAPAccountWithVisaPlatformConnect.cs new file mode 100644 index 0000000..5e45d56 --- /dev/null +++ b/Source/Samples/Payments/Payments/EBTElectronicVoucherPurchaseFromSNAPAccountWithVisaPlatformConnect.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class EBTElectronicVoucherPurchaseFromSNAPAccountWithVisaPlatformConnect + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "EBT - Voucher Purchase From SNAP Account"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationPurchaseOptionsIsElectronicBenefitsTransfer = true; + Ptsv2paymentsProcessingInformationPurchaseOptions processingInformationPurchaseOptions = new Ptsv2paymentsProcessingInformationPurchaseOptions( + IsElectronicBenefitsTransfer: processingInformationPurchaseOptionsIsElectronicBenefitsTransfer + ); + + string processingInformationElectronicBenefitsTransferCategory = "FOOD"; + string processingInformationElectronicBenefitsTransferVoucherSerialNumber = "123451234512345"; + Ptsv2paymentsProcessingInformationElectronicBenefitsTransfer processingInformationElectronicBenefitsTransfer = new Ptsv2paymentsProcessingInformationElectronicBenefitsTransfer( + Category: processingInformationElectronicBenefitsTransferCategory, + VoucherSerialNumber: processingInformationElectronicBenefitsTransferVoucherSerialNumber + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PurchaseOptions: processingInformationPurchaseOptions, + ElectronicBenefitsTransfer: processingInformationElectronicBenefitsTransfer + ); + + string paymentInformationCardNumber = "4012002000013007"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "25"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + string paymentInformationPaymentTypeName = "CARD"; + string paymentInformationPaymentTypeSubTypeName = "DEBIT"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName, + SubTypeName: paymentInformationPaymentTypeSubTypeName + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "103.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "keyed"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/EBTPurchaseFromCashBenefitsAccountWithCashback.cs b/Source/Samples/Payments/Payments/EBTPurchaseFromCashBenefitsAccountWithCashback.cs new file mode 100644 index 0000000..81a5d49 --- /dev/null +++ b/Source/Samples/Payments/Payments/EBTPurchaseFromCashBenefitsAccountWithCashback.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class EBTPurchaseFromCashBenefitsAccountWithCashback + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "EBT - Purchase from Cash Benefits Account with CB"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationPurchaseOptionsIsElectronicBenefitsTransfer = true; + Ptsv2paymentsProcessingInformationPurchaseOptions processingInformationPurchaseOptions = new Ptsv2paymentsProcessingInformationPurchaseOptions( + IsElectronicBenefitsTransfer: processingInformationPurchaseOptionsIsElectronicBenefitsTransfer + ); + + string processingInformationElectronicBenefitsTransferCategory = "CASH"; + Ptsv2paymentsProcessingInformationElectronicBenefitsTransfer processingInformationElectronicBenefitsTransfer = new Ptsv2paymentsProcessingInformationElectronicBenefitsTransfer( + Category: processingInformationElectronicBenefitsTransferCategory + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PurchaseOptions: processingInformationPurchaseOptions, + ElectronicBenefitsTransfer: processingInformationElectronicBenefitsTransfer + ); + + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Type: paymentInformationCardType + ); + + string paymentInformationPaymentTypeName = "CARD"; + string paymentInformationPaymentTypeSubTypeName = "DEBIT"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName, + SubTypeName: paymentInformationPaymentTypeSubTypeName + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard, + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "702.00"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsCashbackAmount = "45.00"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + CashbackAmount: orderInformationAmountDetailsCashbackAmount + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + int pointOfSaleInformationPinBlockEncodingFormat = 1; + string pointOfSaleInformationEncryptedPin = "52F20658C04DB351"; + string pointOfSaleInformationEncryptedKeySerialNumber = "FFFF1B1D140000000005"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData, + PinBlockEncodingFormat: pointOfSaleInformationPinBlockEncodingFormat, + EncryptedPin: pointOfSaleInformationEncryptedPin, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/EBTPurchaseFromSNAPAccountWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/EBTPurchaseFromSNAPAccountWithVisaPlatformConnect.cs new file mode 100644 index 0000000..a4939d0 --- /dev/null +++ b/Source/Samples/Payments/Payments/EBTPurchaseFromSNAPAccountWithVisaPlatformConnect.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class EBTPurchaseFromSNAPAccountWithVisaPlatformConnect + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "EBT - Purchase From SNAP Account"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "retail"; + bool processingInformationPurchaseOptionsIsElectronicBenefitsTransfer = true; + Ptsv2paymentsProcessingInformationPurchaseOptions processingInformationPurchaseOptions = new Ptsv2paymentsProcessingInformationPurchaseOptions( + IsElectronicBenefitsTransfer: processingInformationPurchaseOptionsIsElectronicBenefitsTransfer + ); + + string processingInformationElectronicBenefitsTransferCategory = "FOOD"; + Ptsv2paymentsProcessingInformationElectronicBenefitsTransfer processingInformationElectronicBenefitsTransfer = new Ptsv2paymentsProcessingInformationElectronicBenefitsTransfer( + Category: processingInformationElectronicBenefitsTransferCategory + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + PurchaseOptions: processingInformationPurchaseOptions, + ElectronicBenefitsTransfer: processingInformationElectronicBenefitsTransfer + ); + + string paymentInformationPaymentTypeName = "CARD"; + string paymentInformationPaymentTypeSubTypeName = "DEBIT"; + Ptsv2paymentsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName, + SubTypeName: paymentInformationPaymentTypeSubTypeName + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "101.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + string pointOfSaleInformationEntryMode = "swiped"; + int pointOfSaleInformationTerminalCapability = 4; + string pointOfSaleInformationTrackData = "%B4111111111111111^JONES/JONES ^3112101976110000868000000?;4111111111111111=16121019761186800000?"; + int pointOfSaleInformationPinBlockEncodingFormat = 1; + string pointOfSaleInformationEncryptedPin = "52F20658C04DB351"; + string pointOfSaleInformationEncryptedKeySerialNumber = "FFFF1B1D140000000005"; + Ptsv2paymentsPointOfSaleInformation pointOfSaleInformation = new Ptsv2paymentsPointOfSaleInformation( + EntryMode: pointOfSaleInformationEntryMode, + TerminalCapability: pointOfSaleInformationTerminalCapability, + TrackData: pointOfSaleInformationTrackData, + PinBlockEncodingFormat: pointOfSaleInformationPinBlockEncodingFormat, + EncryptedPin: pointOfSaleInformationEncryptedPin, + EncryptedKeySerialNumber: pointOfSaleInformationEncryptedKeySerialNumber + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + PointOfSaleInformation: pointOfSaleInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Void/EBTReversalOfPurchaseFromSNAPAccount.cs b/Source/Samples/Payments/Void/EBTReversalOfPurchaseFromSNAPAccount.cs new file mode 100644 index 0000000..c14bdd2 --- /dev/null +++ b/Source/Samples/Payments/Void/EBTReversalOfPurchaseFromSNAPAccount.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments +{ + public class EBTReversalOfPurchaseFromSNAPAccount + { + public static PtsV2PaymentsVoidsPost201Response Run() + { + var id = EBTMerchandiseReturnCreditVoucherFromSNAP.Run().Id; + string clientReferenceInformationCode = "Reversal of Purchase from SNAP Account"; + Ptsv2paymentsidreversalsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsidreversalsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + string paymentInformationPaymentTypeName = "CARD"; + string paymentInformationPaymentTypeSubTypeName = "DEBIT"; + Ptsv2paymentsidrefundsPaymentInformationPaymentType paymentInformationPaymentType = new Ptsv2paymentsidrefundsPaymentInformationPaymentType( + Name: paymentInformationPaymentTypeName, + SubTypeName: paymentInformationPaymentTypeSubTypeName + ); + + Ptsv2paymentsidvoidsPaymentInformation paymentInformation = new Ptsv2paymentsidvoidsPaymentInformation( + PaymentType: paymentInformationPaymentType + ); + + string orderInformationAmountDetailsTotalAmount = "204.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Ptsv2paymentsidreversalsReversalInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsidreversalsReversalInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Ptsv2paymentsidvoidsOrderInformation orderInformation = new Ptsv2paymentsidvoidsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new VoidPaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetAlternativeConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new VoidApi(clientConfig); + PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidPayment(requestObj, id); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs new file mode 100644 index 0000000..9841d22 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class CreatePlan + { + public static InlineResponse201 Run() + { + string planInformationName = "Gold Plan"; + string planInformationDescription = "New Gold Plan"; + string planInformationBillingPeriodLength = "1"; + string planInformationBillingPeriodUnit = "M"; + InlineResponse200PlanInformationBillingPeriod planInformationBillingPeriod = new InlineResponse200PlanInformationBillingPeriod( + Length: planInformationBillingPeriodLength, + Unit: planInformationBillingPeriodUnit + ); + + string planInformationBillingCyclesTotal = "12"; + Rbsv1plansPlanInformationBillingCycles planInformationBillingCycles = new Rbsv1plansPlanInformationBillingCycles( + Total: planInformationBillingCyclesTotal + ); + + Rbsv1plansPlanInformation planInformation = new Rbsv1plansPlanInformation( + Name: planInformationName, + Description: planInformationDescription, + BillingPeriod: planInformationBillingPeriod, + BillingCycles: planInformationBillingCycles + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsBillingAmount = "10"; + string orderInformationAmountDetailsSetupFee = "2"; + Rbsv1plansOrderInformationAmountDetails orderInformationAmountDetails = new Rbsv1plansOrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + BillingAmount: orderInformationAmountDetailsBillingAmount, + SetupFee: orderInformationAmountDetailsSetupFee + ); + + Rbsv1plansOrderInformation orderInformation = new Rbsv1plansOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CreatePlanRequest( + PlanInformation: planInformation, + OrderInformation: orderInformation + ); + InlineResponse201 response = null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + response = apiInstance.CreatePlan(requestObj); + Console.WriteLine(response); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + return response; + } + } +} \ No newline at end of file diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/DeletePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/DeletePlan.cs new file mode 100644 index 0000000..e01f3b9 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/DeletePlan.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class DeletePlan + { + public static void Run() + { + try + { + var id = CreatePlan.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + apiInstance.DeletePlan(id); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs new file mode 100644 index 0000000..13e1348 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class GetPlan + { + public static void Run() + { + try + { + var id = CreatePlan.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + apiInstance.GetPlan(id); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs new file mode 100644 index 0000000..5bf0c48 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class UpdatePlan + { + public static void Run() + { + string planInformationName = "Gold Plan NA"; + string planInformationDescription = "Updated Gold Plan"; + string planInformationBillingPeriodLength = "2"; + string planInformationBillingPeriodUnit = "W"; + InlineResponse200PlanInformationBillingPeriod planInformationBillingPeriod = new InlineResponse200PlanInformationBillingPeriod( + Length: planInformationBillingPeriodLength, + Unit: planInformationBillingPeriodUnit + ); + + string planInformationBillingCyclesTotal = "11"; + Rbsv1plansPlanInformationBillingCycles planInformationBillingCycles = new Rbsv1plansPlanInformationBillingCycles( + Total: planInformationBillingCyclesTotal + ); + + Rbsv1plansidPlanInformation planInformation = new Rbsv1plansidPlanInformation( + Name: planInformationName, + Description: planInformationDescription, + BillingPeriod: planInformationBillingPeriod, + BillingCycles: planInformationBillingCycles + ); + + string processingInformationSubscriptionBillingOptionsApplyTo = "ALL"; + Rbsv1plansidProcessingInformationSubscriptionBillingOptions processingInformationSubscriptionBillingOptions = new Rbsv1plansidProcessingInformationSubscriptionBillingOptions( + ApplyTo: processingInformationSubscriptionBillingOptionsApplyTo + ); + + Rbsv1plansidProcessingInformation processingInformation = new Rbsv1plansidProcessingInformation( + SubscriptionBillingOptions: processingInformationSubscriptionBillingOptions + ); + + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsBillingAmount = "11"; + string orderInformationAmountDetailsSetupFee = "2"; + InlineResponse200OrderInformationAmountDetails orderInformationAmountDetails = new InlineResponse200OrderInformationAmountDetails( + Currency: orderInformationAmountDetailsCurrency, + BillingAmount: orderInformationAmountDetailsBillingAmount, + SetupFee: orderInformationAmountDetailsSetupFee + ); + + InlineResponse200OrderInformation orderInformation = new InlineResponse200OrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new UpdatePlanRequest( + PlanInformation: planInformation, + ProcessingInformation: processingInformation, + OrderInformation: orderInformation + ); + + try + { + var id = CreatePlan.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + apiInstance.UpdatePlan(id, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs new file mode 100644 index 0000000..2010ae5 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class CreateSubscription + { + public static InlineResponse2011 Run() + { + string clientReferenceInformationCode = "TC501713"; + string clientReferenceInformationPartnerDeveloperId = "ABCD1234"; + string clientReferenceInformationPartnerSolutionId = "GEF1234"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + string clientReferenceInformationApplicationName = "CYBS-SDK"; + string clientReferenceInformationApplicationVersion = "v1"; + Rbsv1subscriptionsClientReferenceInformation clientReferenceInformation = new Rbsv1subscriptionsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner, + ApplicationName: clientReferenceInformationApplicationName, + ApplicationVersion: clientReferenceInformationApplicationVersion + ); + + string processingInformationCommerceIndicator = "recurring"; + string processingInformationAuthorizationOptionsInitiatorType = "merchant"; + Rbsv1subscriptionsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Rbsv1subscriptionsProcessingInformationAuthorizationOptionsInitiator( + Type: processingInformationAuthorizationOptionsInitiatorType + ); + + Rbsv1subscriptionsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Rbsv1subscriptionsProcessingInformationAuthorizationOptions( + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Rbsv1subscriptionsProcessingInformation processingInformation = new Rbsv1subscriptionsProcessingInformation( + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string subscriptionInformationPlanId = "6868912495476705603955"; + string subscriptionInformationName = "Subscription with PlanId"; + string subscriptionInformationStartDate = "2024-06-11"; + Rbsv1subscriptionsSubscriptionInformation subscriptionInformation = new Rbsv1subscriptionsSubscriptionInformation( + PlanId: subscriptionInformationPlanId, + Name: subscriptionInformationName, + StartDate: subscriptionInformationStartDate + ); + + string paymentInformationCustomerId = "C24F5921EB870D99E053AF598E0A4105"; + Rbsv1subscriptionsPaymentInformationCustomer paymentInformationCustomer = new Rbsv1subscriptionsPaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + Rbsv1subscriptionsPaymentInformation paymentInformation = new Rbsv1subscriptionsPaymentInformation( + Customer: paymentInformationCustomer + ); + + var requestObj = new CreateSubscriptionRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + SubscriptionInformation: subscriptionInformation, + PaymentInformation: paymentInformation + ); + + InlineResponse2011 response = null; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + response = apiInstance.CreateSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + return response; + } + } +} \ No newline at end of file diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscription.cs new file mode 100644 index 0000000..c00d7fc --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscription.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class GetSubscription + { + public static void Run() + { + try + { + var id = CreateSubscription.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + apiInstance.GetSubscription(id); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/UpdateSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/UpdateSubscription.cs new file mode 100644 index 0000000..488c891 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/UpdateSubscription.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class UpdateSubscription + { + public static void Run() + { + string clientReferenceInformationCode = "APGHU"; + string clientReferenceInformationPartnerDeveloperId = "ABCD1234"; + string clientReferenceInformationPartnerSolutionId = "GEF1234"; + Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( + DeveloperId: clientReferenceInformationPartnerDeveloperId, + SolutionId: clientReferenceInformationPartnerSolutionId + ); + + Rbsv1subscriptionsClientReferenceInformation clientReferenceInformation = new Rbsv1subscriptionsClientReferenceInformation( + Code: clientReferenceInformationCode, + Partner: clientReferenceInformationPartner + ); + + string processingInformationAuthorizationOptionsInitiatorType = "merchant"; + Rbsv1subscriptionsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Rbsv1subscriptionsProcessingInformationAuthorizationOptionsInitiator( + Type: processingInformationAuthorizationOptionsInitiatorType + ); + + Rbsv1subscriptionsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Rbsv1subscriptionsProcessingInformationAuthorizationOptions( + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Rbsv1subscriptionsProcessingInformation processingInformation = new Rbsv1subscriptionsProcessingInformation( + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string subscriptionInformationPlanId = "424242442"; + string subscriptionInformationName = "Gold subs"; + string subscriptionInformationStartDate = "2024-06-15"; + Rbsv1subscriptionsidSubscriptionInformation subscriptionInformation = new Rbsv1subscriptionsidSubscriptionInformation( + PlanId: subscriptionInformationPlanId, + Name: subscriptionInformationName, + StartDate: subscriptionInformationStartDate + ); + + string orderInformationAmountDetailsBillingAmount = "10"; + string orderInformationAmountDetailsSetupFee = "5"; + Rbsv1subscriptionsidOrderInformationAmountDetails orderInformationAmountDetails = new Rbsv1subscriptionsidOrderInformationAmountDetails( + BillingAmount: orderInformationAmountDetailsBillingAmount, + SetupFee: orderInformationAmountDetailsSetupFee + ); + + Rbsv1subscriptionsidOrderInformation orderInformation = new Rbsv1subscriptionsidOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new CyberSource.Model.UpdateSubscription( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + SubscriptionInformation: subscriptionInformation, + OrderInformation: orderInformation + ); + + try + { + var id = CreateSubscription.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + apiInstance.UpdateSubscription(id, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 6972ea9..a6a70f9 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -159,6 +159,7 @@ + @@ -192,6 +193,9 @@ + + + @@ -223,6 +227,7 @@ + @@ -230,6 +235,13 @@ + + + + + + + @@ -321,7 +333,7 @@ - + From 2d41f3ec1d4c873a45c365255385f1dccd50dc40 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Date: Thu, 20 Jul 2023 17:52:03 +0530 Subject: [PATCH 107/161] Added new RBS and Invoicing sample codes --- .../Invoicing/Invoices/CancelInvoice.cs | 33 ++++++ .../Invoicing/Invoices/GetListOfInvoices.cs | 36 ++++++ .../Samples/Invoicing/Invoices/SendInvoice.cs | 33 ++++++ .../Invoicing/Invoices/UpdateInvoice.cs | 108 ++++++++++++++++++ .../Plans/ActivatePlan.cs | 33 ++++++ .../Plans/CreatePlan.cs | 6 +- .../Plans/DeactivatePlan.cs | 33 ++++++ .../Plans/GetListOfPlans.cs | 38 ++++++ .../Plans/GetPlan.cs | 11 +- .../Plans/GetPlanCode.cs | 32 ++++++ .../Subscriptions/ActivateSubscription.cs | 33 ++++++ .../Subscriptions/CancelSubscription.cs | 33 ++++++ .../Subscriptions/GetListOfSubscriptions.cs | 38 ++++++ .../Subscriptions/GetSubscriptionCode.cs | 32 ++++++ .../Subscriptions/SuspendSubscription.cs | 33 ++++++ cybersource-rest-samples-csharp.csproj | 13 +++ 16 files changed, 540 insertions(+), 5 deletions(-) create mode 100644 Source/Samples/Invoicing/Invoices/CancelInvoice.cs create mode 100644 Source/Samples/Invoicing/Invoices/GetListOfInvoices.cs create mode 100644 Source/Samples/Invoicing/Invoices/SendInvoice.cs create mode 100644 Source/Samples/Invoicing/Invoices/UpdateInvoice.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs create mode 100644 Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs diff --git a/Source/Samples/Invoicing/Invoices/CancelInvoice.cs b/Source/Samples/Invoicing/Invoices/CancelInvoice.cs new file mode 100644 index 0000000..5fe9416 --- /dev/null +++ b/Source/Samples/Invoicing/Invoices/CancelInvoice.cs @@ -0,0 +1,33 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class CancelInvoice + { + public static InvoicingV2InvoicesPost201Response Run() + { + try + { + var invoiceId = CreateDraftInvoice.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesPost201Response result = apiInstance.PerformCancelAction(invoiceId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Invoicing/Invoices/GetListOfInvoices.cs b/Source/Samples/Invoicing/Invoices/GetListOfInvoices.cs new file mode 100644 index 0000000..10fa01b --- /dev/null +++ b/Source/Samples/Invoicing/Invoices/GetListOfInvoices.cs @@ -0,0 +1,36 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class GetListOfInvoices + { + public static InvoicingV2InvoicesAllGet200Response Run() + { + int offset = 0; + int limit = 10; + string query = null; + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesAllGet200Response result = apiInstance.GetAllInvoices(offset, limit, query); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Invoicing/Invoices/SendInvoice.cs b/Source/Samples/Invoicing/Invoices/SendInvoice.cs new file mode 100644 index 0000000..8458a1f --- /dev/null +++ b/Source/Samples/Invoicing/Invoices/SendInvoice.cs @@ -0,0 +1,33 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class SendInvoice + { + public static InvoicingV2InvoicesPost201Response Run() + { + try + { + var invoiceId = CreateDraftInvoice.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesPost201Response result = apiInstance.PerformSendAction(invoiceId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/Invoicing/Invoices/UpdateInvoice.cs b/Source/Samples/Invoicing/Invoices/UpdateInvoice.cs new file mode 100644 index 0000000..ed1ad1f --- /dev/null +++ b/Source/Samples/Invoicing/Invoices/UpdateInvoice.cs @@ -0,0 +1,108 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.Invoicing +{ + public class UpdateInvoice + { + public static InvoicingV2InvoicesPost201Response Run() + { + var invoiceId = CreateDraftInvoice.Run().Id; + + string customerInformationName = "New Customer Name"; + string customerInformationEmail = "new_email@my-email.world"; + Invoicingv2invoicesCustomerInformation customerInformation = new Invoicingv2invoicesCustomerInformation( + Name: customerInformationName, + Email: customerInformationEmail + ); + + string invoiceInformationDescription = "This is after updating invoice"; + DateTime invoiceInformationDueDate = DateTime.Parse("2019-07-11"); + bool invoiceInformationAllowPartialPayments = true; + string invoiceInformationDeliveryMode = "none"; + Invoicingv2invoicesidInvoiceInformation invoiceInformation = new Invoicingv2invoicesidInvoiceInformation( + Description: invoiceInformationDescription, + DueDate: invoiceInformationDueDate, + AllowPartialPayments: invoiceInformationAllowPartialPayments, + DeliveryMode: invoiceInformationDeliveryMode + ); + + string orderInformationAmountDetailsTotalAmount = "2623.64"; + string orderInformationAmountDetailsCurrency = "USD"; + string orderInformationAmountDetailsDiscountAmount = "126.08"; + decimal orderInformationAmountDetailsDiscountPercent = 5.00M; + decimal orderInformationAmountDetailsSubAmount = 2749.72M; + decimal orderInformationAmountDetailsMinimumPartialAmount = 20.00M; + string orderInformationAmountDetailsTaxDetailsType = "State Tax"; + string orderInformationAmountDetailsTaxDetailsAmount = "208.00"; + string orderInformationAmountDetailsTaxDetailsRate = "8.25"; + Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails orderInformationAmountDetailsTaxDetails = new Invoicingv2invoicesOrderInformationAmountDetailsTaxDetails( + Type: orderInformationAmountDetailsTaxDetailsType, + Amount: orderInformationAmountDetailsTaxDetailsAmount, + Rate: orderInformationAmountDetailsTaxDetailsRate + ); + + string orderInformationAmountDetailsFreightAmount = "20.00"; + bool orderInformationAmountDetailsFreightTaxable = true; + Invoicingv2invoicesOrderInformationAmountDetailsFreight orderInformationAmountDetailsFreight = new Invoicingv2invoicesOrderInformationAmountDetailsFreight( + Amount: orderInformationAmountDetailsFreightAmount, + Taxable: orderInformationAmountDetailsFreightTaxable + ); + + Invoicingv2invoicesOrderInformationAmountDetails orderInformationAmountDetails = new Invoicingv2invoicesOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency, + DiscountAmount: orderInformationAmountDetailsDiscountAmount, + DiscountPercent: orderInformationAmountDetailsDiscountPercent, + SubAmount: orderInformationAmountDetailsSubAmount, + MinimumPartialAmount: orderInformationAmountDetailsMinimumPartialAmount, + TaxDetails: orderInformationAmountDetailsTaxDetails, + Freight: orderInformationAmountDetailsFreight + ); + + List orderInformationLineItems = new List(); + string orderInformationLineItemsProductSku1 = "P653727383"; + string orderInformationLineItemsProductName1 = "First line item's name"; + int orderInformationLineItemsQuantity1 = 21; + string orderInformationLineItemsUnitPrice1 = "120.08"; + orderInformationLineItems.Add(new Invoicingv2invoicesOrderInformationLineItems( + ProductSku: orderInformationLineItemsProductSku1, + ProductName: orderInformationLineItemsProductName1, + Quantity: orderInformationLineItemsQuantity1, + UnitPrice: orderInformationLineItemsUnitPrice1 + )); + + Invoicingv2invoicesOrderInformation orderInformation = new Invoicingv2invoicesOrderInformation( + AmountDetails: orderInformationAmountDetails, + LineItems: orderInformationLineItems + ); + + var requestObj = new UpdateInvoiceRequest( + CustomerInformation: customerInformation, + InvoiceInformation: invoiceInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InvoicesApi(clientConfig); + InvoicingV2InvoicesPost201Response result = apiInstance.UpdateInvoice(invoiceId, requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs new file mode 100644 index 0000000..e06a78b --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs @@ -0,0 +1,33 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class ActivatePlan + { + public static InlineResponse2004 Run() + { + try + { + var planId = CreatePlan.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + var result = apiInstance.ActivatePlan(planId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs index 9841d22..6fd6ff5 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs @@ -11,6 +11,9 @@ public class CreatePlan { public static InlineResponse201 Run() { + // Required to make the sample code ActivatePlan.cs work + string planStatus = "DRAFT"; + string planInformationName = "Gold Plan"; string planInformationDescription = "New Gold Plan"; string planInformationBillingPeriodLength = "1"; @@ -29,7 +32,8 @@ public static InlineResponse201 Run() Name: planInformationName, Description: planInformationDescription, BillingPeriod: planInformationBillingPeriod, - BillingCycles: planInformationBillingCycles + BillingCycles: planInformationBillingCycles, + Status: planStatus ); string orderInformationAmountDetailsCurrency = "USD"; diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs new file mode 100644 index 0000000..72650f6 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs @@ -0,0 +1,33 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class DeactivatePlan + { + public static InlineResponse2004 Run() + { + try + { + var planId = ActivatePlan.Run().Id; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + var result = apiInstance.DeactivatePlan(planId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs new file mode 100644 index 0000000..73b2775 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs @@ -0,0 +1,38 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class GetListOfPlans + { + public static InlineResponse200 Run() + { + int? offset = (int?)null; + int? limit = (int?)null; + string code = null; + string status = null; + string name = null; + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + var result = apiInstance.GetPlans(offset, limit, code, status, name); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs index 13e1348..787ade2 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Globalization; - +using ApiSdk.model; using CyberSource.Api; using CyberSource.Model; @@ -9,20 +9,23 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class GetPlan { - public static void Run() + public static InlineResponse2001 Run() { try { - var id = CreatePlan.Run().Id; + var planId = CreatePlan.Run().Id; var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PlansApi(clientConfig); - apiInstance.GetPlan(id); + var result = apiInstance.GetPlan(planId); + Console.WriteLine(result); + return result; } catch (Exception e) { Console.WriteLine("Exception on calling the API : " + e.Message); + return null; } } } diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs new file mode 100644 index 0000000..6e4bc02 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs @@ -0,0 +1,32 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class GetPlanCode + { + public static InlineResponse2005 Run() + { + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PlansApi(clientConfig); + var result = apiInstance.GetPlanCode(); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs new file mode 100644 index 0000000..e70529e --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs @@ -0,0 +1,33 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class ActivateSubscription + { + public static InlineResponse2009 Run() + { + try + { + var subscriptionId = "INSERT VALID SUBSCRIPTION ID HERE"; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + var result = apiInstance.ActivateSubscription(subscriptionId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs new file mode 100644 index 0000000..e7d96e2 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs @@ -0,0 +1,33 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class CancelSubscription + { + public static InlineResponse202 Run() + { + try + { + var subscriptionId = "INSERT VALID SUBSCRIPTION ID HERE"; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + var result = apiInstance.CancelSubscription(subscriptionId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs new file mode 100644 index 0000000..fba21a0 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs @@ -0,0 +1,38 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class GetListOfSubscriptions + { + public static InlineResponse2006 Run() + { + int? offset = (int?)null; + int? limit = (int?)null; + string code = null; + string status = null; + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + var result = apiInstance.GetAllSubscriptions(offset, limit, code, status); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs new file mode 100644 index 0000000..1093092 --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs @@ -0,0 +1,32 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class GetSubscriptionCode + { + public static InlineResponse20010 Run() + { + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + var result = apiInstance.GetSubscriptionCode(); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs new file mode 100644 index 0000000..2bdd80e --- /dev/null +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs @@ -0,0 +1,33 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions +{ + public class SuspendSubscription + { + public static InlineResponse2021 Run() + { + try + { + var subscriptionId = "INSERT VALID SUBSCRIPTION ID HERE"; + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new SubscriptionsApi(clientConfig); + var result = apiInstance.SuspendSubscription(subscriptionId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 4f9ac4f..c5f9e3b 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -130,11 +130,15 @@ + + + + @@ -240,10 +244,19 @@ + + + + + + + + + From d533421f7235bda68fa974fcb4427596b199e364 Mon Sep 17 00:00:00 2001 From: Gabriel Broadwin Date: Wed, 26 Jul 2023 17:25:33 +0530 Subject: [PATCH 108/161] Fixed subscription samples --- .../Subscriptions/ActivateSubscription.cs | 2 +- .../Subscriptions/CancelSubscription.cs | 2 +- .../Subscriptions/SuspendSubscription.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs index e70529e..cfdd26a 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs @@ -14,7 +14,7 @@ public static InlineResponse2009 Run() { try { - var subscriptionId = "INSERT VALID SUBSCRIPTION ID HERE"; + var subscriptionId = CancelSubscription.Run().Id; var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs index e7d96e2..63cd699 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs @@ -14,7 +14,7 @@ public static InlineResponse202 Run() { try { - var subscriptionId = "INSERT VALID SUBSCRIPTION ID HERE"; + var subscriptionId = CreateSubscription.Run().Id; var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs index 2bdd80e..f5253ed 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs @@ -14,7 +14,7 @@ public static InlineResponse2021 Run() { try { - var subscriptionId = "INSERT VALID SUBSCRIPTION ID HERE"; + var subscriptionId = CreateSubscription.Run().Id; var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); From f7f8ed986912a3142253912437766c6a80266061 Mon Sep 17 00:00:00 2001 From: monu-kumar-visa <138751796+monu-kumar-visa@users.noreply.github.com> Date: Thu, 12 Oct 2023 12:27:39 +0530 Subject: [PATCH 109/161] Sep release (#95) * network tokenization changes * updated the version of rest client * Revert "updated the version of rest client" This reverts commit 9f068d42ec99a767b518376b894b7197cbc0c7cd. * removed parenthesis from request target * removed parenthesis from request-target * sep-release * version update * version update (dotnet standard) --- .gitignore | 1 + Source/Configuration.cs | 6 +++ Source/Resource/NetworkTokenCert.pem | 3 ++ Source/Resource/signatureHeaderValue.txt | 2 +- .../Authentication/StandAloneHttpSignature.cs | 8 ++-- ...strumentIdentifierEnrollForNetworkToken.cs | 42 +++++++++++++++++++ Source/Samples/NetworkToken/NetworkToken.cs | 40 ++++++++++++++++++ .../PaymentCredentialsFromNetworkToken.cs | 32 ++++++++++++++ .../Plans/ActivatePlan.cs | 2 +- .../Plans/CreatePlan.cs | 6 +-- .../Plans/DeactivatePlan.cs | 2 +- .../Plans/GetListOfPlans.cs | 2 +- .../Plans/GetPlan.cs | 2 +- .../Plans/GetPlanCode.cs | 2 +- .../Plans/UpdatePlan.cs | 6 +-- .../Subscriptions/ActivateSubscription.cs | 2 +- .../Subscriptions/CancelSubscription.cs | 2 +- .../Subscriptions/CreateSubscription.cs | 4 +- .../Subscriptions/GetListOfSubscriptions.cs | 2 +- .../Subscriptions/GetSubscriptionCode.cs | 2 +- .../Subscriptions/SuspendSubscription.cs | 2 +- cybersource-rest-samples-csharp.csproj | 13 +++--- cybersource-rest-samples-netcore.csproj | 4 +- packages.config | 4 +- 24 files changed, 159 insertions(+), 32 deletions(-) create mode 100644 Source/Resource/NetworkTokenCert.pem create mode 100644 Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs create mode 100644 Source/Samples/NetworkToken/NetworkToken.cs create mode 100644 Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs diff --git a/.gitignore b/.gitignore index 6f7338a..2566683 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ packages bin cybersource-rest-samples-netcore.csproj.user .vs +.idea/ diff --git a/Source/Configuration.cs b/Source/Configuration.cs index 6f5ad57..f8820f4 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -34,6 +34,12 @@ public Dictionary GetConfiguration() _configurationDictionary.Add("clientId", ""); _configurationDictionary.Add("clientSecret", ""); + /* + * PEM Key file path for decoding JWE Response Enter the folder path where the .pem file is located. + * It is optional property, require adding only during JWE decryption. + */ + _configurationDictionary.Add("pemFileDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\Source\\Resource\\NetworkTokenCert.pem")); + // _configurationDictionary.Add("proxyAddress", string.Empty); // _configurationDictionary.Add("proxyPort", string.Empty); // _configurationDictionary.Add("proxyUsername", string.Empty); diff --git a/Source/Resource/NetworkTokenCert.pem b/Source/Resource/NetworkTokenCert.pem new file mode 100644 index 0000000..98f6e3f --- /dev/null +++ b/Source/Resource/NetworkTokenCert.pem @@ -0,0 +1,3 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA2tNGgpyJKgviPHjuNmcF+5tPjFsxBKebsto9swyebVcJVYu5Mp4Yz8VnhPbEdkyzckTtAulXQYA82iPYG/BHEbChR/PHwO3yCsbTDDNQlkB0R5c5Py/Ts4BSLvIwkbJEvd/SQxTPaPOOYjqbqSfzJ4oKsCGzW+K94UnZic8b5II8CrKlLZLZSO2RoURFg+4htjXhikBJXqJdDhneZCgnMxbWU8MKbdXXJUIDZq0jMkNUNOi1xdzLHhZQl464kD+VocTUS06Ky8h/FBU6xRJciLQW7/VieqzVxG5MGxwcSNfbiozG7aHw+Nt4Awkt6N2VpcxL6AmOXoKRH5om1yCNhwIDAQABAoIBAQCky1WfiVl288ol9oCXMdD8ogMvVYG92qfT8q1iiQ9KkrBx3y7SouNWnXiPVvOvj6XYWXYQqj/PEU9CjJn0uGgdN2LOeBWoAso0OXW5C3AWJ2YqgAVZw5/v36SEvFm9b357a/LCGAr3I+zHpxGRO4fP8BKKgGa9vS14W5BbS0DbPZ9/QvzRfinw6l+/l2mnPihB8KyvABtsiBv0ylh525JY3SFp7bx9qLePjYXMR9u8P+LhD4CPvps5htj1E/JSV3nysNYUP7qc3m4OPhrT46ly2vIMVYDWrHw7i9CGf4XVtZuJ0jRSaG/FaS/ggvy4wzeBkjWkfx+PROG1RYLBWuBJAoGBAP/GwOWn4UgDFqc6W3qhZU4j1uHzsYuFCaagof151dV3YdTBOSVx40zq3sWxNkgFhAAJLF7RywYslWW8UEEsLjjdjMjofJBEYIS3I3wUGpU85x//SUwlf1cO5rIg+hehU+m/dgSPFwh/jaBxBb1u9wX5B18N/3kGbwBcchs9mJxtAoGBANsEQHGLf3RYUZ/HMB3QpVNwYbE904CVhU+foRuiog0o9jBJEgnQeuMcDd4sEenhDobuI5+W8VdFSD4h9n2fwoUStqx5uLAenWH/zquuaH+q1/Nz/IO78GoUoaerPV32HZWv5oPafYO6sMPt2TDVhcWmpnDMQkx/54iuKfLigfFDAoGBAOVNyC2bniozKqHtfYmpG+s70i9rjCZqtMY/iDp4ea4QgxJ7z8G0InUYs3NEdkeHOlnV34N6TatRWPaGJuTmuOGeLdMIKnQj+OvCS/u3AkX8/a//7DRqAYmJAGV9jviUV2hdj25y4dFqmQvXh6/WxXsDUQp0wC4+CFGoj1vAkwrZAoGANBtG2by+jgeVI9ZX9D/3lWpfU7PJ5gWsuczYn6KJu2fLaqF30S3wjqfWBM2nVWVd92wgvY9Dy+eH0IB0DF8+ADr7iv1Km1wtRWt+2AmegwE6b4lgwlasVBCkhSeQahJr53j59tS8l+KKu5KS4bNrKCMF5kAyZdDoXPRStp59G9ECgYB2lLPPN/OsecBnl5ye9vuBpw6VUlsxUk3UGlDIKZTx46UJm1RCVCis0O434s49nHATzylyaT2ED77HdvOQSx9eqh3+goS+xs3DPBry477TwiP1Cvo/+7neIrS7uO7B6fHBWze7jk59JD7Rs5wANMfErmv8bX1LPoXq43i2ZQGBNA== +-----END RSA PRIVATE KEY----- diff --git a/Source/Resource/signatureHeaderValue.txt b/Source/Resource/signatureHeaderValue.txt index 5d28d48..8848bcd 100644 --- a/Source/Resource/signatureHeaderValue.txt +++ b/Source/Resource/signatureHeaderValue.txt @@ -1 +1 @@ -keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date (request-target) digest v-c-merchant-id", signature="I/3BC76nsQmZGOlnsrvslZk/VLVaXA2Jb0iVtce++JE=" \ No newline at end of file +keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host date request-target digest v-c-merchant-id", signature="I/3BC76nsQmZGOlnsrvslZk/VLVaXA2Jb0iVtce++JE=" \ No newline at end of file diff --git a/Source/Samples/Authentication/StandAloneHttpSignature.cs b/Source/Samples/Authentication/StandAloneHttpSignature.cs index 42584b7..cda6f6e 100644 --- a/Source/Samples/Authentication/StandAloneHttpSignature.cs +++ b/Source/Samples/Authentication/StandAloneHttpSignature.cs @@ -235,7 +235,7 @@ public static string GenerateDigest(string request) // paramter 'Signature' is calucated based on below key values and then signed with SECRET KEY - // host: Sandbox (apitest.cybersource.com) or Production (api.cybersource.com) hostname // date: "HTTP-date" format as defined by RFC7231. - // (request-target): Should be in format of httpMethod: path + // request-target: Should be in format of httpMethod: path // Example: "post /pts/v2/payments" // Digest: Only needed for POST calls. // digestString = BASE64( HMAC-SHA256 ( Payload )); @@ -246,8 +246,8 @@ public static StringBuilder GenerateSignature(string request, string digest, str { StringBuilder signatureHeaderValue = new StringBuilder(); string algorithm = "HmacSHA256"; - string postHeaders = "host date (request-target) digest v-c-merchant-id"; - string getHeaders = "host date (request-target) v-c-merchant-id"; + string postHeaders = "host date request-target digest v-c-merchant-id"; + string getHeaders = "host date request-target v-c-merchant-id"; string url = "https://" + requestHost + resource; string getRequestTarget = method + " " + resource; string postRequestTarget = method + " " + resource; @@ -265,7 +265,7 @@ public static StringBuilder GenerateSignature(string request, string digest, str signatureString.Append(": "); signatureString.Append(gmtDateTime); signatureString.Append('\n'); - signatureString.Append("(request-target)"); + signatureString.Append("request-target"); signatureString.Append(": "); if (method.Equals("post")) diff --git a/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs b/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs new file mode 100644 index 0000000..9a6b231 --- /dev/null +++ b/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs @@ -0,0 +1,42 @@ +using CyberSource.Api; +using CyberSource.Model; +using System; + +namespace Cybersource_rest_samples_dotnet.Samples.NetworkToken +{ + public class CreateInstrumentIdentifierEnrollForNetworkToken + { + public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + string type = "enrollable card"; + string cardNumber = "5204245750003216"; + string cardExpirationMonth = "12"; + string cardExpirationYear = "2025"; + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( + Number: cardNumber, + ExpirationMonth: cardExpirationMonth, + ExpirationYear: cardExpirationYear + ); + var requestObj = new PostInstrumentIdentifierRequest( + Type: type, + Card: card + ); + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new InstrumentIdentifierApi(clientConfig); + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/NetworkToken/NetworkToken.cs b/Source/Samples/NetworkToken/NetworkToken.cs new file mode 100644 index 0000000..fbd6cec --- /dev/null +++ b/Source/Samples/NetworkToken/NetworkToken.cs @@ -0,0 +1,40 @@ +using CyberSource.Utilities; + +using System.Collections.Generic; +using AuthenticationSdk.core; +using System; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.NetworkToken +{ + public class NetworkToken + { + public static String Run() + { + + Dictionary configDictionary = new Configuration().GetConfiguration(); + + MerchantConfig merchantConfig = new MerchantConfig(configDictionary); + + try + { + // Step-I + Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier tmsv2CustomersEmbeddedDefaultPaymentInstrumentEmbedded = CreateInstrumentIdentifierEnrollForNetworkToken.Run(); + + //Step-II + var encodedResponse = PaymentCredentialsFromNetworkToken.Run(tmsv2CustomersEmbeddedDefaultPaymentInstrumentEmbedded.Id); + + //Step-III + var result = JWEUtility.DecryptJWEResponse(encodedResponse, merchantConfig); + + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception while decrypting the JWE Response : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs new file mode 100644 index 0000000..79603bb --- /dev/null +++ b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs @@ -0,0 +1,32 @@ +using CyberSource.Api; +using System; + +namespace Cybersource_rest_samples_dotnet.Samples.NetworkToken +{ + public class PaymentCredentialsFromNetworkToken + { + public static string Run(string TokenId = null) + { + var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; + if (null == TokenId) + { + TokenId = CreateInstrumentIdentifierEnrollForNetworkToken.Run().Id; + } + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new TokenApi(clientConfig); + var result = apiInstance.PostTokenPaymentCredentials(TokenId, profileid); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs index e06a78b..93cd8db 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/ActivatePlan.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class ActivatePlan { - public static InlineResponse2004 Run() + public static ActivateDeactivatePlanResponse Run() { try { diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs index 6fd6ff5..2438651 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/CreatePlan.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class CreatePlan { - public static InlineResponse201 Run() + public static CreatePlanResponse Run() { // Required to make the sample code ActivatePlan.cs work string planStatus = "DRAFT"; @@ -18,7 +18,7 @@ public static InlineResponse201 Run() string planInformationDescription = "New Gold Plan"; string planInformationBillingPeriodLength = "1"; string planInformationBillingPeriodUnit = "M"; - InlineResponse200PlanInformationBillingPeriod planInformationBillingPeriod = new InlineResponse200PlanInformationBillingPeriod( + GetAllPlansResponsePlanInformationBillingPeriod planInformationBillingPeriod = new GetAllPlansResponsePlanInformationBillingPeriod( Length: planInformationBillingPeriodLength, Unit: planInformationBillingPeriodUnit ); @@ -53,7 +53,7 @@ public static InlineResponse201 Run() PlanInformation: planInformation, OrderInformation: orderInformation ); - InlineResponse201 response = null; + CreatePlanResponse response = null; try { var configDictionary = new Configuration().GetConfiguration(); diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs index 72650f6..3c1adf2 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/DeactivatePlan.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class DeactivatePlan { - public static InlineResponse2004 Run() + public static ActivateDeactivatePlanResponse Run() { try { diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs index 73b2775..ce4e66f 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/GetListOfPlans.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class GetListOfPlans { - public static InlineResponse200 Run() + public static GetAllPlansResponse Run() { int? offset = (int?)null; int? limit = (int?)null; diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs index 787ade2..6ad5a22 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlan.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class GetPlan { - public static InlineResponse2001 Run() + public static GetPlanResponse Run() { try { diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs index 6e4bc02..809ab15 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/GetPlanCode.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class GetPlanCode { - public static InlineResponse2005 Run() + public static GetPlanCodeResponse Run() { try { diff --git a/Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs b/Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs index 5bf0c48..14c40af 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Plans/UpdatePlan.cs @@ -15,7 +15,7 @@ public static void Run() string planInformationDescription = "Updated Gold Plan"; string planInformationBillingPeriodLength = "2"; string planInformationBillingPeriodUnit = "W"; - InlineResponse200PlanInformationBillingPeriod planInformationBillingPeriod = new InlineResponse200PlanInformationBillingPeriod( + GetAllPlansResponsePlanInformationBillingPeriod planInformationBillingPeriod = new GetAllPlansResponsePlanInformationBillingPeriod( Length: planInformationBillingPeriodLength, Unit: planInformationBillingPeriodUnit ); @@ -44,13 +44,13 @@ public static void Run() string orderInformationAmountDetailsCurrency = "USD"; string orderInformationAmountDetailsBillingAmount = "11"; string orderInformationAmountDetailsSetupFee = "2"; - InlineResponse200OrderInformationAmountDetails orderInformationAmountDetails = new InlineResponse200OrderInformationAmountDetails( + GetAllPlansResponseOrderInformationAmountDetails orderInformationAmountDetails = new GetAllPlansResponseOrderInformationAmountDetails( Currency: orderInformationAmountDetailsCurrency, BillingAmount: orderInformationAmountDetailsBillingAmount, SetupFee: orderInformationAmountDetailsSetupFee ); - InlineResponse200OrderInformation orderInformation = new InlineResponse200OrderInformation( + GetAllPlansResponseOrderInformation orderInformation = new GetAllPlansResponseOrderInformation( AmountDetails: orderInformationAmountDetails ); diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs index cfdd26a..ab0cbae 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/ActivateSubscription.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class ActivateSubscription { - public static InlineResponse2009 Run() + public static ActivateSubscriptionResponse Run() { try { diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs index 63cd699..c454442 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CancelSubscription.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class CancelSubscription { - public static InlineResponse202 Run() + public static CancelSubscriptionResponse Run() { try { diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs index 2010ae5..e52309c 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/CreateSubscription.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class CreateSubscription { - public static InlineResponse2011 Run() + public static CreateSubscriptionResponse Run() { string clientReferenceInformationCode = "TC501713"; string clientReferenceInformationPartnerDeveloperId = "ABCD1234"; @@ -68,7 +68,7 @@ public static InlineResponse2011 Run() PaymentInformation: paymentInformation ); - InlineResponse2011 response = null; + CreateSubscriptionResponse response = null; try { var configDictionary = new Configuration().GetConfiguration(); diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs index fba21a0..507a03c 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetListOfSubscriptions.cs @@ -11,7 +11,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class GetListOfSubscriptions { - public static InlineResponse2006 Run() + public static GetAllSubscriptionsResponse Run() { int? offset = (int?)null; int? limit = (int?)null; diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs index 1093092..714adf0 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/GetSubscriptionCode.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class GetSubscriptionCode { - public static InlineResponse20010 Run() + public static GetSubscriptionCodeResponse Run() { try { diff --git a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs index f5253ed..d9402dc 100644 --- a/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs +++ b/Source/Samples/RecurringBillingSubscriptions/Subscriptions/SuspendSubscription.cs @@ -10,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.RecurringBillingSubscriptions { public class SuspendSubscription { - public static InlineResponse2021 Run() + public static SuspendSubscriptionResponse Run() { try { diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index c5f9e3b..7604422 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,11 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - packages\CyberSource.Authentication.0.0.0.16\lib\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.17\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.33\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.35\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -352,6 +352,9 @@ + + + @@ -393,4 +396,4 @@ DEL /S /Q ..\..\..\obj\* - \ No newline at end of file + diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 84bd44c..c8f126e 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + diff --git a/packages.config b/packages.config index 5ea4b43..154671a 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - - + + From cfd0c4e996c4d991eef5e06f6c8c520e3354e8c2 Mon Sep 17 00:00:00 2001 From: monu-kumar-visa <138751796+monu-kumar-visa@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:45:20 +0530 Subject: [PATCH 110/161] Oct 2023 release (#98) * Nlog update * added account updater samples * dotnet standard client and auth version update * dotnet client and auth version update --------- Co-authored-by: Shetty --- NLog.xsd | 2428 +++++++++-------- .../AmexRegistrationCustomerTokenBatch.cs | 57 + ...istrationInstrumentIdentifierTokenBatch.cs | 65 + Source/Samples/AccountUpdater/ListBatches.cs | 31 + .../OneOffVisaMasterCardCustomerTokenBatch.cs | 57 + ...asterCardInstrumentIdentifierTokenBatch.cs | 65 + .../AccountUpdater/RetrieveBatchReport.cs | 31 + .../AccountUpdater/RetrieveBatchStatus.cs | 31 + cybersource-rest-samples-csharp.csproj | 23 +- cybersource-rest-samples-netcore.csproj | 8 +- packages.config | 8 +- 11 files changed, 1658 insertions(+), 1146 deletions(-) create mode 100644 Source/Samples/AccountUpdater/AmexRegistrationCustomerTokenBatch.cs create mode 100644 Source/Samples/AccountUpdater/AmexRegistrationInstrumentIdentifierTokenBatch.cs create mode 100644 Source/Samples/AccountUpdater/ListBatches.cs create mode 100644 Source/Samples/AccountUpdater/OneOffVisaMasterCardCustomerTokenBatch.cs create mode 100644 Source/Samples/AccountUpdater/OneOffVisaMasterCardInstrumentIdentifierTokenBatch.cs create mode 100644 Source/Samples/AccountUpdater/RetrieveBatchReport.cs create mode 100644 Source/Samples/AccountUpdater/RetrieveBatchStatus.cs diff --git a/NLog.xsd b/NLog.xsd index 075bb91..cf06a05 100644 --- a/NLog.xsd +++ b/NLog.xsd @@ -37,12 +37,12 @@ - Global log level threshold for application log messages. Messages below this level won't be logged.. + Global log level threshold for application log messages. Messages below this level won't be logged. - Throw an exception when there is an internal error. Default value is: false. + Throw an exception when there is an internal error. Default value is: false. Not recommend to set to true in production! @@ -72,7 +72,7 @@ - Perform mesage template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty. + Perform message template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty. @@ -123,7 +123,7 @@ - Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name* + Filter on the name of the logger. May include wildcard characters ('*' or '?'). @@ -158,7 +158,17 @@ - Enable or disable logging rule. Disabled rules are ignored. + Enable this rule. Note: disabled rules aren't available from the API. + + + + + Rule identifier to allow rule lookup with Configuration.FindRuleByName and Configuration.RemoveRuleByName. + + + + + Loggers matching will be restricted to specified minimum level for following rules. @@ -171,6 +181,11 @@ + + + Default action if none of the filters match. + + @@ -210,12 +225,19 @@ + + + + Variable value. Note, the 'value' attribute has precedence over this one. + + + Variable name. - + Variable value. @@ -274,47 +296,53 @@ - - - - - - - + + + + + + + + Name of the target. - + - Number of log events that should be processed in a batch by the lazy writer thread. + Action to be taken when the lazy writer thread request queue count exceeds the set limit. - + - Limit of full s to write before yielding into Performance is better when writing many small batches, than writing a single large batch + Limit on the number of requests in the lazy writer thread request queue. - + - Action to be taken when the lazy writer thread request queue count exceeds the set limit. + Number of log events that should be processed in a batch by the lazy writer thread. - + - Limit on the number of requests in the lazy writer thread request queue. + Whether to use the locking queue, instead of a lock-free concurrent queue The locking queue is less concurrent when many logger threads, but reduces memory allocation + + + + + Limit of full s to write before yielding into Performance is better when writing many small batches, than writing a single large batch - Time in milliseconds to sleep between batches. + Time in milliseconds to sleep between batches. (1 or less means trigger on new activity) - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -331,11 +359,17 @@ - - - - + + + + + + + + Name of the target. + + Delay the flush until the LogEvent has been confirmed as written @@ -346,14 +380,14 @@ Condition expression. Log events who meet this condition will cause a flush on the wrapped target. - + - Name of the target. + Only flush when LogEvent matches condition. Ignore explicit-flush, config-reload-flush and shutdown-flush - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -363,31 +397,31 @@ - - - - - - + + + + + + Name of the target. - + Number of log events to be buffered. - + - Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes. + Action to take if the buffer overflows. - + - Action to take if the buffer overflows. + Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes. @@ -395,9 +429,9 @@ Indicates whether to use sliding timeout. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -413,162 +447,186 @@ - - - - - - - - - - - - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. - + - Encoding to be used. + Separator for operation-states-stack. - + - Instance of that is used to format log messages. + Stack separator for log4j:NDC in output from nested context. - + - End of line value if a newline is appended at the end of log message . + Renderer for log4j:event logger-xml-attribute (Default ${logger}) - + - Maximum message size in bytes. + Whether to include the contents of the properties-dictionary. - + - Indicates whether to append newline at the end of log message. + Whether to include log4j:NDC in output from nested context. - + - Action that should be taken if the will be more connections than . + Indicates whether to include source info (file name and line number) in the information sent over the network. - + - Maximum queue size. + Whether to include log4j:NDC in output from nested context. - + - Maximum current connections. 0 = no maximum. + Option to include all properties from the log events - + - Indicates whether to keep connection open whenever possible. + Indicates whether to include call site (class and method name) in the information sent over the network. - + - Size of the connection cache (number of connections which are kept alive). + AppInfo field. By default it's the friendly name of the current AppDomain. - + - Network address. + Instance of that is used to format log messages. + + + + + Indicates whether to include NLog-specific extensions to log4j schema. + + + + + Action that should be taken, when more connections than . + + + + + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. + + + + + Action that should be taken, when more pending messages than . - Action that should be taken if the message is larger than maxMessageSize. + Action that should be taken if the message is larger than - + - NDLC item separator. + Maximum queue size for a single connection. Requires = true - + - NDC item separator. + Size of the connection cache (number of connections which are kept alive). Requires = true - + - Indicates whether to include NLog-specific extensions to log4j schema. + Indicates whether to keep connection open whenever possible. - + - Indicates whether to include source info (file name and line number) in the information sent over the network. + The number of seconds a connection will remain idle before the first keep-alive probe is sent - + - Indicates whether to include contents of the stack. + Network address. - + - Indicates whether to include stack contents. + Maximum simultaneous connections. Requires = false - + - Indicates whether to include dictionary contents. + Type of compression for protocol payload. Useful for UDP where datagram max-size is 8192 bytes. - + - Indicates whether to include dictionary contents. + Skip compression when protocol payload is below limit to reduce overhead in cpu-usage and additional headers - + - Indicates whether to include call site (class and method name) in the information sent over the network. + Indicates whether to append newline at the end of log message. - + - Option to include all properties from the log events + Encoding to be used. - + - AppInfo field. By default it's the friendly name of the current AppDomain. + End of line value if a newline is appended at the end of log message . - + - Renderer for log4j:event logger-xml-attribute (Default ${logger}) + Maximum message size in bytes. On limit breach then action is activated. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -576,11 +634,32 @@ + + + + + + + + + + + + + + + + + + + + + @@ -588,19 +667,32 @@ + + + + + + + - - + + + + + + Viewer parameter name. + + - Layout that should be use to calcuate the value for the parameter. + Layout that should be use to calculate the value for the parameter. - + - Viewer parameter name. + Whether an attribute with empty value should be included in the output @@ -608,17 +700,20 @@ - - - - - - - - + + + + + + + + + + + - + @@ -645,14 +740,29 @@ Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App) + + + Enables output using ANSI Color Codes + + The encoding for writing messages to the . - + - Indicates whether the error stream (stderr) should be used instead of the output stream (stdout). + Indicates whether to send the log messages to the standard error instead of the standard output. + + + + + Indicates whether to auto-flush after + + + + + Indicates whether to auto-check if the console has been redirected to file - Disables coloring logic when System.Console.IsOutputRedirected = true @@ -660,9 +770,9 @@ Indicates whether to use default row highlighting rules. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -691,18 +801,18 @@ - - - + + + - + - Condition that must be met in order to set the specified foreground and background color. + Background color. - + - Background color. + Condition that must be met in order to set the specified foreground and background color. @@ -713,19 +823,35 @@ - - - - - - - + + + + + + + + + + + Background color. + + Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used. + + + Condition that must be met before scanning the row for highlight of words + + + + + Foreground color. + + Indicates whether to ignore case when comparing texts. @@ -746,29 +872,21 @@ Indicates whether to match whole words only. - - - Background color. - - - - - Foreground color. - - - - - - - - - - + + + + + + + + + + @@ -790,6 +908,11 @@ Footer. + + + Indicates whether to auto-flush after + + Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App) @@ -800,243 +923,121 @@ The encoding for writing messages to the . - + Indicates whether to send the log messages to the standard error instead of the standard output. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + Whether to activate internal buffering to allow batch writing, instead of using + + + + + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + - - - - - - - - - - - - - - - - - + + + + + Name of the target. - - - Obsolete - value will be ignored! The logging code always runs outside of transaction. Gets or sets a value indicating whether to use database transactions. Some data providers require this. - - - + - Database user name. If the ConnectionString is not provided this value will be used to construct the "User ID=" part of the connection string. + Text to be rendered. - + - Name of the database provider. + Header. - + - Database password. If the ConnectionString is not provided this value will be used to construct the "Password=" part of the connection string. + Footer. - + - Indicates whether to keep the database connection open between the log events. + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + + + + + + + + + + + + + + - Database name. If the ConnectionString is not provided this value will be used to construct the "Database=" part of the connection string. + Name of the target. - + - Name of the connection string (as specified in <connectionStrings> configuration section. + Text to be rendered. - + - Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase. + Header. - + - Database host name. If the ConnectionString is not provided this value will be used to construct the "Server=" part of the connection string. + Footer. - + - Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used. + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + + + + + + + + + + + + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + Name of the target. - + - Text of the SQL command to be run on each log level. + Layout used to format log messages. - + - Type of the SQL command to be run on each log level. - - - - - - - - - - - - - - - - - - - - - - - Type of the command. - - - - - Connection string to run the command against. If not provided, connection string from the target is used. - - - - - Indicates whether to ignore failures. - - - - - Command text. - - - - - - - - - - - - - - Layout that should be use to calcuate the value for the parameter. - - - - - Database parameter name. - - - - - Database parameter precision. - - - - - Database parameter scale. - - - - - Database parameter size. - - - - - - - - - - - - - - - - Name of the target. - - - - - Text to be rendered. - - - - - Header. - - - - - Footer. - - - - - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit - - - - - - - - - - - - - - - - Name of the target. - - - - - Layout used to format log messages. - - - - - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -1046,18 +1047,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -1076,7 +1077,7 @@ - Optional entrytype. When not set, or when not convertable to then determined by + Optional entry type. When not set, or when not convertible to then determined by @@ -1096,7 +1097,7 @@ - Maximum Event log size in kilobytes. If null, the value won't be set. Default is 512 Kilobytes as specified by Eventlog API + Maximum Event log size in kilobytes. @@ -1114,9 +1115,9 @@ Action to take if the message is larger than the option. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -1133,9 +1134,10 @@ - - - + + + + @@ -1147,9 +1149,14 @@ Indicates whether to return to the first target after any successful write. - + + + Whether to enable batching, but fallback will be handled individually + + + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -1159,52 +1166,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + Name of the file to write to. + + Text to be rendered. @@ -1220,24 +1233,34 @@ Footer. - + - File encoding. + Indicates whether the footer should be written only when the file is archived. - + - Line ending mode. + Maximum number of archive files that should be kept. - + - Indicates whether to compress archive files into the zip archive format. + Maximum days of archive files that should be kept. - + - Way file archives are numbered. + Value of the file size threshold to archive old log file on startup. + + + + + Indicates whether to archive old log file on startup. + + + + + Indicates whether to compress archive files into the zip archive format. @@ -1255,29 +1278,29 @@ Indicates whether to automatically archive log files every time the specified time passes. - + - Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: + Value specifying the date format to use when archiving files. - + - Maximum number of archive files that should be kept. + Size in bytes above which log files will be automatically archived. - + - Indicates whether the footer should be written only when the file is archived. + Way file archives are numbered. - + - Maximum number of log filenames that should be stored as existing. + Indicates whether to create directories if they do not exist. - + - Is the an absolute or relative path? + Indicates whether file creation calls should be synchronized by a system global mutex. @@ -1285,19 +1308,24 @@ Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation. - + - Value indicationg whether file creation calls should be synchronized by a system global mutex. + Is the an absolute or relative path? - + - Indicates whether to replace file contents on each write instead of appending log message at the end. + File attributes (Windows only). + + + + + Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong. - Indicates whether to write BOM (byte order mark) in created files + Indicates whether to write BOM (byte order mark) in created files. Defaults to true for UTF-16 and UTF-32 @@ -1305,44 +1333,44 @@ Indicates whether to enable log file(s) to be deleted. - + - Name of the file to write to. + Indicates whether to delete old log file on startup. - + - Value specifying the date format to use when archiving files. + File encoding. - + - Indicates whether to archive old log file on startup. + Indicates whether to replace file contents on each write instead of appending log message at the end. - + - Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong. + Line ending mode. - + - Indicates whether to create directories if they do not exist. + Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write - + - Indicates whether to delete old log file on startup. + Delay in milliseconds to wait before attempting to write to the file again. - + - File attributes (Windows only). + Maximum number of seconds before open files are flushed. Zero or negative means disabled. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + Maximum number of seconds that files are kept open. Zero or negative means disabled. @@ -1350,9 +1378,14 @@ Indicates whether concurrent writes to the log file by multiple processes on different network hosts. - + + + Log file buffer size in bytes. + + + - Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity. + Indicates whether to automatically flush the file buffers after each log message. @@ -1365,11 +1398,6 @@ Indicates whether to keep log file open instead of opening and closing it on each logging event. - - - Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write - - Indicates whether concurrent writes to the log file by multiple processes on the same host. @@ -1380,37 +1408,14 @@ Number of times the write is appended on the file before NLog discards the log message. - - - Delay in milliseconds to wait before attempting to write to the file again. - - - - - Log file buffer size in bytes. - - - - - Maximum number of seconds before open files are flushed. If this number is negative or zero the files are not flushed by timer. - - - + - Indicates whether to automatically flush the file buffers after each log message. + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - - - - - - - - @@ -1435,6 +1440,14 @@ + + + + + + + + @@ -1459,9 +1472,10 @@ - - - + + + + @@ -1473,285 +1487,141 @@ Condition expression. Log events who meet this condition will be forwarded to the wrapped target. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + - - - - - - - - - + + + Name of the target. - - - Windows domain name to change context to. - - - - - Required impersonation level. - - - - - Type of the logon provider. - - - - - Logon Type. - - - - - User account password. - - - + - Indicates whether to revert to the credentials of the process instead of impersonating another user. + Identifier to perform group-by - + - Username to change context to. - - - - - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + - Interval in which messages will be written up to the number of messages. + Name of the target. - + - Maximum allowed number of messages written per . + Interval in which messages will be written up to the number of messages. - + - Name of the target. + Maximum allowed number of messages written per . - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. - + - Endpoint address. + Text to be rendered. - + - Name of the endpoint configuration in WCF configuration file. + Header. - + - Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply) + Footer. - + - Client ID. + Indicates whether NewLine characters in the body should be replaced with tags. - + - Indicates whether to include per-event properties in the payload sent to the server. + Priority used for sending mails. - + - Indicates whether to use binary message encoding. + Encoding to be used for sending e-mail. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit - - - - - - - - - - - - - - - Layout that should be use to calculate the value for the parameter. - - - - - Name of the parameter. - - - - - Type of the parameter. - - - - - Type of the parameter. Obsolete alias for - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Name of the target. - - - - - Text to be rendered. - - - - - Header. - - - - - Footer. - - - - - Indicates whether NewLine characters in the body should be replaced with tags. - - - - - Priority used for sending mails. - - - - - Encoding to be used for sending e-mail. - - - - - BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). @@ -1789,12 +1659,12 @@ Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + Indicates the SMTP client timeout. @@ -1824,7 +1694,7 @@ Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server. - + Port number that SMTP Server is listening on. @@ -1834,7 +1704,7 @@ Indicates whether the default Settings from System.Net.MailSettings should be used. - + Folder where applications save mail messages to be processed by the local SMTP server. @@ -1865,9 +1735,12 @@ - - - + + + + + + @@ -1876,12 +1749,27 @@ - Layout used to format log messages. + Text to be rendered. + + + + + Header. + + + + + Footer. + + + + + Max number of items to have in memory - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -1891,11 +1779,11 @@ - - - + - + + + @@ -1912,32 +1800,65 @@ Method name. The method must be public and static. Use the AssemblyQualifiedName , https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx e.g. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. + + + + + + + + + + Name of the parameter. + + + + + Layout that should be use to calculate the value for the parameter. + + + + + Fallback value when result value is not available + + + + + Type of the parameter. + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -1949,64 +1870,89 @@ Layout used to format log messages. - + - Encoding to be used. + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. - + - End of line value if a newline is appended at the end of log message . + Action that should be taken, when more pending messages than . - + - Maximum message size in bytes. + Action that should be taken, when more connections than . - + - Indicates whether to append newline at the end of log message. + Maximum queue size for a single connection. Requires = true - + - Network address. + Action that should be taken if the message is larger than + + + + + Indicates whether to keep connection open whenever possible. + + + + + The number of seconds a connection will remain idle before the first keep-alive probe is sent - Size of the connection cache (number of connections which are kept alive). + Size of the connection cache (number of connections which are kept alive). Requires = true - + - Indicates whether to keep connection open whenever possible. + Network address. - Maximum current connections. 0 = no maximum. + Maximum simultaneous connections. Requires = false - + - Maximum queue size. + Type of compression for protocol payload. Useful for UDP where datagram max-size is 8192 bytes. - + - Action that should be taken if the will be more connections than . + Skip compression when protocol payload is below limit to reduce overhead in cpu-usage and additional headers - + + + Indicates whether to append newline at the end of log message. + + + + + Encoding to be used. + + + - Action that should be taken if the message is larger than maxMessageSize. + End of line value if a newline is appended at the end of log message . + + + + + Maximum message size in bytes. On limit breach then action is activated. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2016,107 +1962,96 @@ - - - - - - - - - - - - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. - - - Encoding to be used. - - - - - Instance of that is used to format log messages. - - - - - End of line value if a newline is appended at the end of log message . - - - + - Maximum message size in bytes. + Separator for operation-states-stack. - + - Indicates whether to append newline at the end of log message. + Stack separator for log4j:NDC in output from nested context. - + - Action that should be taken if the will be more connections than . + Renderer for log4j:event logger-xml-attribute (Default ${logger}) - + - Maximum queue size. + Whether to include the contents of the properties-dictionary. - + - Maximum current connections. 0 = no maximum. + Whether to include log4j:NDC in output from nested context. - + - Indicates whether to keep connection open whenever possible. + Indicates whether to include source info (file name and line number) in the information sent over the network. - + - Size of the connection cache (number of connections which are kept alive). + Whether to include log4j:NDC in output from nested context. - + - Network address. + Option to include all properties from the log events - + - Action that should be taken if the message is larger than maxMessageSize. + Indicates whether to include call site (class and method name) in the information sent over the network. - + - NDLC item separator. + AppInfo field. By default it's the friendly name of the current AppDomain. - + - NDC item separator. + Instance of that is used to format log messages. @@ -2124,219 +2059,134 @@ Indicates whether to include NLog-specific extensions to log4j schema. - + - Indicates whether to include source info (file name and line number) in the information sent over the network. + Action that should be taken, when more connections than . - + - Indicates whether to include contents of the stack. + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. - + - Indicates whether to include stack contents. + Action that should be taken, when more pending messages than . - + - Indicates whether to include dictionary contents. + Action that should be taken if the message is larger than - + - Indicates whether to include dictionary contents. + Maximum queue size for a single connection. Requires = true - + - Indicates whether to include call site (class and method name) in the information sent over the network. + Size of the connection cache (number of connections which are kept alive). Requires = true - + - Option to include all properties from the log events + Indicates whether to keep connection open whenever possible. - + - AppInfo field. By default it's the friendly name of the current AppDomain. + The number of seconds a connection will remain idle before the first keep-alive probe is sent - + - Renderer for log4j:event logger-xml-attribute (Default ${logger}) + Network address. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + Maximum simultaneous connections. Requires = false - - - - - - - - - - - - - + - Name of the target. + Type of compression for protocol payload. Useful for UDP where datagram max-size is 8192 bytes. - + - Layout used to format log messages. + Skip compression when protocol payload is below limit to reduce overhead in cpu-usage and additional headers - + - Indicates whether to perform layout calculation. + Indicates whether to append newline at the end of log message. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + Encoding to be used. - - - - - - - - - - - - + - Name of the target. + End of line value if a newline is appended at the end of log message . - + - Layout used to format log messages. + Maximum message size in bytes. On limit breach then action is activated. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + - - - - - - - - - + + + + Name of the target. - - - Indicates whether performance counter should be automatically created. - - - - - Name of the performance counter category. - - - - - Counter help text. - - - - - Name of the performance counter. - - - - - Performance counter type. - - - + - The value by which to increment the counter. + Layout used to format log messages. - + - Performance counter instance name. + Indicates whether to perform layout calculation. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + @@ -2348,9 +2198,9 @@ Default filter to be applied when no specific rule matches. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2358,8 +2208,8 @@ - - + + @@ -2376,17 +2226,17 @@ - - + + Name of the target. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2396,18 +2246,18 @@ - - - + + + Name of the target. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2422,27 +2272,33 @@ - - - - + + + + + Name of the target. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. - + - Number of retries that should be attempted on the wrapped target in case of a failure. + Whether to enable batching, and only apply single delay when a whole batch fails - + + + Number of retries that should be attempted on the wrapped target in case of a failure. + + + Time to wait between retries in milliseconds. @@ -2454,17 +2310,17 @@ - - + + Name of the target. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2474,17 +2330,17 @@ - - + + Name of the target. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2494,10 +2350,13 @@ - - - - + + + + + + + @@ -2506,17 +2365,32 @@ - Layout used to format log messages. + Text to be rendered. + + + + + Header. + + + + + Footer. + + + + + Forward to (Instead of ) - Always use independent of + Force use independent of - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2526,32 +2400,33 @@ - + - - - - - - - - - - - - - + - + + + + + + + + + + + + + + Name of the target. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + NLog Layout are by default threadsafe, so multiple threads can be rendering logevents at the same time. This ensure high concurrency with no lock-congestion for the application-threads, especially when using or AsyncTaskTarget. But if using custom or that are not threadsafe, then this option can enabled to protect against thread-concurrency-issues. Allowing one to update to NLog 5.0 without having to fix custom/external layout-dependencies. @@ -2574,21 +2449,26 @@ Protocol to be used when calling web service. - + - Custom proxy address, include port separated by a colon + (optional) root namespace of the XML document, if POST of XML document chosen. (see and ). - + - Encoding. + Proxy configuration when calling web service - + Web service URL. + + + Value of the User-agent HTTP header. + + Value whether escaping be done according to the old NLog style (Very non-standard) @@ -2609,14 +2489,14 @@ Name of the root XML element, if POST of XML document chosen. If so, this property must not be null. (see and ). - + - (optional) root namespace of the XML document, if POST of XML document chosen. (see and ). + Encoding. - + - Proxy configuration when calling web service + Custom proxy address, include port separated by a colon @@ -2656,39 +2536,39 @@ - - - - - - - - + + + + + + + + - + - Footer layout. + Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom'). - + - Header layout. + Column delimiter. - + - Body layout (can be repeated multiple times). + Footer layout. - + - Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom'). + Header layout. - + - Column delimiter. + Body layout (can be repeated multiple times). @@ -2709,6 +2589,13 @@ + + + + + + + @@ -2720,70 +2607,92 @@ - - - - - - - - - + + + + + + Name of the column. + + Layout of the column. - + - Name of the column. + Override of Quoting mode - + - - - - - - - - + + + - + - List of property names to exclude when is true + Option to render the empty object value {} - + + + Option to suppress the extra spaces in the output json + + + + + + + + + + + + + + + + + + + + + Option to include all properties from the log event (as JSON) - + Indicates whether to include contents of the dictionary. - + - Indicates whether to include contents of the dictionary. + Whether to include the contents of the dictionary. - + - Option to render the empty object value {} + Should forward slashes be escaped? If true, / will be converted to \/ - + - Option to suppress the extra spaces in the output json + Option to exclude null/empty properties from the log event (as JSON) + + + + + List of property names to exclude when is true @@ -2791,30 +2700,53 @@ How far should the JSON serializer follow object references before backing off + + + Option to render the empty object value {} + + + + + Option to suppress the extra spaces in the output json + + - - - - - + + + + + + + + + + + Name of the attribute. + + Layout that will be rendered as the attribute's value. - + - Name of the attribute. + Fallback value when result value is not available - Determines wether or not this attribute will be Json encoded. + Determines whether or not this attribute will be Json encoded. + + + + + Should forward slashes be escaped? If true, / will be converted to \/ @@ -2827,14 +2759,19 @@ Whether an attribute with empty value should be included in the output + + + Result value type, for conversion of layout rendering output + + - - - + + + @@ -2858,35 +2795,60 @@ - - - - - + + + + + + + + + + - + Option to include all properties from the log events - + - Indicates whether to include contents of the dictionary. + Whether to include log4j:NDC in output from nested context. - + - Indicates whether to include contents of the dictionary. + Whether to include log4j:NDC in output from nested context. - + + + Whether to include the contents of the properties-dictionary. + + + - Indicates whether to include contents of the stack. + AppInfo field. By default it's the friendly name of the current AppDomain. - + - Indicates whether to include contents of the stack. + Indicates whether to include call site (class and method name) in the information sent over the network. + + + + + Indicates whether to include source info (file name and line number) in the information sent over the network. + + + + + Log4j:event logger-xml-attribute (Default ${logger}) + + + + + Whether the log4j:throwable xml-element should be written as CDATA @@ -2896,7 +2858,7 @@ - + @@ -2906,12 +2868,224 @@ + + + + + + + + + + + + + + + + + + + + + + + Name of the root XML element + + + + + Value inside the root XML element + + + + + Whether to include the contents of the dictionary. + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + List of property names to exclude when is true + + + + + Whether a ElementValue with empty value should be included in the output + + + + + Auto indent and create new lines + + + + + How far should the XML serializer follow object references before backing off + + + + + XML element name to use for rendering IList-collections items + + + + + XML attribute name to use when rendering property-key When null (or empty) then key-attribute is not included + + + + + XML element name to use when rendering properties + + + + + XML attribute name to use when rendering property-value When null (or empty) then value-attribute is not included and value is formatted as XML-element-value + + + + + Option to include all properties from the log event (as XML) + + + + + + + + + + + + + + + + + Name of the attribute. + + + + + Layout that will be rendered as the attribute's value. + + + + + Fallback value when result value is not available + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + Whether an attribute with empty value should be included in the output + + + + + Result value type, for conversion of layout rendering output + + + + + + + + + + + + + + + + + + + + + + + + Name of the element + + + + + Whether to include the contents of the dictionary. + + + + + Value inside the element + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + List of property names to exclude when is true + + + + + Whether a ElementValue with empty value should be included in the output + + + + + Auto indent and create new lines + + + + + How far should the XML serializer follow object references before backing off + + + + + XML element name to use for rendering IList-collections items + + + + + XML attribute name to use when rendering property-key When null (or empty) then key-attribute is not included + + + + + XML element name to use when rendering properties + + + + + XML attribute name to use when rendering property-value When null (or empty) then value-attribute is not included and value is formatted as XML-element-value + + + + + Option to include all properties from the log event (as XML) + + + - - + + @@ -2939,10 +3113,10 @@ - - - - + + + + @@ -2971,10 +3145,10 @@ - - - - + + + + @@ -3003,10 +3177,10 @@ - - - - + + + + @@ -3035,10 +3209,10 @@ - - - - + + + + @@ -3067,26 +3241,30 @@ - - - - - - - - - - - + + + + + + + + + + Action to be taken when filter matches. - + - Default number of unique filter values to expect, will automatically increase if needed + Append FilterCount to the when an event is no longer filtered + + + + + Insert FilterCount value into when an event is no longer filtered @@ -3099,11 +3277,6 @@ Layout to be used to filter log messages. - - - Max number of unique filter values to expect simultaneously - - Max length of filter values, will truncate if above limit @@ -3114,24 +3287,19 @@ How long before a filter expires, and logging is accepted again - - - Default buffer size for the internal buffers - - - + - Reuse internal buffers, and doesn't have to constantly allocate new buffers + Default number of unique filter values to expect, will automatically increase if needed - + - Append FilterCount to the when an event is no longer filtered + Max number of unique filter values to expect simultaneously - + - Insert FilterCount value into when an event is no longer filtered + Default buffer size for the internal buffers diff --git a/Source/Samples/AccountUpdater/AmexRegistrationCustomerTokenBatch.cs b/Source/Samples/AccountUpdater/AmexRegistrationCustomerTokenBatch.cs new file mode 100644 index 0000000..6b4b07a --- /dev/null +++ b/Source/Samples/AccountUpdater/AmexRegistrationCustomerTokenBatch.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AccountUpdater +{ + public class AmexRegistrationCustomerTokenBatch + { + public static InlineResponse202 Run() + { + string type = "amexRegistration"; + + List includedTokens = new List (); + string includedTokensId1 = "C06977C0EDC0E985E053AF598E0A3326"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId1 + )); + + string includedTokensId2 = "C069A534044F6140E053AF598E0AD492"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId2 + )); + + Accountupdaterv1batchesIncluded included = new Accountupdaterv1batchesIncluded( + Tokens: includedTokens + ); + + string merchantReference = "TC50171_3"; + string notificationEmail = "test@cybs.com"; + var requestObj = new Body( + Type: type, + Included: included, + MerchantReference: merchantReference, + NotificationEmail: notificationEmail + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BatchesApi(clientConfig); + InlineResponse202 result = apiInstance.PostBatch(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/AccountUpdater/AmexRegistrationInstrumentIdentifierTokenBatch.cs b/Source/Samples/AccountUpdater/AmexRegistrationInstrumentIdentifierTokenBatch.cs new file mode 100644 index 0000000..5a46178 --- /dev/null +++ b/Source/Samples/AccountUpdater/AmexRegistrationInstrumentIdentifierTokenBatch.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AccountUpdater +{ + public class AmexRegistrationInstrumentIdentifierTokenBatch + { + public static InlineResponse202 Run() + { + string type = "amexRegistration"; + + List includedTokens = new List (); + string includedTokensId1 = "7030000000000260224"; + string includedTokensExpirationMonth1 = "12"; + string includedTokensExpirationYear1 = "2020"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId1, + ExpirationMonth: includedTokensExpirationMonth1, + ExpirationYear: includedTokensExpirationYear1 + )); + + string includedTokensId2 = "7030000000000231118"; + string includedTokensExpirationMonth2 = "12"; + string includedTokensExpirationYear2 = "2020"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId2, + ExpirationMonth: includedTokensExpirationMonth2, + ExpirationYear: includedTokensExpirationYear2 + )); + + Accountupdaterv1batchesIncluded included = new Accountupdaterv1batchesIncluded( + Tokens: includedTokens + ); + + string merchantReference = "TC50171_3"; + string notificationEmail = "test@cybs.com"; + var requestObj = new Body( + Type: type, + Included: included, + MerchantReference: merchantReference, + NotificationEmail: notificationEmail + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BatchesApi(clientConfig); + InlineResponse202 result = apiInstance.PostBatch(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/AccountUpdater/ListBatches.cs b/Source/Samples/AccountUpdater/ListBatches.cs new file mode 100644 index 0000000..2e47e83 --- /dev/null +++ b/Source/Samples/AccountUpdater/ListBatches.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AccountUpdater +{ + public class ListBatches + { + public static void Run() + { + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BatchesApi(clientConfig); + string fromDate = "20230101T123000Z"; + string toDate = "20230410T123000Z"; + InlineResponse2005 result = apiInstance.GetBatchesList(0, 10, fromDate, toDate); + Console.WriteLine(result); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/Source/Samples/AccountUpdater/OneOffVisaMasterCardCustomerTokenBatch.cs b/Source/Samples/AccountUpdater/OneOffVisaMasterCardCustomerTokenBatch.cs new file mode 100644 index 0000000..d3de147 --- /dev/null +++ b/Source/Samples/AccountUpdater/OneOffVisaMasterCardCustomerTokenBatch.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AccountUpdater +{ + public class OneOffVisaMasterCardCustomerTokenBatch + { + public static InlineResponse202 Run() + { + string type = "oneOff"; + + List includedTokens = new List (); + string includedTokensId1 = "C064DE56200B0DB0E053AF598E0A52AA"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId1 + )); + + string includedTokensId2 = "C064DE56213D0DB0E053AF598E0A52AA"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId2 + )); + + Accountupdaterv1batchesIncluded included = new Accountupdaterv1batchesIncluded( + Tokens: includedTokens + ); + + string merchantReference = "TC50171_3"; + string notificationEmail = "test@cybs.com"; + var requestObj = new Body( + Type: type, + Included: included, + MerchantReference: merchantReference, + NotificationEmail: notificationEmail + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BatchesApi(clientConfig); + InlineResponse202 result = apiInstance.PostBatch(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/AccountUpdater/OneOffVisaMasterCardInstrumentIdentifierTokenBatch.cs b/Source/Samples/AccountUpdater/OneOffVisaMasterCardInstrumentIdentifierTokenBatch.cs new file mode 100644 index 0000000..234e9e4 --- /dev/null +++ b/Source/Samples/AccountUpdater/OneOffVisaMasterCardInstrumentIdentifierTokenBatch.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AccountUpdater +{ + public class OneOffVisaMasterCardInstrumentIdentifierTokenBatch + { + public static InlineResponse202 Run() + { + string type = "oneOff"; + + List includedTokens = new List(); + string includedTokensId1 = "7030000000000116236"; + string includedTokensExpirationMonth1 = "12"; + string includedTokensExpirationYear1 = "2020"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId1, + ExpirationMonth: includedTokensExpirationMonth1, + ExpirationYear: includedTokensExpirationYear1 + )); + + string includedTokensId2 = "7030000000000178855"; + string includedTokensExpirationMonth2 = "12"; + string includedTokensExpirationYear2 = "2020"; + includedTokens.Add(new Accountupdaterv1batchesIncludedTokens( + Id: includedTokensId2, + ExpirationMonth: includedTokensExpirationMonth2, + ExpirationYear: includedTokensExpirationYear2 + )); + + Accountupdaterv1batchesIncluded included = new Accountupdaterv1batchesIncluded( + Tokens: includedTokens + ); + + string merchantReference = "TC50171_3"; + string notificationEmail = "test@cybs.com"; + var requestObj = new Body( + Type: type, + Included: included, + MerchantReference: merchantReference, + NotificationEmail: notificationEmail + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BatchesApi(clientConfig); + InlineResponse202 result = apiInstance.PostBatch(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/AccountUpdater/RetrieveBatchReport.cs b/Source/Samples/AccountUpdater/RetrieveBatchReport.cs new file mode 100644 index 0000000..ad99eb8 --- /dev/null +++ b/Source/Samples/AccountUpdater/RetrieveBatchReport.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AccountUpdater +{ + public class RetrieveBatchReport + { + public static void Run() + { + try + { + string batchId = "16188390061150001062041064"; + + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BatchesApi(clientConfig); + InlineResponse2007 result = apiInstance.GetBatchReport(batchId); + Console.WriteLine(result); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs b/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs new file mode 100644 index 0000000..6c74497 --- /dev/null +++ b/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.AccountUpdater +{ + public class RetrieveBatchStatus + { + public static void Run() + { + try + { + string batchId = "16188390061150001062041064"; + + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BatchesApi(clientConfig); + InlineResponse2006 result = apiInstance.GetBatchStatus(batchId); + Console.WriteLine(result); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 7604422..cb1fb66 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,11 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - packages\CyberSource.Authentication.0.0.0.17\lib\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.18\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.35\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.36\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -53,9 +53,9 @@ packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll True - - packages\NLog.4.5.10\lib\net45\NLog.dll - True + + packages\NLog.5.0.0\lib\net46\NLog.dll + True packages\RestSharp.108.0.3\lib\netstandard2.0\RestSharp.dll @@ -109,6 +109,13 @@ + + + + + + + @@ -396,4 +403,4 @@ DEL /S /Q ..\..\..\obj\* - + \ No newline at end of file diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index c8f126e..c5abd67 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,12 +39,12 @@ - - + + - - + + diff --git a/packages.config b/packages.config index 154671a..6993fc0 100644 --- a/packages.config +++ b/packages.config @@ -1,13 +1,13 @@  - - + + - + - + From 10207a3c69cecca40fa50038dc05d549ee61dadd Mon Sep 17 00:00:00 2001 From: Gaurav Bansal Date: Mon, 15 Jan 2024 17:19:01 +0530 Subject: [PATCH 111/161] dependency version update --- cybersource-rest-samples-csharp.csproj | 6 +++--- cybersource-rest-samples-netcore.csproj | 5 +++-- packages.config | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index cb1fb66..0018171 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -44,18 +44,18 @@ packages\CyberSource.Rest.Client.0.0.1.36\lib\cybersource-rest-client-dotnet.dll - packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll + packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll - packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll True packages\NLog.5.0.0\lib\net46\NLog.dll - True + True packages\RestSharp.108.0.3\lib\netstandard2.0\RestSharp.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index c5abd67..4875ec5 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -41,13 +41,14 @@ - - + + + diff --git a/packages.config b/packages.config index 6993fc0..cce1f66 100644 --- a/packages.config +++ b/packages.config @@ -2,9 +2,9 @@ - + - + From ab24cf81fd99e69d595629c5c7962c96624258b0 Mon Sep 17 00:00:00 2001 From: monu-kumar-visa <138751796+monu-kumar-visa@users.noreply.github.com> Date: Wed, 31 Jan 2024 12:24:43 +0530 Subject: [PATCH 112/161] api-spec changes --- .../PaymentCredentialsFromNetworkToken.cs | 5 +-- .../ValidateAuthenticationResults.cs | 34 ++++++------------- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs index 79603bb..4ca3f9f 100644 --- a/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs +++ b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs @@ -1,4 +1,5 @@ using CyberSource.Api; +using CyberSource.Model; using System; namespace Cybersource_rest_samples_dotnet.Samples.NetworkToken @@ -16,9 +17,9 @@ public static string Run(string TokenId = null) { var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new TokenApi(clientConfig); - var result = apiInstance.PostTokenPaymentCredentials(TokenId, profileid); + var postPaymentCredentialsRequest = new PostPaymentCredentialsRequest(); + var result = apiInstance.PostTokenPaymentCredentials(TokenId, postPaymentCredentialsRequest, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index e88a29a..70f2218 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -17,35 +17,23 @@ public static RiskV1AuthenticationResultsPost201Response Run() Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( DeveloperId: clientReferenceInformationPartnerDeveloperId, SolutionId: clientReferenceInformationPartnerSolutionId - ); + ); Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner - ); + ); string orderInformationAmountDetailsCurrency = "USD"; string orderInformationAmountDetailsTotalAmount = "200.00"; Riskv1authenticationresultsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationresultsOrderInformationAmountDetails( Currency: orderInformationAmountDetailsCurrency, TotalAmount: orderInformationAmountDetailsTotalAmount - ); - - - List orderInformationLineItems = new List(); - string orderInformationLineItemsUnitPrice1 = "10"; - int orderInformationLineItemsQuantity1 = 2; - string orderInformationLineItemsTaxAmount1 = "32.40"; - orderInformationLineItems.Add(new Riskv1authenticationresultsOrderInformationLineItems( - UnitPrice: orderInformationLineItemsUnitPrice1, - Quantity: orderInformationLineItemsQuantity1, - TaxAmount: orderInformationLineItemsTaxAmount1 - )); + ); Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( - AmountDetails: orderInformationAmountDetails, - LineItems: orderInformationLineItems - ); + AmountDetails: orderInformationAmountDetails + ); string paymentInformationCardType = "002"; string paymentInformationCardExpirationMonth = "12"; @@ -56,25 +44,23 @@ public static RiskV1AuthenticationResultsPost201Response Run() ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, Number: paymentInformationCardNumber - ); + ); Riskv1authenticationresultsPaymentInformation paymentInformation = new Riskv1authenticationresultsPaymentInformation( Card: paymentInformationCard - ); + ); string consumerAuthenticationInformationAuthenticationTransactionId = "PYffv9G3sa1e0CQr5fV0"; - string consumerAuthenticationInformationSignedPares = "eNqdmFmT4jgSgN+J4D90zD4yMz45PEFVhHzgA2zwjXnzhQ984Nvw61dAV1"; Riskv1authenticationresultsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationresultsConsumerAuthenticationInformation( - AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId, - SignedPares: consumerAuthenticationInformationSignedPares - ); + AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId + ); var requestObj = new ValidateRequest( ClientReferenceInformation: clientReferenceInformation, OrderInformation: orderInformation, PaymentInformation: paymentInformation, ConsumerAuthenticationInformation: consumerAuthenticationInformation - ); + ); try { From ddd251da7d48a94eded4f2b82fdff449ea9672ba Mon Sep 17 00:00:00 2001 From: gnongsie Date: Wed, 31 Jan 2024 12:37:59 +0530 Subject: [PATCH 113/161] Added samples for Webhooks --- ...eAlternativePaymentsNotificationWebhook.cs | 75 ++++++++++++++ .../CreateDecisionManagerWebhook.cs | 78 +++++++++++++++ .../CreateFraudManagementWebhook.cs | 80 +++++++++++++++ .../CreateInvoicingWebhook.cs | 81 ++++++++++++++++ ...tageAndKeyExpirationNotificationWebhook.cs | 76 +++++++++++++++ .../CreateRecurringBillingWebhook.cs | 77 +++++++++++++++ .../CreateSecureAcceptanceWebhook.cs | 77 +++++++++++++++ .../CreateTerminalManagementWebhook.cs | 77 +++++++++++++++ .../CreateTokenManagementWebhook.cs | 79 +++++++++++++++ .../CreateWebhookSymmetricKey.cs | 45 +++++++++ ...eWebhookUsingOAuthWithClientCredentials.cs | 85 ++++++++++++++++ .../CreateWebhookUsingOAuthWithJWT.cs | 97 +++++++++++++++++++ .../FindProductsYouCanSubscribeTo.cs | 28 ++++++ .../StoreOAuthCredentials.cs | 51 ++++++++++ .../DeleteWebhookSubscription.cs | 28 ++++++ .../GetDetailsOnSingleWebhook.cs | 28 ++++++ ...yFailedTransactionsBySetStartAndEndTime.cs | 45 +++++++++ .../ReplayFailedTransactionsInLast24Hours.cs | 43 ++++++++ .../ReplaySpecificListOfTransactions.cs | 39 ++++++++ .../Webhooks/ManageWebhooks/UpdateWebhook.cs | 56 +++++++++++ cybersource-rest-samples-csharp.csproj | 26 ++++- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 23 files changed, 1270 insertions(+), 5 deletions(-) create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateAlternativePaymentsNotificationWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateDecisionManagerWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateFraudManagementWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateInvoicingWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateOutageAndKeyExpirationNotificationWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateRecurringBillingWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateSecureAcceptanceWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateTerminalManagementWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateTokenManagementWebhook.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookSymmetricKey.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithClientCredentials.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithJWT.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/FindProductsYouCanSubscribeTo.cs create mode 100644 Source/Samples/Webhooks/CreateNewWebhooks/StoreOAuthCredentials.cs create mode 100644 Source/Samples/Webhooks/ManageWebhooks/DeleteWebhookSubscription.cs create mode 100644 Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnSingleWebhook.cs create mode 100644 Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs create mode 100644 Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs create mode 100644 Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs create mode 100644 Source/Samples/Webhooks/ManageWebhooks/UpdateWebhook.cs diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateAlternativePaymentsNotificationWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateAlternativePaymentsNotificationWebhook.cs new file mode 100644 index 0000000..43866a6 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateAlternativePaymentsNotificationWebhook.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateAlternativePaymentsNotificationWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "alternativePaymentMethods"; + + List eventTypes = new List (); + eventTypes.Add("payments.payments.updated"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateDecisionManagerWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateDecisionManagerWebhook.cs new file mode 100644 index 0000000..7e64a61 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateDecisionManagerWebhook.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateDecisionManagerWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "decisionManager"; + + List eventTypes = new List (); + eventTypes.Add("risk.profile.decision.reject"); + eventTypes.Add("risk.casemanagement.addnote"); + eventTypes.Add("risk.casemanagement.decision.accept"); + eventTypes.Add("risk.casemanagement.decision.reject"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateFraudManagementWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateFraudManagementWebhook.cs new file mode 100644 index 0000000..f8d1fb8 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateFraudManagementWebhook.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateFraudManagementWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "fraudManagementEssentials"; + + List eventTypes = new List (); + eventTypes.Add("risk.profile.decision.review"); + eventTypes.Add("risk.profile.decision.reject"); + eventTypes.Add("risk.profile.decision.monitor"); + eventTypes.Add("risk.casemanagement.addnote"); + eventTypes.Add("risk.casemanagement.decision.accept"); + eventTypes.Add("risk.casemanagement.decision.reject"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateInvoicingWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateInvoicingWebhook.cs new file mode 100644 index 0000000..a3d57d9 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateInvoicingWebhook.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateInvoicingWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "customerInvoicing"; + + List eventTypes = new List (); + eventTypes.Add("invoicing.customer.invoice.cancel"); + eventTypes.Add("invoicing.customer.invoice.overdue-reminder"); + eventTypes.Add("invoicing.customer.invoice.paid"); + eventTypes.Add("invoicing.customer.invoice.partial-payment"); + eventTypes.Add("invoicing.customer.invoice.partial-resend"); + eventTypes.Add("invoicing.customer.invoice.reminder"); + eventTypes.Add("invoicing.customer.invoice.send"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateOutageAndKeyExpirationNotificationWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateOutageAndKeyExpirationNotificationWebhook.cs new file mode 100644 index 0000000..a95a830 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateOutageAndKeyExpirationNotificationWebhook.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateOutageAndKeyExpirationNotificationWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "cns"; + + List eventTypes = new List (); + eventTypes.Add("cns.outage.notify.freeform"); + eventTypes.Add("cns.report.keyExpiration.detail"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateRecurringBillingWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateRecurringBillingWebhook.cs new file mode 100644 index 0000000..efa95b5 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateRecurringBillingWebhook.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateRecurringBillingWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "recurringBilling"; + + List eventTypes = new List (); + eventTypes.Add("rbs.subscriptions.charge.pre-notified"); + eventTypes.Add("rbs.subscriptions.charge.created"); + eventTypes.Add("rbs.subscriptions.charge.failed"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateSecureAcceptanceWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateSecureAcceptanceWebhook.cs new file mode 100644 index 0000000..fc244d1 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateSecureAcceptanceWebhook.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateSecureAcceptanceWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "secureAcceptance"; + + List eventTypes = new List (); + eventTypes.Add("sa.orders.rawtransactionresults"); + eventTypes.Add("sa.orders.cardholderreceipts"); + eventTypes.Add("sa.orders.merchantreceipts"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateTerminalManagementWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateTerminalManagementWebhook.cs new file mode 100644 index 0000000..ab92489 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateTerminalManagementWebhook.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateTerminalManagementWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "terminalManagement"; + + List eventTypes = new List (); + eventTypes.Add("terminalManagement.assignment.update"); + eventTypes.Add("terminalManagement.status.update"); + eventTypes.Add("terminalManagement.reAssignment.update"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateTokenManagementWebhook.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateTokenManagementWebhook.cs new file mode 100644 index 0000000..2054cff --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateTokenManagementWebhook.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateTokenManagementWebhook + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "tokenManagement"; + + List eventTypes = new List (); + eventTypes.Add("tms.networktoken.provisioned"); + eventTypes.Add("tms.networktoken.updated"); + eventTypes.Add("tms.token.pan_updated"); + eventTypes.Add("tms.token.created"); + eventTypes.Add("tms.token.updated"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "KEY"; + string securityPolicyProxyType = "external"; + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookSymmetricKey.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookSymmetricKey.cs new file mode 100644 index 0000000..ac476e0 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookSymmetricKey.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateWebhookSymmetricKey + { + public static void Run(string vCcorrelationId, string vCsenderOrganizationId, string vCpermissions) + { + string clientRequestAction = "CREATE"; + string keyInformationProvider = "nrtd"; + string keyInformationTenant = ""; + string keyInformationKeyType = "sharedSecret"; + string keyInformationOrganizationId = ""; + Kmsegressv2keyssymKeyInformation keyInformation = new Kmsegressv2keyssymKeyInformation( + Provider: keyInformationProvider, + Tenant: keyInformationTenant, + KeyType: keyInformationKeyType, + OrganizationId: keyInformationOrganizationId + ); + + var requestObj = new SaveSymEgressKey( + ClientRequestAction: clientRequestAction, + KeyInformation: keyInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.SaveSymEgressKey(vCsenderOrganizationId, vCpermissions, vCcorrelationId, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithClientCredentials.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithClientCredentials.cs new file mode 100644 index 0000000..7410a0a --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithClientCredentials.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateWebhookUsingOAuthWithClientCredentials + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "terminalManagement"; + + List eventTypes = new List (); + eventTypes.Add("terminalManagement.assignment.update"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "oAuth"; + string securityPolicyProxyType = "external"; + string securityPolicyConfigOAuthTokenExpiry = "365"; + string securityPolicyConfigOAuthURL = "https://MyWebhookServer.com:8443/oAuthToken"; + string securityPolicyConfigOAuthTokenType = "Bearer"; + Notificationsubscriptionsv1webhooksSecurityPolicy1Config securityPolicyConfig = new Notificationsubscriptionsv1webhooksSecurityPolicy1Config( + OAuthTokenExpiry: securityPolicyConfigOAuthTokenExpiry, + OAuthURL: securityPolicyConfigOAuthURL, + OAuthTokenType: securityPolicyConfigOAuthTokenType + ); + + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType, + Config: securityPolicyConfig + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithJWT.cs b/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithJWT.cs new file mode 100644 index 0000000..aca9051 --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/CreateWebhookUsingOAuthWithJWT.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class CreateWebhookUsingOAuthWithJWT + { + public static void Run() + { + string name = "My Custom Webhook"; + string description = "Sample Webhook from Developer Center"; + string organizationId = ""; + string productId = "terminalManagement"; + + List eventTypes = new List (); + eventTypes.Add("terminalManagement.assignment.update"); + string webhookUrl = "https://MyWebhookServer.com:8443/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443/simulateClientHealthCheck"; + string notificationScope = "SELF"; + string retryPolicyAlgorithm = "ARITHMETIC"; + int retryPolicyFirstRetry = 1; + int retryPolicyInterval = 1; + int retryPolicyNumberOfRetries = 3; + string retryPolicyDeactivateFlag = "false"; + int retryPolicyRepeatSequenceCount = 0; + int retryPolicyRepeatSequenceWaitTime = 0; + Notificationsubscriptionsv1webhooksRetryPolicy retryPolicy = new Notificationsubscriptionsv1webhooksRetryPolicy( + Algorithm: retryPolicyAlgorithm, + FirstRetry: retryPolicyFirstRetry, + Interval: retryPolicyInterval, + NumberOfRetries: retryPolicyNumberOfRetries, + DeactivateFlag: retryPolicyDeactivateFlag, + RepeatSequenceCount: retryPolicyRepeatSequenceCount, + RepeatSequenceWaitTime: retryPolicyRepeatSequenceWaitTime + ); + + string securityPolicySecurityType = "oAuth_JWT"; + string securityPolicyProxyType = "external"; + string securityPolicyConfigOAuthTokenExpiry = "365"; + string securityPolicyConfigOAuthURL = "https://MyWebhookServer.com:8443/oAuthToken"; + string securityPolicyConfigOAuthTokenType = "Bearer"; + string securityPolicyConfigAdditionalConfigAud = "idp.api.myServer.com"; + string securityPolicyConfigAdditionalConfigClientId = "650538A1-7AB0-AD3A-51AB-932ABC57AD70"; + string securityPolicyConfigAdditionalConfigKeyId = "y-daaaAVyF0176M7-eAZ34pR9Ts"; + string securityPolicyConfigAdditionalConfigScope = "merchantacq:rte:write"; + Notificationsubscriptionsv1webhooksSecurityPolicy1ConfigAdditionalConfig securityPolicyConfigAdditionalConfig = new Notificationsubscriptionsv1webhooksSecurityPolicy1ConfigAdditionalConfig( + Aud: securityPolicyConfigAdditionalConfigAud, + ClientId: securityPolicyConfigAdditionalConfigClientId, + KeyId: securityPolicyConfigAdditionalConfigKeyId, + Scope: securityPolicyConfigAdditionalConfigScope + ); + + Notificationsubscriptionsv1webhooksSecurityPolicy1Config securityPolicyConfig = new Notificationsubscriptionsv1webhooksSecurityPolicy1Config( + OAuthTokenExpiry: securityPolicyConfigOAuthTokenExpiry, + OAuthURL: securityPolicyConfigOAuthURL, + OAuthTokenType: securityPolicyConfigOAuthTokenType, + AdditionalConfig: securityPolicyConfigAdditionalConfig + ); + + Notificationsubscriptionsv1webhooksSecurityPolicy1 securityPolicy = new Notificationsubscriptionsv1webhooksSecurityPolicy1( + SecurityType: securityPolicySecurityType, + ProxyType: securityPolicyProxyType, + Config: securityPolicyConfig + ); + + var requestObj = new CreateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + NotificationScope: notificationScope, + RetryPolicy: retryPolicy, + SecurityPolicy: securityPolicy + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.CreateWebhookSubscription(requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/FindProductsYouCanSubscribeTo.cs b/Source/Samples/Webhooks/CreateNewWebhooks/FindProductsYouCanSubscribeTo.cs new file mode 100644 index 0000000..699127e --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/FindProductsYouCanSubscribeTo.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class FindProductsYouCanSubscribeTo + { + public static void Run(string organizationId) + { + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.FindProductsToSubscribe(organizationId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/CreateNewWebhooks/StoreOAuthCredentials.cs b/Source/Samples/Webhooks/CreateNewWebhooks/StoreOAuthCredentials.cs new file mode 100644 index 0000000..3fc414b --- /dev/null +++ b/Source/Samples/Webhooks/CreateNewWebhooks/StoreOAuthCredentials.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.CreateNewWebhooks +{ + public class StoreOAuthCredentials + { + public static void Run(string vCcorrelationId, string vCsenderOrganizationId, string vCpermissions) + { + string clientRequestAction = "STORE"; + string keyInformationProvider = ""; + string keyInformationTenant = "nrtd"; + string keyInformationKeyType = "oAuthClientCredentials"; + string keyInformationOrganizationId = ""; + string keyInformationClientKeyId = "client username"; + string keyInformationKey = "client secret"; + string keyInformationExpiryDuration = "365"; + Kmsegressv2keyssymKeyInformation keyInformation = new Kmsegressv2keyssymKeyInformation( + Provider: keyInformationProvider, + Tenant: keyInformationTenant, + KeyType: keyInformationKeyType, + OrganizationId: keyInformationOrganizationId, + ClientKeyId: keyInformationClientKeyId, + Key: keyInformationKey, + ExpiryDuration: keyInformationExpiryDuration + ); + + var requestObj = new SaveSymEgressKey( + ClientRequestAction: clientRequestAction, + KeyInformation: keyInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new CreateNewWebhooksApi(clientConfig); + apiInstance.SaveSymEgressKey(vCsenderOrganizationId, vCpermissions, vCcorrelationId, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/ManageWebhooks/DeleteWebhookSubscription.cs b/Source/Samples/Webhooks/ManageWebhooks/DeleteWebhookSubscription.cs new file mode 100644 index 0000000..df80d99 --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/DeleteWebhookSubscription.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class DeleteWebhookSubscription + { + public static void Run(string webhookId) + { + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + apiInstance.DeleteWebhookSubscription(webhookId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnSingleWebhook.cs b/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnSingleWebhook.cs new file mode 100644 index 0000000..badcdde --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnSingleWebhook.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class GetDetailsOnSingleWebhook + { + public static void Run(string webhookId) + { + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + apiInstance.GetWebhookSubscriptionById(webhookId); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs new file mode 100644 index 0000000..66f0f9d --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class ReplayFailedTransactionsBySetStartAndEndTime + { + public static void Run(string webhookId) + { + string byDeliveryStatusStatus = "FAILED"; + var byDeliveryStatusStartTime = DateTime.Parse("2021-01-01T15:05:52.284+05:30"); + var byDeliveryStatusEndTime = DateTime.Parse("2021-01-02T03:05:52.284+05:30"); + string byDeliveryStatusProductId = "tokenManagement"; + string byDeliveryStatusEventType = "tms.token.created"; + Nrtfv1webhookswebhookIdreplaysByDeliveryStatus byDeliveryStatus = new Nrtfv1webhookswebhookIdreplaysByDeliveryStatus( + Status: byDeliveryStatusStatus, + StartTime: byDeliveryStatusStartTime, + EndTime: byDeliveryStatusEndTime, + ProductId: byDeliveryStatusProductId, + EventType: byDeliveryStatusEventType + ); + + var requestObj = new ReplayWebhooksRequest( + ByDeliveryStatus: byDeliveryStatus + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + apiInstance.ReplayPreviousWebhooks(webhookId, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs new file mode 100644 index 0000000..383dba7 --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class ReplayFailedTransactionsInLast24Hours + { + public static void Run(string webhookId) + { + string byDeliveryStatusStatus = "FAILED"; + int byDeliveryStatusHoursBack = 24; + string byDeliveryStatusProductId = "tokenManagement"; + string byDeliveryStatusEventType = "tms.token.created"; + Nrtfv1webhookswebhookIdreplaysByDeliveryStatus byDeliveryStatus = new Nrtfv1webhookswebhookIdreplaysByDeliveryStatus( + Status: byDeliveryStatusStatus, + HoursBack: byDeliveryStatusHoursBack, + ProductId: byDeliveryStatusProductId, + EventType: byDeliveryStatusEventType + ); + + var requestObj = new ReplayWebhooksRequest( + ByDeliveryStatus: byDeliveryStatus + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + apiInstance.ReplayPreviousWebhooks(webhookId, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs b/Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs new file mode 100644 index 0000000..f31e8b2 --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class ReplaySpecificListOfTransactions + { + public static void Run(string webhookId) + { + + List byTransactionTraceIdentifiers = new List (); + byTransactionTraceIdentifiers.Add("1f1d0bf4-9299-418d-99d8-faa3313829f1"); + byTransactionTraceIdentifiers.Add("d19fb205-20e5-43a2-867e-bd0f574b771e"); + byTransactionTraceIdentifiers.Add("2f2461a3-457c-40e9-867f-aced89662bbb"); + byTransactionTraceIdentifiers.Add("e23ddc19-93d5-4f1f-8482-d7cafbb3ed9b"); + byTransactionTraceIdentifiers.Add("eb9fc4a9-b31f-48d5-81a9-b1d773fd76d8"); + var requestObj = new ReplayWebhooksRequest( + ByTransactionTraceIdentifiers: byTransactionTraceIdentifiers + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + apiInstance.ReplayPreviousWebhooks(webhookId, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/ManageWebhooks/UpdateWebhook.cs b/Source/Samples/Webhooks/ManageWebhooks/UpdateWebhook.cs new file mode 100644 index 0000000..1493d18 --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/UpdateWebhook.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class UpdateWebhook + { + public static void Run(string webhookId) + { + string name = "My Sample Webhook"; + string description = "Update to my sample webhook"; + string organizationId = ""; + string productId = "terminalManagement"; + + List eventTypes = new List (); + eventTypes.Add("terminalManagement.assignment.update"); + eventTypes.Add("terminalManagement.status.update"); + string webhookUrl = "https://MyWebhookServer.com:8443:/simulateClient"; + string healthCheckUrl = "https://MyWebhookServer.com:8443:/simulateClientHealthCheck"; + string status = "INACTIVE"; + string notificationScopeScope = "SELF"; + Notificationsubscriptionsv1webhooksNotificationScope notificationScope = new Notificationsubscriptionsv1webhooksNotificationScope( + Scope: notificationScopeScope + ); + + var requestObj = new UpdateWebhookRequest( + Name: name, + Description: description, + OrganizationId: organizationId, + ProductId: productId, + EventTypes: eventTypes, + WebhookUrl: webhookUrl, + HealthCheckUrl: healthCheckUrl, + Status: status, + NotificationScope: notificationScope + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + apiInstance.UpdateWebhookSubscription(webhookId, requestObj); + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + } + } + } +} \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index cb1fb66..6c4e9e8 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -40,8 +40,8 @@ packages\CyberSource.Authentication.0.0.0.18\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.36\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.37\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll @@ -55,7 +55,7 @@ packages\NLog.5.0.0\lib\net46\NLog.dll - True + True packages\RestSharp.108.0.3\lib\netstandard2.0\RestSharp.dll @@ -357,6 +357,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index c5abd67..c301901 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index 6993fc0..f5fb856 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From 480b937544eda2066eb28c860083c78e3d4cdc40 Mon Sep 17 00:00:00 2001 From: monkumar Date: Wed, 7 Feb 2024 11:15:17 +0530 Subject: [PATCH 114/161] dotnet auth and client sdk version update --- cybersource-rest-samples-csharp.csproj | 8 ++++---- packages.config | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 0018171..31d6edd 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,11 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - packages\CyberSource.Authentication.0.0.0.18\lib\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.19\lib\AuthenticationSdk.dll - - packages\CyberSource.Rest.Client.0.0.1.36\lib\cybersource-rest-client-dotnet.dll + + packages\CyberSource.Rest.Client.0.0.1.38\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll diff --git a/packages.config b/packages.config index cce1f66..9eac391 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - - + + From 2a84b3853e828416e8a0571f10166f30ce741bcb Mon Sep 17 00:00:00 2001 From: monkumar Date: Wed, 7 Feb 2024 11:30:53 +0530 Subject: [PATCH 115/161] Dotnet standard client and auth sdk version update --- cybersource-rest-samples-netcore.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 4875ec5..7187fe0 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + From 694794c87e7d438c5d1d209f8d36db6eadcc0e18 Mon Sep 17 00:00:00 2001 From: gnongsie Date: Wed, 7 Feb 2024 11:46:12 +0530 Subject: [PATCH 116/161] Changed to latest versions --- cybersource-rest-samples-csharp.csproj | 6 +++--- cybersource-rest-samples-netcore.csproj | 4 ++-- packages.config | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 6c4e9e8..bb6ac49 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,11 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - packages\CyberSource.Authentication.0.0.0.18\lib\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.19\lib\AuthenticationSdk.dll - packages\CyberSource.Rest.Client.0.0.1.37\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.38\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index c301901..c1f1ae5 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + diff --git a/packages.config b/packages.config index f5fb856..edcf8e5 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - - + + From afb8e26a6c515f3288d1c50b9c47e9869c2f9f99 Mon Sep 17 00:00:00 2001 From: gnongsie Date: Wed, 7 Feb 2024 12:09:30 +0530 Subject: [PATCH 117/161] Merge branch 'master' of https://github.com/CyberSource/cybersource-rest-samples-csharp into feb-2024 --- .../PaymentCredentialsFromNetworkToken.cs | 3 ++- .../ValidateAuthenticationResults.cs | 19 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs index 79603bb..4bdada4 100644 --- a/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs +++ b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs @@ -18,7 +18,8 @@ public static string Run(string TokenId = null) var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new TokenApi(clientConfig); - var result = apiInstance.PostTokenPaymentCredentials(TokenId, profileid); + var postPaymentCredentialsRequest = new PostPaymentCredentialsRequest(); + var result = apiInstance.PostTokenPaymentCredentials(TokenId, postPaymentCredentialsRequest, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index e88a29a..f8ea8b8 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -17,20 +17,19 @@ public static RiskV1AuthenticationResultsPost201Response Run() Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( DeveloperId: clientReferenceInformationPartnerDeveloperId, SolutionId: clientReferenceInformationPartnerSolutionId - ); + ); Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner - ); + ); string orderInformationAmountDetailsCurrency = "USD"; string orderInformationAmountDetailsTotalAmount = "200.00"; Riskv1authenticationresultsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationresultsOrderInformationAmountDetails( Currency: orderInformationAmountDetailsCurrency, TotalAmount: orderInformationAmountDetailsTotalAmount - ); - + ); List orderInformationLineItems = new List(); string orderInformationLineItemsUnitPrice1 = "10"; @@ -40,12 +39,12 @@ public static RiskV1AuthenticationResultsPost201Response Run() UnitPrice: orderInformationLineItemsUnitPrice1, Quantity: orderInformationLineItemsQuantity1, TaxAmount: orderInformationLineItemsTaxAmount1 - )); + )); Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( AmountDetails: orderInformationAmountDetails, LineItems: orderInformationLineItems - ); + ); string paymentInformationCardType = "002"; string paymentInformationCardExpirationMonth = "12"; @@ -56,25 +55,25 @@ public static RiskV1AuthenticationResultsPost201Response Run() ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, Number: paymentInformationCardNumber - ); + ); Riskv1authenticationresultsPaymentInformation paymentInformation = new Riskv1authenticationresultsPaymentInformation( Card: paymentInformationCard - ); + ); string consumerAuthenticationInformationAuthenticationTransactionId = "PYffv9G3sa1e0CQr5fV0"; string consumerAuthenticationInformationSignedPares = "eNqdmFmT4jgSgN+J4D90zD4yMz45PEFVhHzgA2zwjXnzhQ984Nvw61dAV1"; Riskv1authenticationresultsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationresultsConsumerAuthenticationInformation( AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId, SignedPares: consumerAuthenticationInformationSignedPares - ); + ); var requestObj = new ValidateRequest( ClientReferenceInformation: clientReferenceInformation, OrderInformation: orderInformation, PaymentInformation: paymentInformation, ConsumerAuthenticationInformation: consumerAuthenticationInformation - ); + ); try { From ce4a776f36e63a37a9f60fc312fbd231953f665f Mon Sep 17 00:00:00 2001 From: gnongsie Date: Thu, 8 Feb 2024 15:06:06 +0530 Subject: [PATCH 118/161] Fixed version information --- cybersource-rest-samples-netcore.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index c1f1ae5..eba7772 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -41,8 +41,8 @@ - - + + From da40ac4aebd08020ff45ef50d4a8cb0df74be2fc Mon Sep 17 00:00:00 2001 From: gnongsie Date: Fri, 9 Feb 2024 11:54:14 +0530 Subject: [PATCH 119/161] Fixed build issues --- .../PaymentCredentialsFromNetworkToken.cs | 1 + .../ValidateAuthenticationResults.cs | 13 +------------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs index 4bdada4..fc7aecd 100644 --- a/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs +++ b/Source/Samples/NetworkToken/PaymentCredentialsFromNetworkToken.cs @@ -1,4 +1,5 @@ using CyberSource.Api; +using CyberSource.Model; using System; namespace Cybersource_rest_samples_dotnet.Samples.NetworkToken diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index f8ea8b8..ee0c831 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -31,19 +31,8 @@ public static RiskV1AuthenticationResultsPost201Response Run() TotalAmount: orderInformationAmountDetailsTotalAmount ); - List orderInformationLineItems = new List(); - string orderInformationLineItemsUnitPrice1 = "10"; - int orderInformationLineItemsQuantity1 = 2; - string orderInformationLineItemsTaxAmount1 = "32.40"; - orderInformationLineItems.Add(new Riskv1authenticationresultsOrderInformationLineItems( - UnitPrice: orderInformationLineItemsUnitPrice1, - Quantity: orderInformationLineItemsQuantity1, - TaxAmount: orderInformationLineItemsTaxAmount1 - )); - Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( - AmountDetails: orderInformationAmountDetails, - LineItems: orderInformationLineItems + AmountDetails: orderInformationAmountDetails ); string paymentInformationCardType = "002"; From dd80a1347f86d62187f5f0215878f2ab163b9a5a Mon Sep 17 00:00:00 2001 From: gnongsie Date: Mon, 12 Feb 2024 18:05:30 +0530 Subject: [PATCH 120/161] Added missing Webhooks samples --- .../ManageWebhooks/CreateAsymmetricKey.cs | 52 +++++++++++++++++++ .../GetDetailsOnAllCreatedWebhooks.cs | 35 +++++++++++++ cybersource-rest-samples-csharp.csproj | 2 + 3 files changed, 89 insertions(+) create mode 100644 Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs create mode 100644 Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs diff --git a/Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs b/Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs new file mode 100644 index 0000000..173fd88 --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class CreateAsymmetricKey + { + public static InlineResponse2014 Run(string vCcorrelationId, string vCsenderOrganizationId, string vCpermissions) + { + string clientRequestAction = "STORE"; + string keyInformationProvider = "merchantName"; + string keyInformationTenant = "nrtd"; + string keyInformationKeyType = "publickey"; + string keyInformationOrganizationId = "merchantName"; + string keyInformationPub = "MIIDbDCCAlQCCQD4lcSlmasmCTANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJVUzELMAkGA1UECAwCVFgxDzANBgNVBAcMBkF1c3RpbjENMAsGA1UECgwEVGVzdDEOMAwGA1UECwwFVGVzdDIxDjAMBgNVBAMMBVRlc3QzMRwwGgYJKoZIhvcNAQkBFg10ZXN0QHRlc3QuY29tMB4XDTIxMDgwOTE0MTcxNFoXDTIyMDgwOTE0MTcxNFoweDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAlRYMQ8wDQYDVQQHDAZBdXN0aW4xDTALBgNVBAoMBFRlc3QxDjAMBgNVBAsMBVRlc3QyMQ4wDAYDVQQDDAVUZXN0MzEcMBoGCSqGSIb3DQEJARYNdGVzdEB0ZXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcHQWZRETqim3XzUQlAiujFEvsHIi1uJZKj+1lvPH36Ucqo3ORcoh/MM/zxVdahjhSyyp7MHuKBWnzft6bFeDEul6qKWGPAAzaxG/2xZSV3FggA9SyAZEDUpJ6mblwqm/EY4KmZi1FrNBUHfW2wwaqDexHPRDesRG6aI7Wuu4GdQUUqoTa2+Nv7kVgEDmGcfIjoWkGKHe+Yan95EITrq4jEFCE5Tg/vERnMvHfK2SovENZ13/pnwFYbeh1kfJSBzWW7yq8AyQAgAE9iqJXbJ/MAasir2vjUQ2+Hcl7WbkpoVjLqDt3rzV1T0Bsd4T9SC3wij9qjJSxa6vAgV4xn6bECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEADuMrtYW1Sf0IsZ4ZD9ipjUrFuTxqh+0M5Jk8h0QqAXEHA/MawedlU3JmE3NB/UR82/XUwdmtObGnFANuUQQ+8WMFpcNo/Sq2kg7juneHZroRh72o73UUMtHWHzo8s0fXElNal8h3SaAAnjMblCiN+gM1RvWMvhGrMTXp2XAcdIezXf8/FOZLlzOF9QylbSk1U4ayWBag6MydkxgHjkPKdShZROEm0oz/O7J/gNp/r7J8F42Rw9MmJh9qH3SFre13nQa8V7Kg+dJHZ/jpGtSlDHAxO0SSTrPXkwB+iBJ6hSkiL/J2Ep+lYHqVe3p5NXMOlTtJdbU4enHeLkD6PazKTw"; + string keyInformationExpiryDuration = "365"; + Kmsegressv2keysasymKeyInformation keyInformation = new Kmsegressv2keysasymKeyInformation( + Provider: keyInformationProvider, + Tenant: keyInformationTenant, + KeyType: keyInformationKeyType, + OrganizationId: keyInformationOrganizationId, + Pub: keyInformationPub, + ExpiryDuration: keyInformationExpiryDuration + ); + + var requestObj = new SaveAsymEgressKey( + ClientRequestAction: clientRequestAction, + KeyInformation: keyInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + InlineResponse2014 result = apiInstance.SaveAsymEgressKey(vCsenderOrganizationId, vCpermissions, requestObj, vCcorrelationId); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs b/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs new file mode 100644 index 0000000..b8b39ab --- /dev/null +++ b/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks +{ + public class GetDetailsOnAllCreatedWebhooks + { + public static List Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + string productId = "testProductId"; + string eventType = "testEventType"; + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new ManageWebhooksApi(clientConfig); + List result = apiInstance.GetWebhookSubscriptionsByOrg(organizationId, productId, eventType); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index bb6ac49..12ecaaf 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -371,7 +371,9 @@ + + From 8dea40e04152f47a9a569eb973017603e571f241 Mon Sep 17 00:00:00 2001 From: monkumar Date: Sun, 10 Mar 2024 23:16:29 +0530 Subject: [PATCH 121/161] march 2024 release changes --- .../CreateInstrumentIdentifierEnrollForNetworkToken.cs | 6 +++--- Source/Samples/NetworkToken/NetworkToken.cs | 2 +- .../CreateCustomerPaymentInstrumentBankAccount.cs | 4 ++-- .../CreateInstrumentIdentifierBankAccount.cs | 6 +++--- .../CreateInstrumentIdentifierCard.cs | 6 +++--- ...CreateInstrumentIdentifierCardEnrollForNetworkToken.cs | 8 ++++---- .../EnrollInstrumentIdentifierForNetworkTokenization.cs | 4 ++-- .../InstrumentIdentifier/RetrieveInstrumentIdentifier.cs | 4 ++-- .../UpdateInstrumentIdentifierPreviousTransactionId.cs | 8 ++++---- .../CreatePaymentInstrumentBankAccount.cs | 4 ++-- 10 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs b/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs index 9a6b231..0392c16 100644 --- a/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs +++ b/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs @@ -6,14 +6,14 @@ namespace Cybersource_rest_samples_dotnet.Samples.NetworkToken { public class CreateInstrumentIdentifierEnrollForNetworkToken { - public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() + public static TmsEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string type = "enrollable card"; string cardNumber = "5204245750003216"; string cardExpirationMonth = "12"; string cardExpirationYear = "2025"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( + TmsEmbeddedInstrumentIdentifierCard card = new TmsEmbeddedInstrumentIdentifierCard( Number: cardNumber, ExpirationMonth: cardExpirationMonth, ExpirationYear: cardExpirationYear @@ -28,7 +28,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentId var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/NetworkToken/NetworkToken.cs b/Source/Samples/NetworkToken/NetworkToken.cs index fbd6cec..379d576 100644 --- a/Source/Samples/NetworkToken/NetworkToken.cs +++ b/Source/Samples/NetworkToken/NetworkToken.cs @@ -19,7 +19,7 @@ public static String Run() try { // Step-I - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier tmsv2CustomersEmbeddedDefaultPaymentInstrumentEmbedded = CreateInstrumentIdentifierEnrollForNetworkToken.Run(); + TmsEmbeddedInstrumentIdentifier tmsv2CustomersEmbeddedDefaultPaymentInstrumentEmbedded = CreateInstrumentIdentifierEnrollForNetworkToken.Run(); //Step-II var encodedResponse = PaymentCredentialsFromNetworkToken.Run(tmsv2CustomersEmbeddedDefaultPaymentInstrumentEmbedded.Id); diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs index a72e3f4..f081cc6 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs @@ -66,11 +66,11 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() ); string processingInformationBankTransferOptionsSeCCode = "WEB"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions processingInformationBankTransferOptions = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions( + TmsPaymentInstrumentProcessingInfoBankTransferOptions processingInformationBankTransferOptions = new TmsPaymentInstrumentProcessingInfoBankTransferOptions( SECCode: processingInformationBankTransferOptionsSeCCode ); - Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation processingInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation( + TmsPaymentInstrumentProcessingInfo processingInformation = new TmsPaymentInstrumentProcessingInfo( BankTransferOptions: processingInformationBankTransferOptions ); diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs index 71af755..bab203d 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs @@ -9,12 +9,12 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierBankAccount { - public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() + public static TmsEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string bankAccountNumber = "4100"; string bankAccountRoutingNumber = "071923284"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBankAccount bankAccount = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBankAccount( + TmsEmbeddedInstrumentIdentifierBankAccount bankAccount = new TmsEmbeddedInstrumentIdentifierBankAccount( Number: bankAccountNumber, RoutingNumber: bankAccountRoutingNumber ); @@ -29,7 +29,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentId var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs index 63777dc..1866ec3 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs @@ -9,11 +9,11 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCard { - public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() + public static TmsEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string cardNumber = "411111111111111"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( + TmsEmbeddedInstrumentIdentifierCard card = new TmsEmbeddedInstrumentIdentifierCard( Number: cardNumber ); @@ -27,7 +27,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentId var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs index a9b6132..d4347a5 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCardEnrollForNetworkToken { - public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() + public static TmsEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string type = "enrollable card"; @@ -17,7 +17,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentId string cardExpirationMonth = "12"; string cardExpirationYear = "2031"; string cardSecurityCode = "123"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( + TmsEmbeddedInstrumentIdentifierCard card = new TmsEmbeddedInstrumentIdentifierCard( Number: cardNumber, ExpirationMonth: cardExpirationMonth, ExpirationYear: cardExpirationYear, @@ -29,7 +29,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentId string billToAdministrativeArea = "CA"; string billToPostalCode = "94105"; string billToCountry = "US"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo( + TmsEmbeddedInstrumentIdentifierBillTo billTo = new TmsEmbeddedInstrumentIdentifierBillTo( Address1: billToAddress1, Locality: billToLocality, AdministrativeArea: billToAdministrativeArea, @@ -49,7 +49,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentId var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs index 3b5baee..e1d7f64 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs @@ -18,7 +18,7 @@ public static void Run() string cardExpirationMonth = "12"; string cardExpirationYear = "2031"; string cardSecurityCode = "123"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard card = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierCard( + TmsEmbeddedInstrumentIdentifierCard card = new TmsEmbeddedInstrumentIdentifierCard( ExpirationMonth: cardExpirationMonth, ExpirationYear: cardExpirationYear, SecurityCode: cardSecurityCode @@ -29,7 +29,7 @@ public static void Run() string billToAdministrativeArea = "CA"; string billToPostalCode = "94105"; string billToCountry = "US"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo billTo = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierBillTo( + TmsEmbeddedInstrumentIdentifierBillTo billTo = new TmsEmbeddedInstrumentIdentifierBillTo( Address1: billToAddress1, Locality: billToLocality, AdministrativeArea: billToAdministrativeArea, diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs index d394e2e..f3f418e 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveInstrumentIdentifier { - public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier Run() + public static TmsEmbeddedInstrumentIdentifier Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; var tokenId = "7010000000016241111"; @@ -19,7 +19,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentId var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifier result = apiInstance.GetInstrumentIdentifier(tokenId, profileid); + TmsEmbeddedInstrumentIdentifier result = apiInstance.GetInstrumentIdentifier(tokenId, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs index 409fe36..563f974 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs @@ -13,19 +13,19 @@ public static void Run() { string instrumentIdentifierTokenId = "7010000000016241111"; string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId = "123456789012345"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction( + TmsAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new TmsAuthorizationOptionsInitiatorMerchantInitiatedTransaction( PreviousTransactionId: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId ); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptionsInitiator( + TmsAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new TmsAuthorizationOptionsInitiator( MerchantInitiatedTransaction: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction ); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformationAuthorizationOptions( + TmsAuthorizationOptions processingInformationAuthorizationOptions = new TmsAuthorizationOptions( Initiator: processingInformationAuthorizationOptionsInitiator ); - Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformation processingInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentEmbeddedInstrumentIdentifierProcessingInformation( + TmsEmbeddedInstrumentIdentifierProcessingInformation processingInformation = new TmsEmbeddedInstrumentIdentifierProcessingInformation( AuthorizationOptions: processingInformationAuthorizationOptions ); diff --git a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs index 1f8ad73..50a3ab7 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs @@ -67,11 +67,11 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() ); string processingInformationBankTransferOptionsSeCCode = "WEB"; - Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions processingInformationBankTransferOptions = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformationBankTransferOptions( + TmsPaymentInstrumentProcessingInfoBankTransferOptions processingInformationBankTransferOptions = new TmsPaymentInstrumentProcessingInfoBankTransferOptions( SECCode: processingInformationBankTransferOptionsSeCCode ); - Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation processingInformation = new Tmsv2customersEmbeddedDefaultPaymentInstrumentProcessingInformation( + TmsPaymentInstrumentProcessingInfo processingInformation = new TmsPaymentInstrumentProcessingInfo( BankTransferOptions: processingInformationBankTransferOptions ); From c63cf13ac89457009249a8874268b70ed1a1e228 Mon Sep 17 00:00:00 2001 From: monkumar Date: Sun, 10 Mar 2024 23:21:30 +0530 Subject: [PATCH 122/161] updated dotnet client sdk version --- .gitignore | 1 + cybersource-rest-samples-csharp.csproj | 2 +- packages.config | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 2566683..7eaafcd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ bin cybersource-rest-samples-netcore.csproj.user .vs .idea/ +*.log diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 12ecaaf..108bc11 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,7 +41,7 @@ packages\CyberSource.Authentication.0.0.0.19\lib\AuthenticationSdk.dll - packages\CyberSource.Rest.Client.0.0.1.38\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.39\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/packages.config b/packages.config index edcf8e5..80aaa47 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From 520b76d3a0b24f0d797eae8572408ea79fe7d32f Mon Sep 17 00:00:00 2001 From: monkumar Date: Sun, 10 Mar 2024 23:24:35 +0530 Subject: [PATCH 123/161] updated dotnetstandard client --- cybersource-rest-samples-netcore.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index eba7772..aa08bb0 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + From 7f6806dcb2020f12966fed8d9070d4c8f5b8a35d Mon Sep 17 00:00:00 2001 From: gaubansa <101095184+gaubansa@users.noreply.github.com> Date: Thu, 28 Mar 2024 16:12:06 +0530 Subject: [PATCH 124/161] Update Logging_NetCore.md --- Logging_NetCore.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Logging_NetCore.md b/Logging_NetCore.md index 8951c53..f735fa0 100644 --- a/Logging_NetCore.md +++ b/Logging_NetCore.md @@ -16,13 +16,11 @@ Refer this [document of NLog Configuration](https://nlog-project.org/config/) fo ## Setup -In order to leverage the new logging framework, it is required to install the **`NLog.Config`** package into the .NET project. This can be done using the Package Manager, steps for which can be found on the [NuGet page for the package](https://www.nuget.org/packages/NLog.Config/). +In order to leverage the new logging framework, it is required to install the **`NLog.Schema`** package into the .NET project. This can be done using the Package Manager, steps for which can be found on the [NuGet page for the package](https://www.nuget.org/packages/NLog.Config/). -When the **`NLog.Config`** package is installed, it will add two new files to the project — **`NLog.config`** and **`NLog.xsd`**. +When the **`NLog.Schema`** package is installed, it will add new file to the project — **`NLog.xsd`**. -**Note that the package name is `NLog.Config` and the name of the newly added file is `NLog.config`.** - -The **`Copy To Output Directory`** property of this `NLog.config` file needs to be set to **`Copy Always`**. +Create and add the **`NLog.config`** file to main directory of your source project and sample for **`NLog.config`** file is given below: ## Sample NLog.config File @@ -59,6 +57,16 @@ The **`Copy To Output Directory`** property of this `NLog.config` file needs to ``` +The **`Copy To Output Directory`** property of this `NLog.config` file needs to be set to **`Copy Always`**. +Or this can be done by adding below lines to your **`Project.csproj`** file. +```xml + + + Always + + +``` + ### Important Notes * The logger name in the rule must match the **'Logger name of the Logger object'**. It can include wildcard characters (`*`, `?`). From fc4af36f999340325d990639a647fa5989d373fa Mon Sep 17 00:00:00 2001 From: monkumar Date: Thu, 2 May 2024 12:16:48 +0530 Subject: [PATCH 125/161] may release changes --- Source/Samples/AccountUpdater/ListBatches.cs | 2 +- Source/Samples/AccountUpdater/RetrieveBatchReport.cs | 2 +- Source/Samples/AccountUpdater/RetrieveBatchStatus.cs | 2 +- .../CreateInstrumentIdentifierEnrollForNetworkToken.cs | 4 ++-- Source/Samples/NetworkToken/NetworkToken.cs | 4 ++-- .../Payments/Credit/ElectronicCheckStandAloneCredits.cs | 2 +- ...kenDefaultPaymentInstrumentAndShippingAddressCreation.cs | 4 ++-- Source/Samples/TokenManagement/Customer/CreateCustomer.cs | 5 +++-- Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs | 4 ++-- Source/Samples/TokenManagement/Customer/UpdateCustomer.cs | 4 ++-- .../Customer/UpdateCustomersDefaultPaymentInstrument.cs | 4 ++-- .../Customer/UpdateCustomersDefaultShippingAddress.cs | 4 ++-- .../CreateCustomerDefaultPaymentInstrumentCard.cs | 6 +++--- .../CreateCustomerNonDefaultPaymentInstrumentCard.cs | 6 +++--- .../CreateCustomerPaymentInstrumentBankAccount.cs | 4 ++-- .../CreateCustomerPaymentInstrumentPinlessDebit.cs | 4 ++-- .../RetrieveCustomerPaymentInstrument.cs | 4 ++-- .../CreateCustomerDefaultShippingAddress.cs | 6 +++--- .../CreateCustomerNonDefaultShippingAddress.cs | 6 +++--- .../RetrieveCustomerShippingAddress.cs | 4 ++-- .../CreateInstrumentIdentifierBankAccount.cs | 4 ++-- .../InstrumentIdentifier/CreateInstrumentIdentifierCard.cs | 4 ++-- .../CreateInstrumentIdentifierCardEnrollForNetworkToken.cs | 4 ++-- .../ListPaymentInstrumentsForInstrumentIdentifier.cs | 4 ++-- .../InstrumentIdentifier/RetrieveInstrumentIdentifier.cs | 4 ++-- .../PaymentInstrument/CreatePaymentInstrumentBankAccount.cs | 4 ++-- .../PaymentInstrument/CreatePaymentInstrumentCard.cs | 4 ++-- .../CreatePaymentInstrumentPinlessDebit.cs | 4 ++-- .../PaymentInstrument/RetrievePaymentInstrument.cs | 4 ++-- .../PaymentInstrument/UpdatePaymentInstrument.cs | 4 ++-- .../ReplayFailedTransactionsBySetStartAndEndTime.cs | 2 +- .../ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs | 2 +- .../ManageWebhooks/ReplaySpecificListOfTransactions.cs | 2 +- cybersource-rest-samples-netcore.csproj | 2 +- 34 files changed, 65 insertions(+), 64 deletions(-) diff --git a/Source/Samples/AccountUpdater/ListBatches.cs b/Source/Samples/AccountUpdater/ListBatches.cs index 2e47e83..bd82368 100644 --- a/Source/Samples/AccountUpdater/ListBatches.cs +++ b/Source/Samples/AccountUpdater/ListBatches.cs @@ -19,7 +19,7 @@ public static void Run() var apiInstance = new BatchesApi(clientConfig); string fromDate = "20230101T123000Z"; string toDate = "20230410T123000Z"; - InlineResponse2005 result = apiInstance.GetBatchesList(0, 10, fromDate, toDate); + InlineResponse2006 result = apiInstance.GetBatchesList(0, 10, fromDate, toDate); Console.WriteLine(result); } catch (Exception e) diff --git a/Source/Samples/AccountUpdater/RetrieveBatchReport.cs b/Source/Samples/AccountUpdater/RetrieveBatchReport.cs index ad99eb8..9ef4d01 100644 --- a/Source/Samples/AccountUpdater/RetrieveBatchReport.cs +++ b/Source/Samples/AccountUpdater/RetrieveBatchReport.cs @@ -19,7 +19,7 @@ public static void Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new BatchesApi(clientConfig); - InlineResponse2007 result = apiInstance.GetBatchReport(batchId); + InlineResponse2008 result = apiInstance.GetBatchReport(batchId); Console.WriteLine(result); } catch (Exception e) diff --git a/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs b/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs index 6c74497..d4d024e 100644 --- a/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs +++ b/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs @@ -19,7 +19,7 @@ public static void Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new BatchesApi(clientConfig); - InlineResponse2006 result = apiInstance.GetBatchStatus(batchId); + InlineResponse2007 result = apiInstance.GetBatchStatus(batchId); Console.WriteLine(result); } catch (Exception e) diff --git a/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs b/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs index 0392c16..d8dffdf 100644 --- a/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs +++ b/Source/Samples/NetworkToken/CreateInstrumentIdentifierEnrollForNetworkToken.cs @@ -6,7 +6,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.NetworkToken { public class CreateInstrumentIdentifierEnrollForNetworkToken { - public static TmsEmbeddedInstrumentIdentifier Run() + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string type = "enrollable card"; @@ -28,7 +28,7 @@ public static TmsEmbeddedInstrumentIdentifier Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + PostInstrumentIdentifierRequest result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/NetworkToken/NetworkToken.cs b/Source/Samples/NetworkToken/NetworkToken.cs index 379d576..5e38b93 100644 --- a/Source/Samples/NetworkToken/NetworkToken.cs +++ b/Source/Samples/NetworkToken/NetworkToken.cs @@ -19,10 +19,10 @@ public static String Run() try { // Step-I - TmsEmbeddedInstrumentIdentifier tmsv2CustomersEmbeddedDefaultPaymentInstrumentEmbedded = CreateInstrumentIdentifierEnrollForNetworkToken.Run(); + PostInstrumentIdentifierRequest createInstrumentIdentifierEnrollForNetworkTokenResponse = CreateInstrumentIdentifierEnrollForNetworkToken.Run(); //Step-II - var encodedResponse = PaymentCredentialsFromNetworkToken.Run(tmsv2CustomersEmbeddedDefaultPaymentInstrumentEmbedded.Id); + var encodedResponse = PaymentCredentialsFromNetworkToken.Run(createInstrumentIdentifierEnrollForNetworkTokenResponse.Id); //Step-III var result = JWEUtility.DecryptJWEResponse(encodedResponse, merchantConfig); diff --git a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs index dbdcbb9..f76816e 100644 --- a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs +++ b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs @@ -19,7 +19,7 @@ public static PtsV2CreditsPost201Response Run() string paymentInformationBankAccountType = "C"; string paymentInformationBankAccountNumber = "4100"; string paymentInformationBankAccountCheckNumber = "123456"; - Ptsv2paymentsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsPaymentInformationBankAccount( + Ptsv2paymentsidrefundsPaymentInformationBankAccount paymentInformationBankAccount = new Ptsv2paymentsidrefundsPaymentInformationBankAccount( Type: paymentInformationBankAccountType, Number: paymentInformationBankAccountNumber, CheckNumber: paymentInformationBankAccountCheckNumber diff --git a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs index cd6f341..ac17e27 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs @@ -104,12 +104,12 @@ public static PtsV2PaymentsPost201Response Run() bool tokenInformationPaymentInstrument_default = true; Ptsv2paymentsTokenInformationPaymentInstrument tokenInformationPaymentInstrument = new Ptsv2paymentsTokenInformationPaymentInstrument( - _Default: tokenInformationPaymentInstrument_default + Default: tokenInformationPaymentInstrument_default ); bool tokenInformationShippingAddress_default = true; Ptsv2paymentsTokenInformationShippingAddress tokenInformationShippingAddress = new Ptsv2paymentsTokenInformationShippingAddress( - _Default: tokenInformationShippingAddress_default + Default: tokenInformationShippingAddress_default ); Ptsv2paymentsTokenInformation tokenInformation = new Ptsv2paymentsTokenInformation( diff --git a/Source/Samples/TokenManagement/Customer/CreateCustomer.cs b/Source/Samples/TokenManagement/Customer/CreateCustomer.cs index 20e25aa..818f761 100644 --- a/Source/Samples/TokenManagement/Customer/CreateCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/CreateCustomer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Globalization; using CyberSource.Api; @@ -9,7 +10,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomer { - public static TmsV2CustomersResponse Run() + public static PostCustomerRequest Run() { string buyerInformationMerchantCustomerID = "Your customer identifier"; string buyerInformationEmail = "test@cybs.com"; @@ -44,7 +45,7 @@ public static TmsV2CustomersResponse Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerApi(clientConfig); - TmsV2CustomersResponse result = apiInstance.PostCustomer(requestObj); + PostCustomerRequest result = apiInstance.PostCustomer(requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs b/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs index ed0e321..e87db85 100644 --- a/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveCustomer { - public static TmsV2CustomersResponse Run() + public static PostCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; try @@ -18,7 +18,7 @@ public static TmsV2CustomersResponse Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerApi(clientConfig); - TmsV2CustomersResponse result = apiInstance.GetCustomer(customerTokenId); + PostCustomerRequest result = apiInstance.GetCustomer(customerTokenId); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs index 1254cd6..c2e2443 100644 --- a/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdateCustomer { - public static TmsV2CustomersResponse Run() + public static PatchCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string buyerInformationMerchantCustomerID = "Your customer identifier"; @@ -45,7 +45,7 @@ public static TmsV2CustomersResponse Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerApi(clientConfig); - TmsV2CustomersResponse result = apiInstance.PatchCustomer(customerTokenId, requestObj); + PatchCustomerRequest result = apiInstance.PatchCustomer(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs index dd5907a..8f7ef6c 100644 --- a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs +++ b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdateCustomersDefaultPaymentInstrument { - public static TmsV2CustomersResponse Run() + public static PatchCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string defaultPaymentInstrumentId = "AB6A54B982A6FCB6E05341588E0A3935"; @@ -27,7 +27,7 @@ public static TmsV2CustomersResponse Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerApi(clientConfig); - TmsV2CustomersResponse result = apiInstance.PatchCustomer(customerTokenId, requestObj); + PatchCustomerRequest result = apiInstance.PatchCustomer(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs index 4104c89..5aa1ab2 100644 --- a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs +++ b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdateCustomersDefaultShippingAddress { - public static TmsV2CustomersResponse Run() + public static PatchCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string defaultShippingAddressId = "AB6A54B97C00FCB6E05341588E0A3935"; @@ -27,7 +27,7 @@ public static TmsV2CustomersResponse Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerApi(clientConfig); - TmsV2CustomersResponse result = apiInstance.PatchCustomer(customerTokenId, requestObj); + PatchCustomerRequest result = apiInstance.PatchCustomer(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs index d314a5d..cac5f48 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerDefaultPaymentInstrumentCard { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; bool _default = true; @@ -51,7 +51,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() ); var requestObj = new PostCustomerPaymentInstrumentRequest( - _Default: _default, + Default: _default, Card: card, BillTo: billTo, InstrumentIdentifier: instrumentIdentifier @@ -63,7 +63,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs index 8cf22bd..29df0e1 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerNonDefaultPaymentInstrumentCard { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; bool _default = false; @@ -51,7 +51,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() ); var requestObj = new PostCustomerPaymentInstrumentRequest( - _Default: _default, + Default: _default, Card: card, BillTo: billTo, InstrumentIdentifier: instrumentIdentifier @@ -63,7 +63,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs index f081cc6..572a0d5 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerPaymentInstrumentBankAccount { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string bankAccountType = "savings"; @@ -93,7 +93,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs index 722b586..cb4a957 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerPaymentInstrumentPinlessDebit { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string cardExpirationMonth = "12"; @@ -69,7 +69,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); + PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs index 8bf6379..8b31f49 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveCustomerPaymentInstrument { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string paymentInstrumentTokenId = "AB6A54B982A6FCB6E05341588E0A3935"; @@ -19,7 +19,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.GetCustomerPaymentInstrument(customerTokenId, paymentInstrumentTokenId); + PostCustomerPaymentInstrumentRequest result = apiInstance.GetCustomerPaymentInstrument(customerTokenId, paymentInstrumentTokenId); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs index 507b7c4..69ce4d3 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerDefaultShippingAddress { - public static Tmsv2customersEmbeddedDefaultShippingAddress Run() + public static PostCustomerShippingAddressRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; bool _default = true; @@ -37,7 +37,7 @@ public static Tmsv2customersEmbeddedDefaultShippingAddress Run() ); var requestObj = new PostCustomerShippingAddressRequest( - _Default: _default, + Default: _default, ShipTo: shipTo ); @@ -47,7 +47,7 @@ public static Tmsv2customersEmbeddedDefaultShippingAddress Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerShippingAddressApi(clientConfig); - Tmsv2customersEmbeddedDefaultShippingAddress result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); + PostCustomerShippingAddressRequest result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs index 634987a..023797f 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerNonDefaultShippingAddress { - public static Tmsv2customersEmbeddedDefaultShippingAddress Run() + public static PostCustomerShippingAddressRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; bool _default = false; @@ -37,7 +37,7 @@ public static Tmsv2customersEmbeddedDefaultShippingAddress Run() ); var requestObj = new PostCustomerShippingAddressRequest( - _Default: _default, + Default: _default, ShipTo: shipTo ); @@ -47,7 +47,7 @@ public static Tmsv2customersEmbeddedDefaultShippingAddress Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerShippingAddressApi(clientConfig); - Tmsv2customersEmbeddedDefaultShippingAddress result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); + PostCustomerShippingAddressRequest result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs index f1a97f0..9692cd3 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveCustomerShippingAddress { - public static Tmsv2customersEmbeddedDefaultShippingAddress Run() + public static PostCustomerShippingAddressRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; string shippingAddressTokenId = "AB6A54B97C00FCB6E05341588E0A3935"; @@ -19,7 +19,7 @@ public static Tmsv2customersEmbeddedDefaultShippingAddress Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new CustomerShippingAddressApi(clientConfig); - Tmsv2customersEmbeddedDefaultShippingAddress result = apiInstance.GetCustomerShippingAddress(customerTokenId, shippingAddressTokenId); + PostCustomerShippingAddressRequest result = apiInstance.GetCustomerShippingAddress(customerTokenId, shippingAddressTokenId); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs index bab203d..241609e 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierBankAccount { - public static TmsEmbeddedInstrumentIdentifier Run() + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string bankAccountNumber = "4100"; @@ -29,7 +29,7 @@ public static TmsEmbeddedInstrumentIdentifier Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + PostInstrumentIdentifierRequest result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs index 1866ec3..d261f9b 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCard { - public static TmsEmbeddedInstrumentIdentifier Run() + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string cardNumber = "411111111111111"; @@ -27,7 +27,7 @@ public static TmsEmbeddedInstrumentIdentifier Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + PostInstrumentIdentifierRequest result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs index d4347a5..4203462 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCardEnrollForNetworkToken { - public static TmsEmbeddedInstrumentIdentifier Run() + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; string type = "enrollable card"; @@ -49,7 +49,7 @@ public static TmsEmbeddedInstrumentIdentifier Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsEmbeddedInstrumentIdentifier result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); + PostInstrumentIdentifierRequest result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs index 513bd53..bcbe81c 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class ListPaymentInstrumentsForInstrumentIdentifier { - public static PaymentInstrumentList Run() + public static PaymentInstrumentList1 Run() { string instrumentIdentifierTokenId = "7010000000016241111"; string profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -21,7 +21,7 @@ public static PaymentInstrumentList Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - PaymentInstrumentList result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, offset, limit); + PaymentInstrumentList1 result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, offset, limit); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs index f3f418e..044631b 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveInstrumentIdentifier { - public static TmsEmbeddedInstrumentIdentifier Run() + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; var tokenId = "7010000000016241111"; @@ -19,7 +19,7 @@ public static TmsEmbeddedInstrumentIdentifier Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - TmsEmbeddedInstrumentIdentifier result = apiInstance.GetInstrumentIdentifier(tokenId, profileid); + PostInstrumentIdentifierRequest result = apiInstance.GetInstrumentIdentifier(tokenId, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs index 50a3ab7..ba9d55f 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentBankAccount { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -94,7 +94,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostPaymentInstrument(requestObj, profileid); + PostPaymentInstrumentRequest result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs index f13cce7..af7023f 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentCard { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -63,7 +63,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostPaymentInstrument(requestObj, profileid); + PostPaymentInstrumentRequest result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs index 97d6a85..d133d2f 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentPinlessDebit { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -71,7 +71,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PostPaymentInstrument(requestObj, profileid); + PostPaymentInstrumentRequest result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs index ceea2bc..3a8d285 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrievePaymentInstrument { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; var tokenId = "888454C31FB6150CE05340588D0AA9BE"; @@ -20,7 +20,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.GetPaymentInstrument(tokenId, profileid); + PostPaymentInstrumentRequest result = apiInstance.GetPaymentInstrument(tokenId, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs index 4077d30..9b6ef7c 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdatePaymentInstrument { - public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() + public static PatchPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; var paymentInstrumentTokenId = "888454C31FB6150CE05340588D0AA9BE"; @@ -62,7 +62,7 @@ public static Tmsv2customersEmbeddedDefaultPaymentInstrument Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new PaymentInstrumentApi(clientConfig); - Tmsv2customersEmbeddedDefaultPaymentInstrument result = apiInstance.PatchPaymentInstrument(paymentInstrumentTokenId, requestObj, profileid); + PatchPaymentInstrumentRequest result = apiInstance.PatchPaymentInstrument(paymentInstrumentTokenId, requestObj, profileid); Console.WriteLine(result); return result; } diff --git a/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs index 66f0f9d..87eb994 100644 --- a/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs +++ b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsBySetStartAndEndTime.cs @@ -33,7 +33,7 @@ public static void Run(string webhookId) var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ManageWebhooksApi(clientConfig); + var apiInstance = new ReplayWebhooksApi(clientConfig); apiInstance.ReplayPreviousWebhooks(webhookId, requestObj); } catch (Exception e) diff --git a/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs index 383dba7..b690384 100644 --- a/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs +++ b/Source/Samples/Webhooks/ManageWebhooks/ReplayFailedTransactionsInLast24Hours.cs @@ -31,7 +31,7 @@ public static void Run(string webhookId) var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ManageWebhooksApi(clientConfig); + var apiInstance = new ReplayWebhooksApi(clientConfig); apiInstance.ReplayPreviousWebhooks(webhookId, requestObj); } catch (Exception e) diff --git a/Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs b/Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs index f31e8b2..289caed 100644 --- a/Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs +++ b/Source/Samples/Webhooks/ManageWebhooks/ReplaySpecificListOfTransactions.cs @@ -27,7 +27,7 @@ public static void Run(string webhookId) var configDictionary = new Configuration().GetConfiguration(); var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ManageWebhooksApi(clientConfig); + var apiInstance = new ReplayWebhooksApi(clientConfig); apiInstance.ReplayPreviousWebhooks(webhookId, requestObj); } catch (Exception e) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index aa08bb0..64e2cb9 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + From 32260c7c02a1dba5b654a94e47000288f9081077 Mon Sep 17 00:00:00 2001 From: monkumar Date: Thu, 2 May 2024 12:21:04 +0530 Subject: [PATCH 126/161] updated client version --- cybersource-rest-samples-csharp.csproj | 2 +- packages.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 108bc11..6dcb4c2 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,7 +41,7 @@ packages\CyberSource.Authentication.0.0.0.19\lib\AuthenticationSdk.dll - packages\CyberSource.Rest.Client.0.0.1.39\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.41\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll diff --git a/packages.config b/packages.config index 80aaa47..4c283fd 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From cc75e2ee0d1cbd9184e34a1df00d36715b9e8fcb Mon Sep 17 00:00:00 2001 From: gaubansa Date: Fri, 3 May 2024 12:08:34 +0530 Subject: [PATCH 127/161] version update for jose-jwt dependency --- cybersource-rest-samples-csharp.csproj | 7 +++---- packages.config | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 6dcb4c2..5d19fd8 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -43,15 +43,14 @@ packages\CyberSource.Rest.Client.0.0.1.41\lib\cybersource-rest-client-dotnet.dll - - packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll + + packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll - packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - True + packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll packages\NLog.5.0.0\lib\net46\NLog.dll diff --git a/packages.config b/packages.config index 4c283fd..3d360f8 100644 --- a/packages.config +++ b/packages.config @@ -2,9 +2,9 @@ - + - + From 46218db026fa35e82fc286d664a05dd376f7c318 Mon Sep 17 00:00:00 2001 From: aasgoel Date: Thu, 20 Jun 2024 12:14:36 +0530 Subject: [PATCH 128/161] updating gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7eaafcd..7f0d9d0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ cybersource-rest-samples-netcore.csproj.user .vs .idea/ *.log +.DS_Store From 35f72c535ad20ecfc99a189f257127967d68a07f Mon Sep 17 00:00:00 2001 From: aasgoel Date: Mon, 24 Jun 2024 15:44:17 +0530 Subject: [PATCH 129/161] Adding the Validation Folder --- .../csharp_expected_results.json | 209 +++++++ .../java_expected_results.json | 210 +++++++ .../json_expected_results.json | 528 ++++++++++++++++++ .../node_expected_results.json | 199 +++++++ .../ExpectedResults/php_expected_results.json | 185 ++++++ .../python_expected_results.json | 211 +++++++ .../ruby_expected_results.json | 211 +++++++ Validation/json_to_prettified_html.py | 171 ++++++ Validation/response_code_validator.py | 96 ++++ Validation/sample_code_log_processor.py | 67 +++ 10 files changed, 2087 insertions(+) create mode 100644 Validation/ExpectedResults/csharp_expected_results.json create mode 100644 Validation/ExpectedResults/java_expected_results.json create mode 100644 Validation/ExpectedResults/json_expected_results.json create mode 100644 Validation/ExpectedResults/node_expected_results.json create mode 100644 Validation/ExpectedResults/php_expected_results.json create mode 100644 Validation/ExpectedResults/python_expected_results.json create mode 100644 Validation/ExpectedResults/ruby_expected_results.json create mode 100644 Validation/json_to_prettified_html.py create mode 100644 Validation/response_code_validator.py create mode 100644 Validation/sample_code_log_processor.py diff --git a/Validation/ExpectedResults/csharp_expected_results.json b/Validation/ExpectedResults/csharp_expected_results.json new file mode 100644 index 0000000..ff3a6bb --- /dev/null +++ b/Validation/ExpectedResults/csharp_expected_results.json @@ -0,0 +1,209 @@ +{ + "StandAloneHttpSignature": "200", + "StandAloneJWT": "200", + "DeleteMethod": "200", + "GetMethod": "404", + "GetObjectMethod": "404", + "PostMethod": "201", + "PostObjectMethod": "201", + "PutMethod": "201", + "DeleteGenerateHeaders": "200", + "GetGenerateHeaders": "200", + "PostGenerateHeaders": "200", + "PutGenerateHeaders": "200", + "GenerateKeyLegacyTokenFormat": "200", + "FlexTokenizeCard": "200", + "GenerateKey": "200", + "CreateAndSendInvoiceImmediately": "201", + "CreateDraftInvoice": "201", + "CreateInvoiceAndAssignItSpecificInvoiceNumber": "400", + "CreateInvoiceWithoutSendingIt": "400", + "GetInvoiceDetails": "200", + "GetInvoiceSettings": "200", + "UpdateInvoiceSettings": "200", + "AuthenticationWithNewAccount": "201", + "AuthenticationWithNORedirect": "201", + "EnrollWithCustomerIdAsPaymentInformation": "201", + "EnrollWithPendingAuthentication": "201", + "EnrollWithTransientToken": "400", + "EnrollWithTravelInformation": "201", + "PendingAuthenticationWithUnknownPath": "201", + "SetupCompletionWithCardNumber": "201", + "SetupCompletionWithFlexTransientToken": "400", + "SetupCompletionWithFluidDataValueAndPaymentSolution": "400", + "SetupCompletionWithSecureStorageToken": "400", + "SetupCompletionWithTMSToken": "201", + "SetupCompletionWithTokenizedCard": "201", + "ValidateAuthenticationResults": "201", + "AuthorizationUsingSwipedTrackData": "201", + "CaptureOfAuthorizationThatUsedSwipedTrackData": "400", + "SimpleAuthorizationInternet": "201", + "CapturePayment": "201", + "ServiceFeesWithCreditCardTransaction": "201", + "CapturePaymentServiceFee": "201", + "RestaurantAuthorization": "201", + "RestaurantCaptureWithGratuity": "400", + "Credit": "201", + "CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer": "502", + "CreditUsingBluefinPCIP2PEWithVisaPlatformConnect": "502", + "CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId": "201", + "CreditWithCustomerTokenId": "201", + "CreditWithInstrumentIdentifierTokenId": "201", + "ElectronicCheckStandAloneCredits": "201", + "ServiceFeesCredit": "201", + "AmericanExpressDirectEMVWithContactRead": "201", + "AuthorizationCaptureForTimeoutVoidFlow": "201", + "AuthorizationForIncrementalAuthorizationFlow": "201", + "AuthorizationForTimeoutReversalFlow": "201", + "AuthorizationSkipDecisionManagerForSingleTransaction": "201", + "AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer": "502", + "AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect": "502", + "AuthorizationWithCaptureSale": "201", + "AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId": "201", + "AuthorizationWithCustomerTokenCreation": "201", + "AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation": "201", + "AuthorizationWithCustomerTokenId": "201", + "AuthorizationWithDecisionManager": "201", + "AuthorizationWithDecisionManagerBuyerInformation": "201", + "AuthorizationWithDecisionManagerCustomSetup": "201", + "AuthorizationWithDecisionManagerDeviceInformation": "201", + "AuthorizationWithDecisionManagerMerchantDefinedInformation": "201", + "AuthorizationWithDecisionManagerShippingInformation": "201", + "AuthorizationWithDecisionManagerTravelInformation": "201", + "AuthorizationWithDMAcceptPAEnroll": "201", + "AuthorizationWithDMRejectPAEnroll": "201", + "AuthorizationWithDMReviewPAEnroll": "201", + "AuthorizationWithInstrumentIdentifierTokenCreation": "201", + "AuthorizationWithInstrumentIdentifierTokenId": "201", + "AuthorizationWithLegacyToken": "201", + "AuthorizationWithPAEnrollAuthenticationNeeded": "201", + "AuthorizationWithPayerAuthValidation": "201", + "AuthorizationWithTMSTokenBypassingNetworkToken": "201", + "DigitalPaymentGooglePay": "201", + "DigitalPaymentsApplePay": "201", + "ElectronicCheckDebits": "201", + "ElectronicCheckDebitsWithLegacyToken": "201", + "IncrementalAuthorization": "400", + "LevelIIData": "201", + "LevelIIIData": "201", + "PartialAuthorization": "201", + "PaymentNetworkTokenization": "201", + "PaymentWithFlexToken": "400", + "PaymentWithFlexTokenCreatePermanentTMSToken": "400", + "SaleUsingEMVTechnologyWithContactless": "201", + "SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer": "201", + "SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect": "201", + "SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer": "201", + "SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer": "201", + "SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect": "201", + "SaleUsingKeyedDataForCardPresentEnabledAcquirer": "201", + "SaleUsingKeyedDataWithBalanceInquiry": "201", + "SaleUsingKeyedDataWithVisaPlatformConnect": "201", + "SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer": "201", + "SaleUsingSwipedTrackDataWithVisaPlatformConnect": "201", + "Swiped": "201", + "ZeroDollarAuthorization": "201", + "ElectronicCheckFollowonRefund": "201", + "RefundCapture": "201", + "RefundPayment": "201", + "ProcessAuthorizationReversal": "201", + "ServiceFeesAuthorizationReversal": "201", + "TimeoutReversal": "201", + "TimeoutVoid": "201", + "VoidCapture": "201", + "VoidCredit": "201", + "VoidPayment": "201", + "VoidRefund": "201", + "PayoutCardNotToken": "400", + "PayoutToken": "400", + "GetChargebackDetails": "404", + "GetChargebackSummaries": "404", + "GetConversionDetailTransactions": "400", + "InterchangeClearingLevelDataForAccountOrMerchant": "404", + "GetNetfundingInformationForAccountOrMerchant": "400", + "GetNotificationOfChanges": "400", + "GetPaymentBatchSummaryData": "400", + "GetPurchaseAndRefundDetails": "400", + "GetReportDefinition": "200", + "GetReportingResourceInformation": "200", + "DownloadReport": "404", + "CreateAdhocReport": "400", + "GetReportBasedOnReportId": "404", + "RetrieveAvailableReports": "200", + "CreateClassicStandardReportSubscription": "400", + "CreateReportSubscription": "400", + "DeleteSubscriptionOfReportNameByOrganization": "404", + "GetAllSubscriptions": "200", + "GetSubscriptionForReportName": "404", + "GetRetrievalDetails": "404", + "GetRetrievalSummaries": "404", + "AddDataToList": "201", + "AddDuplicateInformation": "201", + "BasicDMTransaction": "201", + "DMWithBuyerInformation": "201", + "DMWithDecisionProfileRejectResponse": "201", + "DMWithDeviceInformation": "201", + "DMWithMerchantDefinedInformation": "201", + "DMWithScoreExceedsThresholdResponse": "201", + "DMWithShippingInformation": "201", + "DMWithTravelInformation": "201", + "MarkAsSuspect": "201", + "RemoveFromHistory": "201", + "AddressMatchNotFound": "201", + "ApartmentNumberMissingOrNotFound": "201", + "CanadianBillingDetails": "201", + "ComplianceStatusCompleted": "201", + "CustomerMatchDeniedPartiesList": "201", + "ExportComplianceInformationProvided": "201", + "MultipleLineItems": "201", + "MultipleSanctionLists": "201", + "NoCompanyName": "201", + "ShippingDetailsNotUSOrCanada": "201", + "VerboseRequestWithAllFields": "201", + "DownloadFileWithFileIdentifier": "404", + "GetListOfFiles": "400", + "CreateCustomer": "201", + "DeleteCustomer": "204", + "RetrieveCustomer": "200", + "UpdateCustomer": "200", + "UpdateCustomersDefaultPaymentInstrument": "200", + "UpdateCustomersDefaultShippingAddress": "200", + "CreateCustomerDefaultPaymentInstrumentCard": "201", + "CreateCustomerNonDefaultPaymentInstrumentCard": "201", + "CreateCustomerPaymentInstrumentBankAccount": "201", + "CreateCustomerPaymentInstrumentPinlessDebit": "201", + "DeleteCustomerPaymentInstrument": "204", + "ListPaymentInstrumentsForCustomer": "200", + "RetrieveCustomerPaymentInstrument": "200", + "CreateCustomerDefaultShippingAddress": "201", + "CreateCustomerNonDefaultShippingAddress": "201", + "DeleteCustomerShippingAddress": "204", + "ListShippingAddressesForCustomer": "200", + "RetrieveCustomerShippingAddress": "200", + "CreateInstrumentIdentifierBankAccount": "200", + "CreateInstrumentIdentifierCard": "200", + "CreateInstrumentIdentifierCardEnrollForNetworkToken": "200", + "DeleteInstrumentIdentifier": "409", + "EnrollInstrumentIdentifierForNetworkTokenization": "202", + "ListPaymentInstrumentsForInstrumentIdentifier": "200", + "RetrieveInstrumentIdentifier": "200", + "UpdateInstrumentIdentifierPreviousTransactionId": "200", + "CreatePaymentInstrumentBankAccount": "201", + "CreatePaymentInstrumentCard": "201", + "CreatePaymentInstrumentPinlessDebit": "201", + "DeletePaymentInstrument": "204", + "RetrievePaymentInstrument": "200", + "UpdatePaymentInstrument": "200", + "GetIndividualBatchFile": "404", + "GetListOfBatchFiles": "404", + "GetTransactionDetailsForGivenBatchId": "404", + "RetrieveTransaction": "200", + "CreateSearchRequest": "201", + "GetSearchResults": "200", + "GetUserInformationDeprecated": "405", + "BasicTaxCalculationRequest": "201", + "CommittedTaxCallRequest": "201", + "CommittedTaxRefundCallRequest": "201", + "TaxRefundRequest": "201", + "VoidCommittedTaxCall": "201" +} \ No newline at end of file diff --git a/Validation/ExpectedResults/java_expected_results.json b/Validation/ExpectedResults/java_expected_results.json new file mode 100644 index 0000000..ea15002 --- /dev/null +++ b/Validation/ExpectedResults/java_expected_results.json @@ -0,0 +1,210 @@ +{ + "GetNetfundingInformationForAccountOrMerchant": "200", + "GetIndividualBatchFile": "404", + "GetListOfBatchFiles": "404", + "GetTransactionDetailsForGivenBatchId": "404", + "GenerateKey": "200", + "GenerateKeyLegacyTokenFormat": "200", + "FlexTokenizeCard": "200", + "GetPurchaseAndRefundDetails": "400", + "GetReportBasedOnReportId": "404", + "CreateAdhocReport": "400", + "RetrieveAvailableReports": "200", + "GetPaymentBatchSummaryData": "400", + "DeleteGenerateHeaders": "200", + "DeleteMethod": "200", + "PostObjectMethod": "201", + "PostGenerateHeaders": "200", + "StandAloneMetaKey": "400", + "GetObjectMethod": "404", + "GetGenerateHeaders": "200", + "reportDownload": "200", + "GetMethod": "404", + "PutMethod": "404", + "PutGenerateHeaders": "200", + "PostMethod": "201", + "StandaloneJwt": "200", + "SimpleAuthorizationInternet": "201", + "RetrieveTransaction": "200", + "DMWithScoreExceedsThresholdResponse": "201", + "DMWithMerchantDefinedInformation": "201", + "AddDuplicateInformation": "201", + "DMWithTravelInformation": "201", + "DMWithDeviceInformation": "201", + "DMWithDecisionProfileRejectResponse": "201", + "BasicDMTransaction": "201", + "MarkAsSuspect": "201", + "DMWithBuyerInformation": "201", + "RemoveFromHistory": "201", + "AddDataToList": "201", + "DMWithShippingInformation": "201", + "GetRetrievalSummaries": "404", + "CreateDraftInvoice": "201", + "GetInvoiceDetails": "200", + "CreateInvoiceWithoutSendingIt": "400", + "CreateInvoiceAndAssignItSpecificInvoiceNumber": "400", + "CreateAndSendInvoiceImmediately": "201", + "UpdateInvoiceSettings": "200", + "GetInvoiceSettings": "200", + "PayoutCardNotToken": "400", + "PayoutToken": "400", + "EnrollWithCustomerIdAsPaymentInformation": "201", + "SetupCompletionWithSecureStorageToken": "400", + "EnrollWithTransientToken": "400", + "SetupCompletionWithTokenizedCard": "201", + "EnrollWithTravelInformation": "201", + "ValidateAuthenticationResults": "201", + "AuthenticationWithNORedirect": "201", + "SetupCompletionWithFluidDataValueAndPaymentSolution": "400", + "AuthenticationWithNewAccount": "201", + "SetupCompletionWithFlexTransientToken": "400", + "PendingAuthenticationWithUnknownPath": "201", + "SetupCompletionWithCardNumber": "201", + "EnrollWithPendingAuthentication": "201", + "SetupCompletionWithTMSToken": "201", + "GetChargebackSummaries": "404", + "AmericanExpressDirectEMVWithContactRead": "201", + "AuthorizationWithCaptureSale": "201", + "AuthorizationWithDecisionManagerDeviceInformation": "201", + "AuthorizationWithInstrumentIdentifierTokenId": "201", + "ElectronicCheckDebitsWithLegacyToken": "201", + "RestaurantAuthorization": "201", + "SaleUsingKeyedDataWithBalanceInquiry": "201", + "AuthorizationForIncrementalAuthorizationFlow": "201", + "AuthorizationWithCustomerTokenCreation": "201", + "AuthorizationWithDecisionManagerShippingInformation": "201", + "AuthorizationWithPAEnrollAuthenticationNeeded": "201", + "LevelIIData": "201", + "SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer": "201", + "SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer": "201", + "AuthorizationForTimeoutReversalFlow": "201", + "AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation": "201", + "AuthorizationWithDecisionManagerTravelInformation": "201", + "AuthorizationWithPayerAuthValidation": "201", + "LevelIIIData": "201", + "SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect": "201", + "SaleUsingSwipedTrackDataWithVisaPlatformConnect": "201", + "AuthorizationUsingSwipedTrackData": "201", + "AuthorizationWithDecisionManagerCustomSetup": "201", + "AuthorizationWithInstrumentIdentifierTokenCreation": "201", + "ElectronicCheckDebits": "201", + "PaymentWithFlexTokenCreatePermanentTMSToken": "400", + "SaleUsingKeyedDataForCardPresentEnabledAcquirer": "201", + "ZeroDollarAuthorization": "201", + "AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect": "502", + "AuthorizationWithDecisionManagerBuyerInformation": "201", + "AuthorizationWithDMReviewPAEnroll": "201", + "DigitalPaymentsApplePay": "201", + "PaymentWithFlexToken": "400", + "SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect": "201", + "Swiped": "201", + "AuthorizationSkipDecisionManagerForSingleTransaction": "201", + "AuthorizationWithCustomerTokenId": "201", + "AuthorizationWithDMAcceptPAEnroll": "201", + "AuthorizationWithTMSTokenBypassingNetworkToken": "201", + "PartialAuthorization": "201", + "SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer": "201", + "ServiceFeesWithCreditCardTransaction": "201", + "AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer": "502", + "AuthorizationWithDecisionManager": "201", + "AuthorizationWithDMRejectPAEnroll": "201", + "DigitalPaymentGooglePay": "201", + "PaymentNetworkTokenization": "201", + "SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer": "201", + "AuthorizationCaptureForTimeoutVoidFlow": "201", + "AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId": "201", + "AuthorizationWithDecisionManagerMerchantDefinedInformation": "201", + "AuthorizationWithLegacyToken": "201", + "IncrementalAuthorization": "201", + "SaleUsingEMVTechnologyWithContactless": "201", + "SaleUsingKeyedDataWithVisaPlatformConnect": "201", + "UpdateCustomersDefaultShippingAddress": "200", + "CreateCustomer": "201", + "UpdateCustomersDefaultPaymentInstrument": "200", + "UpdateCustomer": "200", + "DeleteCustomer": "204", + "RetrieveCustomer": "200", + "GetChargebackDetails": "404", + "ProcessAuthorizationReversal": "201", + "ServiceFeesAuthorizationReversal": "201", + "TimeoutReversal": "201", + "InterchangeClearingLevelDataForAccountOrMerchant": "404", + "GetRetrievalDetails": "404", + "GetNotificationOfChanges": "400", + "CreateCustomerNonDefaultShippingAddress": "201", + "CreateCustomerDefaultShippingAddress": "201", + "ListShippingAddressesForCustomer": "200", + "RetrieveCustomerShippingAddress": "200", + "DeleteCustomerShippingAddress": "204", + "GetConversionDetailTransactions": "400", + "GetReportingResourceInformation": "200", + "GetReportDefinition": "200", + "GetUserInformationDeprecated": "405", + "Credit": "201", + "CreditUsingBluefinPCIP2PEWithVisaPlatformConnect": "502", + "CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId": "201", + "ServiceFeesCredit": "201", + "ElectronicCheckStandAloneCredits": "201", + "CreditWithCustomerTokenId": "201", + "CreditWithInstrumentIdentifierTokenId": "201", + "CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer": "502", + "ComplianceStatusCompleted": "201", + "CanadianBillingDetails": "201", + "VerboseRequestWithAllFields": "201", + "ExportComplianceInformationProvided": "201", + "ApartmentNumberMissingOrNotFound": "201", + "ShippingDetailsNotUSOrCanada": "201", + "AddressMatchNotFound": "201", + "NoCompanyName": "201", + "MultipleLineItems": "201", + "MultipleSanctionLists": "201", + "CustomerMatchDeniedPartiesList": "201", + "CreateCustomerDefaultPaymentInstrumentCard": "201", + "CreateCustomerPaymentInstrumentBankAccount": "201", + "RetrieveCustomerPaymentInstrument": "200", + "ListPaymentInstrumentsForCustomer": "200", + "CreateCustomerPaymentInstrumentPinlessDebit": "201", + "CreateCustomerNonDefaultPaymentInstrumentCard": "201", + "DeleteCustomerPaymentInstrument": "204", + "RetrievePaymentInstrument": "200", + "CreatePaymentInstrumentCard": "201", + "DeletePaymentInstrument": "204", + "CreatePaymentInstrumentPinlessDebit": "201", + "CreatePaymentInstrumentBankAccount": "201", + "UpdatePaymentInstrument": "200", + "CreateClassicStandardReportSubscription": "400", + "GetSubscriptionForReportName": "404", + "GetAllSubscriptions": "200", + "CreateReportSubscription": "400", + "DeleteSubscriptionOfReportNameByOrganization": "404", + "CreateSearchRequest": "201", + "GetSearchResults": "200", + "DownloadFileWithFileIdentifier": "404", + "GetListOfFiles": "400", + "CommittedTaxCallRequest": "201", + "VoidCommittedTaxCall": "201", + "CommittedTaxRefundCallRequest": "201", + "TaxRefundRequest": "201", + "BasicTaxCalculationRequest": "201", + "ElectronicCheckFollowonRefund": "201", + "CapturePayment": "201", + "RefundCapture": "201", + "RefundPayment": "201", + "DownloadReport": "200", + "RestaurantCaptureWithGratuity": "400", + "CapturePaymentServiceFee": "201", + "CaptureOfAuthorizationThatUsedSwipedTrackData": "400", + "VoidCredit": "201", + "VoidPayment": "201", + "VoidCapture": "201", + "TimeoutVoid": "201", + "VoidRefund": "201", + "EnrollInstrumentIdentifierForNetworkTokenization": "202", + "CreateInstrumentIdentifierCard": "200", + "DeleteInstrumentIdentifier": "409", + "RetrieveInstrumentIdentifier": "200", + "CreateInstrumentIdentifierCardEnrollForNetworkToken": "200", + "UpdateInstrumentIdentifierPreviousTransactionId": "200", + "CreateInstrumentIdentifierBankAccount": "200", + "ListPaymentInstrumentsForInstrumentIdentifier": "200" +} \ No newline at end of file diff --git a/Validation/ExpectedResults/json_expected_results.json b/Validation/ExpectedResults/json_expected_results.json new file mode 100644 index 0000000..90b3f9d --- /dev/null +++ b/Validation/ExpectedResults/json_expected_results.json @@ -0,0 +1,528 @@ +{ + "/pts/v2/payments": { + "post": { + "Simple Authorization(Internet)": 201, + "Authorization with Capture(Sale)": 201, + "Payment with Flex Token": 400, + "Payment with Flex Token(Create Permanent TMS token)": 400, + "Authorization with Customer Token Creation": 201, + "Authorization with Customer Token Id": 400, + "Authorization with Customer Token, Default Payment Instrument and Shipping Address Creation": 400, + "Authorization with TMS Token bypassing Network Token": 201, + "Authorization with Customer, Payment Instrument and Shipping Address Token Id": 201, + "Authorization with Instrument Identifier Token Creation": 201, + "Authorization with Decision Manager": 201, + "Authorization - Skip DecisionManager for single transaction": 201, + "Authorization with Decision Manager (Device Information)": 201, + "Authorization with Decision Manager (Merchant Defined Information)": 201, + "Authorization with Decision Manager (Travel Information)": 201, + "Authorization with Decision Manager (Buyer Information)": 201, + "Authorization with Decision Manager (Shipping Information)": 201, + "Authorization with Decision Manager (custom setup)": 201, + "Authorization with PA Enroll (Authentication Needed)": 201, + "Authorization with Payer Auth Validation": 201, + "Authorization with DM(Accept) + PA Enroll": 201, + "Authorization with DM(Review) + PA Enroll": 201, + "Authorization with DM(Reject) + PA Enroll": 201, + "Payment Network Tokenization": 201, + "Digital Payment - GooglePay": 201, + "Digital Payments - ApplePay": 201, + "Zero Dollar Authorization": 201, + "Level II Data": 201, + "Level III Data": 201, + "Partial Authorization": 201, + "Electronic Check Debits": 201, + "Electronic Check Debits with Legacy Token": 400, + "Service Fees with Credit Card transaction": 201, + "Authorization Using Swiped Track Data": 201, + "Sale Using Swiped Track Data with Visa Platform Connect": 201, + "Sale Using Keyed Data with Visa Platform Connect": 201, + "Sale Using Keyed Data with Balance Inquiry": 201, + "Sale Using EMV Technology with Contact Read with Visa Platform Connect": 201, + "Sale Using EMV Technology with Contactless Read with Visa Platform Connect": 201, + "Authorization Using Bluefin PCI P2PE with Visa Platform Connect": 502, + "Restaurant Authorization": 201, + "Sale Using EMV Technology with a Contactless": 201, + "Sale Using EMV Technology with Contact Read (One) for Card Present Enabled Acquirer": 201, + "Swiped": 201, + "Sale Using Swiped Track Data for Card Present Enabled Acquirer": 201, + "Sale Using Keyed Data for Card Present Enabled Acquirer": 201, + "American Express Direct - EMV with Contact Read": 201, + "Sale Using EMV Technology with Contact Read (Two) for Card Present Enabled Acquirer": 201, + "Sale Using EMV Technology with Contactless Read for Card Present Enabled Acquirer": 201, + "Authorization Using Bluefin PCI P2PE for Card Present Enabled Acquirer": 502, + "Authorization with Instrument Identifier Token Id": 201, + "Authorization with Legacy Token": 400 + } + }, + "/pts/v2/payments/{id}": { + "patch": { + "Incremental Authorization": 400 + } + }, + "/pts/v2/payments/{id}/reversals": { + "post": { + "Process an Authorization Reversal": 201, + "Service Fees Authorization Reversal": 400 + } + }, + "/pts/v2/reversals/": { + "post": { + "Timeout Reversal": 400 + } + }, + "/pts/v2/payments/{id}/captures": { + "post": { + "Capture a Payment": 201, + "Capture a Payment - Service Fee": 400, + "Capture of Authorization that used Swiped track data": 401, + "Restaurant Capture with Gratuity": 401 + } + }, + "/pts/v2/payments/{id}/refunds": { + "post": { + "Refund a Payment": 400, + "Electronic check follow-on Refund": 400 + } + }, + "/pts/v2/captures/{id}/refunds": { + "post": { + "Refund a Capture": 201 + } + }, + "/pts/v2/credits": { + "post": { + "Credit": 201, + "Electronic Check Stand-Alone Credits": 201, + "Service Fees Credit": 201, + "Credit with Customer Token Id": 400, + "Credit with Customer, Payment Instrument and Shipping Address Token Id": 400, + "Credit with Instrument Identifier Token Id": 400, + "Credit Using Bluefin PCI P2PE with Visa Platform Connect": 502, + "Credit Using Bluefin PCI P2PE for Card Present Enabled Acquirer": 502 + } + }, + "/pts/v2/payments/{id}/voids": { + "post": { + "Void a Payment": 201 + } + }, + "/pts/v2/captures/{id}/voids": { + "post": { + "Void a Capture": 201 + } + }, + "/pts/v2/refunds/{id}/voids": { + "post": { + "Void a Refund": 201 + } + }, + "/pts/v2/credits/{id}/voids": { + "post": { + "Void a Credit": 201 + } + }, + "/pts/v2/voids/": { + "post": { + "Timeout void": 400 + } + }, + "/pts/v1/transaction-batches": { + "get": { + "Get a List of Batch Files": 404 + } + }, + "/pts/v1/transaction-batches/{id}": { + "get": { + "Get Individual Batch File": 401 + } + }, + "/pts/v1/transaction-batch-details/{id}": { + "get": { + "Get Transaction Details for a given Batch Id": 401 + } + }, + "/tms/v2/customers": { + "post": { + "Create Customer": 201 + } + }, + "/tms/v2/customers/{customerTokenId}": { + "get": { + "Retrieve a Customer": 200 + }, + "patch": { + "Update Customer": 200, + "Update Customers default Payment Instrument": 401, + "Update Customers default Shipping Address": 401 + } + }, + "/tms/v2/customers/{customerTokenId}/shipping-addresses": { + "post": { + "Create Customer Default Shipping Address": 201, + "Create Customer Non-Default Shipping Address": 201 + }, + "get": { + "List Shipping Addresses for a Customer": 200 + } + }, + "/tms/v2/customers/{customerTokenId}/shipping-addresses/{shippingAddressTokenId}": { + "get": { + "Retrieve a Customer Shipping Address": 200 + }, + "patch": { + "Update Customer Default Shipping Address": 200 + } + }, + "/tms/v2/customers/{customerTokenId}/payment-instruments": { + "post": { + "Create Customer Default Payment Instrument (Card)": 401, + "Create Customer Non-Default Payment Instrument (Card)": 401, + "Create Customer Payment Instrument (Bank Account)": 401, + "Create Customer Payment Instrument (Pinless Debit)": 401 + }, + "get": { + "List Payment Instruments for a Customer": 401 + } + }, + "/tms/v2/customers/{customerTokenId}/payment-instruments/{paymentInstrumentTokenId}": { + "get": { + "Retrieve a Customer Payment Instrument": 401 + }, + "patch": {} + }, + "/tms/v1/paymentinstruments": { + "post": { + "Create Payment Instrument (Card)": 400, + "Create Payment Instrument (Bank Account)": 400, + "Create Payment Instrument (Pinless Debit)": 400 + } + }, + "/tms/v1/paymentinstruments/{paymentInstrumentTokenId}": { + "get": { + "Retrieve a Payment Instrument": 401 + }, + "patch": { + "Update Payment Instrument": 401 + } + }, + "/tms/v1/instrumentidentifiers": { + "post": { + "Create Instrument Identifier (Card)": 200, + "Create Instrument Identifier (Bank Account)": 200, + "Create Instrument Identifier (Card & Enroll for Network Token)": 200 + } + }, + "/tms/v1/instrumentidentifiers/{instrumentIdentifierTokenId}": { + "get": { + "Retrieve an Instrument Identifier": 200 + }, + "patch": { + "Update Instrument Identifier previousTransactionId": 401 + } + }, + "/tms/v1/instrumentidentifiers/{instrumentIdentifierTokenId}/paymentinstruments": { + "get": { + "List Payment Instruments for an Instrument Identifier": 200 + } + }, + "/tms/v1/instrumentidentifiers/{instrumentIdentifierTokenId}/enrollment": { + "post": { + "Enroll Instrument Identifier for Network Tokenization": 202 + } + }, + "/flex/v1/keys": { + "post": { + "Generate Key": 200 + } + }, + "/flex/v1/tokens": { + "post": { + "Flex Tokenize Card": 400 + } + }, + "/risk/v1/decisions": { + "post": { + "Basic DM Transaction": 201, + "DM With Device Information": 201, + "DM With Merchant Defined Information": 201, + "DM With Travel Information": 201, + "DM With Buyer Information": 201, + "DM With Shipping Information": 201, + "DM With Score_Exceeds_Threshold Response": 201, + "DM With Decision_Profile_Reject Response": 201 + } + }, + "/risk/v1/authentication-setups": { + "post": { + "Setup Completion with Card Number": 201, + "Setup Completion with Fluid Data Value and Payment Solution": 400, + "Setup Completion with Tokenized Card": 201, + "Setup Completion with TMS Token": 400, + "Setup Completion with Visa Checkout": 400, + "Setup Completion with Flex Transient Token": 400, + "Setup Completion with Secure Storage Token": 400 + } + }, + "/risk/v1/authentications": { + "post": { + "Enroll with Pending Authentication": 201, + "Enroll with Travel Information": 201, + "Authentication with NO Redirect": 201, + "Authentication with New Account": 201, + "Pending Authentication with Unknown path": 201, + "Enroll with customerId as payment information": 400, + "Enroll with transient token": 400 + } + }, + "/risk/v1/authentication-results": { + "post": { + "Validate authentication results": 201 + } + }, + "/risk/v1/lists/{type}/entries": { + "post": { + "Add Data to a List": 401, + "Add Duplicate Information": 401 + } + }, + "/risk/v1/decisions/{id}/marking": { + "post": { + "Mark as Suspect": 201, + "Remove from History": 201 + } + }, + "/risk/v1/address-verifications": { + "post": { + "Verbose Request with all fields": 201, + "Shipping Details not US or Canada": 201, + "Canadian Billing Details": 201, + "Multiple Line Items": 201, + "Apartment Number Missing or Not Found": 201, + "Address Match Not Found": 201 + } + }, + "/risk/v1/export-compliance-inquiries": { + "post": { + "Customer Match Denied Parties List": 201, + "Export Compliance Information Provided": 201, + "Compliance Status Completed": 201, + "Multiple Sanction Lists": 201, + "No Company Name": 201 + } + }, + "/pts/v2/payouts": { + "post": { + "Payout (Card not Token)": 400, + "Payout (Token)": 400 + } + }, + "/tss/v2/transactions/{id}": { + "get": { + "Retrieve a Transaction": 200 + } + }, + "/tss/v2/searches": { + "post": { + "Create a search request": 201 + } + }, + "/tss/v2/searches/{searchId}": { + "get": { + "Get Search Results": 200 + } + }, + "/reporting/v3/report-downloads": { + "get": { + "Download a Report": 404 + } + }, + "/reporting/v3/reports": { + "get": { + "Retrieve Available Reports": 400 + }, + "post": { + "Create Adhoc Report": 400 + } + }, + "/reporting/v3/reports/{reportId}": { + "get": { + "Get Report Based on Report Id": 401 + } + }, + "/reporting/v3/report-definitions/{reportDefinitionName}": { + "get": { + "Get Report Definition": 401 + } + }, + "/reporting/v3/report-definitions": { + "get": { + "Get Reporting Resource Information": 200 + } + }, + "/reporting/v3/report-subscriptions": { + "get": { + "Get All Subscriptions": 200 + }, + "put": { + "Create Report Subscription": 400 + } + }, + "/reporting/v3/report-subscriptions/{reportName}": { + "get": { + "Get Subscription for Report Name": 200 + } + }, + "/reporting/v3/predefined-report-subscriptions": { + "put": { + "Create Classic/Standard Report Subscription": 400 + } + }, + "/reporting/v3/notification-of-changes": { + "get": { + "Get Notification of Changes": 400 + } + }, + "/reporting/v3/purchase-refund-details": { + "get": { + "Get Purchase and Refund Details": 400 + } + }, + "/reporting/v3/payment-batch-summaries": { + "get": { + "Get Payment Batch Summary Data": 400 + } + }, + "/reporting/v3/conversion-details": { + "get": { + "Get Conversion Detail Transactions": 400 + } + }, + "/reporting/v3/net-fundings": { + "get": { + "Get Netfunding Information for an Account or a Merchant": 400 + } + }, + "/reporting/v3/dtds/{reportDefinitionNameVersion}": { + "get": { + "Download DTD for Report": 404 + } + }, + "/reporting/v3/xsds/{reportDefinitionNameVersion}": { + "get": { + "Download XSD for Report": 404 + } + }, + "/reporting/v3/chargeback-summaries": { + "get": { + "Get Chargeback Summaries": 400 + } + }, + "/reporting/v3/chargeback-details": { + "get": { + "Get Chargeback Details": 400 + } + }, + "/reporting/v3/retrieval-summaries": { + "get": { + "Get Retrieval Summaries": 400 + } + }, + "/reporting/v3/retrieval-details": { + "get": { + "Get Retrieval Details": 400 + } + }, + "/reporting/v3/interchange-clearing-level-details": { + "get": { + "Interchange Clearing Level data for an account or a merchant": 400 + } + }, + "/sfs/v1/file-details": { + "get": { + "Get List of Files": 400 + } + }, + "/sfs/v1/files/{fileId}": { + "get": { + "Download a File with File Identifier": 401 + } + }, + "/invoicing/v2/invoices": { + "post": { + "Create a draft invoice": 201, + "Create and send the invoice immediately": 201, + "Create an invoice and assign it a specific invoice number": 400, + "Create an invoice without sending it": 400 + }, + "get": { + "Get a List of Invoices": 200 + } + }, + "/invoicing/v2/invoices/{id}": { + "get": { + "Get Invoice Details": 200 + }, + "put": {} + }, + "/invoicing/v2/invoices/{id}/delivery": { + "post": {} + }, + "/invoicing/v2/invoices/{id}/cancelation": { + "post": {} + }, + "/invoicing/v2/invoiceSettings": { + "put": { + "UpdateInvoiceSettings": 200 + }, + "get": { + "Get Invoice Settings": 200 + } + }, + "/ums/v1/users": { + "get": { + "Get User Information - Deprecated": 405 + } + }, + "/ums/v1/users/search": { + "post": {} + }, + "/vas/v2/tax": { + "post": { + "Basic Tax Calculation Request": 201, + "Tax Refund Request": 201, + "Committed Tax Call Request": 201, + "Committed Tax Refund Call Request": 201 + } + }, + "/vas/v2/tax/{id}": { + "patch": { + "Void a Committed Tax Call": 401 + } + }, + "/kms/v2/keys-sym": { + "post": {} + }, + "/kms/v2/keys-sym/{keyId}": { + "get": { + "Retrieves shared secret key details": 401 + } + }, + "/kms/v2/keys-sym/deletes": { + "post": {} + }, + "/kms/v2/keys-asym": { + "post": {} + }, + "/kms/v2/keys-asym/{keyId}": { + "get": { + "Retrieves PKCS#12 key details": 401 + } + }, + "/kms/v2/keys-asym/deletes": { + "post": {} + }, + "/kms/v2/keys-sym/verifi": { + "post": {} + } +} \ No newline at end of file diff --git a/Validation/ExpectedResults/node_expected_results.json b/Validation/ExpectedResults/node_expected_results.json new file mode 100644 index 0000000..d5502d7 --- /dev/null +++ b/Validation/ExpectedResults/node_expected_results.json @@ -0,0 +1,199 @@ +{ + "StandAloneHttpSignature": "400", + "StandAloneJWT": "400", + "generate-key-legacy-token-format": "200", + "flex-tokenize-card": "200", + "generate-key": "200", + "create-and-send-invoice-immediately": "201", + "create-draft-invoice": "201", + "create-invoice-and-assign-it-specific-invoice-number": "400", + "create-invoice-without-sending-it": "400", + "get-invoice-details": "200", + "get-invoice-settings": "200", + "updateinvoicesettings": "200", + "authentication-with-new-account": "201", + "authentication-with-no-redirect": "201", + "enroll-with-customerid-as-payment-information": "201", + "enroll-with-pending-authentication": "201", + "enroll-with-transient-token": "400", + "enroll-with-travel-information": "201", + "pending-authentication-with-unknown-path": "201", + "setup-completion-with-card-number": "201", + "setup-completion-with-flex-transient-token": "400", + "setup-completion-with-fluid-data-value-and-payment-solution": "400", + "setup-completion-with-secure-storage-token": "400", + "setup-completion-with-tms-token": "201", + "setup-completion-with-tokenized-card": "201", + "validate-authentication-results": "201", + "authorization-using-swiped-track-data": "201", + "capture-of-authorization-that-used-swiped-track-data": "400", + "service-fees-with-credit-card-transaction": "201", + "capture-payment-service-fee": "201", + "simple-authorizationinternet": "201", + "capture-payment": "201", + "restaurant-authorization": "201", + "restaurant-capture-with-gratuity": "400", + "credit-using-bluefin-pci-p2pe-for-card-present-enabled-acquirer": "502", + "credit-using-bluefin-pci-p2pe-with-visa-platform-connect": "502", + "credit-with-customer-payment-instrument-and-shipping-address-token-id": "201", + "credit-with-customer-token-id": "201", + "credit-with-instrument-identifier-token-id": "201", + "credit": "201", + "electronic-check-standalone-credits": "201", + "service-fees-credit": "201", + "american-express-direct-emv-with-contact-read": "201", + "authorization-capture-for-timeout-void-flow": "201", + "authorization-for-incremental-authorization-flow": "201", + "authorization-for-timeout-reversal-flow": "201", + "authorization-skip-decisionmanager-for-single-transaction": "201", + "authorization-using-bluefin-pci-p2pe-for-card-present-enabled-acquirer": "502", + "authorization-using-bluefin-pci-p2pe-with-visa-platform-connect": "502", + "authorization-with-capturesale": "201", + "authorization-with-customer-payment-instrument-and-shipping-address-token-id": "201", + "authorization-with-customer-token-creation": "201", + "authorization-with-customer-token-default-payment-instrument-and-shipping-address-creation": "201", + "authorization-with-customer-token-id": "201", + "authorization-with-decision-manager-buyer-information": "201", + "authorization-with-decision-manager-custom-setup": "201", + "authorization-with-decision-manager-device-information": "201", + "authorization-with-decision-manager-merchant-defined-information": "201", + "authorization-with-decision-manager-shipping-information": "201", + "authorization-with-decision-manager-travel-information": "201", + "authorization-with-decision-manager": "201", + "authorization-with-dmaccept-pa-enroll": "201", + "authorization-with-dmreject-pa-enroll": "201", + "authorization-with-dmreview-pa-enroll": "201", + "authorization-with-instrument-identifier-token-creation": "201", + "authorization-with-instrument-identifier-token-id": "201", + "authorization-with-legacy-token": "201", + "authorization-with-pa-enroll-authentication-needed": "201", + "authorization-with-payer-auth-validation": "201", + "authorization-with-tms-token-bypassing-network-token": "201", + "digital-payment-googlepay": "201", + "digital-payments-applepay": "201", + "electronic-check-debits-with-legacy-token": "201", + "electronic-check-debits": "201", + "incremental-authorization": "400", + "level-ii-data": "201", + "level-iii-data": "201", + "partial-authorization": "201", + "payment-network-tokenization": "201", + "payment-with-flex-token-create-permanent-tms-token": "400", + "payment-with-flex-token": "400", + "sale-using-emv-technology-with-contact-read-one-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contact-read-two-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contact-read-with-visa-platform-connect": "201", + "sale-using-emv-technology-with-contactless-read-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contactless-read-with-visa-platform-connect": "201", + "sale-using-emv-technology-with-contactless": "201", + "sale-using-keyed-data-for-card-present-enabled-acquirer": "201", + "sale-using-keyed-data-with-balance-inquiry": "201", + "sale-using-keyed-data-with-visa-platform-connect": "201", + "sale-using-swiped-track-data-for-card-present-enabled-acquirer": "201", + "sale-using-swiped-track-data-with-visa-platform-connect": "201", + "swiped": "201", + "zero-dollar-authorization": "201", + "electronic-check-follow-on-refund": "201", + "refund-capture": "201", + "refund-payment": "201", + "process-authorization-reversal": "201", + "service-fees-authorization-reversal": "201", + "timeout-reversal": "201", + "timeout-void": "201", + "void-capture": "201", + "void-credit": "201", + "void-payment": "201", + "void-refund": "201", + "payout-card-not-token": "400", + "payout-token": "400", + "get-chargeback-details": "404", + "get-chargeback-summaries": "404", + "get-conversion-detail-transactions": "400", + "interchange-clearing-level-data-for-account-or-merchant": "404", + "get-netfunding-information-for-account-or-merchant": "400", + "get-notification-of-changes": "400", + "get-payment-batch-summary-data": "400", + "get-purchase-and-refund-details": "400", + "get-report-definition": "200", + "get-reporting-resource-information": "200", + "download-report": "200", + "create-adhoc-report": "400", + "get-report-based-on-report-id": "404", + "retrieve-available-reports": "200", + "create-classicstandard-report-subscription": "400", + "create-report-subscription": "400", + "delete-subscription-of-report-name-by-organization": "404", + "get-all-subscriptions": "200", + "get-subscription-for-report-name": "404", + "get-retrieval-details": "404", + "get-retrieval-summaries": "404", + "add-data-to-list": "201", + "add-duplicate-information": "201", + "basic-dm-transaction": "201", + "dm-with-buyer-information": "201", + "dm-with-decisionprofilereject-response": "201", + "dm-with-device-information": "201", + "dm-with-merchant-defined-information": "201", + "dm-with-scoreexceedsthreshold-response": "201", + "dm-with-shipping-information": "201", + "dm-with-travel-information": "201", + "mark-as-suspect": "201", + "remove-from-history": "201", + "address-match-not-found": "201", + "apartment-number-missing-or-not-found": "201", + "canadian-billing-details": "201", + "compliance-status-completed": "201", + "customer-match-denied-parties-list": "201", + "export-compliance-information-provided": "201", + "multiple-line-items": "201", + "multiple-sanction-lists": "201", + "no-company-name": "201", + "shipping-details-not-us-or-canada": "201", + "verbose-request-with-all-fields": "201", + "download-file-with-file-identifier": "200", + "get-list-of-files": "400", + "create-customer": "201", + "delete-customer": "204", + "retrieve-customer": "200", + "update-customer": "200", + "update-customers-default-payment-instrument": "200", + "update-customers-default-shipping-address": "200", + "create-customer-default-payment-instrument-card": "201", + "create-customer-non-default-payment-instrument-card": "201", + "create-customer-payment-instrument-bank-account": "201", + "create-customer-payment-instrument-pinless-debit": "201", + "delete-customer-payment-instrument": "204", + "list-payment-instruments-for-customer": "200", + "retrieve-customer-payment-instrument": "200", + "create-customer-default-shipping-address": "201", + "create-customer-non-default-shipping-address": "201", + "delete-customer-shipping-address": "204", + "list-shipping-addresses-for-customer": "200", + "retrieve-customer-shipping-address": "200", + "create-instrument-identifier-bank-account": "200", + "create-instrument-identifier-card-enroll-for-network-token": "200", + "create-instrument-identifier-card": "200", + "delete-instrument-identifier": "409", + "enroll-instrument-identifier-for-network-tokenization": "202", + "list-payment-instruments-for-instrument-identifier": "200", + "retrieve-instrument-identifier": "200", + "update-instrument-identifier-previoustransactionid": "200", + "create-payment-instrument-bank-account": "201", + "create-payment-instrument-card": "201", + "create-payment-instrument-pinless-debit": "201", + "delete-payment-instrument": "204", + "retrieve-payment-instrument": "200", + "update-payment-instrument": "200", + "get-individual-batch-file": "404", + "get-list-of-batch-files": "404", + "get-transaction-details-for-given-batch-id": "200", + "retrieve-transaction": "200", + "create-search-request": "201", + "get-search-results": "200", + "get-user-information-deprecated": "405", + "basic-tax-calculation-request": "201", + "committed-tax-call-request": "201", + "committed-tax-refund-call-request": "201", + "tax-refund-request": "201", + "void-committed-tax-call": "201" +} \ No newline at end of file diff --git a/Validation/ExpectedResults/php_expected_results.json b/Validation/ExpectedResults/php_expected_results.json new file mode 100644 index 0000000..73b5b39 --- /dev/null +++ b/Validation/ExpectedResults/php_expected_results.json @@ -0,0 +1,185 @@ +{ + "deleteMethod": "200", + "getGenerateHeaders": "200", + "getMethod": "404", + "postGenerateHeaders": "200", + "postMethod": "201", + "postMethodJsonModel": "201", + "putGenerateHeaders": "200", + "putMethod": "201", + "StandAloneHttpSignature": "200", + "StandAloneJWT": "200", + "GenerateKeyLegacyTokenFormat": "200", + "GenerateKey": "200", + "CreateAndSendInvoiceImmediately": "201", + "CreateDraftInvoice": "200", + "CreateInvoiceAndAssignItSpecificInvoiceNumber": "400", + "CreateInvoiceWithoutSendingIt": "400", + "GetInvoiceSettings": "200", + "UpdateInvoiceSettings": "200", + "AuthenticationWithNewAccount": "201", + "AuthenticationWithNORedirect": "201", + "EnrollWithCustomerIdAsPaymentInformation": "201", + "EnrollWithPendingAuthentication": "201", + "EnrollWithTransientToken": "400", + "EnrollWithTravelInformation": "201", + "PendingAuthenticationWithUnknownPath": "201", + "SetupCompletionWithCardNumber": "201", + "SetupCompletionWithFlexTransientToken": "400", + "SetupCompletionWithFluidDataValueAndPaymentSolution": "400", + "SetupCompletionWithSecureStorageToken": "400", + "SetupCompletionWithTMSToken": "201", + "SetupCompletionWithTokenizedCard": "201", + "ValidateAuthenticationResults": "201", + "CaptureOfAuthorizationThatUsedSwipedTrackData": "400", + "SimpleAuthorizationInternet": "200", + "ServiceFeesWithCreditCardTransaction": "201", + "RestaurantCaptureWithGratuity": "400", + "Credit": "201", + "CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer": "502", + "CreditUsingBluefinPCIP2PEWithVisaPlatformConnect": "502", + "CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId": "201", + "CreditWithCustomerTokenId": "201", + "CreditWithInstrumentIdentifierTokenId": "201", + "ElectronicCheckStandAloneCredits": "201", + "ServiceFeesCredit": "201", + "AmericanExpressDirectEMVWithContactRead": "201", + "AuthorizationCaptureForTimeoutVoidFlow": "201", + "AuthorizationForIncrementalAuthorizationFlow": "400", + "AuthorizationForTimeoutReversalFlow": "201", + "AuthorizationSkipDecisionManagerForSingleTransaction": "201", + "AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer": "502", + "AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect": "502", + "AuthorizationUsingSwipedTrackData": "201", + "AuthorizationWithCaptureSale": "201", + "AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId": "201", + "AuthorizationWithCustomerTokenCreation": "201", + "AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation": "201", + "AuthorizationWithCustomerTokenId": "201", + "AuthorizationWithDecisionManager": "201", + "AuthorizationWithDecisionManagerBuyerInformation": "201", + "AuthorizationWithDecisionManagerCustomSetup": "201", + "AuthorizationWithDecisionManagerDeviceInformation": "201", + "AuthorizationWithDecisionManagerMerchantDefinedInformation": "201", + "AuthorizationWithDecisionManagerShippingInformation": "201", + "AuthorizationWithDecisionManagerTravelInformation": "201", + "AuthorizationWithDMAcceptPAEnroll": "201", + "AuthorizationWithDMRejectPAEnroll": "201", + "AuthorizationWithDMReviewPAEnroll": "201", + "AuthorizationWithInstrumentIdentifierTokenCreation": "201", + "AuthorizationWithInstrumentIdentifierTokenId": "201", + "AuthorizationWithLegacyToken": "201", + "AuthorizationWithPAEnrollAuthenticationNeeded": "201", + "AuthorizationWithPayerAuthValidation": "201", + "AuthorizationWithTMSTokenBypassingNetworkToken": "201", + "DigitalPaymentGooglePay": "201", + "DigitalPaymentsApplePay": "201", + "ElectronicCheckDebits": "201", + "ElectronicCheckDebitsWithLegacyToken": "201", + "LevelIIData": "201", + "LevelIIIData": "201", + "PartialAuthorization": "201", + "PaymentNetworkTokenization": "201", + "PaymentWithFlexToken": "400", + "PaymentWithFlexTokenCreatePermanentTMSToken": "400", + "RestaurantAuthorization": "201", + "SaleUsingEMVTechnologyWithContactless": "201", + "SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer": "201", + "SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect": "201", + "SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer": "201", + "SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer": "201", + "SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect": "201", + "SaleUsingKeyedDataForCardPresentEnabledAcquirer": "201", + "SaleUsingKeyedDataWithBalanceInquiry": "201", + "SaleUsingKeyedDataWithVisaPlatformConnect": "201", + "SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer": "201", + "SaleUsingSwipedTrackDataWithVisaPlatformConnect": "201", + "Swiped": "201", + "ZeroDollarAuthorization": "201", + "TimeoutReversal": "201", + "TimeoutVoid": "201", + "PayoutCardNotToken": "400", + "PayoutToken": "400", + "GetChargebackDetails": "404", + "GetChargebackSummaries": "404", + "GetConversionDetailTransactions": "400", + "InterchangeClearingLevelDataForAccountOrMerchant": "404", + "GetNetfundingInformationForAccountOrMerchant": "400", + "GetNotificationOfChanges": "400", + "GetPaymentBatchSummaryData": "400", + "GetPurchaseAndRefundDetails": "404", + "GetReportDefinition": "200", + "GetReportingResourceInformation": "200", + "DownloadReport": "404", + "CreateAdhocReport": "400", + "GetReportBasedOnReportId": "404", + "RetrieveAvailableReports": "200", + "CreateClassicStandardReportSubscription": "400", + "CreateReportSubscription": "400", + "DeleteSubscriptionOfReportNameByOrganization": "404", + "GetAllSubscriptions": "200", + "GetSubscriptionForReportName": "404", + "GetRetrievalDetails": "404", + "GetRetrievalSummaries": "404", + "AddDataToList": "201", + "AddDuplicateInformation": "201", + "BasicDMTransaction": "201", + "DMWithBuyerInformation": "201", + "DMWithDecisionProfileRejectResponse": "201", + "DMWithDeviceInformation": "201", + "DMWithMerchantDefinedInformation": "201", + "DMWithScoreExceedsThresholdResponse": "201", + "DMWithShippingInformation": "201", + "DMWithTravelInformation": "201", + "MarkAsSuspect": "201", + "RemoveFromHistory": "201", + "AddressMatchNotFound": "201", + "ApartmentNumberMissingOrNotFound": "201", + "CanadianBillingDetails": "201", + "ComplianceStatusCompleted": "201", + "CustomerMatchDeniedPartiesList": "201", + "ExportComplianceInformationProvided": "201", + "MultipleLineItems": "201", + "MultipleSanctionLists": "201", + "NoCompanyName": "201", + "ShippingDetailsNotUSOrCanada": "201", + "VerboseRequestWithAllFields": "201", + "DownloadFileWithFileIdentifier": "404", + "GetListOfFiles": "400", + "CreateCustomer": "204", + "RetrieveCustomer": "200", + "UpdateCustomer": "200", + "UpdateCustomersDefaultPaymentInstrument": "200", + "UpdateCustomersDefaultShippingAddress": "200", + "CreateCustomerDefaultPaymentInstrumentCard": "201", + "CreateCustomerNonDefaultPaymentInstrumentCard": "204", + "CreateCustomerPaymentInstrumentBankAccount": "201", + "CreateCustomerPaymentInstrumentPinlessDebit": "201", + "ListPaymentInstrumentsForCustomer": "200", + "RetrieveCustomerPaymentInstrument": "200", + "CreateCustomerDefaultShippingAddress": "201", + "CreateCustomerNonDefaultShippingAddress": "204", + "ListShippingAddressesForCustomer": "200", + "RetrieveCustomerShippingAddress": "200", + "CreateInstrumentIdentifierBankAccount": "200", + "CreateInstrumentIdentifierCard": "409", + "CreateInstrumentIdentifierCardEnrollForNetworkToken": "200", + "EnrollInstrumentIdentifierForNetworkTokenization": "202", + "ListPaymentInstrumentsForInstrumentIdentifier": "200", + "RetrieveInstrumentIdentifier": "200", + "UpdateInstrumentIdentifierPreviousTransactionId": "200", + "CreatePaymentInstrumentBankAccount": "201", + "CreatePaymentInstrumentCard": "204", + "CreatePaymentInstrumentPinlessDebit": "201", + "RetrievePaymentInstrument": "200", + "UpdatePaymentInstrument": "200", + "GetIndividualBatchFile": "404", + "GetListOfBatchFiles": "404", + "GetTransactionDetailsForGivenBatchId": "404", + "CreateSearchRequest": "200", + "GetUserInformationDeprecated": "405", + "BasicTaxCalculationRequest": "201", + "CommittedTaxCallRequest": "201", + "CommittedTaxRefundCallRequest": "201", + "TaxRefundRequest": "201" +} \ No newline at end of file diff --git a/Validation/ExpectedResults/python_expected_results.json b/Validation/ExpectedResults/python_expected_results.json new file mode 100644 index 0000000..a25d156 --- /dev/null +++ b/Validation/ExpectedResults/python_expected_results.json @@ -0,0 +1,211 @@ +{ + "DeleteMethod": "200", + "Delete_Generate_Headers": "200", + "GetMethod": "200", + "GetObjectMethod": "400", + "Get_Generate_Headers": "200", + "PostMethod": "200", + "PostObjectMethod": "200", + "Post_Generate_Headers": "200", + "PutMethod": "200", + "Put_Generate_Headers": "200", + "StandAloneHttpSignature": "200", + "StandAloneJWT": "200", + "StandAloneMetaKey": "400", + "StandAloneOAuth": "400", + "flex-tokenize-card": "200", + "generate-key-legacy-token-format": "200", + "generate-key": "200", + "create-and-send-invoice-immediately": "201", + "create-draft-invoice": "201", + "create-invoice-and-assign-it-specific-invoice-number": "400", + "create-invoice-without-sending-it": "400", + "get-invoice-details": "200", + "get-invoice-settings": "200", + "updateinvoicesettings": "200", + "authentication-with-new-account": "201", + "authentication-with-no-redirect": "201", + "enroll-with-customerid-as-payment-information": "201", + "enroll-with-pending-authentication": "201", + "enroll-with-transient-token": "400", + "enroll-with-travel-information": "201", + "pending-authentication-with-unknown-path": "201", + "setup-completion-with-card-number": "201", + "setup-completion-with-flex-transient-token": "400", + "setup-completion-with-fluid-data-value-and-payment-solution": "400", + "setup-completion-with-secure-storage-token": "400", + "setup-completion-with-tms-token": "201", + "setup-completion-with-tokenized-card": "201", + "validate-authentication-results": "201", + "capture-of-authorization-that-used-swiped-track-data": "400", + "capture-payment-service-fee": "201", + "capture-payment": "201", + "restaurant-capture-with-gratuity": "400", + "credit-using-bluefin-pci-p2pe-for-card-present-enabled-acquirer": "502", + "credit-using-bluefin-pci-p2pe-with-visa-platform-connect": "502", + "credit-with-customer-payment-instrument-and-shipping-address-token-id": "201", + "credit-with-customer-token-id": "201", + "credit-with-instrument-identifier-token-id": "201", + "credit": "201", + "electronic-check-standalone-credits": "201", + "service-fees-credit": "201", + "american-express-direct-emv-with-contact-read": "201", + "authorization-capture-for-timeout-void-flow": "201", + "authorization-for-incremental-authorization-flow": "201", + "authorization-for-timeout-reversal-flow": "201", + "authorization-skip-decisionmanager-for-single-transaction": "201", + "authorization-using-bluefin-pci-p2pe-for-card-present-enabled-acquirer": "502", + "authorization-using-bluefin-pci-p2pe-with-visa-platform-connect": "502", + "authorization-using-swiped-track-data": "201", + "authorization-with-capturesale": "201", + "authorization-with-customer-payment-instrument-and-shipping-address-token-id": "201", + "authorization-with-customer-token-creation": "201", + "authorization-with-customer-token-default-payment-instrument-and-shipping-address-creation": "201", + "authorization-with-customer-token-id": "201", + "authorization-with-decision-manager-buyer-information": "201", + "authorization-with-decision-manager-custom-setup": "201", + "authorization-with-decision-manager-device-information": "201", + "authorization-with-decision-manager-merchant-defined-information": "201", + "authorization-with-decision-manager-shipping-information": "201", + "authorization-with-decision-manager-travel-information": "201", + "authorization-with-decision-manager": "201", + "authorization-with-dmaccept-pa-enroll": "201", + "authorization-with-dmreject-pa-enroll": "201", + "authorization-with-dmreview-pa-enroll": "201", + "authorization-with-instrument-identifier-token-creation": "201", + "authorization-with-instrument-identifier-token-id": "201", + "authorization-with-legacy-token": "201", + "authorization-with-pa-enroll-authentication-needed": "201", + "authorization-with-payer-auth-validation": "201", + "authorization-with-tms-token-bypassing-network-token": "201", + "digital-payment-googlepay": "201", + "digital-payments-applepay": "201", + "electronic-check-debits-with-legacy-token": "201", + "electronic-check-debits": "201", + "incremental-authorization": "400", + "level-ii-data": "201", + "level-iii-data": "201", + "partial-authorization": "201", + "payment-network-tokenization": "201", + "payment-with-flex-token": "400", + "payment-with-flex-tokencreate-permanent-tms-token": "400", + "restaurant-authorization": "201", + "sale-using-emv-technology-with-contact-read-one-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contact-read-two-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contact-read-with-visa-platform-connect": "201", + "sale-using-emv-technology-with-contactless-read-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contactless-read-with-visa-platform-connect": "201", + "sale-using-emv-technology-with-contactless": "201", + "sale-using-keyed-data-for-card-present-enabled-acquirer": "201", + "sale-using-keyed-data-with-balance-inquiry": "201", + "sale-using-keyed-data-with-visa-platform-connect": "201", + "sale-using-swiped-track-data-for-card-present-enabled-acquirer": "201", + "sale-using-swiped-track-data-with-visa-platform-connect": "201", + "service-fees-with-credit-card-transaction": "201", + "simple-authorizationinternet": "201", + "swiped": "201", + "zero-dollar-authorization": "201", + "electronic-check-followon-refund": "201", + "refund-capture": "201", + "refund-payment": "201", + "process-authorization-reversal": "201", + "service-fees-authorization-reversal": "201", + "timeout-reversal": "201", + "timeout-void": "201", + "void-capture": "201", + "void-credit": "201", + "void-payment": "201", + "void-refund": "201", + "payout-card-not-token": "400", + "payout-token": "400", + "get-chargeback-details": "404", + "get-chargeback-summaries": "404", + "get-conversion-detail-transactions": "400", + "interchange-clearing-level-data-for-account-or-merchant": "404", + "get-netfunding-information-for-account-or-merchant": "400", + "get-notification-of-changes": "400", + "get-payment-batch-summary-data": "400", + "get-purchase-and-refund-details": "404", + "get-report-definition": "200", + "get-reporting-resource-information": "200", + "download-report": "404", + "create-adhoc-report": "400", + "get-report-based-on-report-id": "404", + "retrieve-available-reports": "200", + "create-classicstandard-report-subscription": "400", + "create-report-subscription": "400", + "delete-subscription-of-report-name-by-organization": "404", + "get-all-subscriptions": "200", + "get-subscription-for-report-name": "404", + "get-retrieval-details": "404", + "get-retrieval-summaries": "404", + "add-data-to-list": "201", + "add-duplicate-information": "201", + "basic-dm-transaction": "201", + "dm-with-buyer-information": "201", + "dm-with-decisionprofilereject-response": "201", + "dm-with-device-information": "201", + "dm-with-merchant-defined-information": "201", + "dm-with-scoreexceedsthreshold-response": "201", + "dm-with-shipping-information": "201", + "dm-with-travel-information": "201", + "mark-as-suspect": "201", + "remove-from-history": "201", + "address-match-not-found": "201", + "apartment-number-missing-or-not-found": "201", + "canadian-billing-details": "201", + "compliance-status-completed": "201", + "customer-match-denied-parties-list": "201", + "export-compliance-information-provided": "201", + "multiple-line-items": "201", + "multiple-sanction-lists": "201", + "no-company-name": "201", + "shipping-details-not-us-or-canada": "201", + "verbose-request-with-all-fields": "201", + "download-file-with-file-identifier": "404", + "get-list-of-files": "400", + "create-customer": "201", + "delete-customer": "204", + "retrieve-customer": "200", + "update-customer": "200", + "update-customers-default-payment-instrument": "200", + "update-customers-default-shipping-address": "200", + "create-customer-default-payment-instrument-card": "201", + "create-customer-nondefault-payment-instrument-card": "201", + "create-customer-payment-instrument-bank-account": "201", + "create-customer-payment-instrument-pinless-debit": "201", + "delete-customer-payment-instrument": "204", + "list-payment-instruments-for-customer": "200", + "retrieve-customer-payment-instrument": "200", + "create-customer-default-shipping-address": "201", + "create-customer-nondefault-shipping-address": "201", + "delete-customer-shipping-address": "204", + "list-shipping-addresses-for-customer": "200", + "retrieve-customer-shipping-address": "200", + "create-instrument-identifier-bank-account": "200", + "create-instrument-identifier-card-enroll-for-network-token": "200", + "create-instrument-identifier-card": "200", + "delete-instrument-identifier": "409", + "enroll-instrument-identifier-for-network-tokenization": "202", + "list-payment-instruments-for-instrument-identifier": "200", + "retrieve-instrument-identifier": "200", + "update-instrument-identifier-previoustransactionid": "200", + "create-payment-instrument-bank-account": "201", + "create-payment-instrument-card": "201", + "create-payment-instrument-pinless-debit": "201", + "delete-payment-instrument": "204", + "retrieve-payment-instrument": "200", + "update-payment-instrument": "200", + "get-individual-batch-file": "404", + "get-list-of-batch-files": "404", + "get-transaction-details-for-given-batch-id": "404", + "retrieve-transaction": "200", + "create-search-request": "201", + "get-search-results": "200", + "get-user-information-deprecated": "405", + "basic-tax-calculation-request": "201", + "committed-tax-call-request": "201", + "committed-tax-refund-call-request": "201", + "tax-refund-request": "201", + "void-committed-tax-call": "201" +} \ No newline at end of file diff --git a/Validation/ExpectedResults/ruby_expected_results.json b/Validation/ExpectedResults/ruby_expected_results.json new file mode 100644 index 0000000..fdd7efb --- /dev/null +++ b/Validation/ExpectedResults/ruby_expected_results.json @@ -0,0 +1,211 @@ +{ + "DeleteGenerateHeaders": "200", + "DeleteMethod": "200", + "GetGenerateHeaders": "200", + "GetMethod": "404", + "GetObjectMethod": "404", + "PostGenerateHeaders": "200", + "PostMethod": "201", + "PostObjectMethod": "201", + "PutGenerateHeaders": "200", + "PutMethod": "201", + "StandAloneHttpSignature": "200", + "StandAloneJWT": "200", + "StandAloneMetaKey": "400", + "StandAloneOAuth": "400", + "flex-tokenize-card": "200", + "generate-key-legacy-token-format": "200", + "generate-key": "200", + "create-and-send-invoice-immediately": "201", + "create-draft-invoice": "201", + "create-invoice-and-assign-it-specific-invoice-number": "400", + "create-invoice-without-sending-it": "400", + "get-invoice-details": "200", + "get-invoice-settings": "200", + "updateinvoicesettings": "200", + "authentication-with-new-account": "201", + "authentication-with-no-redirect": "201", + "enroll-with-customerid-as-payment-information": "201", + "enroll-with-pending-authentication": "201", + "enroll-with-transient-token": "400", + "enroll-with-travel-information": "201", + "pending-authentication-with-unknown-path": "201", + "setup-completion-with-card-number": "201", + "setup-completion-with-flex-transient-token": "400", + "setup-completion-with-fluid-data-value-and-payment-solution": "400", + "setup-completion-with-secure-storage-token": "400", + "setup-completion-with-tms-token": "201", + "setup-completion-with-tokenized-card": "201", + "validate-authentication-results": "201", + "capture-of-authorization-that-used-swiped-track-data": "400", + "capture-payment-service-fee": "201", + "capture-payment": "201", + "restaurant-capture-with-gratuity": "400", + "credit-using-bluefin-pci-p2pe-for-card-present-enabled-acquirer": "502", + "credit-using-bluefin-pci-p2pe-with-visa-platform-connect": "502", + "credit-with-customer-payment-instrument-and-shipping-address-token-id": "201", + "credit-with-customer-token-id": "201", + "credit-with-instrument-identifier-token-id": "201", + "credit": "201", + "electronic-check-standalone-credits": "201", + "service-fees-credit": "201", + "american-express-direct-emv-with-contact-read": "201", + "authorization-capture-for-timeout-void-flow": "201", + "authorization-for-incremental-authorization-flow": "201", + "authorization-for-timeout-reversal-flow": "201", + "authorization-skip-decisionmanager-for-single-transaction": "201", + "authorization-using-bluefin-pci-p2pe-for-card-present-enabled-acquirer": "502", + "authorization-using-bluefin-pci-p2pe-with-visa-platform-connect": "502", + "authorization-using-swiped-track-data": "201", + "authorization-with-capturesale": "201", + "authorization-with-customer-payment-instrument-and-shipping-address-token-id": "201", + "authorization-with-customer-token-creation": "201", + "authorization-with-customer-token-default-payment-instrument-and-shipping-address-creation": "201", + "authorization-with-customer-token-id": "201", + "authorization-with-decision-manager-buyer-information": "201", + "authorization-with-decision-manager-custom-setup": "201", + "authorization-with-decision-manager-device-information": "201", + "authorization-with-decision-manager-merchant-defined-information": "201", + "authorization-with-decision-manager-shipping-information": "201", + "authorization-with-decision-manager-travel-information": "201", + "authorization-with-decision-manager": "201", + "authorization-with-dmaccept-pa-enroll": "201", + "authorization-with-dmreject-pa-enroll": "201", + "authorization-with-dmreview-pa-enroll": "201", + "authorization-with-instrument-identifier-token-creation": "201", + "authorization-with-instrument-identifier-token-id": "201", + "authorization-with-legacy-token": "201", + "authorization-with-pa-enroll-authentication-needed": "201", + "authorization-with-payer-auth-validation": "201", + "authorization-with-tms-token-bypassing-network-token": "201", + "digital-payment-googlepay": "201", + "digital-payments-applepay": "201", + "electronic-check-debits-with-legacy-token": "201", + "electronic-check-debits": "201", + "incremental-authorization": "400", + "level-ii-data": "201", + "level-iii-data": "201", + "partial-authorization": "201", + "payment-network-tokenization": "201", + "payment-with-flex-token-create-permanent-tms-token": "400", + "payment-with-flex-token": "400", + "restaurant-authorization": "201", + "sale-using-emv-technology-with-contact-read-one-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contact-read-two-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contact-read-with-visa-platform-connect": "201", + "sale-using-emv-technology-with-contactless-read-for-card-present-enabled-acquirer": "201", + "sale-using-emv-technology-with-contactless-read-with-visa-platform-connect": "201", + "sale-using-emv-technology-with-contactless": "201", + "sale-using-keyed-data-for-card-present-enabled-acquirer": "201", + "sale-using-keyed-data-with-balance-inquiry": "201", + "sale-using-keyed-data-with-visa-platform-connect": "201", + "sale-using-swiped-track-data-for-card-present-enabled-acquirer": "201", + "sale-using-swiped-track-data-with-visa-platform-connect": "201", + "service-fees-with-credit-card-transaction": "201", + "simple-authorizationinternet": "201", + "swiped": "201", + "zero-dollar-authorization": "201", + "electronic-check-follow-on-refund": "201", + "refund-capture": "201", + "refund-payment": "201", + "process-authorization-reversal": "201", + "service-fees-authorization-reversal": "201", + "timeout-reversal": "201", + "timeout-void": "201", + "void-capture": "201", + "void-credit": "201", + "void-payment": "201", + "void-refund": "201", + "payout-card-not-token": "400", + "payout-token": "400", + "get-chargeback-details": "404", + "get-chargeback-summaries": "404", + "get-conversion-detail-transactions": "400", + "interchange-clearing-level-data-for-account-or-merchant": "404", + "get-netfunding-information-for-account-or-merchant": "400", + "get-notification-of-changes": "400", + "get-payment-batch-summary-data": "400", + "get-purchase-and-refund-details": "404", + "get-report-definition": "200", + "get-reporting-resource-information": "200", + "download-report": "404", + "create-adhoc-report": "400", + "get-report-based-on-report-id": "404", + "retrieve-available-reports": "200", + "create-classicstandard-report-subscription": "400", + "create-report-subscription": "400", + "delete-subscription-of-report-name-by-organization": "404", + "get-all-subscriptions": "200", + "get-subscription-for-report-name": "404", + "get-retrieval-details": "404", + "get-retrieval-summaries": "404", + "add-data-to-list": "201", + "add-duplicate-information": "201", + "basic-dm-transaction": "201", + "dm-with-buyer-information": "201", + "dm-with-decisionprofilereject-response": "201", + "dm-with-device-information": "201", + "dm-with-merchant-defined-information": "201", + "dm-with-scoreexceedsthreshold-response": "201", + "dm-with-shipping-information": "201", + "dm-with-travel-information": "201", + "mark-as-suspect": "201", + "remove-from-history": "201", + "address-match-not-found": "201", + "apartment-number-missing-or-not-found": "201", + "canadian-billing-details": "201", + "compliance-status-completed": "201", + "customer-match-denied-parties-list": "201", + "export-compliance-information-provided": "201", + "multiple-line-items": "201", + "multiple-sanction-lists": "201", + "no-company-name": "201", + "shipping-details-not-us-or-canada": "201", + "verbose-request-with-all-fields": "201", + "download-file-with-file-identifier": "404", + "get-list-of-files": "400", + "create-customer": "201", + "delete-customer": "204", + "retrieve-customer": "200", + "update-customer": "200", + "update-customers-default-payment-instrument": "200", + "update-customers-default-shipping-address": "200", + "create-customer-default-payment-instrument-card": "201", + "create-customer-non-default-payment-instrument-card": "201", + "create-customer-payment-instrument-bank-account": "201", + "create-customer-payment-instrument-pinless-debit": "201", + "delete-customer-payment-instrument": "204", + "list-payment-instruments-for-customer": "200", + "retrieve-customer-payment-instrument": "200", + "create-customer-default-shipping-address": "201", + "create-customer-non-default-shipping-address": "201", + "delete-customer-shipping-address": "204", + "list-shipping-addresses-for-customer": "200", + "retrieve-customer-shipping-address": "200", + "create-instrument-identifier-bank-account": "200", + "create-instrument-identifier-card-enroll-for-network-token": "200", + "create-instrument-identifier-card": "200", + "delete-instrument-identifier": "409", + "enroll-instrument-identifier-for-network-tokenization": "202", + "list-payment-instruments-for-instrument-identifier": "200", + "retrieve-instrument-identifier": "200", + "update-instrument-identifier-previoustransactionid": "200", + "create-payment-instrument-bank-account": "201", + "create-payment-instrument-card": "201", + "create-payment-instrument-pinless-debit": "201", + "delete-payment-instrument": "204", + "retrieve-payment-instrument": "200", + "update-payment-instrument": "200", + "get-individual-batch-file": "404", + "get-list-of-batch-files": "404", + "get-transaction-details-for-given-batch-id": "404", + "retrieve-transaction": "200", + "create-search-request": "201", + "get-search-results": "200", + "get-user-information-deprecated": "405", + "basic-tax-calculation-request": "201", + "committed-tax-call-request": "201", + "committed-tax-refund-call-request": "201", + "tax-refund-request": "201", + "void-committed-tax-call": "201" +} \ No newline at end of file diff --git a/Validation/json_to_prettified_html.py b/Validation/json_to_prettified_html.py new file mode 100644 index 0000000..6be05d2 --- /dev/null +++ b/Validation/json_to_prettified_html.py @@ -0,0 +1,171 @@ + +""" +IMPORTS +""" + +import argparse +import os +import re +import copy +import json +import re +from json2html import * +from xhtml2pdf import pisa +from bs4 import BeautifulSoup as bs, Tag + +""" +ARGUMENT PARSER +""" + +def parse_arguments(): + parser = argparse.ArgumentParser(description="Converts JSON result data to HTML") + parser.add_argument("--input", "-i", help="JSON file containing result data to be rendered") + parser.add_argument("--output", "-o", help="HTML file generated from the JSON data") + + args = parser.parse_args() + input_file = args.input + output_file = args.output + return input_file, output_file + +""" +LOAD JSON FILE +""" + +def load_json_file(file): + with open(file, "r") as file_handle: + file_contents = json.load(file_handle) + return file_contents + +""" +CONVERT JSON TO HTML +""" + +def convert_json_to_html(data, file): + with open(file, "w") as file_handle: + file_handle.write(json2html.convert(json=data)) + +""" +PRETTIFY HTML +""" + +def prettify_html(file): + with open(file, "r") as file_handle: + soup = bs(file_handle, "html.parser") + + # Processing table + table_tag = soup.table + table_tag.name = "table" + table_tag["style"] = """ + width: 95%; + border-collapse:collapse; + margin-left:auto; + margin-right:auto; + font-family: Helvetica, sans-serif; + font-size: 10px; + vertical-align: bottom; + """ + + # Processing second column + second_col_tags = soup.find_all("td") + for second_col_single_tag in second_col_tags: + more_style = "" + if "FAILURE" in second_col_single_tag.contents[0]: + more_style = """ + color: #FFFFFF; + background-color: #E34234 + """ + elif "SUCCESS" in second_col_single_tag.contents[0]: + more_style = """ + color: #000000; + background-color: #50C878 + """ + elif "SAMPLE CODE" in second_col_single_tag.contents[0]: + more_style = """ + color: #E34234; + background-color: #FFE135 + """ + second_col_single_tag.name = "td" + second_col_single_tag["style"] = "text-align: center; padding-top: 2px; padding-bottom: 0px; vertical-align: middle;" + more_style + + # Processing first column + first_col_tags = soup.find_all("th") + first_col_style = """ + text-align: left; + padding-top: 2px; + padding-bottom: 0px; + vertical-align: middle; + padding-left: 10px; + """ + for first_col_single_tag in first_col_tags: + first_col_single_tag.name = "td" + first_col_single_tag["style"] = first_col_style + + # Create header rows + first_column_style = """ + text-align: center; + padding-top: 2px; + padding-bottom: 0px; + padding-left: 10px; + color: #FFFFFF; + background-color: #333399; + font-size: 12px; + width: 70%; + """ + first_column_header = soup.new_tag("th", style=first_column_style) + first_column_header.insert(3, "Sample Code Tested") + + second_column_style = """ + text-align: center; + padding-top: 2px; + padding-bottom: 0px; + color: #FFFFFF; + background-color: #333399; + font-size: 12px; + width: 30%; + """ + second_column_header = soup.new_tag("th", style=second_column_style) + second_column_header.insert(3, "Validation Result") + + # Insert header rows into table + table_tag.insert(0, second_column_header) + table_tag.insert(0, first_column_header) + + with open(file, "wb") as file_handle: + file_handle.write(soup.prettify("utf-8")) + +""" +CONVERT HTML TO PDF +""" + +def convert_html_to_pdf(file): + with open(file, "r") as src: + source_html = src.read() + + output_file = file.split(".")[0] + ".pdf" + + try: + with open(output_file, "w+b") as result_file: + pisa_status = pisa.CreatePDF(source_html, dest=result_file) + + if pisa_status.err != 0: + raise Exception('Error during PDF file creation:\n' + pisa_status.err) + except Exception as e: + raise e + +""" +MAIN FUNCTION +""" + +def main(): + input_file, output_file = parse_arguments() + json_data = load_json_file(input_file) + convert_json_to_html(json_data, output_file) + prettify_html(output_file) + + try: + convert_html_to_pdf(output_file) + except Exception as e: + print(e) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Validation/response_code_validator.py b/Validation/response_code_validator.py new file mode 100644 index 0000000..098a7b7 --- /dev/null +++ b/Validation/response_code_validator.py @@ -0,0 +1,96 @@ + +""" +IMPORTS +""" + +import argparse +import re +import json + +""" +ARGUMENT PARSER +""" + +def parse_arguments(): + parser = argparse.ArgumentParser(description="Validates Response Codes for Requests") + parser.add_argument("--expected", "-e", help="Source file containing the expected response codes for the requests") + parser.add_argument("--actual", "-a", help="Log file for the current testing run") + parser.add_argument("--output", "-o", help="Output JSON file for the result of validation") + + args = parser.parse_args() + expected = args.expected + actual = args.actual + output = args.output + return expected, actual, output + +""" +ADD TO JSON OBJECT +""" + +def add_to_json_object(json_obj, key, value): + json_obj[key] = value + return json_obj + +""" +DUMP JSON TO FILE +""" + +def dump_json_to_file(json_obj, filepath): + with open(filepath, "w") as file: + json.dump(json_obj, file, ensure_ascii=False, indent=4) + +""" +LOAD EXPECTED JSON FILE +""" + +def load_file(file): + file_content = json.load(open(file, "r")) + if "/pts/v2/payments" in file_content: + flat_json_object = {} + for path in file_content: + path_content = file_content[path] + for verb in path_content: + samples_content = path_content[verb] + for sample_name, response_code in samples_content.items(): + flat_json_object = add_to_json_object(flat_json_object, sample_name, response_code) + return flat_json_object + else: + return file_content + +""" +COMPARE RESULTS +""" + +def compare_results(expected, actual): + code_map = {} + for sample, response in actual.items(): + if sample in expected: + if expected[sample] == response: + validation = "SUCCESS" + else: + validation = "FAILURE [ Expected : " + str(expected[sample]) + " | Actual : " + str(response) + " ]" + + code_map = add_to_json_object(code_map, sample, validation) + expected.pop(sample) + else: + code_map = add_to_json_object(code_map, sample, "UNEXPECTED SAMPLE CODE FOUND") + + for remaining_sample, remaining_response in expected.items(): + code_map = add_to_json_object(code_map, remaining_sample, "SAMPLE CODE NOT EXECUTED | Expected : " + str(remaining_response)) + + return code_map + +""" +MAIN FUNCTION +""" + +def main(): + expected_json_file, actuals_json_file, destination_file = parse_arguments() + expected_results = load_file(expected_json_file) + actual_results = load_file(actuals_json_file) + + validation_results = compare_results(expected_results, actual_results) + dump_json_to_file(validation_results, destination_file) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Validation/sample_code_log_processor.py b/Validation/sample_code_log_processor.py new file mode 100644 index 0000000..7e4a62c --- /dev/null +++ b/Validation/sample_code_log_processor.py @@ -0,0 +1,67 @@ + +""" +IMPORTS +""" + +import argparse +import re +import json + +""" +ARGUMENT PARSER +""" + +def parse_arguments(): + parser = argparse.ArgumentParser(description="Processes the log file from Sample Code Testing") + parser.add_argument("--log", "-l", help="Log file for the current testing run of Sample Codes") + parser.add_argument("--output", "-o", help="JSON file to store the actual results from the current testing run") + + args = parser.parse_args() + log_path = args.log + output_file = args.output + return log_path, output_file + +""" +LOG FILE PROCESSOR +""" + +def process_log_file(filepath): + with open(filepath, "r", encoding = "utf-8") as file: + contents = file.read() + matches = re.findall(r"(\[Sample Code Testing\]) (\[([A-Za-z0-9\-_]+)\]) ([0-9]{3})", contents) + + return matches + +""" +ADD TO JSON OBJECT +""" + +def add_to_json_object(json_obj, key, value): + json_obj[key] = value + return json_obj + +""" +DUMP JSON TO FILE +""" + +def dump_json_to_file(filepath, src): + with open(filepath, "w") as file: + json.dump(src, file, ensure_ascii=False, indent=4) + +""" +MAIN FUNCTION +""" + +def main(): + current_log_file, output_json_file = parse_arguments() + log_statements = process_log_file(current_log_file) + + code_map = {} + for statement in log_statements: + if statement[2] not in ("Configuration"): + code_map = add_to_json_object(code_map, statement[2], statement[3]) + + dump_json_to_file(output_json_file, code_map) + +if __name__ == "__main__": + main() \ No newline at end of file From fea2e2d5629e5079bb556a1bbae13c15b7631dbd Mon Sep 17 00:00:00 2001 From: gaubansa Date: Tue, 25 Jun 2024 14:46:49 +0530 Subject: [PATCH 130/161] adding logs to sample code --- .../CallHttpMethods/DeleteMethod.cs | 15 +++++++ .../CallHttpMethods/GetMethod.cs | 8 ++++ .../CallHttpMethods/GetObjectMethod.cs | 8 ++++ .../CallHttpMethods/PostMethod.cs | 8 ++++ .../CallHttpMethods/PostObjectMethod.cs | 8 ++++ .../CallHttpMethods/PutMethod.cs | 8 ++++ .../DeleteGenerateHeaders.cs | 12 +++++- .../GetGenerateHeaders.cs | 10 +++++ .../PostGenerateHeaders.cs | 10 +++++ .../PutGenerateHeaders.cs | 10 +++++ .../InvoiceSettings/GetInvoiceSettings.cs | 12 +++++- .../InvoiceSettings/UpdateInvoiceSettings.cs | 12 +++++- .../CreateAndSendInvoiceImmediately.cs | 12 +++++- .../Invoicing/Invoices/CreateDraftInvoice.cs | 12 +++++- ...InvoiceAndAssignItSpecificInvoiceNumber.cs | 12 +++++- .../Invoices/CreateInvoiceWithoutSendingIt.cs | 12 +++++- .../Invoicing/Invoices/GetInvoiceDetails.cs | 12 +++++- .../AuthenticationWithNORedirect.cs | 12 +++++- .../AuthenticationWithNewAccount.cs | 12 +++++- ...nrollWithCustomerIdAsPaymentInformation.cs | 12 +++++- .../EnrollWithPendingAuthentication.cs | 12 +++++- .../EnrollWithTransientToken.cs | 12 +++++- .../EnrollWithTravelInformation.cs | 12 +++++- .../PendingAuthenticationWithUnknownPath.cs | 12 +++++- .../SetupCompletionWithCardNumber.cs | 12 +++++- .../SetupCompletionWithFlexTransientToken.cs | 12 +++++- ...ionWithFluidDataValueAndPaymentSolution.cs | 12 +++++- .../SetupCompletionWithSecureStorageToken.cs | 12 +++++- .../SetupCompletionWithTMSToken.cs | 12 +++++- .../SetupCompletionWithTokenizedCard.cs | 12 +++++- .../ValidateAuthenticationResults.cs | 42 ++++++++++++++----- ...eOfAuthorizationThatUsedSwipedTrackData.cs | 12 +++++- .../Payments/Capture/CapturePayment.cs | 12 +++++- .../Capture/CapturePaymentServiceFee.cs | 12 +++++- .../Capture/RestaurantCaptureWithGratuity.cs | 12 +++++- Source/Samples/Payments/Credit/Credit.cs | 12 +++++- ...finPCIP2PEForCardPresentEnabledAcquirer.cs | 12 +++++- ...ngBluefinPCIP2PEWithVisaPlatformConnect.cs | 12 +++++- ...mentInstrumentAndShippingAddressTokenId.cs | 12 +++++- .../Credit/CreditWithCustomerTokenId.cs | 12 +++++- .../CreditWithInstrumentIdentifierTokenId.cs | 12 +++++- .../ElectronicCheckStandAloneCredits.cs | 12 +++++- .../Payments/Credit/ServiceFeesCredit.cs | 12 +++++- ...AmericanExpressDirectEMVWithContactRead.cs | 12 +++++- .../AuthorizationCaptureForTimeoutVoidFlow.cs | 12 +++++- ...rizationForIncrementalAuthorizationFlow.cs | 12 +++++- .../AuthorizationForTimeoutReversalFlow.cs | 12 +++++- ...SkipDecisionManagerForSingleTransaction.cs | 12 +++++- ...finPCIP2PEForCardPresentEnabledAcquirer.cs | 12 +++++- ...ngBluefinPCIP2PEWithVisaPlatformConnect.cs | 12 +++++- .../AuthorizationUsingSwipedTrackData.cs | 12 +++++- .../Payments/AuthorizationWithCaptureSale.cs | 12 +++++- ...mentInstrumentAndShippingAddressTokenId.cs | 12 +++++- .../AuthorizationWithCustomerTokenCreation.cs | 12 +++++- ...entInstrumentAndShippingAddressCreation.cs | 12 +++++- .../AuthorizationWithCustomerTokenId.cs | 12 +++++- .../AuthorizationWithDMAcceptPAEnroll.cs | 12 +++++- .../AuthorizationWithDMRejectPAEnroll.cs | 12 +++++- .../AuthorizationWithDMReviewPAEnroll.cs | 12 +++++- .../AuthorizationWithDecisionManager.cs | 12 +++++- ...tionWithDecisionManagerBuyerInformation.cs | 12 +++++- ...orizationWithDecisionManagerCustomSetup.cs | 12 +++++- ...ionWithDecisionManagerDeviceInformation.cs | 12 +++++- ...cisionManagerMerchantDefinedInformation.cs | 12 +++++- ...nWithDecisionManagerShippingInformation.cs | 12 +++++- ...ionWithDecisionManagerTravelInformation.cs | 12 +++++- ...onWithInstrumentIdentifierTokenCreation.cs | 12 +++++- ...rizationWithInstrumentIdentifierTokenId.cs | 12 +++++- .../Payments/AuthorizationWithLegacyToken.cs | 12 +++++- ...izationWithPAEnrollAuthenticationNeeded.cs | 12 +++++- .../AuthorizationWithPayerAuthValidation.cs | 12 +++++- ...zationWithTMSTokenBypassingNetworkToken.cs | 12 +++++- .../Payments/DigitalPaymentGooglePay.cs | 12 +++++- .../Payments/DigitalPaymentsApplePay.cs | 12 +++++- .../Payments/ElectronicCheckDebits.cs | 12 +++++- .../ElectronicCheckDebitsWithLegacyToken.cs | 12 +++++- .../Payments/IncrementalAuthorization.cs | 14 ++++++- .../Samples/Payments/Payments/LevelIIData.cs | 12 +++++- .../Samples/Payments/Payments/LevelIIIData.cs | 12 +++++- .../Payments/Payments/PartialAuthorization.cs | 12 +++++- .../Payments/PaymentNetworkTokenization.cs | 12 +++++- .../Payments/Payments/PaymentWithFlexToken.cs | 12 +++++- ...entWithFlexTokenCreatePermanentTMSToken.cs | 12 +++++- .../Payments/RestaurantAuthorization.cs | 12 +++++- ...actReadOneForCardPresentEnabledAcquirer.cs | 12 +++++- ...actReadTwoForCardPresentEnabledAcquirer.cs | 12 +++++- ...yWithContactReadWithVisaPlatformConnect.cs | 12 +++++- .../SaleUsingEMVTechnologyWithContactless.cs | 12 +++++- ...ctlessReadForCardPresentEnabledAcquirer.cs | 12 +++++- ...hContactlessReadWithVisaPlatformConnect.cs | 12 +++++- ...gKeyedDataForCardPresentEnabledAcquirer.cs | 12 +++++- .../SaleUsingKeyedDataWithBalanceInquiry.cs | 12 +++++- ...leUsingKeyedDataWithVisaPlatformConnect.cs | 12 +++++- ...dTrackDataForCardPresentEnabledAcquirer.cs | 12 +++++- ...gSwipedTrackDataWithVisaPlatformConnect.cs | 12 +++++- .../ServiceFeesWithCreditCardTransaction.cs | 12 +++++- .../Payments/SimpleAuthorizationInternet.cs | 19 +++++---- Source/Samples/Payments/Payments/Swiped.cs | 12 +++++- .../Payments/ZeroDollarAuthorization.cs | 12 +++++- .../Refund/ElectronicCheckFollowonRefund.cs | 12 +++++- .../Samples/Payments/Refund/RefundCapture.cs | 12 +++++- .../Samples/Payments/Refund/RefundPayment.cs | 12 +++++- .../Reversal/ProcessAuthorizationReversal.cs | 12 +++++- .../ServiceFeesAuthorizationReversal.cs | 12 +++++- .../Payments/Reversal/TimeoutReversal.cs | 12 +++++- Source/Samples/Payments/Void/TimeoutVoid.cs | 12 +++++- Source/Samples/Payments/Void/VoidCapture.cs | 12 +++++- Source/Samples/Payments/Void/VoidCredit.cs | 12 +++++- Source/Samples/Payments/Void/VoidPayment.cs | 12 +++++- Source/Samples/Payments/Void/VoidRefund.cs | 12 +++++- Source/Samples/Payouts/PayoutCardNotToken.cs | 12 +++++- Source/Samples/Payouts/PayoutToken.cs | 12 +++++- .../GetConversionDetailTransactions.cs | 12 +++++- ...tfundingInformationForAccountOrMerchant.cs | 12 +++++- .../DecisionManager/AddDataToList.cs | 12 +++++- .../AddDuplicateInformation.cs | 12 +++++- .../DecisionManager/MarkAsSuspect.cs | 12 +++++- .../DecisionManager/RemoveFromHistory.cs | 12 +++++- .../Verification/AddressMatchNotFound.cs | 12 +++++- .../ApartmentNumberMissingOrNotFound.cs | 12 +++++- .../Verification/CanadianBillingDetails.cs | 12 +++++- .../CustomerMatchDeniedPartiesList.cs | 12 +++++- .../Verification/MultipleLineItems.cs | 12 +++++- .../Verification/NoCompanyName.cs | 12 +++++- .../ShippingDetailsNotUSOrCanada.cs | 12 +++++- .../VerboseRequestWithAllFields.cs | 12 +++++- .../DownloadFileWithFileIdentifier.cs | 12 +++++- .../Samples/SecureFileShare/GetListOfFiles.cs | 12 +++++- .../Customer/DeleteCustomer.cs | 12 +++++- .../GetIndividualBatchFile.cs | 12 +++++- .../TransactionBatches/GetListOfBatchFiles.cs | 12 +++++- .../GetTransactionDetailsForGivenBatchId.cs | 12 +++++- .../TransactionDetails/RetrieveTransaction.cs | 12 +++++- .../TransactionSearch/CreateSearchRequest.cs | 12 +++++- .../TransactionSearch/GetSearchResults.cs | 12 +++++- .../GetUserInformationDeprecated.cs | 12 +++++- .../BasicTaxCalculationRequest.cs | 12 +++++- .../CommittedTaxCallRequest.cs | 12 +++++- .../CommittedTaxRefundCallRequest.cs | 12 +++++- .../ValueAddedService/TaxRefundRequest.cs | 12 +++++- .../ValueAddedService/VoidCommittedTaxCall.cs | 12 +++++- 141 files changed, 1560 insertions(+), 148 deletions(-) diff --git a/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs b/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs index 68999c3..4fc3bf8 100644 --- a/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/DeleteMethod.cs @@ -11,6 +11,13 @@ public class DeleteMethod // Below request unsubscribes 'TRR Report' Subscription for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -32,6 +39,14 @@ public static void Run() Console.WriteLine("\n v-c-correlation-id:{0}", response.GetResponseHeaderValue(response.Headers, "v-c-correlation-id")); Console.WriteLine("\n Response Code:{0}", response.StatusCode); Console.WriteLine("\n Response Message:{0}", response.Data); + if (response.StatusCode == 200 || response.StatusCode == 404) + { + WriteLogAudit(200); + } + else + { + WriteLogAudit(response.StatusCode); + } } } catch (Exception e) diff --git a/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs index 5e8d146..0443fb6 100644 --- a/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/GetMethod.cs @@ -11,6 +11,13 @@ public class GetMethod // Below Request fetches the payment details of payment ID: 5319754772076048103525 private const string RequestTarget = "/pts/v2/payments/5526383152166546003003"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -32,6 +39,7 @@ public static void Run() Console.WriteLine("\n v-c-correlation-id:{0}", response.GetResponseHeaderValue(response.Headers, "v-c-correlation-id")); Console.WriteLine("\n Response Code:{0}", response.StatusCode); Console.WriteLine("\n Response Message:{0}", response.Data); + WriteLogAudit(response.StatusCode); } } catch (Exception e) diff --git a/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs index 2e2aed9..64b3847 100644 --- a/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/GetObjectMethod.cs @@ -12,6 +12,13 @@ public class GetObjectMethod // Below Request fetches the payment details of payment ID: 5319754772076048103525 private const string RequestTarget = "/pts/v2/payments/5526478103126428303006"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -36,6 +43,7 @@ public static void Run() Console.WriteLine("\n v-c-correlation-id:{0}", response.GetResponseHeaderValue(response.Headers, "v-c-correlation-id")); Console.WriteLine("\n Response Code:{0}", response.StatusCode); Console.WriteLine("\n Response Message:{0}", response.Data); + WriteLogAudit(response.StatusCode); } } catch (Exception e) diff --git a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs index e73046f..70e2b68 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostMethod.cs @@ -14,6 +14,13 @@ public class PostMethod private const string RequestTarget = "/pts/v2/payments/"; private static string RequestJsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../Source/Resource/request_payments.json").ToString(); + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -38,6 +45,7 @@ public static void Run() Console.WriteLine("\n v-c-correlation-id:{0}", response.GetResponseHeaderValue(response.Headers, "v-c-correlation-id")); Console.WriteLine("\n Response Code:{0}", response.StatusCode); Console.WriteLine("\n Response Message:{0}", response.Data); + WriteLogAudit(response.StatusCode); } } catch (Exception e) diff --git a/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs index 7ef35f2..d84389a 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PostObjectMethod.cs @@ -12,6 +12,13 @@ public class PostObjectMethod // Transaction details are sent along with the Request as Request Body private const string RequestTarget = "/pts/v2/payments/"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -39,6 +46,7 @@ public static void Run() Console.WriteLine("\n v-c-correlation-id:{0}", response.GetResponseHeaderValue(response.Headers, "v-c-correlation-id")); Console.WriteLine("\n Response Code:{0}", response.StatusCode); Console.WriteLine("\n Response Message:{0}", response.Data); + WriteLogAudit(response.StatusCode); } } catch (Exception e) diff --git a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs index 39f6f09..7d8f64d 100644 --- a/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs +++ b/Source/Samples/Authentication/CallHttpMethods/PutMethod.cs @@ -15,6 +15,13 @@ public class PutMethod private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; private static string RequestJsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../Source/Resource/TRRReport.json"); + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -39,6 +46,7 @@ public static void Run() Console.WriteLine("\n v-c-correlation-id:{0}", response.GetResponseHeaderValue(response.Headers, "v-c-correlation-id")); Console.WriteLine("\n Response Code:{0}", response.StatusCode); Console.WriteLine("\n Response Message:{0}", response.Data); + WriteLogAudit(response.StatusCode); } } catch (Exception e) diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs index 8021717..3accef8 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/DeleteGenerateHeaders.cs @@ -10,6 +10,13 @@ public class DeleteGenerateHeaders // Below request unsubscribes 'TRR Report' Subscription for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -21,7 +28,7 @@ public static void Run() RequestType = Enumerations.RequestType.DELETE.ToString(), }; - // Call to the Authorize class of AuthSDK to get the signature and token objects + // Call to the Authorize class of AuthSDK to get the signature and token objects var authorizeObj = new Authorize(merchantConfig); if (string.Equals(merchantConfig.AuthenticationType, Enumerations.AuthenticationType.HTTP_SIGNATURE.ToString(), StringComparison.OrdinalIgnoreCase)) @@ -33,6 +40,7 @@ public static void Run() Console.WriteLine("{0} {1}", "Date:", requestHeaders.GmtDateTime); Console.WriteLine("{0} {1}", "Host:", requestHeaders.HostName); Console.WriteLine("{0} {1}", "signature:", requestHeaders.SignatureParam); + WriteLogAudit(200); } else if (string.Equals(merchantConfig.AuthenticationType, Enumerations.AuthenticationType.JWT.ToString(), StringComparison.OrdinalIgnoreCase)) { @@ -40,12 +48,14 @@ public static void Run() Console.WriteLine("{0} {1}", "Accept:", "application/hal+json"); Console.WriteLine("{0} {1}", "Authorization:", requestHeaders.BearerToken); + WriteLogAudit(200); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); + WriteLogAudit(400); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs index 7f0bc09..fbb2a4b 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/GetGenerateHeaders.cs @@ -10,6 +10,13 @@ public class GetGenerateHeaders // Below Request fetches the payment details of payment ID: 5289697403596987704107 private const string RequestTarget = "/pts/v2/payments/5289697403596987704107"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -33,6 +40,7 @@ public static void Run() Console.WriteLine("{0} {1}", "Date:", requestHeaders.GmtDateTime); Console.WriteLine("{0} {1}", "Host:", requestHeaders.HostName); Console.WriteLine("{0} {1}", "signature:", requestHeaders.SignatureParam); + WriteLogAudit(200); } else if (string.Equals(merchantConfig.AuthenticationType, Enumerations.AuthenticationType.JWT.ToString(), StringComparison.OrdinalIgnoreCase)) { @@ -40,12 +48,14 @@ public static void Run() Console.WriteLine("{0} {1}", "Accept:", "application/hal+json"); Console.WriteLine("{0} {1}", "Authorization:", requestHeaders.BearerToken); + WriteLogAudit(200); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); + WriteLogAudit(400); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs index 972e9eb..df4d1c9 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PostGenerateHeaders.cs @@ -13,6 +13,13 @@ public class PostGenerateHeaders private const string RequestTarget = "/pts/v2/payments"; private static string RequestJsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../Source/Resource/request_payments.json"); + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { try @@ -40,6 +47,7 @@ public static void Run() Console.WriteLine("{0} {1}", "Host:", requestHeaders.HostName); Console.WriteLine("{0} {1}", "digest:", requestHeaders.Digest); Console.WriteLine("{0} {1}", "signature:", requestHeaders.SignatureParam); + WriteLogAudit(200); } else if (string.Equals(merchantConfig.AuthenticationType, Enumerations.AuthenticationType.JWT.ToString(), StringComparison.OrdinalIgnoreCase)) { @@ -47,12 +55,14 @@ public static void Run() Console.WriteLine("{0} {1}", "Content-Type:", "application/json"); Console.WriteLine("{0} {1}", "Authorization:", requestHeaders.BearerToken); + WriteLogAudit(200); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); + WriteLogAudit(400); } } } diff --git a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs index 062a2a3..832bf31 100644 --- a/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs +++ b/Source/Samples/Authentication/GenerateHttpRequestHeaders/PutGenerateHeaders.cs @@ -11,6 +11,13 @@ public class PutGenerateHeaders // Report Details provided in the JSON File are sent along with the Request as Request Body // Below request subscribes 'TRR Report' for Organization ID: testrest private const string RequestTarget = "/reporting/v2/reportSubscriptions/TRRReport?organizationId=testrest"; + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } public static void Run() { string RequestJsonFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../", "Source/Resource/TRRReport.json"); @@ -39,6 +46,7 @@ public static void Run() Console.WriteLine("{0} {1}", "Host:", requestHeaders.HostName); Console.WriteLine("{0} {1}", "digest:", requestHeaders.Digest); Console.WriteLine("{0} {1}", "signature:", requestHeaders.SignatureParam); + WriteLogAudit(200); } else if (string.Equals(merchantConfig.AuthenticationType, Enumerations.AuthenticationType.JWT.ToString(), StringComparison.OrdinalIgnoreCase)) { @@ -46,12 +54,14 @@ public static void Run() Console.WriteLine("{0} {1}", "Content-Type:", "application/json"); Console.WriteLine("{0} {1}", "Authorization:", requestHeaders.BearerToken); + WriteLogAudit(200); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); + WriteLogAudit(400); } } } diff --git a/Source/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs b/Source/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs index beda487..34036d7 100644 --- a/Source/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs +++ b/Source/Samples/Invoicing/InvoiceSettings/GetInvoiceSettings.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Invoicing { public class GetInvoiceSettings { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InvoicingV2InvoiceSettingsGet200Response Run() { try @@ -19,11 +27,13 @@ public static InvoicingV2InvoiceSettingsGet200Response Run() var apiInstance = new InvoiceSettingsApi(clientConfig); InvoicingV2InvoiceSettingsGet200Response result = apiInstance.GetInvoiceSettings(); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs b/Source/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs index a676663..71998fb 100644 --- a/Source/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs +++ b/Source/Samples/Invoicing/InvoiceSettings/UpdateInvoiceSettings.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Invoicing { public class UpdateInvoiceSettings { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InvoicingV2InvoiceSettingsGet200Response Run() { string invoiceSettingsInformationMerchantLogo = "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"; @@ -48,11 +56,13 @@ public static InvoicingV2InvoiceSettingsGet200Response Run() var apiInstance = new InvoiceSettingsApi(clientConfig); InvoicingV2InvoiceSettingsGet200Response result = apiInstance.UpdateInvoiceSettings(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs b/Source/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs index 9e07337..acbd140 100644 --- a/Source/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs +++ b/Source/Samples/Invoicing/Invoices/CreateAndSendInvoiceImmediately.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Invoicing { public class CreateAndSendInvoiceImmediately { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InvoicingV2InvoicesPost201Response Run() { string customerInformationName = "Tanya Lee"; @@ -96,11 +104,13 @@ public static InvoicingV2InvoicesPost201Response Run() var apiInstance = new InvoicesApi(clientConfig); InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Invoicing/Invoices/CreateDraftInvoice.cs b/Source/Samples/Invoicing/Invoices/CreateDraftInvoice.cs index d2580df..d965d96 100644 --- a/Source/Samples/Invoicing/Invoices/CreateDraftInvoice.cs +++ b/Source/Samples/Invoicing/Invoices/CreateDraftInvoice.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Invoicing { public class CreateDraftInvoice { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InvoicingV2InvoicesPost201Response Run() { string customerInformationName = "Tanya Lee"; @@ -96,11 +104,13 @@ public static InvoicingV2InvoicesPost201Response Run() var apiInstance = new InvoicesApi(clientConfig); InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs b/Source/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs index 753d691..331e0df 100644 --- a/Source/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs +++ b/Source/Samples/Invoicing/Invoices/CreateInvoiceAndAssignItSpecificInvoiceNumber.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Invoicing { public class CreateInvoiceAndAssignItSpecificInvoiceNumber { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InvoicingV2InvoicesPost201Response Run() { string customerInformationName = "Tanya Lee"; @@ -98,11 +106,13 @@ public static InvoicingV2InvoicesPost201Response Run() var apiInstance = new InvoicesApi(clientConfig); InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs b/Source/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs index 9ee9ffa..1fe7900 100644 --- a/Source/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs +++ b/Source/Samples/Invoicing/Invoices/CreateInvoiceWithoutSendingIt.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Invoicing { public class CreateInvoiceWithoutSendingIt { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InvoicingV2InvoicesPost201Response Run() { string customerInformationName = "Tanya Lee"; @@ -98,11 +106,13 @@ public static InvoicingV2InvoicesPost201Response Run() var apiInstance = new InvoicesApi(clientConfig); InvoicingV2InvoicesPost201Response result = apiInstance.CreateInvoice(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Invoicing/Invoices/GetInvoiceDetails.cs b/Source/Samples/Invoicing/Invoices/GetInvoiceDetails.cs index 3523b2d..23f9fa0 100644 --- a/Source/Samples/Invoicing/Invoices/GetInvoiceDetails.cs +++ b/Source/Samples/Invoicing/Invoices/GetInvoiceDetails.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Invoicing { public class GetInvoiceDetails { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InvoicingV2InvoicesGet200Response Run() { string id = CreateDraftInvoice.Run().Id; @@ -20,11 +28,13 @@ public static InvoicingV2InvoicesGet200Response Run() var apiInstance = new InvoicesApi(clientConfig); InvoicingV2InvoicesGet200Response result = apiInstance.GetInvoice(id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs index 5e845a7..65a5142 100644 --- a/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs +++ b/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class AuthenticationWithNORedirect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -88,11 +96,13 @@ public static RiskV1AuthenticationsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs index b6986f2..414d1c2 100644 --- a/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs +++ b/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class AuthenticationWithNewAccount { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "New Account"; @@ -106,11 +114,13 @@ public static RiskV1AuthenticationsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs index 4146061..aadf4a2 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class EnrollWithCustomerIdAsPaymentInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; @@ -74,11 +82,13 @@ public static RiskV1AuthenticationsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs b/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs index b867ade..c29d06e 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class EnrollWithPendingAuthentication { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -92,11 +100,13 @@ public static RiskV1AuthenticationsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs b/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs index 42b72a9..ce4e7af 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class EnrollWithTransientToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; @@ -70,11 +78,13 @@ public static RiskV1AuthenticationsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs index 80f2f78..c068172 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class EnrollWithTravelInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -136,11 +144,13 @@ public static RiskV1AuthenticationsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs b/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs index 055d7cb..52c2ed5 100644 --- a/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs +++ b/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class PendingAuthenticationWithUnknownPath { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; @@ -80,11 +88,13 @@ public static RiskV1AuthenticationsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationsPost201Response result = apiInstance.CheckPayerAuthEnrollment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs index beaf5b1..1ec3302 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class SetupCompletionWithCardNumber { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -52,11 +60,13 @@ public static RiskV1AuthenticationSetupsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs index 7e8ddbc..92c7412 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class SetupCompletionWithFlexTransientToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -34,11 +42,13 @@ public static RiskV1AuthenticationSetupsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs index 5a60848..fc35b0f 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class SetupCompletionWithFluidDataValueAndPaymentSolution { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -44,11 +52,13 @@ public static RiskV1AuthenticationSetupsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs index 94c732e..6ada337 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class SetupCompletionWithSecureStorageToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -38,11 +46,13 @@ public static RiskV1AuthenticationSetupsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs index 39d3900..125daff 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class SetupCompletionWithTMSToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -38,11 +46,13 @@ public static RiskV1AuthenticationSetupsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs index fb2850d..0f19ed3 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class SetupCompletionWithTokenizedCard { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; @@ -46,11 +54,13 @@ public static RiskV1AuthenticationSetupsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationSetupsPost201Response result = apiInstance.PayerAuthSetup(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index ee0c831..47835fa 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.PayerAuthentication { public class ValidateAuthenticationResults { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AuthenticationResultsPost201Response Run() { string clientReferenceInformationCode = "pavalidatecheck"; @@ -17,23 +25,35 @@ public static RiskV1AuthenticationResultsPost201Response Run() Riskv1decisionsClientReferenceInformationPartner clientReferenceInformationPartner = new Riskv1decisionsClientReferenceInformationPartner( DeveloperId: clientReferenceInformationPartnerDeveloperId, SolutionId: clientReferenceInformationPartnerSolutionId - ); + ); Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner - ); + ); string orderInformationAmountDetailsCurrency = "USD"; string orderInformationAmountDetailsTotalAmount = "200.00"; Riskv1authenticationresultsOrderInformationAmountDetails orderInformationAmountDetails = new Riskv1authenticationresultsOrderInformationAmountDetails( Currency: orderInformationAmountDetailsCurrency, TotalAmount: orderInformationAmountDetailsTotalAmount - ); + ); + + + List orderInformationLineItems = new List(); + string orderInformationLineItemsUnitPrice1 = "10"; + int orderInformationLineItemsQuantity1 = 2; + string orderInformationLineItemsTaxAmount1 = "32.40"; + orderInformationLineItems.Add(new Riskv1authenticationresultsOrderInformationLineItems( + UnitPrice: orderInformationLineItemsUnitPrice1, + Quantity: orderInformationLineItemsQuantity1, + TaxAmount: orderInformationLineItemsTaxAmount1 + )); Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( - AmountDetails: orderInformationAmountDetails - ); + AmountDetails: orderInformationAmountDetails, + LineItems: orderInformationLineItems + ); string paymentInformationCardType = "002"; string paymentInformationCardExpirationMonth = "12"; @@ -44,25 +64,25 @@ public static RiskV1AuthenticationResultsPost201Response Run() ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, Number: paymentInformationCardNumber - ); + ); Riskv1authenticationresultsPaymentInformation paymentInformation = new Riskv1authenticationresultsPaymentInformation( Card: paymentInformationCard - ); + ); string consumerAuthenticationInformationAuthenticationTransactionId = "PYffv9G3sa1e0CQr5fV0"; string consumerAuthenticationInformationSignedPares = "eNqdmFmT4jgSgN+J4D90zD4yMz45PEFVhHzgA2zwjXnzhQ984Nvw61dAV1"; Riskv1authenticationresultsConsumerAuthenticationInformation consumerAuthenticationInformation = new Riskv1authenticationresultsConsumerAuthenticationInformation( AuthenticationTransactionId: consumerAuthenticationInformationAuthenticationTransactionId, SignedPares: consumerAuthenticationInformationSignedPares - ); + ); var requestObj = new ValidateRequest( ClientReferenceInformation: clientReferenceInformation, OrderInformation: orderInformation, PaymentInformation: paymentInformation, ConsumerAuthenticationInformation: consumerAuthenticationInformation - ); + ); try { @@ -72,11 +92,13 @@ public static RiskV1AuthenticationResultsPost201Response Run() var apiInstance = new PayerAuthenticationApi(clientConfig); RiskV1AuthenticationResultsPost201Response result = apiInstance.ValidateAuthenticationResults(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs b/Source/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs index d2543c3..7dd96da 100644 --- a/Source/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs +++ b/Source/Samples/Payments/Capture/CaptureOfAuthorizationThatUsedSwipedTrackData.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CaptureOfAuthorizationThatUsedSwipedTrackData { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsCapturesPost201Response Run() { var processPaymentId = AuthorizationUsingSwipedTrackData.Run().Id; @@ -48,11 +56,13 @@ public static PtsV2PaymentsCapturesPost201Response Run() PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Capture/CapturePayment.cs b/Source/Samples/Payments/Capture/CapturePayment.cs index 6b7ff80..6b5de61 100644 --- a/Source/Samples/Payments/Capture/CapturePayment.cs +++ b/Source/Samples/Payments/Capture/CapturePayment.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CapturePayment { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsCapturesPost201Response Run() { var id = SimpleAuthorizationInternet.Run().Id; @@ -41,11 +49,13 @@ public static PtsV2PaymentsCapturesPost201Response Run() var apiInstance = new CaptureApi(clientConfig); PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Capture/CapturePaymentServiceFee.cs b/Source/Samples/Payments/Capture/CapturePaymentServiceFee.cs index e5f990a..36dc285 100644 --- a/Source/Samples/Payments/Capture/CapturePaymentServiceFee.cs +++ b/Source/Samples/Payments/Capture/CapturePaymentServiceFee.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CapturePaymentServiceFee { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsCapturesPost201Response Run() { ServiceFeesWithCreditCardTransaction.CaptureTrueForProcessPayment = false; @@ -59,11 +67,13 @@ public static PtsV2PaymentsCapturesPost201Response Run() var apiInstance = new CaptureApi(clientConfig); PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs b/Source/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs index 5dbb48e..c3326d9 100644 --- a/Source/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs +++ b/Source/Samples/Payments/Capture/RestaurantCaptureWithGratuity.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class RestaurantCaptureWithGratuity { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsCapturesPost201Response Run() { var processPaymentId = RestaurantAuthorization.Run().Id; @@ -56,11 +64,13 @@ public static PtsV2PaymentsCapturesPost201Response Run() PtsV2PaymentsCapturesPost201Response result = apiInstance.CapturePayment(requestObj, processPaymentId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/Credit.cs b/Source/Samples/Payments/Credit/Credit.cs index 993d125..6d1ca62 100644 --- a/Source/Samples/Payments/Credit/Credit.cs +++ b/Source/Samples/Payments/Credit/Credit.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class Credit { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "12345678"; @@ -78,11 +86,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs index 9225fdd..81ba14f 100644 --- a/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs +++ b/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CreditUsingBluefinPCIP2PEForCardPresentEnabledAcquirer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "demomerchant"; @@ -98,11 +106,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs b/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs index 9c6c3e4..b0407ef 100644 --- a/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs +++ b/Source/Samples/Payments/Credit/CreditUsingBluefinPCIP2PEWithVisaPlatformConnect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CreditUsingBluefinPCIP2PEWithVisaPlatformConnect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "demomerchant"; @@ -98,11 +106,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/Source/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs index 0f379fb..2a86d22 100644 --- a/Source/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs +++ b/Source/Samples/Payments/Credit/CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CreditWithCustomerPaymentInstrumentAndShippingAddressTokenId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "12345678"; @@ -62,11 +70,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/CreditWithCustomerTokenId.cs b/Source/Samples/Payments/Credit/CreditWithCustomerTokenId.cs index ed78eaa..7772628 100644 --- a/Source/Samples/Payments/Credit/CreditWithCustomerTokenId.cs +++ b/Source/Samples/Payments/Credit/CreditWithCustomerTokenId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CreditWithCustomerTokenId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "12345678"; @@ -50,11 +58,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs b/Source/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs index 71443d6..a3ce4a8 100644 --- a/Source/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs +++ b/Source/Samples/Payments/Credit/CreditWithInstrumentIdentifierTokenId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CreditWithInstrumentIdentifierTokenId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "12345678"; @@ -82,11 +90,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs index f76816e..946f358 100644 --- a/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs +++ b/Source/Samples/Payments/Credit/ElectronicCheckStandAloneCredits.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ElectronicCheckStandAloneCredits { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "TC46125-1"; @@ -88,11 +96,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Credit/ServiceFeesCredit.cs b/Source/Samples/Payments/Credit/ServiceFeesCredit.cs index 53153c5..9831877 100644 --- a/Source/Samples/Payments/Credit/ServiceFeesCredit.cs +++ b/Source/Samples/Payments/Credit/ServiceFeesCredit.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ServiceFeesCredit { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2CreditsPost201Response Run() { string clientReferenceInformationCode = "12345678"; @@ -78,11 +86,13 @@ public static PtsV2CreditsPost201Response Run() var apiInstance = new CreditApi(clientConfig); PtsV2CreditsPost201Response result = apiInstance.CreateCredit(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs b/Source/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs index 98bcff2..0def616 100644 --- a/Source/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs +++ b/Source/Samples/Payments/Payments/AmericanExpressDirectEMVWithContactRead.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AmericanExpressDirectEMVWithContactRead { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -96,11 +104,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs b/Source/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs index 8e40e19..8930c95 100644 --- a/Source/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs +++ b/Source/Samples/Payments/Payments/AuthorizationCaptureForTimeoutVoidFlow.cs @@ -1,5 +1,6 @@ using System; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; using Cybersource_rest_samples_dotnet.Resource; @@ -7,6 +8,13 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationCaptureForTimeoutVoidFlow { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { SampleCode.TimeoutVoidTransactionId = NumericUtility.LongRandom(1000, 1000000000 + 1); @@ -90,11 +98,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs b/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs index 1c804c7..44be296 100644 --- a/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs +++ b/Source/Samples/Payments/Payments/AuthorizationForIncrementalAuthorizationFlow.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationForIncrementalAuthorizationFlow { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { bool processingInformationCapture = false; @@ -255,11 +263,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs b/Source/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs index f8e30a5..efbd12b 100644 --- a/Source/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs +++ b/Source/Samples/Payments/Payments/AuthorizationForTimeoutReversalFlow.cs @@ -1,5 +1,6 @@ using System; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; using Cybersource_rest_samples_dotnet.Resource; @@ -7,6 +8,13 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationForTimeoutReversalFlow { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() @@ -96,11 +104,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs b/Source/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs index 65e92e5..909cd7d 100644 --- a/Source/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs +++ b/Source/Samples/Payments/Payments/AuthorizationSkipDecisionManagerForSingleTransaction.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationSkipDecisionManagerForSingleTransaction { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_16"; @@ -86,11 +94,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs index c08d8f7..bca1f0c 100644 --- a/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs +++ b/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationUsingBluefinPCIP2PEForCardPresentEnabledAcquirer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "demomerchant"; @@ -102,11 +110,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs index 87d5242..5aaf850 100644 --- a/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs +++ b/Source/Samples/Payments/Payments/AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationUsingBluefinPCIP2PEWithVisaPlatformConnect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "demomerchant"; @@ -112,11 +120,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs b/Source/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs index b6b1bf4..b425960 100644 --- a/Source/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs +++ b/Source/Samples/Payments/Payments/AuthorizationUsingSwipedTrackData.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationUsingSwipedTrackData { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "ABC123"; @@ -74,11 +82,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs b/Source/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs index 634ac5d..0d7de7a 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithCaptureSale.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithCaptureSale { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -82,11 +90,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs index 43fba69..7bbcc30 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithCustomerPaymentInstrumentAndShippingAddressTokenId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -62,11 +70,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs index 348dac1..6402052 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenCreation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithCustomerTokenCreation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -112,11 +120,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs index ac17e27..8dcbb95 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithCustomerTokenDefaultPaymentInstrumentAndShippingAddressCreation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -133,11 +141,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs index 6dc1649..30e67be 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithCustomerTokenId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithCustomerTokenId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -50,11 +58,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs b/Source/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs index 3439636..e30bd43 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDMAcceptPAEnroll.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDMAcceptPAEnroll { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "cbys_test"; @@ -88,11 +96,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs b/Source/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs index 6dc91e9..e19f9c6 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDMRejectPAEnroll.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDMRejectPAEnroll { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -88,11 +96,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs b/Source/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs index 5da19e1..29da2cf 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDMReviewPAEnroll.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDMReviewPAEnroll { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -88,11 +96,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs index 6c094b9..a3010c4 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManager.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDecisionManager { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TSYS_Eh_FE_01"; @@ -76,11 +84,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs index 11b4ae9..a3dbdb7 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerBuyerInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDecisionManagerBuyerInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -94,11 +102,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs index fd83883..95add8f 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerCustomSetup.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDecisionManagerCustomSetup { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_16"; @@ -86,11 +94,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs index d694722..505fe13 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerDeviceInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDecisionManagerDeviceInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -88,11 +96,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs index 7628a79..92a9623 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerMerchantDefinedInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDecisionManagerMerchantDefinedInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -93,11 +101,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs index fb943f1..f1a8192 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerShippingInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDecisionManagerShippingInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -96,11 +104,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs index cb4a6c9..e179e6d 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithDecisionManagerTravelInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithDecisionManagerTravelInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -80,11 +88,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs b/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs index e2912fb..f3aaef0 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenCreation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithInstrumentIdentifierTokenCreation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -112,11 +120,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs b/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs index 4ae38ac..4eab0e9 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithInstrumentIdentifierTokenId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithInstrumentIdentifierTokenId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -90,11 +98,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs b/Source/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs index b931b20..94e8f5d 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithLegacyToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithLegacyToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -72,11 +80,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs b/Source/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs index d66fa95..5398be1 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithPAEnrollAuthenticationNeeded.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithPAEnrollAuthenticationNeeded { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -96,11 +104,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs b/Source/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs index 57d4a1d..234614d 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithPayerAuthValidation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithPayerAuthValidation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -86,11 +94,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs b/Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs index 9097604..d8fbe55 100644 --- a/Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs +++ b/Source/Samples/Payments/Payments/AuthorizationWithTMSTokenBypassingNetworkToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class AuthorizationWithTMSTokenBypassingNetworkToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -56,11 +64,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/DigitalPaymentGooglePay.cs b/Source/Samples/Payments/Payments/DigitalPaymentGooglePay.cs index c4bfa1d..380945a 100644 --- a/Source/Samples/Payments/Payments/DigitalPaymentGooglePay.cs +++ b/Source/Samples/Payments/Payments/DigitalPaymentGooglePay.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class DigitalPaymentGooglePay { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() @@ -94,11 +102,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/DigitalPaymentsApplePay.cs b/Source/Samples/Payments/Payments/DigitalPaymentsApplePay.cs index 33c2689..31fa1aa 100644 --- a/Source/Samples/Payments/Payments/DigitalPaymentsApplePay.cs +++ b/Source/Samples/Payments/Payments/DigitalPaymentsApplePay.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class DigitalPaymentsApplePay { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() @@ -94,11 +102,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/ElectronicCheckDebits.cs b/Source/Samples/Payments/Payments/ElectronicCheckDebits.cs index fd9222c..2acea29 100644 --- a/Source/Samples/Payments/Payments/ElectronicCheckDebits.cs +++ b/Source/Samples/Payments/Payments/ElectronicCheckDebits.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ElectronicCheckDebits { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -85,11 +93,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs b/Source/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs index 67f5ccd..a79ecbd 100644 --- a/Source/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs +++ b/Source/Samples/Payments/Payments/ElectronicCheckDebitsWithLegacyToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ElectronicCheckDebitsWithLegacyToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -76,11 +84,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/IncrementalAuthorization.cs b/Source/Samples/Payments/Payments/IncrementalAuthorization.cs index cc22119..b794ef7 100644 --- a/Source/Samples/Payments/Payments/IncrementalAuthorization.cs +++ b/Source/Samples/Payments/Payments/IncrementalAuthorization.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class IncrementalAuthorization { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2IncrementalAuthorizationPatch201Response Run() { string id = AuthorizationForIncrementalAuthorizationFlow.Run().Id; @@ -17,7 +25,7 @@ public static PtsV2IncrementalAuthorizationPatch201Response Run() Code: clientReferenceInformationCode ); - bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsidProcessingInformationAuthorizationOptionsInitiator( StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed ); @@ -67,11 +75,13 @@ public static PtsV2IncrementalAuthorizationPatch201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2IncrementalAuthorizationPatch201Response result = apiInstance.IncrementAuth(id, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/LevelIIData.cs b/Source/Samples/Payments/Payments/LevelIIData.cs index 465ee7d..e7fea39 100644 --- a/Source/Samples/Payments/Payments/LevelIIData.cs +++ b/Source/Samples/Payments/Payments/LevelIIData.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class LevelIIData { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() { @@ -97,11 +105,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/LevelIIIData.cs b/Source/Samples/Payments/Payments/LevelIIIData.cs index af169e4..8c90f9b 100644 --- a/Source/Samples/Payments/Payments/LevelIIIData.cs +++ b/Source/Samples/Payments/Payments/LevelIIIData.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class LevelIIIData { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() { @@ -118,11 +126,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/PartialAuthorization.cs b/Source/Samples/Payments/Payments/PartialAuthorization.cs index 4d931b8..3ea3d31 100644 --- a/Source/Samples/Payments/Payments/PartialAuthorization.cs +++ b/Source/Samples/Payments/Payments/PartialAuthorization.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class PartialAuthorization { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "1234567890"; @@ -94,11 +102,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/PaymentNetworkTokenization.cs b/Source/Samples/Payments/Payments/PaymentNetworkTokenization.cs index 17c661f..375d084 100644 --- a/Source/Samples/Payments/Payments/PaymentNetworkTokenization.cs +++ b/Source/Samples/Payments/Payments/PaymentNetworkTokenization.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class PaymentNetworkTokenization { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() { @@ -100,11 +108,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/PaymentWithFlexToken.cs b/Source/Samples/Payments/Payments/PaymentWithFlexToken.cs index 5688f8d..9d44aae 100644 --- a/Source/Samples/Payments/Payments/PaymentWithFlexToken.cs +++ b/Source/Samples/Payments/Payments/PaymentWithFlexToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class PaymentWithFlexToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -72,11 +80,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs b/Source/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs index 59925cb..0a7489b 100644 --- a/Source/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs +++ b/Source/Samples/Payments/Payments/PaymentWithFlexTokenCreatePermanentTMSToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class PaymentWithFlexTokenCreatePermanentTMSToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TC50171_3"; @@ -102,11 +110,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/RestaurantAuthorization.cs b/Source/Samples/Payments/Payments/RestaurantAuthorization.cs index 3395082..60eeba0 100644 --- a/Source/Samples/Payments/Payments/RestaurantAuthorization.cs +++ b/Source/Samples/Payments/Payments/RestaurantAuthorization.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class RestaurantAuthorization { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "demomerchant"; @@ -74,11 +82,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs index 2bc8902..faebdce 100644 --- a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs +++ b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingEMVTechnologyWithContactReadOneForCardPresentEnabledAcquirer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -68,11 +76,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs index d50d5f2..8280266 100644 --- a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs +++ b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingEMVTechnologyWithContactReadTwoForCardPresentEnabledAcquirer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -96,11 +104,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs index aa6edd2..a809c2e 100644 --- a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs +++ b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingEMVTechnologyWithContactReadWithVisaPlatformConnect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -80,11 +88,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs index 2434e28..5951879 100644 --- a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs +++ b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactless.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingEMVTechnologyWithContactless { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -68,11 +76,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs index 7c2a218..327e303 100644 --- a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs +++ b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingEMVTechnologyWithContactlessReadForCardPresentEnabledAcquirer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -96,11 +104,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs index 724e1c9..67fef17 100644 --- a/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs +++ b/Source/Samples/Payments/Payments/SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingEMVTechnologyWithContactlessReadWithVisaPlatformConnect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -80,11 +88,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs index fc47be9..1bdceba 100644 --- a/Source/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs +++ b/Source/Samples/Payments/Payments/SaleUsingKeyedDataForCardPresentEnabledAcquirer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingKeyedDataForCardPresentEnabledAcquirer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -72,11 +80,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs b/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs index 9f2173f..49904c5 100644 --- a/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs +++ b/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithBalanceInquiry.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingKeyedDataWithBalanceInquiry { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -88,11 +96,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs index b3d5dea..53981b5 100644 --- a/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs +++ b/Source/Samples/Payments/Payments/SaleUsingKeyedDataWithVisaPlatformConnect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingKeyedDataWithVisaPlatformConnect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -82,11 +90,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs b/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs index 1817940..48fca03 100644 --- a/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs +++ b/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingSwipedTrackDataForCardPresentEnabledAcquirer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -58,11 +66,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs b/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs index 4ddb307..31d68af 100644 --- a/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs +++ b/Source/Samples/Payments/Payments/SaleUsingSwipedTrackDataWithVisaPlatformConnect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SaleUsingSwipedTrackDataWithVisaPlatformConnect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -68,11 +76,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs b/Source/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs index eed3d95..17dcce4 100644 --- a/Source/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs +++ b/Source/Samples/Payments/Payments/ServiceFeesWithCreditCardTransaction.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ServiceFeesWithCreditCardTransaction { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() @@ -107,11 +115,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs b/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs index b019fe0..3160b63 100644 --- a/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs +++ b/Source/Samples/Payments/Payments/SimpleAuthorizationInternet.cs @@ -10,6 +10,13 @@ namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class SimpleAuthorizationInternet { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() @@ -90,17 +97,15 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch(ApiException err) - { - Console.WriteLine("Error Code: " + err.ErrorCode); - Console.WriteLine("Error Message: " + err.Message); - return null; - } - catch (Exception e) + catch(ApiException e) { + Console.WriteLine("Error Code: " + e.ErrorCode); + Console.WriteLine("Error Message: " + e.Message); Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/Swiped.cs b/Source/Samples/Payments/Payments/Swiped.cs index f26c4a2..6738e8b 100644 --- a/Source/Samples/Payments/Payments/Swiped.cs +++ b/Source/Samples/Payments/Payments/Swiped.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class Swiped { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "123456"; @@ -58,11 +66,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Payments/ZeroDollarAuthorization.cs b/Source/Samples/Payments/Payments/ZeroDollarAuthorization.cs index cb9b3c7..1e0ddad 100644 --- a/Source/Samples/Payments/Payments/ZeroDollarAuthorization.cs +++ b/Source/Samples/Payments/Payments/ZeroDollarAuthorization.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ZeroDollarAuthorization { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static bool CaptureTrueForProcessPayment { get; set; } = false; public static PtsV2PaymentsPost201Response Run() { @@ -90,11 +98,13 @@ public static PtsV2PaymentsPost201Response Run() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs b/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs index 91bd42a..bc6c848 100644 --- a/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs +++ b/Source/Samples/Payments/Refund/ElectronicCheckFollowonRefund.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ElectronicCheckFollowonRefund { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsRefundPost201Response Run() { var id = ElectronicCheckDebits.Run().Id; @@ -56,11 +64,13 @@ public static PtsV2PaymentsRefundPost201Response Run() var apiInstance = new RefundApi(clientConfig); PtsV2PaymentsRefundPost201Response result = apiInstance.RefundPayment(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Refund/RefundCapture.cs b/Source/Samples/Payments/Refund/RefundCapture.cs index c9fa363..a7ad1e3 100644 --- a/Source/Samples/Payments/Refund/RefundCapture.cs +++ b/Source/Samples/Payments/Refund/RefundCapture.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class RefundCapture { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsRefundPost201Response Run() { var id = CapturePayment.Run().Id; @@ -42,11 +50,13 @@ public static PtsV2PaymentsRefundPost201Response Run() var apiInstance = new RefundApi(clientConfig); PtsV2PaymentsRefundPost201Response result = apiInstance.RefundCapture(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Refund/RefundPayment.cs b/Source/Samples/Payments/Refund/RefundPayment.cs index 47d056e..385a357 100644 --- a/Source/Samples/Payments/Refund/RefundPayment.cs +++ b/Source/Samples/Payments/Refund/RefundPayment.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class RefundPayment { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsRefundPost201Response Run() { SimpleAuthorizationInternet.CaptureTrueForProcessPayment = true; @@ -43,11 +51,13 @@ public static PtsV2PaymentsRefundPost201Response Run() var apiInstance = new RefundApi(clientConfig); PtsV2PaymentsRefundPost201Response result = apiInstance.RefundPayment(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs b/Source/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs index e5364f4..25c93ed 100644 --- a/Source/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs +++ b/Source/Samples/Payments/Reversal/ProcessAuthorizationReversal.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ProcessAuthorizationReversal { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsReversalsPost201Response Run() { SimpleAuthorizationInternet.CaptureTrueForProcessPayment = false; @@ -43,11 +51,13 @@ public static PtsV2PaymentsReversalsPost201Response Run() var apiInstance = new ReversalApi(clientConfig); PtsV2PaymentsReversalsPost201Response result = apiInstance.AuthReversal(id, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs b/Source/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs index 7de31a0..5a9becc 100644 --- a/Source/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs +++ b/Source/Samples/Payments/Reversal/ServiceFeesAuthorizationReversal.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class ServiceFeesAuthorizationReversal { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsReversalsPost201Response Run() { var id = ServiceFeesWithCreditCardTransaction.Run().Id; @@ -42,11 +50,13 @@ public static PtsV2PaymentsReversalsPost201Response Run() var apiInstance = new ReversalApi(clientConfig); PtsV2PaymentsReversalsPost201Response result = apiInstance.AuthReversal(id, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Reversal/TimeoutReversal.cs b/Source/Samples/Payments/Reversal/TimeoutReversal.cs index caa7c84..2b2bf30 100644 --- a/Source/Samples/Payments/Reversal/TimeoutReversal.cs +++ b/Source/Samples/Payments/Reversal/TimeoutReversal.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class TimeoutReversal { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsReversalsPost201Response Run() { AuthorizationForTimeoutReversalFlow.Run(); @@ -43,11 +51,13 @@ public static PtsV2PaymentsReversalsPost201Response Run() var apiInstance = new ReversalApi(clientConfig); PtsV2PaymentsReversalsPost201Response result = apiInstance.MitReversal(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Void/TimeoutVoid.cs b/Source/Samples/Payments/Void/TimeoutVoid.cs index 30199e1..78a685d 100644 --- a/Source/Samples/Payments/Void/TimeoutVoid.cs +++ b/Source/Samples/Payments/Void/TimeoutVoid.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class TimeoutVoid { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsVoidsPost201Response Run() { AuthorizationCaptureForTimeoutVoidFlow.Run(); @@ -29,11 +37,13 @@ public static PtsV2PaymentsVoidsPost201Response Run() var apiInstance = new VoidApi(clientConfig); PtsV2PaymentsVoidsPost201Response result = apiInstance.MitVoid(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Void/VoidCapture.cs b/Source/Samples/Payments/Void/VoidCapture.cs index 55b2f11..d2479f0 100644 --- a/Source/Samples/Payments/Void/VoidCapture.cs +++ b/Source/Samples/Payments/Void/VoidCapture.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class VoidCapture { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsVoidsPost201Response Run() { var id = CapturePayment.Run().Id; @@ -29,11 +37,13 @@ public static PtsV2PaymentsVoidsPost201Response Run() var apiInstance = new VoidApi(clientConfig); PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidCapture(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Void/VoidCredit.cs b/Source/Samples/Payments/Void/VoidCredit.cs index 3e36066..02e6952 100644 --- a/Source/Samples/Payments/Void/VoidCredit.cs +++ b/Source/Samples/Payments/Void/VoidCredit.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class VoidCredit { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsVoidsPost201Response Run() { var id = Credit.Run().Id; @@ -30,11 +38,13 @@ public static PtsV2PaymentsVoidsPost201Response Run() var apiInstance = new VoidApi(clientConfig); PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidCredit(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Void/VoidPayment.cs b/Source/Samples/Payments/Void/VoidPayment.cs index 490b6ba..2513746 100644 --- a/Source/Samples/Payments/Void/VoidPayment.cs +++ b/Source/Samples/Payments/Void/VoidPayment.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class VoidPayment { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsVoidsPost201Response Run() { SimpleAuthorizationInternet.CaptureTrueForProcessPayment = true; @@ -31,11 +39,13 @@ public static PtsV2PaymentsVoidsPost201Response Run() var apiInstance = new VoidApi(clientConfig); PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidPayment(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payments/Void/VoidRefund.cs b/Source/Samples/Payments/Void/VoidRefund.cs index aae3571..8e55651 100644 --- a/Source/Samples/Payments/Void/VoidRefund.cs +++ b/Source/Samples/Payments/Void/VoidRefund.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class VoidRefund { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PaymentsVoidsPost201Response Run() { var id = RefundPayment.Run().Id; @@ -30,11 +38,13 @@ public static PtsV2PaymentsVoidsPost201Response Run() var apiInstance = new VoidApi(clientConfig); PtsV2PaymentsVoidsPost201Response result = apiInstance.VoidRefund(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payouts/PayoutCardNotToken.cs b/Source/Samples/Payouts/PayoutCardNotToken.cs index da8c3d8..ec70d54 100644 --- a/Source/Samples/Payouts/PayoutCardNotToken.cs +++ b/Source/Samples/Payouts/PayoutCardNotToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payouts { public class PayoutCardNotToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PayoutsPost201Response Run() { string clientReferenceInformationCode = "33557799"; @@ -126,11 +134,13 @@ public static PtsV2PayoutsPost201Response Run() var apiInstance = new PayoutsApi(clientConfig); PtsV2PayoutsPost201Response result = apiInstance.OctCreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Payouts/PayoutToken.cs b/Source/Samples/Payouts/PayoutToken.cs index 1240b33..b29f8a1 100644 --- a/Source/Samples/Payouts/PayoutToken.cs +++ b/Source/Samples/Payouts/PayoutToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Payouts { public class PayoutToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV2PayoutsPost201Response Run() { string clientReferenceInformationCode = "111111113"; @@ -122,11 +130,13 @@ public static PtsV2PayoutsPost201Response Run() var apiInstance = new PayoutsApi(clientConfig); PtsV2PayoutsPost201Response result = apiInstance.OctCreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs b/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs index 1b2b870..07e7242 100644 --- a/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs +++ b/Source/Samples/Reporting/ConversionDetails/GetConversionDetailTransactions.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetConversionDetailTransactions { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3ConversionDetailsGet200Response Run() { var startTime = DateTime.ParseExact("2023-01-21T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); @@ -22,11 +30,13 @@ public static ReportingV3ConversionDetailsGet200Response Run() var apiInstance = new ConversionDetailsApi(clientConfig); ReportingV3ConversionDetailsGet200Response result = apiInstance.GetConversionDetail(startTime, endTime, organizationId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs b/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs index 454a4c8..06b6209 100644 --- a/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs +++ b/Source/Samples/Reporting/NetFundings/GetNetfundingInformationForAccountOrMerchant.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetNetfundingInformationForAccountOrMerchant { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3NetFundingsGet200Response Run() { var startTime = DateTime.ParseExact("2023-01-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); @@ -23,11 +31,13 @@ public static ReportingV3NetFundingsGet200Response Run() var apiInstance = new NetFundingsApi(clientConfig); ReportingV3NetFundingsGet200Response result = apiInstance.GetNetFundingDetails(startTime, endTime, organizationId, groupName); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs b/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs index 6000097..7f8e239 100644 --- a/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs +++ b/Source/Samples/RiskManagement/DecisionManager/AddDataToList.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class AddDataToList { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1UpdatePost201Response Run() { string type = "negative"; @@ -81,11 +89,13 @@ public static RiskV1UpdatePost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1UpdatePost201Response result = apiInstance.AddNegative(type, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs b/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs index 56658c9..608bab4 100644 --- a/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/AddDuplicateInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class AddDuplicateInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1UpdatePost201Response Run() { string type = "positive"; @@ -73,11 +81,13 @@ public static RiskV1UpdatePost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1UpdatePost201Response result = apiInstance.AddNegative(type, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs b/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs index f6892f8..f2bd697 100644 --- a/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs +++ b/Source/Samples/RiskManagement/DecisionManager/MarkAsSuspect.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class MarkAsSuspect { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1UpdatePost201Response Run() { string id = "5825489395116729903003"; @@ -56,11 +64,13 @@ public static RiskV1UpdatePost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1UpdatePost201Response result = apiInstance.FraudUpdate(id, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs b/Source/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs index 0730423..da45b4e 100644 --- a/Source/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs +++ b/Source/Samples/RiskManagement/DecisionManager/RemoveFromHistory.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class RemoveFromHistory { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1UpdatePost201Response Run() { string id = "5825489395116729903003"; @@ -37,11 +45,13 @@ public static RiskV1UpdatePost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1UpdatePost201Response result = apiInstance.FraudUpdate(id, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs b/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs index c94225b..a382c8b 100644 --- a/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs +++ b/Source/Samples/RiskManagement/Verification/AddressMatchNotFound.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class AddressMatchNotFound { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; @@ -50,11 +58,13 @@ public static RiskV1AddressVerificationsPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs b/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs index 62ea260..5bf6c41 100644 --- a/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs +++ b/Source/Samples/RiskManagement/Verification/ApartmentNumberMissingOrNotFound.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ApartmentNumberMissingOrNotFound { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; @@ -66,11 +74,13 @@ public static RiskV1AddressVerificationsPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs b/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs index 9f56a7f..e92f51c 100644 --- a/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs +++ b/Source/Samples/RiskManagement/Verification/CanadianBillingDetails.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class CanadianBillingDetails { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; @@ -76,11 +84,13 @@ public static RiskV1AddressVerificationsPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs b/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs index f207bb5..55e3734 100644 --- a/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs +++ b/Source/Samples/RiskManagement/Verification/CustomerMatchDeniedPartiesList.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class CustomerMatchDeniedPartiesList { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; @@ -94,11 +102,13 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs b/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs index 2962cf2..3ae5607 100644 --- a/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs +++ b/Source/Samples/RiskManagement/Verification/MultipleLineItems.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class MultipleLineItems { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; @@ -109,11 +117,13 @@ public static RiskV1AddressVerificationsPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/NoCompanyName.cs b/Source/Samples/RiskManagement/Verification/NoCompanyName.cs index ffcaca3..e492f7f 100644 --- a/Source/Samples/RiskManagement/Verification/NoCompanyName.cs +++ b/Source/Samples/RiskManagement/Verification/NoCompanyName.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class NoCompanyName { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; @@ -78,11 +86,13 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs b/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs index 28b5d77..ef4bd5f 100644 --- a/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs +++ b/Source/Samples/RiskManagement/Verification/ShippingDetailsNotUSOrCanada.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ShippingDetailsNotUSOrCanada { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; @@ -96,11 +104,13 @@ public static RiskV1AddressVerificationsPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs b/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs index 3c42109..e76caeb 100644 --- a/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs +++ b/Source/Samples/RiskManagement/Verification/VerboseRequestWithAllFields.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class VerboseRequestWithAllFields { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1AddressVerificationsPost201Response Run() { string clientReferenceInformationCode = "addressEg"; @@ -104,11 +112,13 @@ public static RiskV1AddressVerificationsPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1AddressVerificationsPost201Response result = apiInstance.VerifyCustomerAddress(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs b/Source/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs index 76e98b3..b23ba15 100644 --- a/Source/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs +++ b/Source/Samples/SecureFileShare/DownloadFileWithFileIdentifier.cs @@ -6,12 +6,20 @@ using System.Xml.Serialization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.SecureFileShare { public class DownloadFileWithFileIdentifier { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { var fileId = "QmF0Y2hGaWxlc0RldGFpbFJlcG9ydC5jc3YtMjAyMC0wMS0zMA=="; @@ -31,15 +39,17 @@ public static void Run() Console.WriteLine("\nFile Downloaded at the following location : "); Console.WriteLine($"{Path.GetFullPath(downloadFilePath)}\n"); + WriteLogAudit(apiInstance.GetStatusCode()); // END : FILE DOWNLOAD FUNCTIONALITY } catch (FileNotFoundException) { Console.WriteLine("File Not Found : Kindly verify the path."); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } diff --git a/Source/Samples/SecureFileShare/GetListOfFiles.cs b/Source/Samples/SecureFileShare/GetListOfFiles.cs index 93c9a0d..22f7aca 100644 --- a/Source/Samples/SecureFileShare/GetListOfFiles.cs +++ b/Source/Samples/SecureFileShare/GetListOfFiles.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.SecureFileShare { public class GetListOfFiles { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static V1FileDetailsGet200Response Run() { var startDate = DateTime.ParseExact("2020-07-20", "yyyy-MM-dd", CultureInfo.InvariantCulture); @@ -23,11 +31,13 @@ public static V1FileDetailsGet200Response Run() var apiInstance = new SecureFileShareApi(clientConfig); V1FileDetailsGet200Response result = apiInstance.GetFileDetail(startDate, endDate, organizationId, name); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs b/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs index dca3f5d..83d641b 100644 --- a/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/DeleteCustomer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class DeleteCustomer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string customerTokenId = CreateCustomer.Run().Id; @@ -20,10 +28,12 @@ public static void Run() var apiInstance = new CustomerApi(clientConfig); apiInstance.DeleteCustomer(customerTokenId); Console.WriteLine($"Customer {customerTokenId} has been deleted."); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/TransactionBatches/GetIndividualBatchFile.cs b/Source/Samples/TransactionBatches/GetIndividualBatchFile.cs index e473dfe..cf67c10 100644 --- a/Source/Samples/TransactionBatches/GetIndividualBatchFile.cs +++ b/Source/Samples/TransactionBatches/GetIndividualBatchFile.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches { public class GetIndividualBatchFile { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV1TransactionBatchesIdGet200Response Run() { try @@ -21,11 +29,13 @@ public static PtsV1TransactionBatchesIdGet200Response Run() var apiInstance = new TransactionBatchesApi(clientConfig); PtsV1TransactionBatchesIdGet200Response result = apiInstance.GetTransactionBatchId(id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TransactionBatches/GetListOfBatchFiles.cs b/Source/Samples/TransactionBatches/GetListOfBatchFiles.cs index 100a885..3c603ec 100644 --- a/Source/Samples/TransactionBatches/GetListOfBatchFiles.cs +++ b/Source/Samples/TransactionBatches/GetListOfBatchFiles.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches { public class GetListOfBatchFiles { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PtsV1TransactionBatchesGet200Response Run() { var startTime = DateTime.ParseExact("2020-02-22T01:47:57Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); @@ -21,11 +29,13 @@ public static PtsV1TransactionBatchesGet200Response Run() var apiInstance = new TransactionBatchesApi(clientConfig); PtsV1TransactionBatchesGet200Response result = apiInstance.GetTransactionBatches(startTime, endTime); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs b/Source/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs index f6aebf2..9552a27 100644 --- a/Source/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs +++ b/Source/Samples/TransactionBatches/GetTransactionDetailsForGivenBatchId.cs @@ -6,12 +6,20 @@ using System.Xml.Serialization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TransactionBatches { public class GetTransactionDetailsForGivenBatchId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { var id = "12345"; @@ -33,15 +41,17 @@ public static void Run() Console.WriteLine("\nFile Downloaded at the following location : "); Console.WriteLine($"{Path.GetFullPath(downloadFilePath)}\n"); + WriteLogAudit(apiInstance.GetStatusCode()); // END : FILE DOWNLOAD FUNCTIONALITY } catch (FileNotFoundException) { Console.WriteLine("File Not Found : Kindly verify the path."); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } diff --git a/Source/Samples/TransactionDetails/RetrieveTransaction.cs b/Source/Samples/TransactionDetails/RetrieveTransaction.cs index 2b8cf88..51443ab 100644 --- a/Source/Samples/TransactionDetails/RetrieveTransaction.cs +++ b/Source/Samples/TransactionDetails/RetrieveTransaction.cs @@ -3,6 +3,7 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; using Cybersource_rest_samples_dotnet.Samples.Payments; @@ -10,6 +11,13 @@ namespace Cybersource_rest_samples_dotnet.Samples.TransactionDetails { public class RetrieveTransaction { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static TssV2TransactionsGet200Response Run() { string id = SimpleAuthorizationInternet.Run().Id; @@ -24,11 +32,13 @@ public static TssV2TransactionsGet200Response Run() var apiInstance = new TransactionDetailsApi(clientConfig); TssV2TransactionsGet200Response result = apiInstance.GetTransaction(id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TransactionSearch/CreateSearchRequest.cs b/Source/Samples/TransactionSearch/CreateSearchRequest.cs index 2c88a41..3d7c762 100644 --- a/Source/Samples/TransactionSearch/CreateSearchRequest.cs +++ b/Source/Samples/TransactionSearch/CreateSearchRequest.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TransactionSearch { public class CreateSearchRequest { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static TssV2TransactionsPost201Response Run() { bool save = false; @@ -36,11 +44,13 @@ public static TssV2TransactionsPost201Response Run() var apiInstance = new SearchTransactionsApi(clientConfig); TssV2TransactionsPost201Response result = apiInstance.CreateSearch(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TransactionSearch/GetSearchResults.cs b/Source/Samples/TransactionSearch/GetSearchResults.cs index 93d4951..b644963 100644 --- a/Source/Samples/TransactionSearch/GetSearchResults.cs +++ b/Source/Samples/TransactionSearch/GetSearchResults.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TransactionSearch { public class GetSearchResults { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static TssV2TransactionsPost201Response Run() { var searchId = CreateSearchRequest.Run().SearchId; @@ -21,11 +29,13 @@ public static TssV2TransactionsPost201Response Run() var apiInstance = new SearchTransactionsApi(clientConfig); TssV2TransactionsPost201Response result = apiInstance.GetSearch(searchId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs b/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs index 0c671a0..44f9c39 100644 --- a/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs +++ b/Source/Samples/UserManagement/UserManagement/GetUserInformationDeprecated.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.UserManagement { public class GetUserInformationDeprecated { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static UmsV1UsersGet200Response Run() { string organizationId = "testrest"; @@ -23,11 +31,13 @@ public static UmsV1UsersGet200Response Run() var apiInstance = new UserManagementApi(clientConfig); UmsV1UsersGet200Response result = apiInstance.GetUsers(organizationId, userName, permissionId, roleId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); Console.WriteLine(e.StackTrace); return null; } diff --git a/Source/Samples/ValueAddedService/BasicTaxCalculationRequest.cs b/Source/Samples/ValueAddedService/BasicTaxCalculationRequest.cs index 0db28e2..f247b73 100644 --- a/Source/Samples/ValueAddedService/BasicTaxCalculationRequest.cs +++ b/Source/Samples/ValueAddedService/BasicTaxCalculationRequest.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService { public class BasicTaxCalculationRequest { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static VasV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TAX_TC001"; @@ -100,11 +108,13 @@ public static VasV2PaymentsPost201Response Run() var apiInstance = new TaxesApi(clientConfig); VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/ValueAddedService/CommittedTaxCallRequest.cs b/Source/Samples/ValueAddedService/CommittedTaxCallRequest.cs index 885b358..e96c618 100644 --- a/Source/Samples/ValueAddedService/CommittedTaxCallRequest.cs +++ b/Source/Samples/ValueAddedService/CommittedTaxCallRequest.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService { public class CommittedTaxCallRequest { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static VasV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TAX_TC001"; @@ -134,11 +142,13 @@ public static VasV2PaymentsPost201Response Run() var apiInstance = new TaxesApi(clientConfig); VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs b/Source/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs index b9c70fb..c45ee21 100644 --- a/Source/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs +++ b/Source/Samples/ValueAddedService/CommittedTaxRefundCallRequest.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService { public class CommittedTaxRefundCallRequest { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static VasV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TAX_TC001"; @@ -136,11 +144,13 @@ public static VasV2PaymentsPost201Response Run() var apiInstance = new TaxesApi(clientConfig); VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/ValueAddedService/TaxRefundRequest.cs b/Source/Samples/ValueAddedService/TaxRefundRequest.cs index 5544865..388bdbf 100644 --- a/Source/Samples/ValueAddedService/TaxRefundRequest.cs +++ b/Source/Samples/ValueAddedService/TaxRefundRequest.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService { public class TaxRefundRequest { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static VasV2PaymentsPost201Response Run() { string clientReferenceInformationCode = "TAX_TC001"; @@ -134,11 +142,13 @@ public static VasV2PaymentsPost201Response Run() var apiInstance = new TaxesApi(clientConfig); VasV2PaymentsPost201Response result = apiInstance.CalculateTax(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/ValueAddedService/VoidCommittedTaxCall.cs b/Source/Samples/ValueAddedService/VoidCommittedTaxCall.cs index f1901f7..a1c5b79 100644 --- a/Source/Samples/ValueAddedService/VoidCommittedTaxCall.cs +++ b/Source/Samples/ValueAddedService/VoidCommittedTaxCall.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.ValueAddedService { public class VoidCommittedTaxCall { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static VasV2TaxVoid200Response Run() { string id = CommittedTaxCallRequest.Run().Id; @@ -29,11 +37,13 @@ public static VasV2TaxVoid200Response Run() var apiInstance = new TaxesApi(clientConfig); VasV2TaxVoid200Response result = apiInstance.VoidTax(requestObj, id); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } From 89dd0a0f4679270e953451187b92acc90c8aef2d Mon Sep 17 00:00:00 2001 From: gaubansa Date: Tue, 25 Jun 2024 15:07:27 +0530 Subject: [PATCH 131/161] adding sample codes with logs --- .../Authentication/StandAloneHttpSignature.cs | 34 ++++++++---- .../Samples/Authentication/StandAloneJWT.cs | 31 ++++++++--- .../Authentication/StandAloneMetaKey.cs | 12 ++++- .../Samples/Authentication/StandAloneOAuth.cs | 39 ++++++++------ .../Samples/FlexMicroform/FlexTokenizeCard.cs | 14 ++++- Source/Samples/FlexMicroform/GenerateKey.cs | 16 ++++-- .../GenerateKeyLegacyTokenFormat.cs | 18 +++++-- .../ChargebackDetails/GetChargebackDetails.cs | 52 +++++++++++-------- .../GetChargebackSummaries.cs | 52 +++++++++++-------- ...geClearingLevelDataForAccountOrMerchant.cs | 52 +++++++++++-------- .../GetNotificationOfChanges.cs | 12 ++++- .../GetPaymentBatchSummaryData.cs | 12 ++++- .../GetPurchaseAndRefundDetails.cs | 12 ++++- .../ReportDefinitions/GetReportDefinition.cs | 12 ++++- .../GetReportingResourceInformation.cs | 12 ++++- .../ReportDownloads/DownloadReport.cs | 12 ++++- ...CreateClassicStandardReportSubscription.cs | 12 ++++- .../CreateReportSubscription.cs | 12 ++++- ...eSubscriptionOfReportNameByOrganization.cs | 12 ++++- .../GetAllSubscriptions.cs | 12 ++++- .../GetSubscriptionForReportName.cs | 12 ++++- .../Reporting/Reports/CreateAdhocReport.cs | 12 ++++- .../Reports/GetReportBasedOnReportId.cs | 12 ++++- .../Reports/RetrieveAvailableReports.cs | 12 ++++- .../RetrievalDetails/GetRetrievalDetails.cs | 52 +++++++++++-------- .../GetRetrievalSummaries.cs | 52 +++++++++++-------- .../DecisionManager/BasicDMTransaction.cs | 12 ++++- .../DecisionManager/DMWithBuyerInformation.cs | 12 ++++- .../DMWithDecisionProfileRejectResponse.cs | 12 ++++- .../DMWithDeviceInformation.cs | 12 ++++- .../DMWithMerchantDefinedInformation.cs | 12 ++++- .../DMWithScoreExceedsThresholdResponse.cs | 12 ++++- .../DMWithShippingInformation.cs | 12 ++++- .../DMWithTravelInformation.cs | 12 ++++- .../Verification/ComplianceStatusCompleted.cs | 12 ++++- .../ExportComplianceInformationProvided.cs | 12 ++++- .../Verification/MultipleSanctionLists.cs | 12 ++++- 37 files changed, 553 insertions(+), 171 deletions(-) diff --git a/Source/Samples/Authentication/StandAloneHttpSignature.cs b/Source/Samples/Authentication/StandAloneHttpSignature.cs index cda6f6e..7060baa 100644 --- a/Source/Samples/Authentication/StandAloneHttpSignature.cs +++ b/Source/Samples/Authentication/StandAloneHttpSignature.cs @@ -12,11 +12,18 @@ public class StandAloneHttpSignature { // Try with your own credentaials // Get Key ID, Secret Key and Merchant Id from EBC portal - private static string merchantID = "testrest"; + private static string merchantID request-target= "testrest"; private static string merchantKeyId = "08c94330-f618-42a3-b09d-e1e43be5efda"; private static string merchantsecretKey = "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="; private static string requestHost = "apitest.cybersource.com"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + /// /// This Example illustrate two tests - HTTP get and post method with Cybersource Payments API. /// Each test will caluate HTTP Signature Digest and Authenticate Cybersource Payments API using HTTP Client @@ -72,14 +79,16 @@ public static async Task RunAsync() var statusCode = await CallCyberSourceAPI(body); - if ((int)statusCode >= 200 && (int)statusCode <= 299) + if (statusCode >= 200 && statusCode <= 299) { - Console.WriteLine(string.Format("STATUS : SUCCESS (HTTP Status = {0})", (int)statusCode)); + Console.WriteLine(string.Format("STATUS : SUCCESS (HTTP Status = {0})", statusCode)); } else { - Console.WriteLine(string.Format("STATUS : ERROR (HTTP Status = {0})", (int)statusCode)); + Console.WriteLine(string.Format("STATUS : ERROR (HTTP Status = {0})", statusCode)); } + + WriteLogAudit(statusCode); } catch (Exception e) { @@ -92,9 +101,9 @@ public static async Task RunAsync() /// /// Request to send to API endpoint /// Task - public static async Task CallCyberSourceAPI(string request) + public static async Task CallCyberSourceAPI(string request) { - TaskStatus responseCode; + TaskStatus responseCodeGet, responseCodePost; // HTTP GET request using (var client = new HttpClient()) @@ -140,7 +149,7 @@ public static async Task CallCyberSourceAPI(string request) { string result = await r.Content.ReadAsStringAsync(); Console.WriteLine(result); - responseCode = (TaskStatus)r.StatusCode; + responseCodeGet = (TaskStatus)r.StatusCode; } } @@ -196,12 +205,19 @@ public static async Task CallCyberSourceAPI(string request) Console.WriteLine("\n -- Response Message --\n"); var response = await client.PostAsync("https://" + requestHost + resource, content); - responseCode = (TaskStatus)response.StatusCode; + responseCodePost = (TaskStatus)response.StatusCode; string responsecontent = await response.Content.ReadAsStringAsync(); Console.WriteLine(responsecontent); } - return responseCode; + if (((int)responseCodePost >= 200 && (int)responseCodePost <= 299) && ((int)responseCodePost >= 200 && (int)responseCodePost <= 299)) + { + return 200; + } + else + { + return 400; + } } /// diff --git a/Source/Samples/Authentication/StandAloneJWT.cs b/Source/Samples/Authentication/StandAloneJWT.cs index 786c66e..25fdb24 100644 --- a/Source/Samples/Authentication/StandAloneJWT.cs +++ b/Source/Samples/Authentication/StandAloneJWT.cs @@ -15,6 +15,13 @@ public class StandAloneJWT private static string merchantID = "testrest"; private static string requestHost = "apitest.cybersource.com"; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + /// /// This is standalone code that show cases how to generate headers for CyberSource REST API - POST and GET calls. /// This sample code has sample Mercahnt credentails (testrest) with .p12(At same dir level) that you can also use for testing. @@ -73,14 +80,16 @@ public static async Task RunAsync() "}"; var statusCode = await CallCyberSourceAPI(request); - if ((int)statusCode >= 200 && (int)statusCode <= 299) + if (statusCode >= 200 && statusCode <= 299) { - Console.WriteLine(string.Format("STATUS : SUCCESS (HTTP Status = {0})", (int)statusCode)); + Console.WriteLine(string.Format("STATUS : SUCCESS (HTTP Status = {0})", statusCode)); } else { - Console.WriteLine(string.Format("STATUS : ERROR (HTTP Status = {0})", (int)statusCode)); + Console.WriteLine(string.Format("STATUS : ERROR (HTTP Status = {0})", statusCode)); } + + WriteLogAudit(statusCode); } catch (Exception e) { @@ -93,9 +102,9 @@ public static async Task RunAsync() /// /// Request to send to API endpoint< /// Task - public static async Task CallCyberSourceAPI(string request) + public static async Task CallCyberSourceAPI(string request) { - TaskStatus responseCode; + TaskStatus responseCodeGet, responseCodePost; // HTTP GET request using (var client = new HttpClient()) @@ -116,6 +125,7 @@ public static async Task CallCyberSourceAPI(string request) { string result = await r.Content.ReadAsStringAsync(); Console.WriteLine("\n -- Response Message --\n\n" + result); + responseCodeGet = (TaskStatus)r.StatusCode; } } @@ -135,12 +145,19 @@ public static async Task CallCyberSourceAPI(string request) client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwtToken); var response = await client.PostAsync("https://" + requestHost + resource, content); - responseCode = (TaskStatus)response.StatusCode; + responseCodePost = (TaskStatus)response.StatusCode; string responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine("\n -- Response Message --\n\n" + responseContent + "\n"); } - return responseCode; + if (((int)responseCodePost >= 200 && (int)responseCodePost <= 299) && ((int)responseCodePost >= 200 && (int)responseCodePost <= 299)) + { + return 200; + } + else + { + return 400; + } } /// diff --git a/Source/Samples/Authentication/StandAloneMetaKey.cs b/Source/Samples/Authentication/StandAloneMetaKey.cs index 550cd07..1bf124a 100644 --- a/Source/Samples/Authentication/StandAloneMetaKey.cs +++ b/Source/Samples/Authentication/StandAloneMetaKey.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using CyberSource.Model; +using CyberSource.Client; using CyberSource.Api; using System.Linq; using System.Text; @@ -14,6 +15,13 @@ public class StandAloneMetaKey // initialize dictionary object private static readonly Dictionary _configurationDictionary = new Dictionary(); + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + private static Dictionary GetConfiguration() { _configurationDictionary.Add("authenticationType", "HTTP_SIGNATURE"); @@ -107,11 +115,13 @@ public static PtsV2PaymentsPost201Response SimplePaymentUsingMetaKey() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Authentication/StandAloneOAuth.cs b/Source/Samples/Authentication/StandAloneOAuth.cs index 33c902b..0da48d2 100644 --- a/Source/Samples/Authentication/StandAloneOAuth.cs +++ b/Source/Samples/Authentication/StandAloneOAuth.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using CyberSource.Model; using CyberSource.Api; +using CyberSource.Client; using System.IO; namespace Cybersource_rest_samples_dotnet.Samples.Authentication @@ -32,6 +33,13 @@ private static Dictionary GetConfiguration() private static Dictionary configDictionary; public static bool createUsingAuthCode = false; + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { CallOAuthAPI(null); @@ -66,7 +74,8 @@ public static void CallOAuthAPI(string[] args) configDictionary["authenticationType"] = "OAuth"; //Call Payments SampleCode using OAuth, Set Authentication to OAuth in Sample Code Configuration - SimpleAuthorizationInternet(); + var resultCode = SimpleAuthorizationInternet(); + WriteLogAudit(resultCode); } } @@ -85,7 +94,7 @@ public static AccessTokenResponse postAccessTokenFromAuthCode() GrantType: grantType, ClientId: configDictionary["clientId"], ClientSecret: configDictionary["clientSecret"] - ); + ); var apiInstance = new OAuthApi(clientConfig); result = apiInstance.PostAccessTokenRequest(requestObj); @@ -114,7 +123,7 @@ public static AccessTokenResponse postAccessTokenFromRefreshToken() GrantType: grantType, ClientId: configDictionary["clientId"], ClientSecret: configDictionary["clientSecret"] - ); + ); var apiInstance = new OAuthApi(clientConfig); result = apiInstance.PostAccessTokenRequest(requestObj); @@ -129,18 +138,18 @@ public static AccessTokenResponse postAccessTokenFromRefreshToken() } } - public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() + public static int SimpleAuthorizationInternet() { string clientReferenceInformationCode = "TC50171_3"; Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( Code: clientReferenceInformationCode - ); + ); bool processingInformationCapture = false; Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( Capture: processingInformationCapture - ); + ); string paymentInformationCardNumber = "4111111111111111"; string paymentInformationCardExpirationMonth = "12"; @@ -149,18 +158,18 @@ public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() Number: paymentInformationCardNumber, ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear - ); + ); Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( Card: paymentInformationCard - ); + ); string orderInformationAmountDetailsTotalAmount = "102.21"; string orderInformationAmountDetailsCurrency = "USD"; Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( TotalAmount: orderInformationAmountDetailsTotalAmount, Currency: orderInformationAmountDetailsCurrency - ); + ); string orderInformationBillToFirstName = "John"; string orderInformationBillToLastName = "Doe"; @@ -181,19 +190,19 @@ public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() Country: orderInformationBillToCountry, Email: orderInformationBillToEmail, PhoneNumber: orderInformationBillToPhoneNumber - ); + ); Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( AmountDetails: orderInformationAmountDetails, BillTo: orderInformationBillTo - ); + ); var requestObj = new CreatePaymentRequest( ClientReferenceInformation: clientReferenceInformation, ProcessingInformation: processingInformation, PaymentInformation: paymentInformation, OrderInformation: orderInformation - ); + ); try { @@ -202,12 +211,12 @@ public static PtsV2PaymentsPost201Response SimpleAuthorizationInternet() var apiInstance = new PaymentsApi(clientConfig); PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); Console.WriteLine(result); - return result; + return apiInstance.GetStatusCode(); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); - return null; + return e.ErrorCode; } } } diff --git a/Source/Samples/FlexMicroform/FlexTokenizeCard.cs b/Source/Samples/FlexMicroform/FlexTokenizeCard.cs index caa4b5a..317b9b9 100644 --- a/Source/Samples/FlexMicroform/FlexTokenizeCard.cs +++ b/Source/Samples/FlexMicroform/FlexTokenizeCard.cs @@ -3,6 +3,7 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; using CyberSource.Utilities.Flex.Model; using CyberSource.Utilities.Flex.TokenVerification; @@ -11,7 +12,14 @@ namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { public class FlexTokenizeCard { - /* public static FlexV1TokensPost200Response Run() + /*public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static FlexV1TokensPost200Response Run() { var generateKeyResult = GenerateKeyLegacyTokenFormat.Run(); string keyId = generateKeyResult.KeyId; @@ -71,11 +79,13 @@ public class FlexTokenizeCard var tokenVerificationResult = tokenVerifier.Verify(flexPublicKey, postParameters); Console.WriteLine("TOKEN VERIFICATION : " + tokenVerificationResult); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } */ diff --git a/Source/Samples/FlexMicroform/GenerateKey.cs b/Source/Samples/FlexMicroform/GenerateKey.cs index 3519419..ac47c59 100644 --- a/Source/Samples/FlexMicroform/GenerateKey.cs +++ b/Source/Samples/FlexMicroform/GenerateKey.cs @@ -3,13 +3,21 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { public class GenerateKey { - /*public static FlexV1KeysPost200Response Run() + /*public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static FlexV1KeysPost200Response Run() { string encryptionType = "RsaOaep"; string targetOrigin = "https://www.test.com"; @@ -27,13 +35,15 @@ public class GenerateKey var apiInstance = new KeyGenerationApi(clientConfig); FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(format, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } - } */ + }*/ } } diff --git a/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs b/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs index 6632799..1e5bdf7 100644 --- a/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs +++ b/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs @@ -3,13 +3,21 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { - public class GenerateKeyLegacyTokenFormat + /*public class GenerateKeyLegacyTokenFormat { - /*public static FlexV1KeysPost200Response Run() + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static FlexV1KeysPost200Response Run() { string encryptionType = "None"; string targetOrigin = "https://www.test.com"; @@ -27,13 +35,15 @@ public class GenerateKeyLegacyTokenFormat var apiInstance = new KeyGenerationApi(clientConfig); FlexV1KeysPost200Response result = apiInstance.GeneratePublicKey(format, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } - } */ + }*/ } } diff --git a/Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs b/Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs index a64d0da..5309c28 100644 --- a/Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs +++ b/Source/Samples/Reporting/ChargebackDetails/GetChargebackDetails.cs @@ -3,33 +3,43 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { - public class GetChargebackDetails - { - public static ReportingV3ChargebackDetailsGet200Response Run() - { - // QUERY PARAMETERS - string organizationId = "testrest"; - var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + public class GetChargebackDetails + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static ReportingV3ChargebackDetailsGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); try { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ChargebackDetailsApi(clientConfig); - ReportingV3ChargebackDetailsGet200Response result = apiInstance.GetChargebackDetails(startTime, endTime, organizationId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } + var apiInstance = new ChargebackDetailsApi(clientConfig); + ReportingV3ChargebackDetailsGet200Response result = apiInstance.GetChargebackDetails(startTime, endTime, organizationId); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } } \ No newline at end of file diff --git a/Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs b/Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs index 0327fb2..087f2bd 100644 --- a/Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs +++ b/Source/Samples/Reporting/ChargebackSummaries/GetChargebackSummaries.cs @@ -3,33 +3,43 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { - public class GetChargebackSummaries - { - public static ReportingV3ChargebackSummariesGet200Response Run() - { - // QUERY PARAMETERS - string organizationId = "testrest"; - var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + public class GetChargebackSummaries + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static ReportingV3ChargebackSummariesGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); try { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new ChargebackSummariesApi(clientConfig); - ReportingV3ChargebackSummariesGet200Response result = apiInstance.GetChargebackSummaries(startTime, endTime, organizationId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } + var apiInstance = new ChargebackSummariesApi(clientConfig); + ReportingV3ChargebackSummariesGet200Response result = apiInstance.GetChargebackSummaries(startTime, endTime, organizationId); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } } \ No newline at end of file diff --git a/Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs b/Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs index e3172d5..7859eaa 100644 --- a/Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs +++ b/Source/Samples/Reporting/InterchangeClearingLevelDetails/InterchangeClearingLevelDataForAccountOrMerchant.cs @@ -3,33 +3,43 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { - public class InterchangeClearingLevelDataForAccountOrMerchant - { - public static ReportingV3InterchangeClearingLevelDetailsGet200Response Run() - { - // QUERY PARAMETERS - string organizationId = "testrest"; - var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + public class InterchangeClearingLevelDataForAccountOrMerchant + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static ReportingV3InterchangeClearingLevelDetailsGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); try { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new InterchangeClearingLevelDetailsApi(clientConfig); - ReportingV3InterchangeClearingLevelDetailsGet200Response result = apiInstance.GetInterchangeClearingLevelDetails(startTime, endTime, organizationId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } + var apiInstance = new InterchangeClearingLevelDetailsApi(clientConfig); + ReportingV3InterchangeClearingLevelDetailsGet200Response result = apiInstance.GetInterchangeClearingLevelDetails(startTime, endTime, organizationId); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } } \ No newline at end of file diff --git a/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs b/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs index 4bd653a..1b77819 100644 --- a/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs +++ b/Source/Samples/Reporting/NotificationOfChanges/GetNotificationOfChanges.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetNotificationOfChanges { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3NotificationofChangesGet200Response Run() { var startTime = DateTime.ParseExact("2023-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); @@ -21,11 +29,13 @@ public static ReportingV3NotificationofChangesGet200Response Run() var apiInstance = new NotificationOfChangesApi(clientConfig); ReportingV3NotificationofChangesGet200Response result = apiInstance.GetNotificationOfChangeReport(startTime, endTime); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs b/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs index 3489e18..ff00656 100644 --- a/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs +++ b/Source/Samples/Reporting/PaymentBatchSummaries/GetPaymentBatchSummaryData.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetPaymentBatchSummaryData { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3PaymentBatchSummariesGet200Response Run() { var startTime = DateTime.ParseExact("2023-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); @@ -25,11 +33,13 @@ public static ReportingV3PaymentBatchSummariesGet200Response Run() var apiInstance = new PaymentBatchSummariesApi(clientConfig); ReportingV3PaymentBatchSummariesGet200Response result = apiInstance.GetPaymentBatchSummary(startTime, endTime, organizationId, rollUp, breakdown, startDayOfWeek); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs b/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs index b74dc5a..1565781 100644 --- a/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs +++ b/Source/Samples/Reporting/PurchaseAndRefundDetails/GetPurchaseAndRefundDetails.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetPurchaseAndRefundDetails { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3PurchaseRefundDetailsGet200Response Run() { var startTime = DateTime.ParseExact("2023-01-01T12:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); @@ -27,11 +35,13 @@ public static ReportingV3PurchaseRefundDetailsGet200Response Run() var apiInstance = new PurchaseAndRefundDetailsApi(clientConfig); ReportingV3PurchaseRefundDetailsGet200Response result = apiInstance.GetPurchaseAndRefundDetails(startTime, endTime, organizationId, paymentSubtype, viewBy, groupName, offset, limit); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs b/Source/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs index cd7d8d5..ee534ef 100644 --- a/Source/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs +++ b/Source/Samples/Reporting/ReportDefinitions/GetReportDefinition.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetReportDefinition { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3ReportDefinitionsNameGet200Response Run() { string reportDefinitionName = "SubscriptionDetailClass"; @@ -23,11 +31,13 @@ public static ReportingV3ReportDefinitionsNameGet200Response Run() var apiInstance = new ReportDefinitionsApi(clientConfig); ReportingV3ReportDefinitionsNameGet200Response result = apiInstance.GetResourceInfoByReportDefinition(reportDefinitionName, subscriptionType, reportMimeType, organizationId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs b/Source/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs index 3a40839..7a4ca9a 100644 --- a/Source/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs +++ b/Source/Samples/Reporting/ReportDefinitions/GetReportingResourceInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetReportingResourceInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3ReportDefinitionsGet200Response Run() { string subscriptionType = null; @@ -21,11 +29,13 @@ public static ReportingV3ReportDefinitionsGet200Response Run() var apiInstance = new ReportDefinitionsApi(clientConfig); ReportingV3ReportDefinitionsGet200Response result = apiInstance.GetResourceV2Info(subscriptionType, organizationId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/ReportDownloads/DownloadReport.cs b/Source/Samples/Reporting/ReportDownloads/DownloadReport.cs index 8f87c70..a3ed756 100644 --- a/Source/Samples/Reporting/ReportDownloads/DownloadReport.cs +++ b/Source/Samples/Reporting/ReportDownloads/DownloadReport.cs @@ -6,12 +6,20 @@ using System.Xml.Serialization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class DownloadReport { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { const string fileName = "DownloadedReport.csv"; @@ -33,15 +41,17 @@ public static void Run() Console.WriteLine("\nFile Downloaded at the following location : "); Console.WriteLine($"{Path.GetFullPath(downloadFilePath)}\n"); + WriteLogAudit(content.StatusCode); // END : FILE DOWNLOAD FUNCTIONALITY } catch (FileNotFoundException) { Console.WriteLine("File Not Found : Kindly verify the path."); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } diff --git a/Source/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs b/Source/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs index 9b06f0e..1ab74ca 100644 --- a/Source/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs +++ b/Source/Samples/Reporting/ReportSubscriptions/CreateClassicStandardReportSubscription.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class CreateClassicStandardReportSubscription { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string reportDefinitionName = "TransactionRequestClass"; @@ -26,10 +34,12 @@ public static void Run() var apiInstance = new ReportSubscriptionsApi(clientConfig); apiInstance.CreateStandardOrClassicSubscription(requestObj, organizationId); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs b/Source/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs index 6707afe..e97f02d 100644 --- a/Source/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs +++ b/Source/Samples/Reporting/ReportSubscriptions/CreateReportSubscription.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class CreateReportSubscription { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string reportDefinitionName = "TransactionRequestClass"; @@ -42,13 +50,15 @@ public static void Run() var apiInstance = new ReportSubscriptionsApi(clientConfig); apiInstance.CreateSubscription(requestObj, organizationId); + WriteLogAudit(apiInstance.GetStatusCode()); DeleteSubscriptionOfReportNameByOrganization.ReportNameToDelete = reportName; DeleteSubscriptionOfReportNameByOrganization.Run(); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs b/Source/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs index 7720fa3..4760ab6 100644 --- a/Source/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs +++ b/Source/Samples/Reporting/ReportSubscriptions/DeleteSubscriptionOfReportNameByOrganization.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class DeleteSubscriptionOfReportNameByOrganization { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static string ReportNameToDelete { get; set; } public static void Run() @@ -28,10 +36,12 @@ public static void Run() var apiInstance = new ReportSubscriptionsApi(clientConfig); apiInstance.DeleteSubscription(reportName, organizationId); ReportNameToDelete = null; + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs b/Source/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs index d61366f..46124e5 100644 --- a/Source/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs +++ b/Source/Samples/Reporting/ReportSubscriptions/GetAllSubscriptions.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetAllSubscriptions { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3ReportSubscriptionsGet200Response Run() { string organizationId = null; @@ -20,11 +28,13 @@ public static ReportingV3ReportSubscriptionsGet200Response Run() var apiInstance = new ReportSubscriptionsApi(clientConfig); ReportingV3ReportSubscriptionsGet200Response result = apiInstance.GetAllSubscriptions(organizationId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs b/Source/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs index ec7aa76..9f53385 100644 --- a/Source/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs +++ b/Source/Samples/Reporting/ReportSubscriptions/GetSubscriptionForReportName.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetSubscriptionForReportName { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3ReportSubscriptionsGet200ResponseSubscriptions Run() { var reportName = "testrest_subcription_v1"; @@ -21,11 +29,13 @@ public static ReportingV3ReportSubscriptionsGet200ResponseSubscriptions Run() var apiInstance = new ReportSubscriptionsApi(clientConfig); ReportingV3ReportSubscriptionsGet200ResponseSubscriptions result = apiInstance.GetSubscription(reportName, organizationId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/Reports/CreateAdhocReport.cs b/Source/Samples/Reporting/Reports/CreateAdhocReport.cs index 3a1748c..9013e80 100644 --- a/Source/Samples/Reporting/Reports/CreateAdhocReport.cs +++ b/Source/Samples/Reporting/Reports/CreateAdhocReport.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class CreateAdhocReport { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string reportDefinitionName = "TransactionRequestClass"; @@ -48,10 +56,12 @@ public static void Run() var apiInstance = new ReportsApi(clientConfig); apiInstance.CreateReport(requestObj, organizationId); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/Reporting/Reports/GetReportBasedOnReportId.cs b/Source/Samples/Reporting/Reports/GetReportBasedOnReportId.cs index 776e0f1..3ce01ee 100644 --- a/Source/Samples/Reporting/Reports/GetReportBasedOnReportId.cs +++ b/Source/Samples/Reporting/Reports/GetReportBasedOnReportId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class GetReportBasedOnReportId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3ReportsIdGet200Response Run() { string reportId = "79642c43-2368-0cd5-e053-a2588e0a7b3c"; @@ -21,11 +29,13 @@ public static ReportingV3ReportsIdGet200Response Run() var apiInstance = new ReportsApi(clientConfig); ReportingV3ReportsIdGet200Response result = apiInstance.GetReportByReportId(reportId, organizationId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs b/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs index bd51969..0bece27 100644 --- a/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs +++ b/Source/Samples/Reporting/Reports/RetrieveAvailableReports.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { public class RetrieveAvailableReports { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ReportingV3ReportsGet200Response Run() { string organizationId = null; @@ -28,11 +36,13 @@ public static ReportingV3ReportsGet200Response Run() var apiInstance = new ReportsApi(clientConfig); ReportingV3ReportsGet200Response result = apiInstance.SearchReports(startTime, endTime, timeQueryType, organizationId, reportMimeType, reportFrequency, reportName, reportDefinitionId, reportStatus); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs b/Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs index 8099c7e..be41b82 100644 --- a/Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs +++ b/Source/Samples/Reporting/RetrievalDetails/GetRetrievalDetails.cs @@ -3,33 +3,43 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { - public class GetRetrievalDetails - { - public static ReportingV3RetrievalDetailsGet200Response Run() - { - // QUERY PARAMETERS - string organizationId = "testrest"; - var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + public class GetRetrievalDetails + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static ReportingV3RetrievalDetailsGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); try { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new RetrievalDetailsApi(clientConfig); - ReportingV3RetrievalDetailsGet200Response result = apiInstance.GetRetrievalDetails(startTime, endTime, organizationId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } + var apiInstance = new RetrievalDetailsApi(clientConfig); + ReportingV3RetrievalDetailsGet200Response result = apiInstance.GetRetrievalDetails(startTime, endTime, organizationId); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } } \ No newline at end of file diff --git a/Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs b/Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs index 5e87269..3305630 100644 --- a/Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs +++ b/Source/Samples/Reporting/RetrievalSummaries/GetRetrievalSummaries.cs @@ -3,33 +3,43 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.Reporting { - public class GetRetrievalSummaries - { - public static ReportingV3RetrievalSummariesGet200Response Run() - { - // QUERY PARAMETERS - string organizationId = "testrest"; - var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); + public class GetRetrievalSummaries + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static ReportingV3RetrievalSummariesGet200Response Run() + { + // QUERY PARAMETERS + string organizationId = "testrest"; + var startTime = DateTime.ParseExact("2021-08-01T00:00:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); var endTime = DateTime.ParseExact("2021-09-01T23:59:59Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); try { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new RetrievalSummariesApi(clientConfig); - ReportingV3RetrievalSummariesGet200Response result = apiInstance.GetRetrievalSummary(startTime, endTime, organizationId); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } - } + var apiInstance = new RetrievalSummariesApi(clientConfig); + ReportingV3RetrievalSummariesGet200Response result = apiInstance.GetRetrievalSummary(startTime, endTime, organizationId); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } } \ No newline at end of file diff --git a/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs b/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs index 3316d04..5261cb0 100644 --- a/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs +++ b/Source/Samples/RiskManagement/DecisionManager/BasicDMTransaction.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class BasicDMTransaction { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -86,11 +94,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs index 93ab5f8..e78196d 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithBuyerInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class DMWithBuyerInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -94,11 +102,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs index d42fe52..540af3c 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithDecisionProfileRejectResponse.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class DMWithDecisionProfileRejectResponse { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -86,11 +94,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs index cb15190..68adcba 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithDeviceInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class DMWithDeviceInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -90,11 +98,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs index 18c6564..b3b44c7 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithMerchantDefinedInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class DMWithMerchantDefinedInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -93,11 +101,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs index db8b401..1862d74 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithScoreExceedsThresholdResponse.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class DMWithScoreExceedsThresholdResponse { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -98,11 +106,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs index 53d0588..075ebea 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithShippingInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class DMWithShippingInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -98,11 +106,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs b/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs index 5880ba2..1adaa65 100644 --- a/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs +++ b/Source/Samples/RiskManagement/DecisionManager/DMWithTravelInformation.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class DMWithTravelInformation { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1DecisionsPost201Response Run() { string clientReferenceInformationCode = "54323007"; @@ -103,11 +111,13 @@ public static RiskV1DecisionsPost201Response Run() var apiInstance = new DecisionManagerApi(clientConfig); RiskV1DecisionsPost201Response result = apiInstance.CreateBundledDecisionManagerCase(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs index 1cee5d3..4773c7c 100644 --- a/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs +++ b/Source/Samples/RiskManagement/Verification/ComplianceStatusCompleted.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ComplianceStatusCompleted { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; @@ -100,11 +108,13 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs index ad9fd3e..2699761 100644 --- a/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs +++ b/Source/Samples/RiskManagement/Verification/ExportComplianceInformationProvided.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class ExportComplianceInformationProvided { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; @@ -106,11 +114,13 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs index 42b239e..5feb087 100644 --- a/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs +++ b/Source/Samples/RiskManagement/Verification/MultipleSanctionLists.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.RiskManagement { public class MultipleSanctionLists { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static RiskV1ExportComplianceInquiriesPost201Response Run() { string clientReferenceInformationCode = "verification example"; @@ -128,11 +136,13 @@ public static RiskV1ExportComplianceInquiriesPost201Response Run() var apiInstance = new VerificationApi(clientConfig); RiskV1ExportComplianceInquiriesPost201Response result = apiInstance.ValidateExportCompliance(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } From 6aa252431c899f3a105f069ff33b6eb4086c37f6 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Tue, 25 Jun 2024 15:23:28 +0530 Subject: [PATCH 132/161] sample logs added in tms samples --- .../TokenManagement/Customer/CreateCustomer.cs | 13 +++++++++++-- .../TokenManagement/Customer/RetrieveCustomer.cs | 12 +++++++++++- .../TokenManagement/Customer/UpdateCustomer.cs | 12 +++++++++++- .../UpdateCustomersDefaultPaymentInstrument.cs | 12 +++++++++++- .../UpdateCustomersDefaultShippingAddress.cs | 12 +++++++++++- .../CreateCustomerDefaultPaymentInstrumentCard.cs | 12 +++++++++++- .../DeleteCustomerPaymentInstrument.cs | 12 +++++++++++- .../ListPaymentInstrumentsForCustomer.cs | 12 +++++++++++- .../RetrieveCustomerPaymentInstrument.cs | 12 +++++++++++- .../DeleteCustomerShippingAddress.cs | 12 +++++++++++- .../ListShippingAddressesForCustomer.cs | 12 +++++++++++- .../DeleteInstrumentIdentifier.cs | 12 +++++++++++- .../PaymentInstrument/DeletePaymentInstrument.cs | 12 +++++++++++- 13 files changed, 143 insertions(+), 14 deletions(-) diff --git a/Source/Samples/TokenManagement/Customer/CreateCustomer.cs b/Source/Samples/TokenManagement/Customer/CreateCustomer.cs index 818f761..387522d 100644 --- a/Source/Samples/TokenManagement/Customer/CreateCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/CreateCustomer.cs @@ -1,15 +1,22 @@ using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerRequest Run() { string buyerInformationMerchantCustomerID = "Your customer identifier"; @@ -47,11 +54,13 @@ public static PostCustomerRequest Run() var apiInstance = new CustomerApi(clientConfig); PostCustomerRequest result = apiInstance.PostCustomer(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs b/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs index e87db85..80fb9be 100644 --- a/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/RetrieveCustomer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveCustomer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -20,11 +28,13 @@ public static PostCustomerRequest Run() var apiInstance = new CustomerApi(clientConfig); PostCustomerRequest result = apiInstance.GetCustomer(customerTokenId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs index c2e2443..ca01d9a 100644 --- a/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs +++ b/Source/Samples/TokenManagement/Customer/UpdateCustomer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdateCustomer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PatchCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -47,11 +55,13 @@ public static PatchCustomerRequest Run() var apiInstance = new CustomerApi(clientConfig); PatchCustomerRequest result = apiInstance.PatchCustomer(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs index 8f7ef6c..686f0d7 100644 --- a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs +++ b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultPaymentInstrument.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdateCustomersDefaultPaymentInstrument { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PatchCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -29,11 +37,13 @@ public static PatchCustomerRequest Run() var apiInstance = new CustomerApi(clientConfig); PatchCustomerRequest result = apiInstance.PatchCustomer(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs index 5aa1ab2..24224ea 100644 --- a/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs +++ b/Source/Samples/TokenManagement/Customer/UpdateCustomersDefaultShippingAddress.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdateCustomersDefaultShippingAddress { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PatchCustomerRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -29,11 +37,13 @@ public static PatchCustomerRequest Run() var apiInstance = new CustomerApi(clientConfig); PatchCustomerRequest result = apiInstance.PatchCustomer(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs index cac5f48..9d74880 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerDefaultPaymentInstrumentCard.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerDefaultPaymentInstrumentCard { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -65,11 +73,13 @@ public static PostCustomerPaymentInstrumentRequest Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs index 799030c..3636da8 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/DeleteCustomerPaymentInstrument.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class DeleteCustomerPaymentInstrument { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -21,10 +29,12 @@ public static void Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); apiInstance.DeleteCustomerPaymentInstrument(customerTokenId, paymentInstrumentTokenId); Console.WriteLine($"Customer Payment Instrument {customerTokenId} --> {paymentInstrumentTokenId} has been deleted."); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs index 1775131..6da935a 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/ListPaymentInstrumentsForCustomer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class ListPaymentInstrumentsForCustomer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PaymentInstrumentList Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -23,11 +31,13 @@ public static PaymentInstrumentList Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); PaymentInstrumentList result = apiInstance.GetCustomerPaymentInstrumentsList(customerTokenId, profileid, offset, limit); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs index 8b31f49..411c2ed 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/RetrieveCustomerPaymentInstrument.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveCustomerPaymentInstrument { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -21,11 +29,13 @@ public static PostCustomerPaymentInstrumentRequest Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); PostCustomerPaymentInstrumentRequest result = apiInstance.GetCustomerPaymentInstrument(customerTokenId, paymentInstrumentTokenId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs index 046492d..c8f29f3 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/DeleteCustomerShippingAddress.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class DeleteCustomerShippingAddress { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -21,10 +29,12 @@ public static void Run() var apiInstance = new CustomerShippingAddressApi(clientConfig); apiInstance.DeleteCustomerShippingAddress(customerTokenId, shippingAddressTokenId); Console.WriteLine($"Customer Shipping Address {customerTokenId} --> {shippingAddressTokenId} has been deleted."); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs index 9bc0a06..ff36361 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/ListShippingAddressesForCustomer.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class ListShippingAddressesForCustomer { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static ShippingAddressListForCustomer Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -23,11 +31,13 @@ public static ShippingAddressListForCustomer Run() var apiInstance = new CustomerShippingAddressApi(clientConfig); ShippingAddressListForCustomer result = apiInstance.GetCustomerShippingAddressesList(customerTokenId, profileid, offset, limit); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs index 5b40811..bd1b88d 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/DeleteInstrumentIdentifier.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class DeleteInstrumentIdentifier { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -21,10 +29,12 @@ public static void Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); apiInstance.DeleteInstrumentIdentifier(tokenId, profileid); Console.WriteLine($"Instrument Identifier {tokenId} has been deleted."); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs index b74d29b..16cabbc 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/DeletePaymentInstrument.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class DeletePaymentInstrument { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -22,10 +30,12 @@ public static void Run() var apiInstance = new PaymentInstrumentApi(clientConfig); apiInstance.DeletePaymentInstrument(tokenId, profileid); Console.WriteLine($"Payment Instrument {tokenId} has been deleted."); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } From af70663817a4250f0d17c67fee617afc5ddf3993 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Tue, 25 Jun 2024 15:35:51 +0530 Subject: [PATCH 133/161] adding sample logs in tms --- .../CreateCustomerNonDefaultPaymentInstrumentCard.cs | 12 +++++++++++- .../CreateCustomerPaymentInstrumentBankAccount.cs | 12 +++++++++++- .../CreateCustomerPaymentInstrumentPinlessDebit.cs | 12 +++++++++++- .../CreateCustomerDefaultShippingAddress.cs | 12 +++++++++++- .../CreateCustomerNonDefaultShippingAddress.cs | 12 +++++++++++- .../RetrieveCustomerShippingAddress.cs | 12 +++++++++++- .../CreateInstrumentIdentifierBankAccount.cs | 12 +++++++++++- .../CreateInstrumentIdentifierCard.cs | 12 +++++++++++- ...eInstrumentIdentifierCardEnrollForNetworkToken.cs | 12 +++++++++++- ...rollInstrumentIdentifierForNetworkTokenization.cs | 12 +++++++++++- .../ListPaymentInstrumentsForInstrumentIdentifier.cs | 12 +++++++++++- .../RetrieveInstrumentIdentifier.cs | 12 +++++++++++- 12 files changed, 132 insertions(+), 12 deletions(-) diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs index 29df0e1..0940593 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerNonDefaultPaymentInstrumentCard.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerNonDefaultPaymentInstrumentCard { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -65,11 +73,13 @@ public static PostCustomerPaymentInstrumentRequest Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs index 572a0d5..e1bb4e9 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentBankAccount.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerPaymentInstrumentBankAccount { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -95,11 +103,13 @@ public static PostCustomerPaymentInstrumentRequest Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs index cb4a957..a96d8c2 100644 --- a/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs +++ b/Source/Samples/TokenManagement/CustomerPaymentInstrument/CreateCustomerPaymentInstrumentPinlessDebit.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerPaymentInstrumentPinlessDebit { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerPaymentInstrumentRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -71,11 +79,13 @@ public static PostCustomerPaymentInstrumentRequest Run() var apiInstance = new CustomerPaymentInstrumentApi(clientConfig); PostCustomerPaymentInstrumentRequest result = apiInstance.PostCustomerPaymentInstrument(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs index 69ce4d3..1033dd9 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerDefaultShippingAddress.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerDefaultShippingAddress { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerShippingAddressRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -49,11 +57,13 @@ public static PostCustomerShippingAddressRequest Run() var apiInstance = new CustomerShippingAddressApi(clientConfig); PostCustomerShippingAddressRequest result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs index 023797f..e180f3c 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/CreateCustomerNonDefaultShippingAddress.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateCustomerNonDefaultShippingAddress { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerShippingAddressRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -49,11 +57,13 @@ public static PostCustomerShippingAddressRequest Run() var apiInstance = new CustomerShippingAddressApi(clientConfig); PostCustomerShippingAddressRequest result = apiInstance.PostCustomerShippingAddress(customerTokenId, requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs b/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs index 9692cd3..fbad785 100644 --- a/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs +++ b/Source/Samples/TokenManagement/CustomerShippingAddress/RetrieveCustomerShippingAddress.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveCustomerShippingAddress { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostCustomerShippingAddressRequest Run() { string customerTokenId = "AB695DA801DD1BB6E05341588E0A3BDC"; @@ -21,11 +29,13 @@ public static PostCustomerShippingAddressRequest Run() var apiInstance = new CustomerShippingAddressApi(clientConfig); PostCustomerShippingAddressRequest result = apiInstance.GetCustomerShippingAddress(customerTokenId, shippingAddressTokenId); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs index 241609e..0682579 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierBankAccount.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierBankAccount { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -31,11 +39,13 @@ public static PostInstrumentIdentifierRequest Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); PostInstrumentIdentifierRequest result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs index d261f9b..74905a8 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCard.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCard { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -29,11 +37,13 @@ public static PostInstrumentIdentifierRequest Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); PostInstrumentIdentifierRequest result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs index 4203462..a1cdea6 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/CreateInstrumentIdentifierCardEnrollForNetworkToken.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreateInstrumentIdentifierCardEnrollForNetworkToken { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -51,11 +59,13 @@ public static PostInstrumentIdentifierRequest Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); PostInstrumentIdentifierRequest result = apiInstance.PostInstrumentIdentifier(requestObj, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs index e1d7f64..90fe4e7 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/EnrollInstrumentIdentifierForNetworkTokenization.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class EnrollInstrumentIdentifierForNetworkTokenization { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string instrumentIdentifierTokenId = "7010000000016241111"; @@ -51,10 +59,12 @@ public static void Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); apiInstance.PostInstrumentIdentifierEnrollment(instrumentIdentifierTokenId, requestObj, profileid); Console.WriteLine($"Instrument Identifier for Network Tokenized Card {instrumentIdentifierTokenId} has been enrolled."); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs index bcbe81c..10b5ccc 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class ListPaymentInstrumentsForInstrumentIdentifier { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PaymentInstrumentList1 Run() { string instrumentIdentifierTokenId = "7010000000016241111"; @@ -23,11 +31,13 @@ public static PaymentInstrumentList1 Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); PaymentInstrumentList1 result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, offset, limit); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs index 044631b..9d0f030 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/RetrieveInstrumentIdentifier.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrieveInstrumentIdentifier { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostInstrumentIdentifierRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -21,11 +29,13 @@ public static PostInstrumentIdentifierRequest Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); PostInstrumentIdentifierRequest result = apiInstance.GetInstrumentIdentifier(tokenId, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } From f2fdd0129879705be8d073ad028b6bc07094c8c2 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Tue, 25 Jun 2024 15:43:36 +0530 Subject: [PATCH 134/161] adding logs for payment inst --- ...pdateInstrumentIdentifierPreviousTransactionId.cs | 12 +++++++++++- .../CreatePaymentInstrumentBankAccount.cs | 12 +++++++++++- .../PaymentInstrument/CreatePaymentInstrumentCard.cs | 12 +++++++++++- .../CreatePaymentInstrumentPinlessDebit.cs | 12 +++++++++++- .../PaymentInstrument/RetrievePaymentInstrument.cs | 12 +++++++++++- .../PaymentInstrument/UpdatePaymentInstrument.cs | 12 +++++++++++- 6 files changed, 66 insertions(+), 6 deletions(-) diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs index 563f974..e2b0723 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/UpdateInstrumentIdentifierPreviousTransactionId.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdateInstrumentIdentifierPreviousTransactionId { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static void Run() { string instrumentIdentifierTokenId = "7010000000016241111"; @@ -41,10 +49,12 @@ public static void Run() var apiInstance = new InstrumentIdentifierApi(clientConfig); apiInstance.PatchInstrumentIdentifier(instrumentIdentifierTokenId, requestObj); Console.WriteLine($"Instrument Identifier {instrumentIdentifierTokenId} has been updated with previous transaction ID."); + WriteLogAudit(apiInstance.GetStatusCode()); } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); } } } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs index ba9d55f..09ab3d4 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentBankAccount.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentBankAccount { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -96,11 +104,13 @@ public static PostPaymentInstrumentRequest Run() var apiInstance = new PaymentInstrumentApi(clientConfig); PostPaymentInstrumentRequest result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs index af7023f..2491042 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentCard.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentCard { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -65,11 +73,13 @@ public static PostPaymentInstrumentRequest Run() var apiInstance = new PaymentInstrumentApi(clientConfig); PostPaymentInstrumentRequest result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs index d133d2f..d4be4f5 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/CreatePaymentInstrumentPinlessDebit.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class CreatePaymentInstrumentPinlessDebit { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -73,11 +81,13 @@ public static PostPaymentInstrumentRequest Run() var apiInstance = new PaymentInstrumentApi(clientConfig); PostPaymentInstrumentRequest result = apiInstance.PostPaymentInstrument(requestObj, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs index 3a8d285..90ebb90 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/RetrievePaymentInstrument.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class RetrievePaymentInstrument { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PostPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -22,11 +30,13 @@ public static PostPaymentInstrumentRequest Run() var apiInstance = new PaymentInstrumentApi(clientConfig); PostPaymentInstrumentRequest result = apiInstance.GetPaymentInstrument(tokenId, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } diff --git a/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs b/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs index 9b6ef7c..5cd1136 100644 --- a/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs +++ b/Source/Samples/TokenManagement/PaymentInstrument/UpdatePaymentInstrument.cs @@ -3,12 +3,20 @@ using System.Globalization; using CyberSource.Api; +using CyberSource.Client; using CyberSource.Model; namespace Cybersource_rest_samples_dotnet.Samples.TokenManagement { public class UpdatePaymentInstrument { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static PatchPaymentInstrumentRequest Run() { var profileid = "93B32398-AD51-4CC2-A682-EA3E93614EB1"; @@ -64,11 +72,13 @@ public static PatchPaymentInstrumentRequest Run() var apiInstance = new PaymentInstrumentApi(clientConfig); PatchPaymentInstrumentRequest result = apiInstance.PatchPaymentInstrument(paymentInstrumentTokenId, requestObj, profileid); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } - catch (Exception e) + catch (ApiException e) { Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); return null; } } From a7a627d441772e9a31f5183a3ce8f19bfad8c864 Mon Sep 17 00:00:00 2001 From: aasgoel Date: Tue, 25 Jun 2024 16:40:23 +0530 Subject: [PATCH 135/161] Changed the Files causing issues --- Source/Samples/Authentication/StandAloneHttpSignature.cs | 3 ++- Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Source/Samples/Authentication/StandAloneHttpSignature.cs b/Source/Samples/Authentication/StandAloneHttpSignature.cs index 7060baa..89cc058 100644 --- a/Source/Samples/Authentication/StandAloneHttpSignature.cs +++ b/Source/Samples/Authentication/StandAloneHttpSignature.cs @@ -12,7 +12,8 @@ public class StandAloneHttpSignature { // Try with your own credentaials // Get Key ID, Secret Key and Merchant Id from EBC portal - private static string merchantID request-target= "testrest"; + //private static string merchantID request-target= "testrest"; + private static string merchantID = "testrest"; private static string merchantKeyId = "08c94330-f618-42a3-b09d-e1e43be5efda"; private static string merchantsecretKey = "yBJxy6LjM2TmcPGu+GaJrHtkke25fPpUX+UY6/L/1tE="; private static string requestHost = "apitest.cybersource.com"; diff --git a/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs b/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs index 1e5bdf7..ca76756 100644 --- a/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs +++ b/Source/Samples/FlexMicroform/GenerateKeyLegacyTokenFormat.cs @@ -44,6 +44,7 @@ public static FlexV1KeysPost200Response Run() WriteLogAudit(e.ErrorCode); return null; } - }*/ - } + } + }*/ + } From a0419bb680b8b7e38dfa6807d73450418be5d1e9 Mon Sep 17 00:00:00 2001 From: aasgoel Date: Tue, 25 Jun 2024 17:12:05 +0530 Subject: [PATCH 136/161] Update ValidateAuthenticationResults.cs --- .../ValidateAuthenticationResults.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 47835fa..0b4657c 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -40,19 +40,19 @@ public static RiskV1AuthenticationResultsPost201Response Run() ); - List orderInformationLineItems = new List(); - string orderInformationLineItemsUnitPrice1 = "10"; - int orderInformationLineItemsQuantity1 = 2; - string orderInformationLineItemsTaxAmount1 = "32.40"; - orderInformationLineItems.Add(new Riskv1authenticationresultsOrderInformationLineItems( - UnitPrice: orderInformationLineItemsUnitPrice1, - Quantity: orderInformationLineItemsQuantity1, - TaxAmount: orderInformationLineItemsTaxAmount1 - )); + // List orderInformationLineItems = new List(); + // string orderInformationLineItemsUnitPrice1 = "10"; + // int orderInformationLineItemsQuantity1 = 2; + // string orderInformationLineItemsTaxAmount1 = "32.40"; + // orderInformationLineItems.Add(new Riskv1authenticationresultsOrderInformationLineItems( + // UnitPrice: orderInformationLineItemsUnitPrice1, + // Quantity: orderInformationLineItemsQuantity1, + // TaxAmount: orderInformationLineItemsTaxAmount1 + // )); Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( AmountDetails: orderInformationAmountDetails, - LineItems: orderInformationLineItems + // LineItems: orderInformationLineItems ); string paymentInformationCardType = "002"; From 605e14daabf794baad15e9359eba1c703fdef898 Mon Sep 17 00:00:00 2001 From: aasgoel Date: Tue, 25 Jun 2024 17:18:03 +0530 Subject: [PATCH 137/161] Update ValidateAuthenticationResults.cs --- .../PayerAuthentication/ValidateAuthenticationResults.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 0b4657c..326a7d2 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -51,7 +51,7 @@ public static RiskV1AuthenticationResultsPost201Response Run() // )); Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( - AmountDetails: orderInformationAmountDetails, + AmountDetails: orderInformationAmountDetails // LineItems: orderInformationLineItems ); From 5cc83d0f20be3f2e72ba138bada65ab045003bb2 Mon Sep 17 00:00:00 2001 From: aasgoel Date: Tue, 25 Jun 2024 17:24:02 +0530 Subject: [PATCH 138/161] Update ValidateAuthenticationResults.cs --- .../PayerAuthentication/ValidateAuthenticationResults.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 326a7d2..9a78b03 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -52,8 +52,7 @@ public static RiskV1AuthenticationResultsPost201Response Run() Riskv1authenticationresultsOrderInformation orderInformation = new Riskv1authenticationresultsOrderInformation( AmountDetails: orderInformationAmountDetails - // LineItems: orderInformationLineItems - ); + ); string paymentInformationCardType = "002"; string paymentInformationCardExpirationMonth = "12"; From 83315f539683103fb21610909e1c1247d26551e4 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Wed, 24 Jul 2024 11:26:14 +0530 Subject: [PATCH 139/161] changing the sample code for new sdk version --- Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs b/Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs index 173fd88..95b1733 100644 --- a/Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs +++ b/Source/Samples/Webhooks/ManageWebhooks/CreateAsymmetricKey.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks { public class CreateAsymmetricKey { - public static InlineResponse2014 Run(string vCcorrelationId, string vCsenderOrganizationId, string vCpermissions) + public static InlineResponse2015 Run(string vCcorrelationId, string vCsenderOrganizationId, string vCpermissions) { string clientRequestAction = "STORE"; string keyInformationProvider = "merchantName"; @@ -38,7 +38,7 @@ public static InlineResponse2014 Run(string vCcorrelationId, string vCsenderOrga var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new ManageWebhooksApi(clientConfig); - InlineResponse2014 result = apiInstance.SaveAsymEgressKey(vCsenderOrganizationId, vCpermissions, requestObj, vCcorrelationId); + InlineResponse2015 result = apiInstance.SaveAsymEgressKey(vCsenderOrganizationId, vCpermissions, requestObj, vCcorrelationId); Console.WriteLine(result); return result; } From 8d7c3360b0eac62598d2af15e94a44685da3eb49 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Tue, 30 Jul 2024 20:36:08 +0530 Subject: [PATCH 140/161] version update for net standard sdk --- cybersource-rest-samples-netcore.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 64e2cb9..036b305 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - - + + From c452ee9df75177aa61e35c48f0b3597e5d79600f Mon Sep 17 00:00:00 2001 From: gaubansa Date: Tue, 30 Jul 2024 20:52:25 +0530 Subject: [PATCH 141/161] version update for dotnet sdk --- cybersource-rest-samples-csharp.csproj | 6 +++--- packages.config | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 5d19fd8..f2c34de 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -37,11 +37,11 @@ False Source\lib\net461\ApiSdk.dll - - packages\CyberSource.Authentication.0.0.0.19\lib\AuthenticationSdk.dll + + packages\CyberSource.Authentication.0.0.0.20\lib\AuthenticationSdk.dll - packages\CyberSource.Rest.Client.0.0.1.41\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.44\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll diff --git a/packages.config b/packages.config index 3d360f8..da3077b 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - - + + From 16545a568532b2f827e54d9cc176db444ed32e7c Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 5 Aug 2024 12:30:58 +0530 Subject: [PATCH 142/161] adding samples for binlookup --- Source/Samples/BinLookup/BINLookupWithCard.cs | 63 +++++++++++++++++++ .../BinLookup/BINLookupWithHealthcareCard.cs | 59 +++++++++++++++++ .../BinLookup/BINLookupWithNetworkToken.cs | 59 +++++++++++++++++ .../BinLookup/BINLookupWithTMSCustomerID.cs | 59 +++++++++++++++++ .../BINLookupWithTMSInstrumentIdentifier.cs | 59 +++++++++++++++++ .../BINLookupWithTMSJWTTransientToken.cs | 55 ++++++++++++++++ .../BINLookupWithTMSJtiTransientToken.cs | 55 ++++++++++++++++ .../BINLookupWithTMSPaymentInstrument.cs | 59 +++++++++++++++++ 8 files changed, 468 insertions(+) create mode 100644 Source/Samples/BinLookup/BINLookupWithCard.cs create mode 100644 Source/Samples/BinLookup/BINLookupWithHealthcareCard.cs create mode 100644 Source/Samples/BinLookup/BINLookupWithNetworkToken.cs create mode 100644 Source/Samples/BinLookup/BINLookupWithTMSCustomerID.cs create mode 100644 Source/Samples/BinLookup/BINLookupWithTMSInstrumentIdentifier.cs create mode 100644 Source/Samples/BinLookup/BINLookupWithTMSJWTTransientToken.cs create mode 100644 Source/Samples/BinLookup/BINLookupWithTMSJtiTransientToken.cs create mode 100644 Source/Samples/BinLookup/BINLookupWithTMSPaymentInstrument.cs diff --git a/Source/Samples/BinLookup/BINLookupWithCard.cs b/Source/Samples/BinLookup/BINLookupWithCard.cs new file mode 100644 index 0000000..37a9e97 --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithCard.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithCard + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + Binv1binlookupClientReferenceInformation clientReferenceInformation = new Binv1binlookupClientReferenceInformation( + ); + + string paymentInformationCardNumber = "4111111111111111"; + Binv1binlookupPaymentInformationCard paymentInformationCard = new Binv1binlookupPaymentInformationCard( + Number: paymentInformationCardNumber + ); + + Binv1binlookupPaymentInformation paymentInformation = new Binv1binlookupPaymentInformation( + Card: paymentInformationCard + ); + + var requestObj = new CreateBinLookupRequest( + ClientReferenceInformation: clientReferenceInformation, + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result = apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/BinLookup/BINLookupWithHealthcareCard.cs b/Source/Samples/BinLookup/BINLookupWithHealthcareCard.cs new file mode 100644 index 0000000..7804edc --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithHealthcareCard.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithHealthcareCard + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + string paymentInformationCardNumber = "4288900100000"; + Binv1binlookupPaymentInformationCard paymentInformationCard = new Binv1binlookupPaymentInformationCard( + Number: paymentInformationCardNumber + ); + + Binv1binlookupPaymentInformation paymentInformation = new Binv1binlookupPaymentInformation( + Card: paymentInformationCard + ); + + var requestObj = new CreateBinLookupRequest( + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result= apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/BinLookup/BINLookupWithNetworkToken.cs b/Source/Samples/BinLookup/BINLookupWithNetworkToken.cs new file mode 100644 index 0000000..064e112 --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithNetworkToken.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithNetworkToken + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + string paymentInformationCardNumber = "4895370016313691"; + Binv1binlookupPaymentInformationCard paymentInformationCard = new Binv1binlookupPaymentInformationCard( + Number: paymentInformationCardNumber + ); + + Binv1binlookupPaymentInformation paymentInformation = new Binv1binlookupPaymentInformation( + Card: paymentInformationCard + ); + + var requestObj = new CreateBinLookupRequest( + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result= apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/BinLookup/BINLookupWithTMSCustomerID.cs b/Source/Samples/BinLookup/BINLookupWithTMSCustomerID.cs new file mode 100644 index 0000000..43fe7fc --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithTMSCustomerID.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithTMSCustomerID + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + string paymentInformationCustomerId = "E5426CFDE77F7390E053A2598D0A925D"; + GetAllSubscriptionsResponsePaymentInformationCustomer paymentInformationCustomer = new GetAllSubscriptionsResponsePaymentInformationCustomer( + Id: paymentInformationCustomerId + ); + + Binv1binlookupPaymentInformation paymentInformation = new Binv1binlookupPaymentInformation( + Customer: paymentInformationCustomer + ); + + var requestObj = new CreateBinLookupRequest( + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result= apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/BinLookup/BINLookupWithTMSInstrumentIdentifier.cs b/Source/Samples/BinLookup/BINLookupWithTMSInstrumentIdentifier.cs new file mode 100644 index 0000000..7922f46 --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithTMSInstrumentIdentifier.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithTMSInstrumentIdentifier + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + string paymentInformationInstrumentIdentifierId = "7010000000016241111"; + Ptsv2paymentsPaymentInformationInstrumentIdentifier paymentInformationInstrumentIdentifier = new Ptsv2paymentsPaymentInformationInstrumentIdentifier( + Id: paymentInformationInstrumentIdentifierId + ); + + Binv1binlookupPaymentInformation paymentInformation = new Binv1binlookupPaymentInformation( + InstrumentIdentifier: paymentInformationInstrumentIdentifier + ); + + var requestObj = new CreateBinLookupRequest( + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result = apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/BinLookup/BINLookupWithTMSJWTTransientToken.cs b/Source/Samples/BinLookup/BINLookupWithTMSJWTTransientToken.cs new file mode 100644 index 0000000..2388451 --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithTMSJWTTransientToken.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithTMSJWTTransientToken + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + string tokenInformationTransientTokenJwt = "eyJraWQiOiIwODd0bk1DNU04bXJHR3JHMVJQTkwzZ2VyRUh5VWV1ciIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJGbGV4LzA4IiwiZXhwIjoxNjYwMTk1ODcwLCJ0eXBlIjoiYXBpLTAuMS4wIiwiaWF0IjoxNjYwMTk0OTcwLCJqdGkiOiIxRTBXQzFHTzg3SkcxQkRQMENROFNDUjFUVEs4NlU5Tjk4SDNXSDhJRk05TVZFV1RJWUZJNjJGNDk0MUU3QTkyIiwiY29udGVudCI6eyJwYXltZW50SW5mb3JtYXRpb24iOnsiY2FyZCI6eyJudW1iZXIiOnsibWFza2VkVmFsdWUiOiJYWFhYWFhYWFhYWFgxMTExIiwiYmluIjoiNDExMTExIn0sInR5cGUiOnsidmFsdWUiOiIwMDEifX19fX0.MkCLbyvufN4prGRvHJcqCu1WceDVlgubZVpShNWQVjpuFQUuqwrKg284sC7ucVKuIsOU0DTN8_OoxDLduvZhS7X_5TnO0QjyA_aFxbRBvU_bEz1l9V99VPADG89T-fox_L6sLUaoTJ8T4PyD7rkPHEA0nmXbqQCVqw4Czc5TqlKCwmL-Fe0NBR2HlOFI1PrSXT-7_wI-JTgXI0dQzb8Ub20erHwOLwu3oni4_ZmS3rGI_gxq2MHi8pO-ZOgA597be4WfVFAx1wnMbareqR72a0QM4DefeoltrpNqXSaASVyb5G0zuqg-BOjWJbawmg2QgcZ_vE3rJ6PDgWROvp9Tbw"; + Binv1binlookupTokenInformation tokenInformation = new Binv1binlookupTokenInformation( + TransientTokenJwt: tokenInformationTransientTokenJwt + ); + + var requestObj = new CreateBinLookupRequest( + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result = apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/BinLookup/BINLookupWithTMSJtiTransientToken.cs b/Source/Samples/BinLookup/BINLookupWithTMSJtiTransientToken.cs new file mode 100644 index 0000000..17e0f08 --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithTMSJtiTransientToken.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithTMSJtiTransientToken + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + string tokenInformationJti = "1E0WC1GO87JG1BDP0CQ8SCR1TTK86U9N98H3WH8IFM9MVEWTIYFI62F4941E7A92"; + Binv1binlookupTokenInformation tokenInformation = new Binv1binlookupTokenInformation( + Jti: tokenInformationJti + ); + + var requestObj = new CreateBinLookupRequest( + TokenInformation: tokenInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result = apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/BinLookup/BINLookupWithTMSPaymentInstrument.cs b/Source/Samples/BinLookup/BINLookupWithTMSPaymentInstrument.cs new file mode 100644 index 0000000..970ccbb --- /dev/null +++ b/Source/Samples/BinLookup/BINLookupWithTMSPaymentInstrument.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.BinLookup +{ + public class BINLookupWithTMSPaymentInstrument + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static InlineResponse2011 Run() + { + string paymentInformationPaymentInstrumentId = "E5427539180789D0E053A2598D0AF053"; + Ptsv2paymentsPaymentInformationPaymentInstrument paymentInformationPaymentInstrument = new Ptsv2paymentsPaymentInformationPaymentInstrument( + Id: paymentInformationPaymentInstrumentId + ); + + Binv1binlookupPaymentInformation paymentInformation = new Binv1binlookupPaymentInformation( + PaymentInstrument: paymentInformationPaymentInstrument + ); + + var requestObj = new CreateBinLookupRequest( + PaymentInformation: paymentInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new BinLookupApi(clientConfig); + InlineResponse2011 result = apiInstance.GetAccountInfo(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(999); + return null; + } + } + } +} \ No newline at end of file From 484f382de639662c2936efaa34be9cd7c2aa8dee Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 5 Aug 2024 12:32:45 +0530 Subject: [PATCH 143/161] adding samples for dotnet csproj file --- cybersource-rest-samples-csharp.csproj | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index f2c34de..83cc455 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -383,6 +383,14 @@ + + + + + + + + From 44497281d422f16fbab86bbcf5b605e5db783697 Mon Sep 17 00:00:00 2001 From: Bansal Date: Wed, 28 Aug 2024 11:28:12 +0530 Subject: [PATCH 144/161] updating sample code for new sdk model classes renaming --- Source/Samples/AccountUpdater/ListBatches.cs | 2 +- Source/Samples/AccountUpdater/RetrieveBatchReport.cs | 2 +- Source/Samples/AccountUpdater/RetrieveBatchStatus.cs | 2 +- .../PayerAuthentication/AuthenticationWithNORedirect.cs | 4 ++-- .../PayerAuthentication/AuthenticationWithNewAccount.cs | 4 ++-- .../EnrollWithCustomerIdAsPaymentInformation.cs | 2 +- .../PayerAuthentication/EnrollWithPendingAuthentication.cs | 4 ++-- .../Samples/PayerAuthentication/EnrollWithTransientToken.cs | 2 +- .../PayerAuthentication/EnrollWithTravelInformation.cs | 4 ++-- .../PendingAuthenticationWithUnknownPath.cs | 4 ++-- .../PayerAuthentication/SetupCompletionWithCardNumber.cs | 2 +- .../SetupCompletionWithFlexTransientToken.cs | 2 +- .../SetupCompletionWithFluidDataValueAndPaymentSolution.cs | 2 +- .../SetupCompletionWithSecureStorageToken.cs | 2 +- .../PayerAuthentication/SetupCompletionWithTMSToken.cs | 2 +- .../PayerAuthentication/SetupCompletionWithTokenizedCard.cs | 2 +- .../PayerAuthentication/ValidateAuthenticationResults.cs | 2 +- .../Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs | 4 ++-- 18 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Source/Samples/AccountUpdater/ListBatches.cs b/Source/Samples/AccountUpdater/ListBatches.cs index bd82368..2e47e83 100644 --- a/Source/Samples/AccountUpdater/ListBatches.cs +++ b/Source/Samples/AccountUpdater/ListBatches.cs @@ -19,7 +19,7 @@ public static void Run() var apiInstance = new BatchesApi(clientConfig); string fromDate = "20230101T123000Z"; string toDate = "20230410T123000Z"; - InlineResponse2006 result = apiInstance.GetBatchesList(0, 10, fromDate, toDate); + InlineResponse2005 result = apiInstance.GetBatchesList(0, 10, fromDate, toDate); Console.WriteLine(result); } catch (Exception e) diff --git a/Source/Samples/AccountUpdater/RetrieveBatchReport.cs b/Source/Samples/AccountUpdater/RetrieveBatchReport.cs index 9ef4d01..ad99eb8 100644 --- a/Source/Samples/AccountUpdater/RetrieveBatchReport.cs +++ b/Source/Samples/AccountUpdater/RetrieveBatchReport.cs @@ -19,7 +19,7 @@ public static void Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new BatchesApi(clientConfig); - InlineResponse2008 result = apiInstance.GetBatchReport(batchId); + InlineResponse2007 result = apiInstance.GetBatchReport(batchId); Console.WriteLine(result); } catch (Exception e) diff --git a/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs b/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs index d4d024e..6c74497 100644 --- a/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs +++ b/Source/Samples/AccountUpdater/RetrieveBatchStatus.cs @@ -19,7 +19,7 @@ public static void Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new BatchesApi(clientConfig); - InlineResponse2007 result = apiInstance.GetBatchStatus(batchId); + InlineResponse2006 result = apiInstance.GetBatchStatus(batchId); Console.WriteLine(result); } catch (Exception e) diff --git a/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs index 65a5142..479bc7f 100644 --- a/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs +++ b/Source/Samples/PayerAuthentication/AuthenticationWithNORedirect.cs @@ -27,7 +27,7 @@ public static RiskV1AuthenticationsPost201Response Run() SolutionId: clientReferenceInformationPartnerSolutionId ); - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner ); @@ -71,7 +71,7 @@ public static RiskV1AuthenticationsPost201Response Run() string paymentInformationCardExpirationMonth = "12"; string paymentInformationCardExpirationYear = "2025"; string paymentInformationCardNumber = "4000990000000004"; - Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Riskv1authenticationsetupsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsetupsPaymentInformationCard( Type: paymentInformationCardType, ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, diff --git a/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs b/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs index 414d1c2..def1ae2 100644 --- a/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs +++ b/Source/Samples/PayerAuthentication/AuthenticationWithNewAccount.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "New Account"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -63,7 +63,7 @@ public static RiskV1AuthenticationsPost201Response Run() string paymentInformationCardExpirationMonth = "12"; string paymentInformationCardExpirationYear = "2025"; string paymentInformationCardNumber = "4000990000000004"; - Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Riskv1authenticationsetupsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsetupsPaymentInformationCard( Type: paymentInformationCardType, ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, diff --git a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs index aadf4a2..4dc6000 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs b/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs index c29d06e..d32e801 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithPendingAuthentication.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -63,7 +63,7 @@ public static RiskV1AuthenticationsPost201Response Run() string paymentInformationCardExpirationMonth = "12"; string paymentInformationCardExpirationYear = "2025"; string paymentInformationCardNumber = "4000000000000101"; - Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Riskv1authenticationsetupsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsetupsPaymentInformationCard( Type: paymentInformationCardType, ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, diff --git a/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs b/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs index ce4e7af..5aeb03f 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithTransientToken.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs index c068172..c51fa4c 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithTravelInformation.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -63,7 +63,7 @@ public static RiskV1AuthenticationsPost201Response Run() string paymentInformationCardExpirationMonth = "12"; string paymentInformationCardExpirationYear = "2025"; string paymentInformationCardNumber = "5200340000000015"; - Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Riskv1authenticationsetupsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsetupsPaymentInformationCard( Type: paymentInformationCardType, ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, diff --git a/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs b/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs index 52c2ed5..34c9f96 100644 --- a/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs +++ b/Source/Samples/PayerAuthentication/PendingAuthenticationWithUnknownPath.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationsPost201Response Run() { string clientReferenceInformationCode = "UNKNOWN"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); @@ -63,7 +63,7 @@ public static RiskV1AuthenticationsPost201Response Run() string paymentInformationCardExpirationMonth = "12"; string paymentInformationCardExpirationYear = "2025"; string paymentInformationCardNumber = "4012001037490014"; - Riskv1authenticationsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsPaymentInformationCard( + Riskv1authenticationsetupsPaymentInformationCard paymentInformationCard = new Riskv1authenticationsetupsPaymentInformationCard( Type: paymentInformationCardType, ExpirationMonth: paymentInformationCardExpirationMonth, ExpirationYear: paymentInformationCardExpirationYear, diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs index 1ec3302..3595f0e 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithCardNumber.cs @@ -27,7 +27,7 @@ public static RiskV1AuthenticationSetupsPost201Response Run() SolutionId: clientReferenceInformationPartnerSolutionId ); - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs index 92c7412..cb47ffc 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithFlexTransientToken.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs index fc35b0f..bafbee1 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithFluidDataValueAndPaymentSolution.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs index 6ada337..3cacdff 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithSecureStorageToken.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs index 125daff..b848e6c 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithTMSToken.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs b/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs index 0f19ed3..279c6e4 100644 --- a/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs +++ b/Source/Samples/PayerAuthentication/SetupCompletionWithTokenizedCard.cs @@ -20,7 +20,7 @@ public static void WriteLogAudit(int status) public static RiskV1AuthenticationSetupsPost201Response Run() { string clientReferenceInformationCode = "cybs_test"; - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode ); diff --git a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs index 9a78b03..d06e447 100644 --- a/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs +++ b/Source/Samples/PayerAuthentication/ValidateAuthenticationResults.cs @@ -27,7 +27,7 @@ public static RiskV1AuthenticationResultsPost201Response Run() SolutionId: clientReferenceInformationPartnerSolutionId ); - Riskv1decisionsClientReferenceInformation clientReferenceInformation = new Riskv1decisionsClientReferenceInformation( + Riskv1authenticationsetupsClientReferenceInformation clientReferenceInformation = new Riskv1authenticationsetupsClientReferenceInformation( Code: clientReferenceInformationCode, Partner: clientReferenceInformationPartner ); diff --git a/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs b/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs index b8b39ab..3f95284 100644 --- a/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs +++ b/Source/Samples/Webhooks/ManageWebhooks/GetDetailsOnAllCreatedWebhooks.cs @@ -9,7 +9,7 @@ namespace Cybersource_rest_samples_dotnet.Samples.Webhooks.ManageWebhooks { public class GetDetailsOnAllCreatedWebhooks { - public static List Run() + public static List Run() { // QUERY PARAMETERS string organizationId = "testrest"; @@ -21,7 +21,7 @@ public static List Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new ManageWebhooksApi(clientConfig); - List result = apiInstance.GetWebhookSubscriptionsByOrg(organizationId, productId, eventType); + List result = apiInstance.GetWebhookSubscriptionsByOrg(organizationId, productId, eventType); Console.WriteLine(result); return result; } From 263db20b272edde06397d9ce9f386aabe4f3b510 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Fri, 30 Aug 2024 15:40:15 +0530 Subject: [PATCH 145/161] cybs rest sdk version update --- cybersource-rest-samples-csharp.csproj | 2 +- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 83cc455..b489b4e 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,7 +41,7 @@ packages\CyberSource.Authentication.0.0.0.20\lib\AuthenticationSdk.dll - packages\CyberSource.Rest.Client.0.0.1.44\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.45\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 036b305..8888867 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index da3077b..fae25aa 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From c6f65ff5e9f33f2da33e79485c8fd97ce89862ba Mon Sep 17 00:00:00 2001 From: Bansal Date: Fri, 13 Sep 2024 10:53:56 +0530 Subject: [PATCH 146/161] adding defaultDeveloperID to override the cybs developerId --- Source/Configuration.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Configuration.cs b/Source/Configuration.cs index f8820f4..e11d837 100644 --- a/Source/Configuration.cs +++ b/Source/Configuration.cs @@ -40,6 +40,11 @@ public Dictionary GetConfiguration() */ _configurationDictionary.Add("pemFileDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\Source\\Resource\\NetworkTokenCert.pem")); + /* + * Add the property if required to override the cybs default developerId in all request body + */ + _configurationDictionary.Add("defaultDeveloperId", ""); + // _configurationDictionary.Add("proxyAddress", string.Empty); // _configurationDictionary.Add("proxyPort", string.Empty); // _configurationDictionary.Add("proxyUsername", string.Empty); From b2d820da412deb3119086e2747cc3ef2d872d59e Mon Sep 17 00:00:00 2001 From: monkumar Date: Thu, 19 Sep 2024 14:53:11 +0530 Subject: [PATCH 147/161] api spec changes sep24 --- .../EnrollWithCustomerIdAsPaymentInformation.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs index 4dc6000..9f85a76 100644 --- a/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs +++ b/Source/Samples/PayerAuthentication/EnrollWithCustomerIdAsPaymentInformation.cs @@ -60,7 +60,7 @@ public static RiskV1AuthenticationsPost201Response Run() ); string paymentInformationCustomerCustomerId = "AB695DA801DD1BB6E05341588E0A3BDC"; - Ptsv2paymentsPaymentInformationCustomer paymentInformationCustomer = new Ptsv2paymentsPaymentInformationCustomer( + Riskv1authenticationsPaymentInformationCustomer paymentInformationCustomer = new Riskv1authenticationsPaymentInformationCustomer( CustomerId: paymentInformationCustomerCustomerId ); From 61d00bc6c7526bcc949f3f96711b9562565f4f42 Mon Sep 17 00:00:00 2001 From: Surya Prakash Nayak Date: Thu, 3 Oct 2024 14:45:31 +0530 Subject: [PATCH 148/161] Sample code for Merchant Boarding API --- Source/MerchantBoardingConfiguration.cs | 38 +++ .../MerchantBoarding/CreateRegistration.cs | 229 +++++++++++++++ .../MerchantBoardingAmexDirect.cs | 250 ++++++++++++++++ .../MerchantBoardingBarclays.cs | 276 ++++++++++++++++++ .../MerchantBoardingBinLookUp.cs | 126 ++++++++ .../MerchantBoarding/MerchantBoardingCUP.cs | 239 +++++++++++++++ .../MerchantBoardingEFTPOS.cs | 154 ++++++++++ .../MerchantBoardingFDIGlobal.cs | 198 +++++++++++++ .../MerchantBoarding/MerchantBoardingGPX.cs | 261 +++++++++++++++++ .../MerchantBoardingSmartFDC.cs | 198 +++++++++++++ .../MerchantBoarding/MerchantBoardingTSYS.cs | 273 +++++++++++++++++ .../MerchantBoarding/MerchantBoardingVPC.cs | 272 +++++++++++++++++ 12 files changed, 2514 insertions(+) create mode 100644 Source/MerchantBoardingConfiguration.cs create mode 100644 Source/Samples/MerchantBoarding/CreateRegistration.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs create mode 100644 Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs diff --git a/Source/MerchantBoardingConfiguration.cs b/Source/MerchantBoardingConfiguration.cs new file mode 100644 index 0000000..65a88a5 --- /dev/null +++ b/Source/MerchantBoardingConfiguration.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cybersource_rest_samples_dotnet +{ + internal class MerchantBoardingConfiguration + { + + private readonly Dictionary _configurationDictionary = new Dictionary(); + + public Dictionary GetMerchantBoardingConfiguration() + { + _configurationDictionary.Add("authenticationType", "jwt"); + _configurationDictionary.Add("merchantID", ""); + _configurationDictionary.Add("merchantsecretKey", ""); + _configurationDictionary.Add("merchantKeyId", ""); + _configurationDictionary.Add("keysDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\Source\\Resource")); + _configurationDictionary.Add("keyFilename", ""); + _configurationDictionary.Add("runEnvironment", "apitest.cybersource.com"); + _configurationDictionary.Add("keyAlias", ""); + _configurationDictionary.Add("keyPass", ""); + _configurationDictionary.Add("timeout", "300000"); + + // Configs related to meta key + _configurationDictionary.Add("portfolioID", string.Empty); + _configurationDictionary.Add("useMetaKey", "false"); + + + return _configurationDictionary; + } + + + } +} diff --git a/Source/Samples/MerchantBoarding/CreateRegistration.cs b/Source/Samples/MerchantBoarding/CreateRegistration.cs new file mode 100644 index 0000000..afbd52c --- /dev/null +++ b/Source/Samples/MerchantBoarding/CreateRegistration.cs @@ -0,0 +1,229 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class CreateRegistration + { + + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsPayerAuthentication payerAuthentication = new PaymentsProductsPayerAuthentication(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + payerAuthentication.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsPayerAuthenticationConfigurationInformation configurationInformation = new PaymentsProductsPayerAuthenticationConfigurationInformation(); + PayerAuthConfig configurations = new PayerAuthConfig(); + PayerAuthConfigCardTypes cardTypes = new PayerAuthConfigCardTypes(); + PayerAuthConfigCardTypesVerifiedByVisa verifiedByVisa = new PayerAuthConfigCardTypesVerifiedByVisa(); + List currencies = new List(); + PayerAuthConfigCardTypesVerifiedByVisaCurrencies currency1 = new PayerAuthConfigCardTypesVerifiedByVisaCurrencies + { + CurrencyCodes = new List { "ALL" }, + AcquirerId = "469216", + ProcessorMerchantId = "678855" + }; + + currencies.Add(currency1); + verifiedByVisa.Currencies = currencies; + cardTypes.VerifiedByVisa = verifiedByVisa; + configurations.CardTypes = cardTypes; + configurationInformation.Configurations = configurations; + payerAuthentication.ConfigurationInformation = configurationInformation; + payments.PayerAuthentication = payerAuthentication; + + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation2 = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true, + Features = new Dictionary + { + { + "cardNotPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures + { Enabled = true } } + } + }; + + cardProcessing.SubscriptionInformation = subscriptionInformation2; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation2 = new PaymentsProductsCardProcessingConfigurationInformation(); + CardProcessingConfig configurations2 = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "1234", + MerchantDescriptorInformation = new CardProcessingConfigCommonMerchantDescriptorInformation + { + Name = "r4ef", + City = "Bellevue", + Country = "US", + Phone = "4255547845", + State = "WA", + Street = "StreetName", + Zip = "98007" + }, + Processors = new Dictionary + { + { + "tsys", new CardProcessingConfigCommonProcessors + { + MerchantId = "123456789101", + TerminalId = "1231", + IndustryCode = CardProcessingConfigCommonProcessors.IndustryCodeEnum.D, + VitalNumber = "71234567", + MerchantBinNumber = "123456", + MerchantLocationNumber = "00001", + StoreID = "1234", + SettlementCurrency = "USD" + } + } + } + }; + + configurations2.Common = common; + CardProcessingConfigFeatures features2 = new CardProcessingConfigFeatures(); + CardProcessingConfigFeaturesCardNotPresent cardNotPresent = new CardProcessingConfigFeaturesCardNotPresent + { + VisaStraightThroughProcessingOnly = true + }; + + features2.CardNotPresent = cardNotPresent; + configurations2.Features = features2; + configurationInformation2.Configurations = configurations2; + cardProcessing.ConfigurationInformation = configurationInformation2; + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + payments.CustomerInvoicing = customerInvoicing; + + PaymentsProductsPayouts payouts = new PaymentsProductsPayouts + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + payments.Payouts = payouts; + + selectedProducts.Payments = payments; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + commerceSolutions.TokenManagement = tokenManagement; + selectedProducts.CommerceSolutions = commerceSolutions; + + RiskProducts risk = new RiskProducts(); + RiskProductsFraudManagementEssentials fraudManagementEssentials = new RiskProductsFraudManagementEssentials + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true }, + ConfigurationInformation = new RiskProductsFraudManagementEssentialsConfigurationInformation + { + TemplateId = Guid.Parse("E4EDB280-9DAC-4698-9EB9-9434D40FF60C") + } + }; + + risk.FraudManagementEssentials = fraudManagementEssentials; + selectedProducts.Risk = risk; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs b/Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs new file mode 100644 index 0000000..2faf3b6 --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs @@ -0,0 +1,250 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingAmexDirect + { + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + + public static InlineResponse2012 Run() + { + + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation(); + + subscriptionInformation.Enabled = true; + var features = new Dictionary(); + + PaymentsProductsCardProcessingSubscriptionInformationFeatures obj1 = new PaymentsProductsCardProcessingSubscriptionInformationFeatures + { + Enabled = true + }; + features.Add("cardNotPresent", obj1); + features.Add("cardPresent", obj1); + subscriptionInformation.Features = features; + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "1799" + }; + CardProcessingConfigCommonMerchantDescriptorInformation merchantDescriptorInformation = new CardProcessingConfigCommonMerchantDescriptorInformation + { + City = "Cupertino", + Country = "USA", + Name = "Mer name", + Phone = "8885554444", + Zip = "94043", + State = "CA", + Street = "mer street", + Url = "www.test.com" + }; + + common.MerchantDescriptorInformation = merchantDescriptorInformation; + common.SubMerchantId = "123457"; + common.SubMerchantBusinessName = "bus name"; + + var processors = new Dictionary(); + CardProcessingConfigCommonProcessors obj2 = new CardProcessingConfigCommonProcessors(); + CardProcessingConfigCommonAcquirer acquirer = new CardProcessingConfigCommonAcquirer(); + + obj2.Acquirer = acquirer; + var currencies = new Dictionary(); + CardProcessingConfigCommonCurrencies1 obj3 = new CardProcessingConfigCommonCurrencies1 + { + Enabled = true, + EnabledCardPresent = true, + TerminalId = "", + ServiceEnablementNumber = "1234567890" + }; + currencies.Add("AED", obj3); + currencies.Add("FJD", obj3); + currencies.Add("USD", obj3); + + obj2.Currencies = currencies; + + var paymentTypes = new Dictionary(); + CardProcessingConfigCommonPaymentTypes obj4 = new CardProcessingConfigCommonPaymentTypes + { + Enabled = true + }; + paymentTypes.Add("AMERICAN_EXPRESS", obj4); + + obj2.PaymentTypes = paymentTypes; + obj2.AllowMultipleBills = false; + obj2.AvsFormat = "basic"; + obj2.BatchGroup = "amexdirect_vme_default"; + obj2.EnableAutoAuthReversalAfterVoid = false; + obj2.EnhancedData = "disabled"; + obj2.EnableLevel2 = false; + obj2.AmexTransactionAdviceAddendum1 = "amex123"; + processors.Add("acquirer", obj2); + + common.Processors = processors; + configurations.Common = common; + + CardProcessingConfigFeatures features2 = new CardProcessingConfigFeatures(); + CardProcessingConfigFeaturesCardNotPresent cardNotPresent = new CardProcessingConfigFeaturesCardNotPresent(); + + var processors3 = new Dictionary(); + CardProcessingConfigFeaturesCardNotPresentProcessors obj5 = new CardProcessingConfigFeaturesCardNotPresentProcessors + { + RelaxAddressVerificationSystem = true, + RelaxAddressVerificationSystemAllowExpiredCard = true, + RelaxAddressVerificationSystemAllowZipWithoutCountry = false + }; + processors3.Add("amexdirect", obj5); + + cardNotPresent.Processors = processors3; + features2.CardNotPresent = cardNotPresent; + configurations.Features = features2; + configurationInformation.Configurations = configurations; + Guid templateId = Guid.Parse("2B80A3C7-5A39-4CC3-9882-AC4A828D3646"); + configurationInformation.TemplateId = templateId; + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation2 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + virtualTerminal.SubscriptionInformation = subscriptionInformation2; + + PaymentsProductsVirtualTerminalConfigurationInformation configurationInformation3 = new PaymentsProductsVirtualTerminalConfigurationInformation(); + Guid templateId2 = Guid.Parse("9FA1BB94-5119-48D3-B2E5-A81FD3C657B5"); + configurationInformation3.TemplateId = templateId2; + virtualTerminal.ConfigurationInformation = configurationInformation3; + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation6 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + customerInvoicing.SubscriptionInformation = subscriptionInformation6; + payments.CustomerInvoicing = customerInvoicing; + selectedProducts.Payments = payments; + + RiskProducts risk = new RiskProducts(); + selectedProducts.Risk = risk; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement(); + + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation7 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + tokenManagement.SubscriptionInformation = subscriptionInformation7; + CommerceSolutionsProductsTokenManagementConfigurationInformation configurationInformation4 = new CommerceSolutionsProductsTokenManagementConfigurationInformation(); + Guid templateId3 = Guid.Parse("D62BEE20-DCFD-4AA2-8723-BA3725958ABA"); + configurationInformation4.TemplateId = templateId3; + tokenManagement.ConfigurationInformation = configurationInformation4; + commerceSolutions.TokenManagement = tokenManagement; + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + PaymentsProductsTax transactionSearch = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation8 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + transactionSearch.SubscriptionInformation = subscriptionInformation8; + + valueAddedServices.TransactionSearch = transactionSearch; + PaymentsProductsTax reporting = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation9 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + reporting.SubscriptionInformation = subscriptionInformation9; + valueAddedServices.Reporting = reporting; + + selectedProducts.ValueAddedServices = valueAddedServices; + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs b/Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs new file mode 100644 index 0000000..df36660 --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs @@ -0,0 +1,276 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingBarclays + { + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true + }; + + var features = new Dictionary + { + { "cardNotPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } }, + { "cardPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } } + }; + + subscriptionInformation.Features = features; + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + + CardProcessingConfig configurations = new CardProcessingConfig(); + + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "5999", + DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL + }; + + var processors = new Dictionary(); + + CardProcessingConfigCommonProcessors obj2 = new CardProcessingConfigCommonProcessors + { + Acquirer = new CardProcessingConfigCommonAcquirer() + }; + + var currencies = new Dictionary + { + { "AED", new CardProcessingConfigCommonCurrencies1 + { + Enabled = true, + EnabledCardPresent = false, + EnabledCardNotPresent = true, + MerchantId = "1234", + ServiceEnablementNumber = "", + TerminalIds = new List { "12351245" } + } + }, + { "USD", new CardProcessingConfigCommonCurrencies1 + { + Enabled = true, + EnabledCardPresent = false, + EnabledCardNotPresent = true, + MerchantId = "1234", + ServiceEnablementNumber = "", + TerminalIds = new List { "12351245" } + } + } + }; + + obj2.Currencies = currencies; + + var paymentTypes = new Dictionary + { + { "MASTERCARD", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "VISA", new CardProcessingConfigCommonPaymentTypes { Enabled = true } } + }; + + obj2.PaymentTypes = paymentTypes; + obj2.BatchGroup = "barclays2_16"; + obj2.QuasiCash = false; + obj2.EnhancedData = "disabled"; + obj2.MerchantId = "124555"; + obj2.EnableMultiCurrencyProcessing = "false"; + + processors["barclays2"] = obj2; + + common.Processors = processors; + configurations.Common = common; + + CardProcessingConfigFeatures features3 = new CardProcessingConfigFeatures(); + + CardProcessingConfigFeaturesCardNotPresent cardNotPresent = new CardProcessingConfigFeaturesCardNotPresent(); + + var processors4 = new Dictionary + { + { "barclays2", new CardProcessingConfigFeaturesCardNotPresentProcessors + { + Payouts = new CardProcessingConfigFeaturesCardNotPresentPayouts + { + MerchantId = "1233", + TerminalId = "1244" + } + } + } + }; + + cardNotPresent.Processors = processors4; + features3.CardNotPresent = cardNotPresent; + + configurations.Features = features3; + + configurationInformation.Configurations = configurations; + + var templateId = Guid.Parse("0A413572-1995-483C-9F48-FCBE4D0B2E86"); + configurationInformation.TemplateId = templateId; + cardProcessing.ConfigurationInformation = configurationInformation; + + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal(); + + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation2 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + virtualTerminal.SubscriptionInformation = subscriptionInformation2; + + PaymentsProductsVirtualTerminalConfigurationInformation configurationInformation2 = new PaymentsProductsVirtualTerminalConfigurationInformation + { + TemplateId = Guid.Parse("E4EDB280-9DAC-4698-9EB9-9434D40FF60C") + }; + + virtualTerminal.ConfigurationInformation = configurationInformation2; + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax(); + + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation3 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + customerInvoicing.SubscriptionInformation = subscriptionInformation3; + payments.CustomerInvoicing = customerInvoicing; + + selectedProducts.Payments = payments; + + RiskProducts risk2 = new RiskProducts(); + selectedProducts.Risk = risk2; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement(); + + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation5 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + tokenManagement.SubscriptionInformation = subscriptionInformation5; + + CommerceSolutionsProductsTokenManagementConfigurationInformation configurationInformation5 = new CommerceSolutionsProductsTokenManagementConfigurationInformation + { + TemplateId = Guid.Parse("D62BEE20-DCFD-4AA2-8723-BA3725958ABA") + }; + + tokenManagement.ConfigurationInformation = configurationInformation5; + commerceSolutions.TokenManagement = tokenManagement; + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + + PaymentsProductsTax transactionSearch = new PaymentsProductsTax(); + + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation6 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + transactionSearch.SubscriptionInformation = subscriptionInformation6; + valueAddedServices.TransactionSearch = transactionSearch; + + PaymentsProductsTax reporting = new PaymentsProductsTax(); + + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation7 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + reporting.SubscriptionInformation = subscriptionInformation7; + valueAddedServices.Reporting = reporting; + selectedProducts.ValueAddedServices = valueAddedServices; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs b/Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs new file mode 100644 index 0000000..e9f7dfe --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingBinLookUp + { + + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + selectedProducts.Payments = payments; + + RiskProducts risk = new RiskProducts(); + selectedProducts.Risk = risk; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + CommerceSolutionsProductsBinLookup binLookup = new CommerceSolutionsProductsBinLookup(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + binLookup.SubscriptionInformation = subscriptionInformation; + + CommerceSolutionsProductsBinLookupConfigurationInformation configurationInformation = new CommerceSolutionsProductsBinLookupConfigurationInformation(); + CommerceSolutionsProductsBinLookupConfigurationInformationConfigurations configurations = new CommerceSolutionsProductsBinLookupConfigurationInformationConfigurations + { + IsPayoutOptionsEnabled = false, + IsAccountPrefixEnabled = true + }; + + configurationInformation.Configurations = configurations; + binLookup.ConfigurationInformation = configurationInformation; + commerceSolutions.BinLookup = binLookup; + + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + selectedProducts.ValueAddedServices = valueAddedServices; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs b/Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs new file mode 100644 index 0000000..371be12 --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs @@ -0,0 +1,239 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingCUP + { + + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true + }; + + Dictionary features = new Dictionary(); + + PaymentsProductsCardProcessingSubscriptionInformationFeatures obj1 = new PaymentsProductsCardProcessingSubscriptionInformationFeatures + { + Enabled = true + }; + + features.Add("cardNotPresent", obj1); + features.Add("cardPresent", obj1); + + subscriptionInformation.Features = features; + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "1799" + }; + + Dictionary processors = new Dictionary(); + + CardProcessingConfigCommonProcessors obj2 = new CardProcessingConfigCommonProcessors(); + CardProcessingConfigCommonAcquirer acquirer = new CardProcessingConfigCommonAcquirer + { + CountryCode = "344_hongkong", + InstitutionId = "22344" + }; + + obj2.Acquirer = acquirer; + + Dictionary currencies = new Dictionary(); + + CardProcessingConfigCommonCurrencies1 obj3 = new CardProcessingConfigCommonCurrencies1 + { + Enabled = true, + EnabledCardPresent = false, + EnabledCardNotPresent = true, + MerchantId = "112233", + TerminalId = "11224455", + ServiceEnablementNumber = "" + }; + + currencies.Add("HKD", obj3); + currencies.Add("AUD", obj3); + currencies.Add("USD", obj3); + + obj2.Currencies = currencies; + + Dictionary paymentTypes = new Dictionary(); + + CardProcessingConfigCommonPaymentTypes obj4 = new CardProcessingConfigCommonPaymentTypes + { + Enabled = true + }; + + paymentTypes.Add("CUP", obj4); + obj2.PaymentTypes = paymentTypes; + + processors.Add("CUP", obj2); + common.Processors = processors; + configurations.Common = common; + configurationInformation.Configurations = configurations; + + Guid templateId = Guid.Parse("1D8BC41A-F04E-4133-87C8-D89D1806106F"); + configurationInformation.TemplateId = templateId; + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation2 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + virtualTerminal.SubscriptionInformation = subscriptionInformation2; + + PaymentsProductsVirtualTerminalConfigurationInformation configurationInformation2 = new PaymentsProductsVirtualTerminalConfigurationInformation + { + TemplateId = Guid.Parse("9FA1BB94-5119-48D3-B2E5-A81FD3C657B5") + }; + + virtualTerminal.ConfigurationInformation = configurationInformation2; + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation3 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + customerInvoicing.SubscriptionInformation = subscriptionInformation3; + payments.CustomerInvoicing = customerInvoicing; + selectedProducts.Payments = payments; + + RiskProducts risk = new RiskProducts(); + selectedProducts.Risk = risk; + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation4 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + tokenManagement.SubscriptionInformation = subscriptionInformation4; + + CommerceSolutionsProductsTokenManagementConfigurationInformation configurationInformation3 = new CommerceSolutionsProductsTokenManagementConfigurationInformation + { + TemplateId = Guid.Parse("9FA1BB94-5119-48D3-B2E5-A81FD3C657B5") + }; + + tokenManagement.ConfigurationInformation = configurationInformation3; + commerceSolutions.TokenManagement = tokenManagement; + + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + + PaymentsProductsTax transactionSearch = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation5 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + transactionSearch.SubscriptionInformation = subscriptionInformation5; + valueAddedServices.TransactionSearch = transactionSearch; + + PaymentsProductsTax reporting = new PaymentsProductsTax + { + SubscriptionInformation = subscriptionInformation5 + }; + + valueAddedServices.Reporting = reporting; + selectedProducts.ValueAddedServices = valueAddedServices; + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs b/Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs new file mode 100644 index 0000000..df4d76c --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingEFTPOS + { + + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true, + Features = new Dictionary + { + { "cardNotPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } }, + { "cardPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = false } } + } + }; + + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "5999", + PreferCobadgedSecondaryBrand = true, + Processors = new Dictionary + { + { + "EFTPOS", + new CardProcessingConfigCommonProcessors + { + Acquirer = new CardProcessingConfigCommonAcquirer + { + CountryCode = "344_hongkong", + InstitutionId = "22344" + }, + Currencies = new Dictionary + { + { "AUD", new CardProcessingConfigCommonCurrencies1 { Enabled = true, MerchantId = "12345612344", TerminalId = "12121212" } } + }, + PaymentTypes = new Dictionary + { + { "EFTPOS", new CardProcessingConfigCommonPaymentTypes { Enabled = true } } + }, + EnableCVVResponseIndicator = true, + EnableLeastCostRouting = true, + MerchantTier = "000" + } + } + } + }; + + configurations.Common = common; + configurations.Features = new CardProcessingConfigFeatures(); + configurationInformation.Configurations = configurations; + configurationInformation.TemplateId = Guid.Parse("1F9B7F6E-F0DB-44C8-BF8E-5013E34C0F87"); + Console.WriteLine("Template id........" + Guid.Parse("1F9B7F6E-F0DB-44C8-BF8E-5013E34C0F87")); + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + selectedProducts.Payments = payments; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs b/Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs new file mode 100644 index 0000000..1798683 --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingFDIGlobal + { + + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true + }; + + var features = new Dictionary + { + { "cardNotPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } }, + { "cardPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } } + }; + + subscriptionInformation.Features = features; + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "0742", + DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.PRE, + ProcessLevel3Data = "ignored", + MasterCardAssignedId = "123456789", + EnablePartialAuth = true + }; + + var processors = new Dictionary(); + CardProcessingConfigCommonProcessors obj5 = new CardProcessingConfigCommonProcessors + { + Acquirer = new CardProcessingConfigCommonAcquirer() + }; + + var currencies = new Dictionary + { + { "CHF", new CardProcessingConfigCommonCurrencies1 { Enabled = true, EnabledCardPresent = false, EnabledCardNotPresent = true, MerchantId = "123456789mer", TerminalId = "12345ter", ServiceEnablementNumber = "" } }, + { "HRK", new CardProcessingConfigCommonCurrencies1 { Enabled = true, EnabledCardPresent = false, EnabledCardNotPresent = true, MerchantId = "123456789mer", TerminalId = "12345ter", ServiceEnablementNumber = "" } }, + { "ERN", new CardProcessingConfigCommonCurrencies1 { Enabled = true, EnabledCardPresent = false, EnabledCardNotPresent = true, MerchantId = "123456789mer", TerminalId = "12345ter", ServiceEnablementNumber = "" } }, + { "USD", new CardProcessingConfigCommonCurrencies1 { Enabled = true, EnabledCardPresent = false, EnabledCardNotPresent = true, MerchantId = "123456789mer", TerminalId = "12345ter", ServiceEnablementNumber = "" } } + }; + + obj5.Currencies = currencies; + + var paymentTypes = new Dictionary + { + { "MASTERCARD", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "DISCOVER", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "JCB", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "VISA", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "AMERICAN_EXPRESS", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "DINERS_CLUB", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "CUP", new CardProcessingConfigCommonPaymentTypes { Enabled = true } } + }; + + var currencies2 = new Dictionary + { + { "USD", new CardProcessingConfigCommonCurrencies { Enabled = true, TerminalId = "pint123", MerchantId = "pinm123", ServiceEnablementNumber = null } } + }; + + paymentTypes.Add("PIN_DEBIT", new CardProcessingConfigCommonPaymentTypes { Enabled = true, Currencies = currencies2 }); + + obj5.PaymentTypes = paymentTypes; + obj5.BatchGroup = "fdiglobal_vme_default"; + obj5.EnhancedData = "disabled"; + obj5.EnablePosNetworkSwitching = true; + obj5.EnableTransactionReferenceNumber = true; + + processors["fdiglobal"] = obj5; + + common.Processors = processors; + configurations.Common = common; + + CardProcessingConfigFeatures features2 = new CardProcessingConfigFeatures(); + CardProcessingConfigFeaturesCardNotPresent cardNotPresent = new CardProcessingConfigFeaturesCardNotPresent(); + + var processors3 = new Dictionary + { + { "fdiglobal", new CardProcessingConfigFeaturesCardNotPresentProcessors + { + RelaxAddressVerificationSystem = true, + RelaxAddressVerificationSystemAllowExpiredCard = true, + RelaxAddressVerificationSystemAllowZipWithoutCountry = true + } + } + }; + + cardNotPresent.Processors = processors3; + cardNotPresent.VisaStraightThroughProcessingOnly = true; + cardNotPresent.AmexTransactionAdviceAddendum1 = "amex12345"; + cardNotPresent.IgnoreAddressVerificationSystem = true; + + features2.CardNotPresent = cardNotPresent; + configurations.Features = features2; + configurationInformation.Configurations = configurations; + + Guid templateId = Guid.Parse("685A1FC9-3CEC-454C-9D8A-19205529CE45"); + configurationInformation.TemplateId = templateId; + + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + selectedProducts.Payments = payments; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs b/Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs new file mode 100644 index 0000000..a8b132f --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs @@ -0,0 +1,261 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingGPX + { + + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true, + Features = new Dictionary + { + { "cardNotPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } }, + { "cardPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } } + } + }; + + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "1799", + DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + FoodAndConsumerServiceId = "1456", + MasterCardAssignedId = "4567", + SicCode = "1345", + EnablePartialAuth = false, + AllowCapturesGreaterThanAuthorizations = false, + EnableDuplicateMerchantReferenceNumberBlocking = false, + CreditCardRefundLimitPercent = "2", + BusinessCenterCreditCardRefundLimitPercent = "3", + Processors = new Dictionary + { + { "gpx", new CardProcessingConfigCommonProcessors + { + Acquirer = new CardProcessingConfigCommonAcquirer + { + CountryCode = "840_usa", + FileDestinationBin = "123456", + InterbankCardAssociationId = "1256", + InstitutionId = "113366", + DiscoverInstitutionId = "1567" + }, + Currencies = new Dictionary + { + { "AED", new CardProcessingConfigCommonCurrencies1 + { + Enabled = true, + EnabledCardPresent = false, + EnabledCardNotPresent = true, + TerminalId = "", + ServiceEnablementNumber = "" + } + } + }, + PaymentTypes = new Dictionary + { + { "MASTERCARD", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "DISCOVER", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "JCB", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "VISA", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "DINERS_CLUB", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "PIN_DEBIT", new CardProcessingConfigCommonPaymentTypes { Enabled = true } } + }, + AllowMultipleBills = true, + BatchGroup = "gpx", + BusinessApplicationId = "AA", + EnhancedData = "disabled", + FireSafetyIndicator = false, + AbaNumber = "1122445566778", + MerchantVerificationValue = "234", + QuasiCash = false, + MerchantId = "112233", + TerminalId = "112244" + } + } + } + }; + + configurations.Common = common; + + CardProcessingConfigFeatures features2 = new CardProcessingConfigFeatures + { + CardNotPresent = new CardProcessingConfigFeaturesCardNotPresent + { + Processors = new Dictionary + { + { "gpx", new CardProcessingConfigFeaturesCardNotPresentProcessors + { + EnableEmsTransactionRiskScore = true, + RelaxAddressVerificationSystem = true, + RelaxAddressVerificationSystemAllowExpiredCard = true, + RelaxAddressVerificationSystemAllowZipWithoutCountry = true + } + } + }, + VisaStraightThroughProcessingOnly = false, + IgnoreAddressVerificationSystem = false + }, + CardPresent = new CardProcessingConfigFeaturesCardPresent + { + Processors = new Dictionary + { + { "gpx", new CardProcessingConfigFeaturesCardPresentProcessors + { + FinancialInstitutionId = "1347", + PinDebitNetworkOrder = "23456", + PinDebitReimbursementCode = "43567", + DefaultPointOfSaleTerminalId = "5432" + } + } + }, + EnableTerminalIdLookup = false + } + }; + + configurations.Features = features2; + configurationInformation.Configurations = configurations; + configurationInformation.TemplateId = Guid.Parse("D2A7C000-5FCA-493A-AD21-469744A19EEA"); + + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true }, + ConfigurationInformation = new PaymentsProductsVirtualTerminalConfigurationInformation { TemplateId = Guid.Parse("9FA1BB94-5119-48D3-B2E5-A81FD3C657B5") } + }; + + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + payments.CustomerInvoicing = customerInvoicing; + selectedProducts.Payments = payments; + + RiskProducts risk = new RiskProducts(); + selectedProducts.Risk = risk; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true }, + ConfigurationInformation = new CommerceSolutionsProductsTokenManagementConfigurationInformation { TemplateId = Guid.Parse("D62BEE20-DCFD-4AA2-8723-BA3725958ABA") } + }; + + commerceSolutions.TokenManagement = tokenManagement; + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + + PaymentsProductsTax transactionSearch = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + valueAddedServices.TransactionSearch = transactionSearch; + + PaymentsProductsTax reporting = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + valueAddedServices.Reporting = reporting; + + selectedProducts.ValueAddedServices = valueAddedServices; + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs b/Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs new file mode 100644 index 0000000..e6ce488 --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingSmartFDC + { + + + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true + }; + + var features = new Dictionary + { + { "cardNotPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } }, + { "cardPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } } + }; + + subscriptionInformation.Features = features; + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "1799", + DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + EnablePartialAuth = true + }; + + var processors = new Dictionary + { + { + "smartfdc", new CardProcessingConfigCommonProcessors + { + Acquirer = new CardProcessingConfigCommonAcquirer(), + PaymentTypes = new Dictionary + { + { "MASTERCARD", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "DISCOVER", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "JCB", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "VISA", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "DINERS_CLUB", new CardProcessingConfigCommonPaymentTypes { Enabled = true } }, + { "AMERICAN_EXPRESS", new CardProcessingConfigCommonPaymentTypes { Enabled = true } } + }, + BatchGroup = "smartfdc_00", + MerchantId = "00001234567", + TerminalId = "00007654321" + } + } + }; + + common.Processors = processors; + configurations.Common = common; + configurationInformation.Configurations = configurations; + + configurationInformation.TemplateId = Guid.Parse("3173DA78-A71E-405B-B79C-928C1A9C6AB2"); + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true }, + ConfigurationInformation = new PaymentsProductsVirtualTerminalConfigurationInformation { TemplateId = Guid.Parse("9FA1BB94-5119-48D3-B2E5-A81FD3C657B5") } + }; + + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + payments.CustomerInvoicing = customerInvoicing; + selectedProducts.Payments = payments; + + RiskProducts risk = new RiskProducts(); + selectedProducts.Risk = risk; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true }, + ConfigurationInformation = new CommerceSolutionsProductsTokenManagementConfigurationInformation { TemplateId = Guid.Parse("D62BEE20-DCFD-4AA2-8723-BA3725958ABA") } + }; + + commerceSolutions.TokenManagement = tokenManagement; + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + + PaymentsProductsTax transactionSearch = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + valueAddedServices.TransactionSearch = transactionSearch; + + PaymentsProductsTax reporting = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + + valueAddedServices.Reporting = reporting; + selectedProducts.ValueAddedServices = valueAddedServices; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs b/Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs new file mode 100644 index 0000000..b8c2dfe --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs @@ -0,0 +1,273 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingTSYS + { + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation(); + + subscriptionInformation.Enabled = true; + var features = new Dictionary(); + + PaymentsProductsCardProcessingSubscriptionInformationFeatures obj1 = new PaymentsProductsCardProcessingSubscriptionInformationFeatures + { + Enabled = true + }; + features["cardNotPresent"] = obj1; + features["cardPresent"] = obj1; + subscriptionInformation.Features = features; + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "5999", + ProcessLevel3Data = "ignored", + DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + EnablePartialAuth = false, + AmexVendorCode = "2233" + }; + + CardProcessingConfigCommonMerchantDescriptorInformation merchantDescriptorInformation = new CardProcessingConfigCommonMerchantDescriptorInformation + { + City = "cupertino", + Country = "USA", + Name = "kumar", + State = "CA", + Phone = "888555333", + Zip = "94043", + Street = "steet1" + }; + + common.MerchantDescriptorInformation = merchantDescriptorInformation; + + var processors = new Dictionary(); + CardProcessingConfigCommonProcessors obj5 = new CardProcessingConfigCommonProcessors + { + Acquirer = new CardProcessingConfigCommonAcquirer() + }; + + var currencies = new Dictionary(); + CardProcessingConfigCommonCurrencies1 obj6 = new CardProcessingConfigCommonCurrencies1 + { + Enabled = true, + EnabledCardPresent = true, + EnabledCardNotPresent = true, + TerminalId = "1234", + ServiceEnablementNumber = "" + }; + + currencies["CAD"] = obj6; + obj5.Currencies = currencies; + + var paymentTypes = new Dictionary(); + CardProcessingConfigCommonPaymentTypes obj7 = new CardProcessingConfigCommonPaymentTypes + { + Enabled = true + }; + + paymentTypes["MASTERCARD"] = obj7; + paymentTypes["VISA"] = obj7; + + obj5.PaymentTypes = paymentTypes; + + obj5.BankNumber = "234576"; + obj5.ChainNumber = "223344"; + obj5.BatchGroup = "vital_1130"; + obj5.EnhancedData = "disabled"; + obj5.IndustryCode = CardProcessingConfigCommonProcessors.IndustryCodeEnum.D; + obj5.MerchantBinNumber = "765576"; + obj5.MerchantId = "834215123456"; + obj5.MerchantLocationNumber = "00001"; + obj5.StoreID = "2563"; + obj5.VitalNumber = "71234567"; + obj5.QuasiCash = false; + obj5.SendAmexLevel2Data = null; + obj5.SoftDescriptorType = "1 - trans_ref_no"; + obj5.TravelAgencyCode = "2356"; + obj5.TravelAgencyName = "Agent"; + + processors["tsys"] = obj5; + common.Processors = processors; + + configurations.Common = common; + + CardProcessingConfigFeatures features2 = new CardProcessingConfigFeatures(); + CardProcessingConfigFeaturesCardNotPresent cardNotPresent = new CardProcessingConfigFeaturesCardNotPresent + { + VisaStraightThroughProcessingOnly = false, + AmexTransactionAdviceAddendum1 = null + }; + + features2.CardNotPresent = cardNotPresent; + + configurations.Features = features2; + configurationInformation.Configurations = configurations; + configurationInformation.TemplateId = new Guid("818048AD-2860-4D2D-BC39-2447654628A1"); + + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation5 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + virtualTerminal.SubscriptionInformation = subscriptionInformation5; + + PaymentsProductsVirtualTerminalConfigurationInformation configurationInformation5 = new PaymentsProductsVirtualTerminalConfigurationInformation + { + TemplateId = new Guid("9FA1BB94-5119-48D3-B2E5-A81FD3C657B5") + }; + + virtualTerminal.ConfigurationInformation = configurationInformation5; + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation6 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + customerInvoicing.SubscriptionInformation = subscriptionInformation6; + payments.CustomerInvoicing = customerInvoicing; + + selectedProducts.Payments = payments; + + RiskProducts risk = new RiskProducts(); + selectedProducts.Risk = risk; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation7 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + tokenManagement.SubscriptionInformation = subscriptionInformation7; + + CommerceSolutionsProductsTokenManagementConfigurationInformation configurationInformation7 = new CommerceSolutionsProductsTokenManagementConfigurationInformation + { + TemplateId = new Guid("D62BEE20-DCFD-4AA2-8723-BA3725958ABA") + }; + + tokenManagement.ConfigurationInformation = configurationInformation7; + commerceSolutions.TokenManagement = tokenManagement; + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + + PaymentsProductsTax transactionSearch = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation9 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + transactionSearch.SubscriptionInformation = subscriptionInformation9; + valueAddedServices.TransactionSearch = transactionSearch; + + PaymentsProductsTax reporting = new PaymentsProductsTax(); + PaymentsProductsPayerAuthenticationSubscriptionInformation subscriptionInformation3 = new PaymentsProductsPayerAuthenticationSubscriptionInformation + { + Enabled = true + }; + + reporting.SubscriptionInformation = subscriptionInformation3; + valueAddedServices.Reporting = reporting; + + selectedProducts.ValueAddedServices = valueAddedServices; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs b/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs new file mode 100644 index 0000000..cf03c6a --- /dev/null +++ b/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs @@ -0,0 +1,272 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Client; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.MerchantBoarding +{ + internal class MerchantBoardingVPC + { + + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static InlineResponse2012 Run() + { + + PostRegistrationBody reqObj = new PostRegistrationBody(); + + Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation + { + ParentOrganizationId = "apitester00", + Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Configurable = true + }; + + Boardingv1registrationsOrganizationInformationBusinessInformation businessInformation = new Boardingv1registrationsOrganizationInformationBusinessInformation + { + Name = "StuartWickedFastEatz" + }; + + Boardingv1registrationsOrganizationInformationBusinessInformationAddress address = new Boardingv1registrationsOrganizationInformationBusinessInformationAddress + { + Country = "US", + Address1 = "123456 SandMarket", + Locality = "ORMOND BEACH", + AdministrativeArea = "FL", + PostalCode = "32176" + }; + + businessInformation.Address = address; + businessInformation.WebsiteUrl = "https://www.StuartWickedEats.com"; + businessInformation.PhoneNumber = "6574567813"; + + Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact businessContact = new Boardingv1registrationsOrganizationInformationBusinessInformationBusinessContact + { + FirstName = "Stuart", + LastName = "Stuart", + PhoneNumber = "6574567813", + Email = "svc_email_bt@corpdev.visa.com" + }; + + businessInformation.BusinessContact = businessContact; + businessInformation.MerchantCategoryCode = "5999"; + organizationInformation.BusinessInformation = businessInformation; + + reqObj.OrganizationInformation = organizationInformation; + + + + + Boardingv1registrationsProductInformation productInformation = new Boardingv1registrationsProductInformation(); + Boardingv1registrationsProductInformationSelectedProducts selectedProducts = new Boardingv1registrationsProductInformationSelectedProducts(); + + PaymentsProducts payments = new PaymentsProducts(); + PaymentsProductsCardProcessing cardProcessing = new PaymentsProductsCardProcessing(); + PaymentsProductsCardProcessingSubscriptionInformation subscriptionInformation = new PaymentsProductsCardProcessingSubscriptionInformation + { + Enabled = true, + Features = new Dictionary + { + { "cardNotPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } }, + { "cardPresent", new PaymentsProductsCardProcessingSubscriptionInformationFeatures { Enabled = true } } + } + }; + cardProcessing.SubscriptionInformation = subscriptionInformation; + + PaymentsProductsCardProcessingConfigurationInformation configurationInformation = new PaymentsProductsCardProcessingConfigurationInformation(); + CardProcessingConfig configurations = new CardProcessingConfig(); + CardProcessingConfigCommon common = new CardProcessingConfigCommon + { + MerchantCategoryCode = "1799", + DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + MasterCardAssignedId = null, + SicCode = null, + EnablePartialAuth = false, + EnableInterchangeOptimization = false, + EnableSplitShipment = false, + VisaDelegatedAuthenticationId = "123457", + DomesticMerchantId = "123458", + CreditCardRefundLimitPercent = "2", + BusinessCenterCreditCardRefundLimitPercent = "3", + AllowCapturesGreaterThanAuthorizations = false, + EnableDuplicateMerchantReferenceNumberBlocking = false, + Processors = new Dictionary + { + { + "VPC", new CardProcessingConfigCommonProcessors + { + Acquirer = new CardProcessingConfigCommonAcquirer + { + CountryCode = "840_usa", + FileDestinationBin = "444500", + InterbankCardAssociationId = "3684", + InstitutionId = "444571", + DiscoverInstitutionId = null + }, + PaymentTypes = new Dictionary + { + { + "VISA", new CardProcessingConfigCommonPaymentTypes + { + Enabled = true, + Currencies = new Dictionary + { + { + "CAD", new CardProcessingConfigCommonCurrencies + { + Enabled = true, + EnabledCardPresent = false, + EnabledCardNotPresent = true, + TerminalId = "113366", + MerchantId = "113355", + ServiceEnablementNumber = null + } + }, + { + "USD", new CardProcessingConfigCommonCurrencies + { + Enabled = true, + EnabledCardPresent = false, + EnabledCardNotPresent = true, + TerminalId = "113366", + MerchantId = "113355", + ServiceEnablementNumber = null + } + } + } + } + } + }, + AcquirerMerchantId = "123456", + AllowMultipleBills = false, + BatchGroup = "vdcvantiv_est_00", + BusinessApplicationId = "AA", + EnableAutoAuthReversalAfterVoid = true, + EnableExpresspayPanTranslation = null, + MerchantVerificationValue = "123456", + QuasiCash = false, + EnableTransactionReferenceNumber = true + } + } + } + }; + configurations.Common = common; + + CardProcessingConfigFeatures features2 = new CardProcessingConfigFeatures + { + CardNotPresent = new CardProcessingConfigFeaturesCardNotPresent + { + Processors = new Dictionary + { + { + "VPC", new CardProcessingConfigFeaturesCardNotPresentProcessors + { + EnableEmsTransactionRiskScore = null, + RelaxAddressVerificationSystem = true, + RelaxAddressVerificationSystemAllowExpiredCard = true, + RelaxAddressVerificationSystemAllowZipWithoutCountry = true + } + } + }, + VisaStraightThroughProcessingOnly = false, + IgnoreAddressVerificationSystem = true + }, + CardPresent = new CardProcessingConfigFeaturesCardPresent + { + Processors = new Dictionary + { + { + "VPC", new CardProcessingConfigFeaturesCardPresentProcessors + { + DefaultPointOfSaleTerminalId = "223344" + } + } + }, + EnableTerminalIdLookup = false + } + }; + configurations.Features = features2; + configurationInformation.Configurations = configurations; + configurationInformation.TemplateId = Guid.Parse("D671CE88-2F09-469C-A1B4-52C47812F792"); + + cardProcessing.ConfigurationInformation = configurationInformation; + payments.CardProcessing = cardProcessing; + + PaymentsProductsVirtualTerminal virtualTerminal = new PaymentsProductsVirtualTerminal + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true }, + ConfigurationInformation = new PaymentsProductsVirtualTerminalConfigurationInformation { TemplateId = Guid.Parse("9FA1BB94-5119-48D3-B2E5-A81FD3C657B5") } + }; + payments.VirtualTerminal = virtualTerminal; + + PaymentsProductsTax customerInvoicing = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + payments.CustomerInvoicing = customerInvoicing; + + selectedProducts.Payments = payments; + + RiskProducts risk = new RiskProducts(); + selectedProducts.Risk = risk; + + CommerceSolutionsProducts commerceSolutions = new CommerceSolutionsProducts(); + CommerceSolutionsProductsTokenManagement tokenManagement = new CommerceSolutionsProductsTokenManagement + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true }, + ConfigurationInformation = new CommerceSolutionsProductsTokenManagementConfigurationInformation { TemplateId = Guid.Parse("D62BEE20-DCFD-4AA2-8723-BA3725958ABA") } + }; + commerceSolutions.TokenManagement = tokenManagement; + selectedProducts.CommerceSolutions = commerceSolutions; + + ValueAddedServicesProducts valueAddedServices = new ValueAddedServicesProducts(); + + PaymentsProductsTax transactionSearch = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + valueAddedServices.TransactionSearch = transactionSearch; + + PaymentsProductsTax reporting = new PaymentsProductsTax + { + SubscriptionInformation = new PaymentsProductsPayerAuthenticationSubscriptionInformation { Enabled = true } + }; + valueAddedServices.Reporting = reporting; + + selectedProducts.ValueAddedServices = valueAddedServices; + + productInformation.SelectedProducts = selectedProducts; + reqObj.ProductInformation = productInformation; + + + + try + { + var configDictionary = new MerchantBoardingConfiguration().GetMerchantBoardingConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MerchantBoardingApi(clientConfig); + InlineResponse2012 result = apiInstance.PostRegistration(reqObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (ApiException e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + WriteLogAudit(e.ErrorCode); + return null; + } + } + } +} From cf9a45088b37553cffef708d0786442ce600875c Mon Sep 17 00:00:00 2001 From: monkumar Date: Mon, 7 Oct 2024 15:02:04 +0530 Subject: [PATCH 149/161] added MIT Framework samples --- .../CITInitiatingInstalmentSubscriptionUK.cs | 124 +++++++++++++++++ .../CITInitiatingRecurringSubscription.cs | 124 +++++++++++++++++ .../Payments/CITPlacingCredentialOnFile.cs | 116 ++++++++++++++++ ...MITIndustryPracticeDelayedCharge3RIVisa.cs | 130 ++++++++++++++++++ .../MITIndustryPracticeResubmission.cs | 122 ++++++++++++++++ .../Payments/Payments/MITInstalment.cs | 120 ++++++++++++++++ .../Samples/Payments/Payments/MITRecurring.cs | 120 ++++++++++++++++ .../MITUnscheduledCredentialOnFile.cs | 120 ++++++++++++++++ cybersource-rest-samples-csharp.csproj | 2 +- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 2 +- 11 files changed, 979 insertions(+), 3 deletions(-) create mode 100644 Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs create mode 100644 Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs create mode 100644 Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs create mode 100644 Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs create mode 100644 Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs create mode 100644 Source/Samples/Payments/Payments/MITInstalment.cs create mode 100644 Source/Samples/Payments/Payments/MITRecurring.cs create mode 100644 Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs diff --git a/Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs b/Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs new file mode 100644 index 0000000..e8c8369 --- /dev/null +++ b/Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class CITInitiatingInstalmentSubscriptionUK + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "vbv"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + bool processingInformationAuthorizationOptionsInitiatorCredentialStoredOnFile = true; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + CredentialStoredOnFile: processingInformationAuthorizationOptionsInitiatorCredentialStoredOnFile + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + bool processingInformationRecurringOptionsLoanPayment = false; + bool processingInformationRecurringOptionsFirstRecurringPayment = true; + Ptsv2paymentsProcessingInformationRecurringOptions processingInformationRecurringOptions = new Ptsv2paymentsProcessingInformationRecurringOptions( + LoanPayment: processingInformationRecurringOptionsLoanPayment, + FirstRecurringPayment: processingInformationRecurringOptionsFirstRecurringPayment + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions, + RecurringOptions: processingInformationRecurringOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationCavv = "EHuWW9PiBkWvqE5juRwDzAUFBAk="; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + Cavv: consumerAuthenticationInformationCavv + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs b/Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs new file mode 100644 index 0000000..58c2cd1 --- /dev/null +++ b/Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class CITInitiatingRecurringSubscription + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "vbv"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + bool processingInformationAuthorizationOptionsInitiatorCredentialStoredOnFile = true; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + CredentialStoredOnFile: processingInformationAuthorizationOptionsInitiatorCredentialStoredOnFile + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + bool processingInformationRecurringOptionsLoanPayment = false; + bool processingInformationRecurringOptionsFirstRecurringPayment = true; + Ptsv2paymentsProcessingInformationRecurringOptions processingInformationRecurringOptions = new Ptsv2paymentsProcessingInformationRecurringOptions( + LoanPayment: processingInformationRecurringOptionsLoanPayment, + FirstRecurringPayment: processingInformationRecurringOptionsFirstRecurringPayment + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions, + RecurringOptions: processingInformationRecurringOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationCavv = "EHuWW9PiBkWvqE5juRwDzAUFBAk="; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + Cavv: consumerAuthenticationInformationCavv + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs b/Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs new file mode 100644 index 0000000..901dc81 --- /dev/null +++ b/Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class CITPlacingCredentialOnFile + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "vbv"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + bool processingInformationAuthorizationOptionsInitiatorCredentialStoredOnFile = true; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + CredentialStoredOnFile: processingInformationAuthorizationOptionsInitiatorCredentialStoredOnFile + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationCavv = "EHuWW9PiBkWvqE5juRwDzAUFBAk="; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + Cavv: consumerAuthenticationInformationCavv + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs b/Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs new file mode 100644 index 0000000..1fdfc2d --- /dev/null +++ b/Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class MITIndustryPracticeDelayedCharge3RIVisa + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "vbv"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + string processingInformationAuthorizationOptionsInitiatorType = "merchant"; + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionReason = "2"; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId = "123456789012345"; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction( + Reason: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionReason, + PreviousTransactionId: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + Type: processingInformationAuthorizationOptionsInitiatorType, + StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed, + MerchantInitiatedTransaction: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + string consumerAuthenticationInformationCavv = "EHuWW9PiBkWvqE5juRwDzAUFBAk="; + string consumerAuthenticationInformationParesStatus = "Y"; + Ptsv2paymentsConsumerAuthenticationInformation consumerAuthenticationInformation = new Ptsv2paymentsConsumerAuthenticationInformation( + Cavv: consumerAuthenticationInformationCavv, + ParesStatus: consumerAuthenticationInformationParesStatus + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation, + ConsumerAuthenticationInformation: consumerAuthenticationInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs b/Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs new file mode 100644 index 0000000..2d9af5d --- /dev/null +++ b/Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class MITIndustryPracticeResubmission + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "moto"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + string processingInformationAuthorizationOptionsInitiatorType = "merchant"; + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionReason = "1"; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId = "123456789012345"; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction( + Reason: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionReason, + PreviousTransactionId: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + Type: processingInformationAuthorizationOptionsInitiatorType, + StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed, + MerchantInitiatedTransaction: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/MITInstalment.cs b/Source/Samples/Payments/Payments/MITInstalment.cs new file mode 100644 index 0000000..146fff8 --- /dev/null +++ b/Source/Samples/Payments/Payments/MITInstalment.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class MITInstalment + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "install"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + string processingInformationAuthorizationOptionsInitiatorType = "merchant"; + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId = "123456789012345"; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction( + PreviousTransactionId: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + Type: processingInformationAuthorizationOptionsInitiatorType, + StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed, + MerchantInitiatedTransaction: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/MITRecurring.cs b/Source/Samples/Payments/Payments/MITRecurring.cs new file mode 100644 index 0000000..b7a163e --- /dev/null +++ b/Source/Samples/Payments/Payments/MITRecurring.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class MITRecurring + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "recurring"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + string processingInformationAuthorizationOptionsInitiatorType = "merchant"; + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId = "123456789012345"; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction( + PreviousTransactionId: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + Type: processingInformationAuthorizationOptionsInitiatorType, + StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed, + MerchantInitiatedTransaction: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs b/Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs new file mode 100644 index 0000000..8cca1a2 --- /dev/null +++ b/Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +{ + public class MITUnscheduledCredentialOnFile + { + public static PtsV2PaymentsPost201Response Run() + { + string clientReferenceInformationCode = "TC50171_3"; + Ptsv2paymentsClientReferenceInformation clientReferenceInformation = new Ptsv2paymentsClientReferenceInformation( + Code: clientReferenceInformationCode + ); + + bool processingInformationCapture = false; + string processingInformationCommerceIndicator = "internet"; + bool processingInformationAuthorizationOptionsIgnoreAvsResult = false; + bool processingInformationAuthorizationOptionsIgnoreCvResult = false; + string processingInformationAuthorizationOptionsInitiatorType = "merchant"; + bool processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed = true; + string processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId = "123456789012345"; + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction( + PreviousTransactionId: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransactionPreviousTransactionId + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator processingInformationAuthorizationOptionsInitiator = new Ptsv2paymentsProcessingInformationAuthorizationOptionsInitiator( + Type: processingInformationAuthorizationOptionsInitiatorType, + StoredCredentialUsed: processingInformationAuthorizationOptionsInitiatorStoredCredentialUsed, + MerchantInitiatedTransaction: processingInformationAuthorizationOptionsInitiatorMerchantInitiatedTransaction + ); + + Ptsv2paymentsProcessingInformationAuthorizationOptions processingInformationAuthorizationOptions = new Ptsv2paymentsProcessingInformationAuthorizationOptions( + IgnoreAvsResult: processingInformationAuthorizationOptionsIgnoreAvsResult, + IgnoreCvResult: processingInformationAuthorizationOptionsIgnoreCvResult, + Initiator: processingInformationAuthorizationOptionsInitiator + ); + + Ptsv2paymentsProcessingInformation processingInformation = new Ptsv2paymentsProcessingInformation( + Capture: processingInformationCapture, + CommerceIndicator: processingInformationCommerceIndicator, + AuthorizationOptions: processingInformationAuthorizationOptions + ); + + string paymentInformationCardNumber = "4111111111111111"; + string paymentInformationCardExpirationMonth = "12"; + string paymentInformationCardExpirationYear = "2031"; + string paymentInformationCardType = "001"; + Ptsv2paymentsPaymentInformationCard paymentInformationCard = new Ptsv2paymentsPaymentInformationCard( + Number: paymentInformationCardNumber, + ExpirationMonth: paymentInformationCardExpirationMonth, + ExpirationYear: paymentInformationCardExpirationYear, + Type: paymentInformationCardType + ); + + Ptsv2paymentsPaymentInformation paymentInformation = new Ptsv2paymentsPaymentInformation( + Card: paymentInformationCard + ); + + string orderInformationAmountDetailsTotalAmount = "102.21"; + string orderInformationAmountDetailsCurrency = "GBP"; + Ptsv2paymentsOrderInformationAmountDetails orderInformationAmountDetails = new Ptsv2paymentsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToAddress1 = "1 Market St"; + string orderInformationBillToLocality = "san francisco"; + string orderInformationBillToAdministrativeArea = "CA"; + string orderInformationBillToPostalCode = "94105"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToEmail = "test@cybs.com"; + string orderInformationBillToPhoneNumber = "4158880000"; + Ptsv2paymentsOrderInformationBillTo orderInformationBillTo = new Ptsv2paymentsOrderInformationBillTo( + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + Address1: orderInformationBillToAddress1, + Locality: orderInformationBillToLocality, + AdministrativeArea: orderInformationBillToAdministrativeArea, + PostalCode: orderInformationBillToPostalCode, + Country: orderInformationBillToCountry, + Email: orderInformationBillToEmail, + PhoneNumber: orderInformationBillToPhoneNumber + ); + + Ptsv2paymentsOrderInformation orderInformation = new Ptsv2paymentsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo + ); + + var requestObj = new CreatePaymentRequest( + ClientReferenceInformation: clientReferenceInformation, + ProcessingInformation: processingInformation, + PaymentInformation: paymentInformation, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new PaymentsApi(clientConfig); + PtsV2PaymentsPost201Response result = apiInstance.CreatePayment(requestObj); + Console.WriteLine(result); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} \ No newline at end of file diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index b489b4e..b334948 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,7 +41,7 @@ packages\CyberSource.Authentication.0.0.0.20\lib\AuthenticationSdk.dll - packages\CyberSource.Rest.Client.0.0.1.45\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.46\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 8888867..c7b5caf 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -40,7 +40,7 @@ - + diff --git a/packages.config b/packages.config index fae25aa..25fd4bd 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + From f732588a350bc06907ce872cb50ed39804cad245 Mon Sep 17 00:00:00 2001 From: monkumar Date: Mon, 7 Oct 2024 15:50:13 +0530 Subject: [PATCH 150/161] included merchant boarding and MIT samples in project --- .../MerchantBoarding/MerchantBoardingVPC.cs | 2 +- .../CITInitiatingInstalmentSubscriptionUK.cs | 2 +- .../CITInitiatingRecurringSubscription.cs | 2 +- .../Payments/CITPlacingCredentialOnFile.cs | 2 +- ...MITIndustryPracticeDelayedCharge3RIVisa.cs | 2 +- .../MITIndustryPracticeResubmission.cs | 2 +- .../Payments/Payments/MITInstalment.cs | 2 +- .../Samples/Payments/Payments/MITRecurring.cs | 2 +- .../MITUnscheduledCredentialOnFile.cs | 2 +- cybersource-rest-samples-csharp.csproj | 20 +++++++++++++++++++ 10 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs b/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs index cf03c6a..0617b11 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs @@ -95,7 +95,7 @@ public static InlineResponse2012 Run() EnableInterchangeOptimization = false, EnableSplitShipment = false, VisaDelegatedAuthenticationId = "123457", - DomesticMerchantId = "123458", + DomesticMerchantId = false, CreditCardRefundLimitPercent = "2", BusinessCenterCreditCardRefundLimitPercent = "3", AllowCapturesGreaterThanAuthorizations = false, diff --git a/Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs b/Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs index e8c8369..5b75870 100644 --- a/Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs +++ b/Source/Samples/Payments/Payments/CITInitiatingInstalmentSubscriptionUK.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CITInitiatingInstalmentSubscriptionUK { diff --git a/Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs b/Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs index 58c2cd1..e035f50 100644 --- a/Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs +++ b/Source/Samples/Payments/Payments/CITInitiatingRecurringSubscription.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CITInitiatingRecurringSubscription { diff --git a/Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs b/Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs index 901dc81..fd8033a 100644 --- a/Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs +++ b/Source/Samples/Payments/Payments/CITPlacingCredentialOnFile.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class CITPlacingCredentialOnFile { diff --git a/Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs b/Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs index 1fdfc2d..3df6884 100644 --- a/Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs +++ b/Source/Samples/Payments/Payments/MITIndustryPracticeDelayedCharge3RIVisa.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class MITIndustryPracticeDelayedCharge3RIVisa { diff --git a/Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs b/Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs index 2d9af5d..b2a183f 100644 --- a/Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs +++ b/Source/Samples/Payments/Payments/MITIndustryPracticeResubmission.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class MITIndustryPracticeResubmission { diff --git a/Source/Samples/Payments/Payments/MITInstalment.cs b/Source/Samples/Payments/Payments/MITInstalment.cs index 146fff8..5b19269 100644 --- a/Source/Samples/Payments/Payments/MITInstalment.cs +++ b/Source/Samples/Payments/Payments/MITInstalment.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class MITInstalment { diff --git a/Source/Samples/Payments/Payments/MITRecurring.cs b/Source/Samples/Payments/Payments/MITRecurring.cs index b7a163e..324c564 100644 --- a/Source/Samples/Payments/Payments/MITRecurring.cs +++ b/Source/Samples/Payments/Payments/MITRecurring.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class MITRecurring { diff --git a/Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs b/Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs index 8cca1a2..d122dea 100644 --- a/Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs +++ b/Source/Samples/Payments/Payments/MITUnscheduledCredentialOnFile.cs @@ -5,7 +5,7 @@ using CyberSource.Api; using CyberSource.Model; -namespace Cybersource_rest_samples_dotnet.Samples.Payments.Payments +namespace Cybersource_rest_samples_dotnet.Samples.Payments { public class MITUnscheduledCredentialOnFile { diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index b334948..cc9d54b 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -105,6 +105,7 @@ + @@ -145,6 +146,17 @@ + + + + + + + + + + + @@ -203,6 +215,9 @@ + + + @@ -213,6 +228,11 @@ + + + + + From 8f894a1aabb1ad696437e22c08131b4aabe03453 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 27 Jan 2025 00:28:40 +0530 Subject: [PATCH 151/161] merchant boarding sample code corrected --- Source/Samples/MerchantBoarding/CreateRegistration.cs | 4 ++-- .../Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs | 2 +- Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs | 4 ++-- .../Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs | 2 +- Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs | 2 +- Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs | 2 +- .../Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs | 4 ++-- Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs | 4 ++-- Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs | 4 ++-- Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs | 6 +++--- Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs | 4 ++-- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Source/Samples/MerchantBoarding/CreateRegistration.cs b/Source/Samples/MerchantBoarding/CreateRegistration.cs index afbd52c..a2ba770 100644 --- a/Source/Samples/MerchantBoarding/CreateRegistration.cs +++ b/Source/Samples/MerchantBoarding/CreateRegistration.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; @@ -133,7 +133,7 @@ public static InlineResponse2012 Run() { MerchantId = "123456789101", TerminalId = "1231", - IndustryCode = CardProcessingConfigCommonProcessors.IndustryCodeEnum.D, + IndustryCode = "D", VitalNumber = "71234567", MerchantBinNumber = "123456", MerchantLocationNumber = "00001", diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs b/Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs index 2faf3b6..7872993 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingAmexDirect.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs b/Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs index df36660..8269687 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingBarclays.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; @@ -91,7 +91,7 @@ public static InlineResponse2012 Run() CardProcessingConfigCommon common = new CardProcessingConfigCommon { MerchantCategoryCode = "5999", - DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL + DefaultAuthTypeCode = "FINAL" }; var processors = new Dictionary(); diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs b/Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs index e9f7dfe..e6504af 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingBinLookUp.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs b/Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs index 371be12..8f7a487 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingCUP.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs b/Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs index df4d76c..07d3b3e 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingEFTPOS.cs @@ -31,7 +31,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs b/Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs index 1798683..3bd631e 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingFDIGlobal.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; @@ -90,7 +90,7 @@ public static InlineResponse2012 Run() CardProcessingConfigCommon common = new CardProcessingConfigCommon { MerchantCategoryCode = "0742", - DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.PRE, + DefaultAuthTypeCode = "PRE", ProcessLevel3Data = "ignored", MasterCardAssignedId = "123456789", EnablePartialAuth = true diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs b/Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs index a8b132f..1b00440 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingGPX.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; @@ -87,7 +87,7 @@ public static InlineResponse2012 Run() CardProcessingConfigCommon common = new CardProcessingConfigCommon { MerchantCategoryCode = "1799", - DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + DefaultAuthTypeCode = "FINAL", FoodAndConsumerServiceId = "1456", MasterCardAssignedId = "4567", SicCode = "1345", diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs b/Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs index e6ce488..c51bb56 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingSmartFDC.cs @@ -30,7 +30,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; @@ -90,7 +90,7 @@ public static InlineResponse2012 Run() CardProcessingConfigCommon common = new CardProcessingConfigCommon { MerchantCategoryCode = "1799", - DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + DefaultAuthTypeCode = "FINAL", EnablePartialAuth = true }; diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs b/Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs index b8c2dfe..4d7da32 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingTSYS.cs @@ -29,7 +29,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; @@ -91,7 +91,7 @@ public static InlineResponse2012 Run() { MerchantCategoryCode = "5999", ProcessLevel3Data = "ignored", - DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + DefaultAuthTypeCode = "FINAL", EnablePartialAuth = false, AmexVendorCode = "2233" }; @@ -143,7 +143,7 @@ public static InlineResponse2012 Run() obj5.ChainNumber = "223344"; obj5.BatchGroup = "vital_1130"; obj5.EnhancedData = "disabled"; - obj5.IndustryCode = CardProcessingConfigCommonProcessors.IndustryCodeEnum.D; + obj5.IndustryCode = "D"; obj5.MerchantBinNumber = "765576"; obj5.MerchantId = "834215123456"; obj5.MerchantLocationNumber = "00001"; diff --git a/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs b/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs index 0617b11..a455545 100644 --- a/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs +++ b/Source/Samples/MerchantBoarding/MerchantBoardingVPC.cs @@ -28,7 +28,7 @@ public static InlineResponse2012 Run() Boardingv1registrationsOrganizationInformation organizationInformation = new Boardingv1registrationsOrganizationInformation { ParentOrganizationId = "apitester00", - Type = Boardingv1registrationsOrganizationInformation.TypeEnum.MERCHANT, + Type = "MERCHANT", Configurable = true }; @@ -88,7 +88,7 @@ public static InlineResponse2012 Run() CardProcessingConfigCommon common = new CardProcessingConfigCommon { MerchantCategoryCode = "1799", - DefaultAuthTypeCode = CardProcessingConfigCommon.DefaultAuthTypeCodeEnum.FINAL, + DefaultAuthTypeCode = "FINAL", MasterCardAssignedId = null, SicCode = null, EnablePartialAuth = false, From 16aa18153c394c4fbc5ca51ec3d578d147aab1d5 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 27 Jan 2025 00:40:09 +0530 Subject: [PATCH 152/161] correcting the version of dependency --- cybersource-rest-samples-csharp.csproj | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index cc9d54b..5cbc190 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -46,8 +46,8 @@ packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll - - packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + + packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll @@ -56,8 +56,8 @@ packages\NLog.5.0.0\lib\net46\NLog.dll True - - packages\RestSharp.108.0.3\lib\netstandard2.0\RestSharp.dll + + packages\RestSharp.112.1.0\lib\netstandard2.0\RestSharp.dll @@ -68,22 +68,22 @@ - packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + packages\System.Memory.4.5.5\lib\net461\System.Memory.dll packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll + + packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll - - packages\System.Text.Encodings.Web.5.0.1\lib\net461\System.Text.Encodings.Web.dll + + packages\System.Text.Encodings.Web.8.0.1\lib\net461\System.Text.Encodings.Web.dll - - packages\System.Text.Json.5.0.1\lib\net461\System.Text.Json.dll + + packages\System.Text.Json.8.0.5\lib\net461\System.Text.Json.dll packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll From fc2f6d826cfae4216bf20b46cff093bd22cde29e Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 27 Jan 2025 00:40:35 +0530 Subject: [PATCH 153/161] correcting the token sample code for spec changes --- .../ListPaymentInstrumentsForInstrumentIdentifier.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs index 10b5ccc..3e0ee62 100644 --- a/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs +++ b/Source/Samples/TokenManagement/InstrumentIdentifier/ListPaymentInstrumentsForInstrumentIdentifier.cs @@ -29,7 +29,7 @@ public static PaymentInstrumentList1 Run() var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); var apiInstance = new InstrumentIdentifierApi(clientConfig); - PaymentInstrumentList1 result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, offset, limit); + PaymentInstrumentList1 result = apiInstance.GetInstrumentIdentifierPaymentInstrumentsList(instrumentIdentifierTokenId, profileid, false, offset, limit); Console.WriteLine(result); WriteLogAudit(apiInstance.GetStatusCode()); return result; From 77cfdee4b0176f8c86b0a609e3ec068f2d6647bc Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 27 Jan 2025 00:46:31 +0530 Subject: [PATCH 154/161] changing version in package.config --- cybersource-rest-samples-netcore.csproj | 2 +- packages.config | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index c7b5caf..2bd7f19 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -45,7 +45,7 @@ - + diff --git a/packages.config b/packages.config index 25fd4bd..f6ce349 100644 --- a/packages.config +++ b/packages.config @@ -3,19 +3,19 @@ - + - + - + - - - + + + \ No newline at end of file From 58461f4e72a2b65f50f3f1dcb0175db0395bcbe3 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 27 Jan 2025 01:00:00 +0530 Subject: [PATCH 155/161] updating auth sdk version --- cybersource-rest-samples-csharp.csproj | 2 +- packages.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index 5cbc190..eba90a5 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -38,7 +38,7 @@ Source\lib\net461\ApiSdk.dll - packages\CyberSource.Authentication.0.0.0.20\lib\AuthenticationSdk.dll + packages\CyberSource.Authentication.0.0.0.21\lib\AuthenticationSdk.dll packages\CyberSource.Rest.Client.0.0.1.46\lib\cybersource-rest-client-dotnet.dll diff --git a/packages.config b/packages.config index f6ce349..97930f1 100644 --- a/packages.config +++ b/packages.config @@ -1,6 +1,6 @@  - + From 38e53de9bde9a090ffb14a33436eb56255de82d7 Mon Sep 17 00:00:00 2001 From: gaubansa Date: Mon, 27 Jan 2025 01:01:30 +0530 Subject: [PATCH 156/161] updating auth sdk version in .net core --- cybersource-rest-samples-netcore.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index 2bd7f19..de45631 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,8 +39,8 @@ - + From 7e06fe390405dc40c99279d5b7bdd900c230026e Mon Sep 17 00:00:00 2001 From: Gaurav Bansal <101095184+gaubansa@users.noreply.github.com> Date: Thu, 6 Feb 2025 20:09:49 +0530 Subject: [PATCH 157/161] version update dotnet sdk --- packages.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages.config b/packages.config index 97930f1..5951eaf 100644 --- a/packages.config +++ b/packages.config @@ -1,7 +1,7 @@  - + @@ -18,4 +18,4 @@ - \ No newline at end of file + From 7e825f8ab7bc554963ce912051129688d74c55c3 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal <101095184+gaubansa@users.noreply.github.com> Date: Thu, 6 Feb 2025 20:10:20 +0530 Subject: [PATCH 158/161] Update cybersource-rest-samples-csharp.csproj --- cybersource-rest-samples-csharp.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index eba90a5..c86b96e 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -41,7 +41,7 @@ packages\CyberSource.Authentication.0.0.0.21\lib\AuthenticationSdk.dll - packages\CyberSource.Rest.Client.0.0.1.46\lib\cybersource-rest-client-dotnet.dll + packages\CyberSource.Rest.Client.0.0.1.49\lib\cybersource-rest-client-dotnet.dll packages\jose-jwt.4.1.0\lib\net461\jose-jwt.dll @@ -452,4 +452,4 @@ DEL /S /Q ..\..\..\obj\* - \ No newline at end of file + From 4a2f5b1b639bf5b65d09ba4bdcf432006b28a257 Mon Sep 17 00:00:00 2001 From: Gaurav Bansal <101095184+gaubansa@users.noreply.github.com> Date: Thu, 6 Feb 2025 20:10:41 +0530 Subject: [PATCH 159/161] Update cybersource-rest-samples-netcore.csproj --- cybersource-rest-samples-netcore.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cybersource-rest-samples-netcore.csproj b/cybersource-rest-samples-netcore.csproj index de45631..b3e5a71 100644 --- a/cybersource-rest-samples-netcore.csproj +++ b/cybersource-rest-samples-netcore.csproj @@ -39,7 +39,7 @@ - + From 77327d808fff98717c198423d796b5bb33f2a908 Mon Sep 17 00:00:00 2001 From: mahmishr Date: Fri, 7 Feb 2025 16:51:46 +0530 Subject: [PATCH 160/161] "samples" --- .../FlexMicroform/GenerateCaptureContext.cs | 78 +++---- .../GenerateCaptureContextAcceptCard.cs | 72 ++++++ .../GenerateCaptureContextAcceptCheck.cs | 52 +++++ ...rateCaptureContextForClickToPayDropInUI.cs | 107 +++++++++ .../GenerateUnifiedCheckout.cs | 85 ++++++-- ...outCaptureContextPassingBillingShipping.cs | 206 ++++++++++++++++++ 6 files changed, 545 insertions(+), 55 deletions(-) create mode 100644 Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCard.cs create mode 100644 Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCheck.cs create mode 100644 Source/Samples/UnifiedCheckout/GenerateCaptureContextForClickToPayDropInUI.cs create mode 100644 Source/Samples/UnifiedCheckout/GenerateUnifiedCheckoutCaptureContextPassingBillingShipping.cs diff --git a/Source/Samples/FlexMicroform/GenerateCaptureContext.cs b/Source/Samples/FlexMicroform/GenerateCaptureContext.cs index a06904d..b1ebb65 100644 --- a/Source/Samples/FlexMicroform/GenerateCaptureContext.cs +++ b/Source/Samples/FlexMicroform/GenerateCaptureContext.cs @@ -11,49 +11,49 @@ namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform { class GenerateCaptureContext { - public static String Run() - { - List targetOrigins = new List() - { - "https://www.test.com" - }; + // public static String Run() + // { + // List targetOrigins = new List() + // { + // "https://www.test.com" + // }; - List allowedCardNetworks = new List() - { - "VISA", - "MAESTRO", - "MASTERCARD", - "AMEX", - "DISCOVER", - "DINERSCLUB", - "JCB", - "CUP", - "CARTESBANCAIRES" - }; + // List allowedCardNetworks = new List() + // { + // "VISA", + // "MAESTRO", + // "MASTERCARD", + // "AMEX", + // "DISCOVER", + // "DINERSCLUB", + // "JCB", + // "CUP", + // "CARTESBANCAIRES" + // }; - string clientVerison = "v2.0"; + // string clientVerison = "v2.0"; - var requestObj = new GenerateCaptureContextRequest( - TargetOrigins: targetOrigins, - AllowedCardNetworks: allowedCardNetworks, - ClientVersion: clientVerison - ); + // var requestObj = new GenerateCaptureContextRequest( + // TargetOrigins: targetOrigins, + // AllowedCardNetworks: allowedCardNetworks, + // ClientVersion: clientVerison + // ); - try - { - var configDictionary = new Configuration().GetConfiguration(); - var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + // try + // { + // var configDictionary = new Configuration().GetConfiguration(); + // var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); - var apiInstance = new MicroformIntegrationApi(clientConfig); - String result = apiInstance.GenerateCaptureContext(requestObj); - Console.WriteLine(result); - return result; - } - catch (Exception e) - { - Console.WriteLine("Exception on calling the API : " + e.Message); - return null; - } - } + // var apiInstance = new MicroformIntegrationApi(clientConfig); + // String result = apiInstance.GenerateCaptureContext(requestObj); + // Console.WriteLine(result); + // return result; + // } + // catch (Exception e) + // { + // Console.WriteLine("Exception on calling the API : " + e.Message); + // return null; + // } + // } } } diff --git a/Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCard.cs b/Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCard.cs new file mode 100644 index 0000000..a4af991 --- /dev/null +++ b/Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCard.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform +{ + class GenerateCaptureContextAcceptCard + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static String Run() + { + string clientVersion = "v2"; + + List targetOrigins = new List(); + targetOrigins.Add("https://www.test.com"); + + List allowedCardNetworks = new List(); + allowedCardNetworks.Add("VISA"); + allowedCardNetworks.Add("MASTERCARD"); + allowedCardNetworks.Add("AMEX"); + allowedCardNetworks.Add("CARNET"); + allowedCardNetworks.Add("CARTESBANCAIRES"); + allowedCardNetworks.Add("CUP"); + allowedCardNetworks.Add("DINERSCLUB"); + allowedCardNetworks.Add("DISCOVER"); + allowedCardNetworks.Add("EFTPOS"); + allowedCardNetworks.Add("ELO"); + allowedCardNetworks.Add("JCB"); + allowedCardNetworks.Add("JCREW"); + allowedCardNetworks.Add("MADA"); + allowedCardNetworks.Add("MAESTRO"); + allowedCardNetworks.Add("MEEZA"); + List allowedPaymentTypes = new List(); + allowedPaymentTypes.Add("CARD"); + var requestObj = new GenerateCaptureContextRequest( + ClientVersion: clientVersion, + TargetOrigins: targetOrigins, + AllowedCardNetworks: allowedCardNetworks, + AllowedPaymentTypes: allowedPaymentTypes + + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MicroformIntegrationApi(clientConfig); + String result = apiInstance.GenerateCaptureContext(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCheck.cs b/Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCheck.cs new file mode 100644 index 0000000..b982b88 --- /dev/null +++ b/Source/Samples/FlexMicroform/GenerateCaptureContextAcceptCheck.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.FlexMicroform +{ + class GenerateCaptureContextAcceptCheck + { + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static String Run() + { + string clientVersion = "v2"; + + List targetOrigins = new List(); + targetOrigins.Add("https://www.test.com"); + List allowedPaymentTypes = new List(); + allowedPaymentTypes.Add("CHECK"); + var requestObj = new GenerateCaptureContextRequest( + ClientVersion: clientVersion, + TargetOrigins: targetOrigins, + AllowedPaymentTypes: allowedPaymentTypes); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new MicroformIntegrationApi(clientConfig); + String result = apiInstance.GenerateCaptureContext(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/UnifiedCheckout/GenerateCaptureContextForClickToPayDropInUI.cs b/Source/Samples/UnifiedCheckout/GenerateCaptureContextForClickToPayDropInUI.cs new file mode 100644 index 0000000..254ef75 --- /dev/null +++ b/Source/Samples/UnifiedCheckout/GenerateCaptureContextForClickToPayDropInUI.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.UnifiedCheckout +{ + public class GenerateCaptureContextForClickToPayDropInUI + { + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static String Run() + { + + string clientVersion = "0.23"; + + List targetOrigins = new List(); + targetOrigins.Add("https://yourCheckoutPage.com"); + + List allowedCardNetworks = new List(); + allowedCardNetworks.Add("VISA"); + allowedCardNetworks.Add("MASTERCARD"); + allowedCardNetworks.Add("AMEX"); + allowedCardNetworks.Add("CARNET"); + allowedCardNetworks.Add("CARTESBANCAIRES"); + allowedCardNetworks.Add("CUP"); + allowedCardNetworks.Add("DINERSCLUB"); + allowedCardNetworks.Add("DISCOVER"); + allowedCardNetworks.Add("EFTPOS"); + allowedCardNetworks.Add("ELO"); + allowedCardNetworks.Add("JCB"); + allowedCardNetworks.Add("JCREW"); + allowedCardNetworks.Add("MADA"); + allowedCardNetworks.Add("MAESTRO"); + allowedCardNetworks.Add("MEEZA"); + + List allowedPaymentTypes = new List(); + allowedPaymentTypes.Add("CLICKTOPAY"); + string country = "US"; + string locale = "en_US"; + string captureMandateBillingType = "FULL"; + bool captureMandateRequestEmail = true; + bool captureMandateRequestPhone = true; + bool captureMandateRequestShipping = true; + + List captureMandateShipToCountries = new List(); + captureMandateShipToCountries.Add("US"); + captureMandateShipToCountries.Add("GB"); + bool captureMandateShowAcceptedNetworkIcons = true; + Upv1capturecontextsCaptureMandate captureMandate = new Upv1capturecontextsCaptureMandate( + BillingType: captureMandateBillingType, + RequestEmail: captureMandateRequestEmail, + RequestPhone: captureMandateRequestPhone, + RequestShipping: captureMandateRequestShipping, + ShipToCountries: captureMandateShipToCountries, + ShowAcceptedNetworkIcons: captureMandateShowAcceptedNetworkIcons + ); + + string orderInformationAmountDetailsTotalAmount = "21.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Upv1capturecontextsOrderInformationAmountDetails orderInformationAmountDetails = new Upv1capturecontextsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + Upv1capturecontextsOrderInformation orderInformation = new Upv1capturecontextsOrderInformation( + AmountDetails: orderInformationAmountDetails + ); + + var requestObj = new GenerateUnifiedCheckoutCaptureContextRequest( + ClientVersion: clientVersion, + TargetOrigins: targetOrigins, + AllowedCardNetworks: allowedCardNetworks, + AllowedPaymentTypes: allowedPaymentTypes, + Country: country, + Locale: locale, + CaptureMandate: captureMandate, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new UnifiedCheckoutCaptureContextApi(clientConfig); + String result = apiInstance.GenerateUnifiedCheckoutCaptureContext(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} diff --git a/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs b/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs index 4dca0fe..c4fd189 100644 --- a/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs +++ b/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckout.cs @@ -9,32 +9,84 @@ namespace Cybersource_rest_samples_dotnet.Samples.UnifiedCheckout { public class GenerateUnifiedCheckout { + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + public static String Run() { + string clientVersion = "0.23"; + + List targetOrigins = new List(); + targetOrigins.Add("https://yourCheckoutPage.com"); + + List allowedCardNetworks = new List(); + allowedCardNetworks.Add("VISA"); + allowedCardNetworks.Add("MASTERCARD"); + allowedCardNetworks.Add("AMEX"); + allowedCardNetworks.Add("CARNET"); + allowedCardNetworks.Add("CARTESBANCAIRES"); + allowedCardNetworks.Add("CUP"); + allowedCardNetworks.Add("DINERSCLUB"); + allowedCardNetworks.Add("DISCOVER"); + allowedCardNetworks.Add("EFTPOS"); + allowedCardNetworks.Add("ELO"); + allowedCardNetworks.Add("JCB"); + allowedCardNetworks.Add("JCREW"); + allowedCardNetworks.Add("MADA"); + allowedCardNetworks.Add("MAESTRO"); + allowedCardNetworks.Add("MEEZA"); + + List allowedPaymentTypes = new List(); + allowedPaymentTypes.Add("APPLEPAY"); + allowedPaymentTypes.Add("CHECK"); + allowedPaymentTypes.Add("CLICKTOPAY"); + allowedPaymentTypes.Add("GOOGLEPAY"); + allowedPaymentTypes.Add("PANENTRY"); + allowedPaymentTypes.Add("PAZE"); + string country = "US"; + string locale = "en_US"; + string captureMandateBillingType = "FULL"; + bool captureMandateRequestEmail = true; + bool captureMandateRequestPhone = true; + bool captureMandateRequestShipping = true; + + List captureMandateShipToCountries = new List(); + captureMandateShipToCountries.Add("US"); + captureMandateShipToCountries.Add("GB"); + bool captureMandateShowAcceptedNetworkIcons = true; Upv1capturecontextsCaptureMandate captureMandate = new Upv1capturecontextsCaptureMandate( - BillingType: "FULL", - RequestEmail:true, - RequestPhone:true, - RequestShipping:true, - ShipToCountries: new List(){"US","GB" }, - ShowAcceptedNetworkIcons: true + BillingType: captureMandateBillingType, + RequestEmail: captureMandateRequestEmail, + RequestPhone: captureMandateRequestPhone, + RequestShipping: captureMandateRequestShipping, + ShipToCountries: captureMandateShipToCountries, + ShowAcceptedNetworkIcons: captureMandateShowAcceptedNetworkIcons ); - Upv1capturecontextsOrderInformationAmountDetails amountDetails= new Upv1capturecontextsOrderInformationAmountDetails( - TotalAmount: "21.00", - Currency: "USD" + + string orderInformationAmountDetailsTotalAmount = "21.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Upv1capturecontextsOrderInformationAmountDetails orderInformationAmountDetails = new Upv1capturecontextsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency ); + Upv1capturecontextsOrderInformation orderInformation = new Upv1capturecontextsOrderInformation( - AmountDetails: amountDetails + AmountDetails: orderInformationAmountDetails ); var requestObj = new GenerateUnifiedCheckoutCaptureContextRequest( - TargetOrigins: new List() { "https://the-up-demo.appspot.com" }, - ClientVersion: "0.15", - AllowedCardNetworks: new List() { "VISA","MASTERCARD", "AMEX" }, - AllowedPaymentTypes: new List() { "PANENTRY","SRC" }, - Country : "US", - Locale: "en_US", + ClientVersion: clientVersion, + TargetOrigins: targetOrigins, + AllowedCardNetworks: allowedCardNetworks, + AllowedPaymentTypes: allowedPaymentTypes, + Country: country, + Locale: locale, CaptureMandate: captureMandate, OrderInformation: orderInformation ); @@ -47,6 +99,7 @@ public static String Run() var apiInstance = new UnifiedCheckoutCaptureContextApi(clientConfig); String result = apiInstance.GenerateUnifiedCheckoutCaptureContext(requestObj); Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); return result; } catch (Exception e) diff --git a/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckoutCaptureContextPassingBillingShipping.cs b/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckoutCaptureContextPassingBillingShipping.cs new file mode 100644 index 0000000..5bf012b --- /dev/null +++ b/Source/Samples/UnifiedCheckout/GenerateUnifiedCheckoutCaptureContextPassingBillingShipping.cs @@ -0,0 +1,206 @@ +using System; +using System.Collections.Generic; +using System.Globalization; + +using CyberSource.Api; +using CyberSource.Model; + +namespace Cybersource_rest_samples_dotnet.Samples.UnifiedCheckout +{ + public class GenerateUnifiedCheckoutCaptureContextPassingBillingShipping + { + + public static void WriteLogAudit(int status) + { + var filePath = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString().Split('.'); + var filename = filePath[filePath.Length - 1]; + Console.WriteLine($"[Sample Code Testing] [{filename}] {status}"); + } + + public static String Run() + { + + string clientVersion = "0.23"; + + List targetOrigins = new List(); + targetOrigins.Add("https://yourCheckoutPage.com"); + + List allowedCardNetworks = new List(); + allowedCardNetworks.Add("VISA"); + allowedCardNetworks.Add("MASTERCARD"); + allowedCardNetworks.Add("AMEX"); + allowedCardNetworks.Add("CARNET"); + allowedCardNetworks.Add("CARTESBANCAIRES"); + allowedCardNetworks.Add("CUP"); + allowedCardNetworks.Add("DINERSCLUB"); + allowedCardNetworks.Add("DISCOVER"); + allowedCardNetworks.Add("EFTPOS"); + allowedCardNetworks.Add("ELO"); + allowedCardNetworks.Add("JCB"); + allowedCardNetworks.Add("JCREW"); + allowedCardNetworks.Add("MADA"); + allowedCardNetworks.Add("MAESTRO"); + allowedCardNetworks.Add("MEEZA"); + + List allowedPaymentTypes = new List(); + allowedPaymentTypes.Add("APPLEPAY"); + allowedPaymentTypes.Add("CHECK"); + allowedPaymentTypes.Add("CLICKTOPAY"); + allowedPaymentTypes.Add("GOOGLEPAY"); + allowedPaymentTypes.Add("PANENTRY"); + allowedPaymentTypes.Add("PAZE"); + string country = "US"; + string locale = "en_US"; + string captureMandateBillingType = "FULL"; + bool captureMandateRequestEmail = true; + bool captureMandateRequestPhone = true; + bool captureMandateRequestShipping = true; + + List captureMandateShipToCountries = new List(); + captureMandateShipToCountries.Add("US"); + captureMandateShipToCountries.Add("GB"); + bool captureMandateShowAcceptedNetworkIcons = true; + Upv1capturecontextsCaptureMandate captureMandate = new Upv1capturecontextsCaptureMandate( + BillingType: captureMandateBillingType, + RequestEmail: captureMandateRequestEmail, + RequestPhone: captureMandateRequestPhone, + RequestShipping: captureMandateRequestShipping, + ShipToCountries: captureMandateShipToCountries, + ShowAcceptedNetworkIcons: captureMandateShowAcceptedNetworkIcons + ); + + string orderInformationAmountDetailsTotalAmount = "21.00"; + string orderInformationAmountDetailsCurrency = "USD"; + Upv1capturecontextsOrderInformationAmountDetails orderInformationAmountDetails = new Upv1capturecontextsOrderInformationAmountDetails( + TotalAmount: orderInformationAmountDetailsTotalAmount, + Currency: orderInformationAmountDetailsCurrency + ); + + string orderInformationBillToAddress1 = "277 Park Avenue"; + string orderInformationBillToAddress2 = "50th Floor"; + string orderInformationBillToAddress3 = "Desk NY-50110"; + string orderInformationBillToAddress4 = "address4"; + string orderInformationBillToAdministrativeArea = "NY"; + string orderInformationBillToBuildingNumber = "buildingNumber"; + string orderInformationBillToCountry = "US"; + string orderInformationBillToDistrict = "district"; + string orderInformationBillToLocality = "New York"; + string orderInformationBillToPostalCode = "10172"; + string orderInformationBillToCompanyName = "Visa Inc"; + string orderInformationBillToCompanyAddress1 = "900 Metro Center Blvd"; + string orderInformationBillToCompanyAddress2 = "address2"; + string orderInformationBillToCompanyAddress3 = "address3"; + string orderInformationBillToCompanyAddress4 = "address4"; + string orderInformationBillToCompanyAdministrativeArea = "CA"; + string orderInformationBillToCompanyBuildingNumber = "1"; + string orderInformationBillToCompanyCountry = "US"; + string orderInformationBillToCompanyDistrict = "district"; + string orderInformationBillToCompanyLocality = "Foster City"; + string orderInformationBillToCompanyPostalCode = "94404"; + Upv1capturecontextsOrderInformationBillToCompany orderInformationBillToCompany = new Upv1capturecontextsOrderInformationBillToCompany( + Name: orderInformationBillToCompanyName, + Address1: orderInformationBillToCompanyAddress1, + Address2: orderInformationBillToCompanyAddress2, + Address3: orderInformationBillToCompanyAddress3, + Address4: orderInformationBillToCompanyAddress4, + AdministrativeArea: orderInformationBillToCompanyAdministrativeArea, + BuildingNumber: orderInformationBillToCompanyBuildingNumber, + Country: orderInformationBillToCompanyCountry, + District: orderInformationBillToCompanyDistrict, + Locality: orderInformationBillToCompanyLocality, + PostalCode: orderInformationBillToCompanyPostalCode + ); + + string orderInformationBillToEmail = "john.doe@visa.com"; + string orderInformationBillToFirstName = "John"; + string orderInformationBillToLastName = "Doe"; + string orderInformationBillToMiddleName = "F"; + string orderInformationBillToNameSuffix = "Jr"; + string orderInformationBillToTitle = "Mr"; + string orderInformationBillToPhoneNumber = "1234567890"; + string orderInformationBillToPhoneType = "phoneType"; + Upv1capturecontextsOrderInformationBillTo orderInformationBillTo = new Upv1capturecontextsOrderInformationBillTo( + Address1: orderInformationBillToAddress1, + Address2: orderInformationBillToAddress2, + Address3: orderInformationBillToAddress3, + Address4: orderInformationBillToAddress4, + AdministrativeArea: orderInformationBillToAdministrativeArea, + BuildingNumber: orderInformationBillToBuildingNumber, + Country: orderInformationBillToCountry, + District: orderInformationBillToDistrict, + Locality: orderInformationBillToLocality, + PostalCode: orderInformationBillToPostalCode, + Company: orderInformationBillToCompany, + Email: orderInformationBillToEmail, + FirstName: orderInformationBillToFirstName, + LastName: orderInformationBillToLastName, + MiddleName: orderInformationBillToMiddleName, + NameSuffix: orderInformationBillToNameSuffix, + Title: orderInformationBillToTitle, + PhoneNumber: orderInformationBillToPhoneNumber, + PhoneType: orderInformationBillToPhoneType + ); + + string orderInformationShipToAddress1 = "CyberSource"; + string orderInformationShipToAddress2 = "Victoria House"; + string orderInformationShipToAddress3 = "15-17 Gloucester Street"; + string orderInformationShipToAddress4 = "string"; + string orderInformationShipToAdministrativeArea = "CA"; + string orderInformationShipToBuildingNumber = "string"; + string orderInformationShipToCountry = "GB"; + string orderInformationShipToDistrict = "string"; + string orderInformationShipToLocality = "Belfast"; + string orderInformationShipToPostalCode = "BT1 4LS"; + string orderInformationShipToFirstName = "Joe"; + string orderInformationShipToLastName = "Soap"; + Upv1capturecontextsOrderInformationShipTo orderInformationShipTo = new Upv1capturecontextsOrderInformationShipTo( + Address1: orderInformationShipToAddress1, + Address2: orderInformationShipToAddress2, + Address3: orderInformationShipToAddress3, + Address4: orderInformationShipToAddress4, + AdministrativeArea: orderInformationShipToAdministrativeArea, + BuildingNumber: orderInformationShipToBuildingNumber, + Country: orderInformationShipToCountry, + District: orderInformationShipToDistrict, + Locality: orderInformationShipToLocality, + PostalCode: orderInformationShipToPostalCode, + FirstName: orderInformationShipToFirstName, + LastName: orderInformationShipToLastName + ); + + Upv1capturecontextsOrderInformation orderInformation = new Upv1capturecontextsOrderInformation( + AmountDetails: orderInformationAmountDetails, + BillTo: orderInformationBillTo, + ShipTo: orderInformationShipTo + ); + + var requestObj = new GenerateUnifiedCheckoutCaptureContextRequest( + ClientVersion: clientVersion, + TargetOrigins: targetOrigins, + AllowedCardNetworks: allowedCardNetworks, + AllowedPaymentTypes: allowedPaymentTypes, + Country: country, + Locale: locale, + CaptureMandate: captureMandate, + OrderInformation: orderInformation + ); + + try + { + var configDictionary = new Configuration().GetConfiguration(); + var clientConfig = new CyberSource.Client.Configuration(merchConfigDictObj: configDictionary); + + var apiInstance = new UnifiedCheckoutCaptureContextApi(clientConfig); + String result = apiInstance.GenerateUnifiedCheckoutCaptureContext(requestObj); + Console.WriteLine(result); + WriteLogAudit(apiInstance.GetStatusCode()); + return result; + } + catch (Exception e) + { + Console.WriteLine("Exception on calling the API : " + e.Message); + return null; + } + } + } +} From bd710d41a82dcfb007fce12c05862374e2cc793d Mon Sep 17 00:00:00 2001 From: mahmishr Date: Tue, 11 Feb 2025 15:17:51 +0530 Subject: [PATCH 161/161] adding samples to csproj --- cybersource-rest-samples-csharp.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cybersource-rest-samples-csharp.csproj b/cybersource-rest-samples-csharp.csproj index eba90a5..3869d75 100644 --- a/cybersource-rest-samples-csharp.csproj +++ b/cybersource-rest-samples-csharp.csproj @@ -131,6 +131,8 @@ + + @@ -370,6 +372,8 @@ + +

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⪚J8piB7-o?3|p= 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