From 78c64a9961e0a596dd635b7965f9e825d80719da Mon Sep 17 00:00:00 2001 From: Heather Preslier Date: Fri, 14 Aug 2015 10:42:27 -0700 Subject: [PATCH] Added more sample code for customer profiles and updated some of the console messages from previous samples --- .../CreateCustomerProfileFromTransaction.cs | 2 +- .../DeleteCustomerPaymentProfile.cs | 2 +- CustomerProfiles/DeleteCustomerProfile.cs | 2 +- .../UpdateCustomerPaymentProfile.cs | 65 ++++++++++++++++++ CustomerProfiles/UpdateCustomerProfile.cs | 44 ++++++++++++ .../UpdateCustomerShippingAddress.cs | 59 ++++++++++++++++ .../ValidateCustomerPaymentProfile.cs | 39 +++++++++++ SampleCode.cs | 16 +++++ SampleCode.exe | Bin 57344 -> 61440 bytes 9 files changed, 226 insertions(+), 3 deletions(-) diff --git a/CustomerProfiles/CreateCustomerProfileFromTransaction.cs b/CustomerProfiles/CreateCustomerProfileFromTransaction.cs index 1693193..7734dbb 100644 --- a/CustomerProfiles/CreateCustomerProfileFromTransaction.cs +++ b/CustomerProfiles/CreateCustomerProfileFromTransaction.cs @@ -10,7 +10,7 @@ class CreateCustomerProfileFromTransaction { public static void Run(string ApiLoginID, string ApiTransactionKey) { - Console.WriteLine("CreateCustomerProfile Sample"); + Console.WriteLine("CreateCustomerProfileFromTransaction Sample"); ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() diff --git a/CustomerProfiles/DeleteCustomerPaymentProfile.cs b/CustomerProfiles/DeleteCustomerPaymentProfile.cs index ec4da99..679f71c 100644 --- a/CustomerProfiles/DeleteCustomerPaymentProfile.cs +++ b/CustomerProfiles/DeleteCustomerPaymentProfile.cs @@ -10,7 +10,7 @@ class DeleteCustomerPaymentProfile { public static void Run(String ApiLoginID, String ApiTransactionKey) { - Console.WriteLine("CreateCustomerShippingAddress Sample"); + Console.WriteLine("DeleteCustomerPaymentProfile Sample"); ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() { diff --git a/CustomerProfiles/DeleteCustomerProfile.cs b/CustomerProfiles/DeleteCustomerProfile.cs index 000f9bf..16adc41 100644 --- a/CustomerProfiles/DeleteCustomerProfile.cs +++ b/CustomerProfiles/DeleteCustomerProfile.cs @@ -10,7 +10,7 @@ class DeleteCustomerProfile { public static void Run(String ApiLoginID, String ApiTransactionKey) { - Console.WriteLine("CreateCustomerShippingAddress Sample"); + Console.WriteLine("DeleteCustomerProfile Sample"); ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() { diff --git a/CustomerProfiles/UpdateCustomerPaymentProfile.cs b/CustomerProfiles/UpdateCustomerPaymentProfile.cs index ad45f00..f417a78 100644 --- a/CustomerProfiles/UpdateCustomerPaymentProfile.cs +++ b/CustomerProfiles/UpdateCustomerPaymentProfile.cs @@ -3,10 +3,75 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using AuthorizeNet.Api.Contracts.V1; +using AuthorizeNet.Api.Controllers; +using AuthorizeNet.Api.Controllers.Bases; namespace net.authorize.sample { class UpdateCustomerPaymentProfile { + public static void Run(String ApiLoginID, String ApiTransactionKey) + { + Console.WriteLine("Update Customer payment profile sample"); + + ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; + // define the merchant information (authentication / transaction id) + ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() + { + name = ApiLoginID, + ItemElementName = ItemChoiceType.transactionKey, + Item = ApiTransactionKey, + }; + + var creditCard = new creditCardType + { + cardNumber = "4111111111111111", + expirationDate = "0718" + }; + + var paymentType = new paymentType { Item = creditCard }; + + var paymentProfile = new customerPaymentProfileExType + { + billTo = new customerAddressType + { + // change information as required for billing + firstName = "John", + lastName = "Doe", + address = "123 Main St.", + city = "Bellevue", + state = "WA", + zip = "98004", + country = "USA", + phoneNumber = "000-000-000", + }, + payment = paymentType, + customerPaymentProfileId = "33093910" + }; + + var request = new updateCustomerPaymentProfileRequest(); + request.customerProfileId = "36605093"; + request.paymentProfile = paymentProfile; + request.validationMode = validationModeEnum.liveMode; + + + // instantiate the controller that will call the service + var controller = new updateCustomerPaymentProfileController(request); + controller.Execute(); + + // get the response from the service (errors contained if any) + var response = controller.GetApiResponse(); + + if (response.messages.resultCode == messageTypeEnum.Ok) + { + Console.WriteLine(response.messages.message[0].text); + } + else + { + Console.WriteLine("Error: " + response.messages.message[0].code + " " + + response.messages.message[0].text); + } + } } } diff --git a/CustomerProfiles/UpdateCustomerProfile.cs b/CustomerProfiles/UpdateCustomerProfile.cs index ae58b58..0e7e2ed 100644 --- a/CustomerProfiles/UpdateCustomerProfile.cs +++ b/CustomerProfiles/UpdateCustomerProfile.cs @@ -3,10 +3,54 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using AuthorizeNet.Api.Contracts.V1; +using AuthorizeNet.Api.Controllers; +using AuthorizeNet.Api.Controllers.Bases; namespace net.authorize.sample { class UpdateCustomerProfile { + public static void Run(String ApiLoginID, String ApiTransactionKey) + { + Console.WriteLine("Update customer profile sample"); + + ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; + // define the merchant information (authentication / transaction id) + ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() + { + name = ApiLoginID, + ItemElementName = ItemChoiceType.transactionKey, + Item = ApiTransactionKey, + }; + + var profile = new customerProfileExType + { + merchantCustomerId = "custId123", + description = "some description", + email = "newaddress@example.com", + customerProfileId = "36605093" + }; + + var request = new updateCustomerProfileRequest(); + request.profile = profile; + + // instantiate the controller that will call the service + var controller = new updateCustomerProfileController(request); + controller.Execute(); + + // get the response from the service (errors contained if any) + var response = controller.GetApiResponse(); + + if (response.messages.resultCode == messageTypeEnum.Ok) + { + Console.WriteLine(response.messages.message[0].text); + } + else + { + Console.WriteLine("Error: " + response.messages.message[0].code + " " + + response.messages.message[0].text); + } + } } } diff --git a/CustomerProfiles/UpdateCustomerShippingAddress.cs b/CustomerProfiles/UpdateCustomerShippingAddress.cs index cf66ac9..b73704d 100644 --- a/CustomerProfiles/UpdateCustomerShippingAddress.cs +++ b/CustomerProfiles/UpdateCustomerShippingAddress.cs @@ -3,10 +3,69 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using AuthorizeNet.Api.Contracts.V1; +using AuthorizeNet.Api.Controllers; +using AuthorizeNet.Api.Controllers.Bases; namespace net.authorize.sample { class UpdateCustomerShippingAddress { + public static void Run(String ApiLoginID, String ApiTransactionKey) + { + Console.WriteLine("Update customer shipping address sample"); + + ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; + // define the merchant information (authentication / transaction id) + ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() + { + name = ApiLoginID, + ItemElementName = ItemChoiceType.transactionKey, + Item = ApiTransactionKey, + }; + + var creditCard = new creditCardType + { + cardNumber = "4111111111111111", + expirationDate = "0718" + }; + + var paymentType = new paymentType { Item = creditCard }; + + var address = new customerAddressExType + { + firstName = "Newfirstname", + lastName = "Doe", + address = "123 Main St.", + city = "Bellevue", + state = "WA", + zip = "98004", + country = "USA", + phoneNumber = "000-000-000", + customerAddressId = "34750930" + }; + + var request = new updateCustomerShippingAddressRequest(); + request.customerProfileId = "36605093"; + request.address = address; + + + // instantiate the controller that will call the service + var controller = new updateCustomerShippingAddressController(request); + controller.Execute(); + + // get the response from the service (errors contained if any) + var response = controller.GetApiResponse(); + + if (response.messages.resultCode == messageTypeEnum.Ok) + { + Console.WriteLine(response.messages.message[0].text); + } + else + { + Console.WriteLine("Error: " + response.messages.message[0].code + " " + + response.messages.message[0].text); + } + } } } diff --git a/CustomerProfiles/ValidateCustomerPaymentProfile.cs b/CustomerProfiles/ValidateCustomerPaymentProfile.cs index 7d6e78b..937a878 100644 --- a/CustomerProfiles/ValidateCustomerPaymentProfile.cs +++ b/CustomerProfiles/ValidateCustomerPaymentProfile.cs @@ -3,10 +3,49 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using AuthorizeNet.Api.Contracts.V1; +using AuthorizeNet.Api.Controllers; +using AuthorizeNet.Api.Controllers.Bases; namespace net.authorize.sample { class ValidateCustomerPaymentProfile { + public static void Run(String ApiLoginID, String ApiTransactionKey) + { + Console.WriteLine("Validate customer payment profile sample"); + + ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; + // define the merchant information (authentication / transaction id) + ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() + { + name = ApiLoginID, + ItemElementName = ItemChoiceType.transactionKey, + Item = ApiTransactionKey, + }; + + var request = new validateCustomerPaymentProfileRequest(); + request.customerProfileId = "36594444"; + request.customerPaymentProfileId = "33084787"; + request.validationMode = validationModeEnum.liveMode; + + + // instantiate the controller that will call the service + var controller = new validateCustomerPaymentProfileController(request); + controller.Execute(); + + // get the response from the service (errors contained if any) + var response = controller.GetApiResponse(); + + if (response.messages.resultCode == messageTypeEnum.Ok) + { + Console.WriteLine(response.messages.message[0].text); + } + else + { + Console.WriteLine("Error: " + response.messages.message[0].code + " " + + response.messages.message[0].text); + } + } } } diff --git a/SampleCode.cs b/SampleCode.cs index 448f170..c043004 100644 --- a/SampleCode.cs +++ b/SampleCode.cs @@ -62,6 +62,10 @@ private static void SelectMethod() private static void ShowMethods() { + Console.WriteLine(" ValidateCustomerPaymentProfile"); + Console.WriteLine(" UpdateCustomerShippingAddress"); + Console.WriteLine(" UpdateCustomerProfile"); + Console.WriteLine(" UpdateCustomerPaymentProfile"); Console.WriteLine(" GetCustomerShippingAddress"); Console.WriteLine(" GetCustomerProfileId"); Console.WriteLine(" GetCustomerProfile"); @@ -118,6 +122,18 @@ private static void RunMethod(String methodName) switch (methodName) { + case "ValidateCustomerPaymentProfile": + ValidateCustomerPaymentProfile.Run(apiLoginId, transactionKey); + break; + case "UpdateCustomerShippingAddress": + UpdateCustomerShippingAddress.Run(apiLoginId, transactionKey); + break; + case "UpdateCustomerProfile": + UpdateCustomerProfile.Run(apiLoginId, transactionKey); + break; + case "UpdateCustomerPaymentProfile": + UpdateCustomerPaymentProfile.Run(apiLoginId, transactionKey); + break; case "GetCustomerShippingAddress": GetCustomerShippingAddress.Run(apiLoginId, transactionKey); break; diff --git a/SampleCode.exe b/SampleCode.exe index ee01859a989d7fe8db50105a0ada6b2038df822d..d7e8a0c7975b5625c9c8a03b09bd21b1c7636421 100644 GIT binary patch delta 16285 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