diff --git a/Authorize.NET/Api/Contracts/V1/AnetApiSchema.generated.cs b/Authorize.NET/Api/Contracts/V1/AnetApiSchema.generated.cs index 944b50d2..88286df6 100644 --- a/Authorize.NET/Api/Contracts/V1/AnetApiSchema.generated.cs +++ b/Authorize.NET/Api/Contracts/V1/AnetApiSchema.generated.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.8662 +// Runtime Version:2.0.50727.8689 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -69,6 +69,13 @@ public partial class processorType : object, System.ComponentModel.INotifyProper /// public string name; + /// + public int id; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("cardType")] + public string[] cardTypes; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { @@ -152,6 +159,9 @@ public partial class creditCardMaskedType : object, System.ComponentModel.INotif /// public cardArt cardArt; + /// + public string issuerNumber; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { @@ -237,33 +247,6 @@ protected void RaisePropertyChanged(string propertyName) { } } - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public partial class customerProfileIdType : object, System.ComponentModel.INotifyPropertyChanged { - - /// - public string customerProfileId; - - /// - public string customerPaymentProfileId; - - /// - public string customerAddressId; - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - protected void RaisePropertyChanged(string propertyName) { - System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; - if ((propertyChanged != null)) { - propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); - } - } - } - /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -1018,6 +1001,9 @@ public partial class transactionResponse : object, System.ComponentModel.INotify /// public string transHashSha2; + /// + public customerProfileIdType profile; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { @@ -1251,6 +1237,33 @@ protected void RaisePropertyChanged(string propertyName) { } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class customerProfileIdType : object, System.ComponentModel.INotifyPropertyChanged { + + /// + public string customerProfileId; + + /// + public string customerPaymentProfileId; + + /// + public string customerAddressId; + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -1438,6 +1451,18 @@ public partial class transactionDetailsType : object, System.ComponentModel.INot [System.Xml.Serialization.XmlArrayItemAttribute("tag", IsNullable=false)] public transactionDetailsTypeTag[] emvDetails; + /// + public customerProfileIdType profile; + + /// + public extendedAmountType surcharge; + + /// + public string employeeId; + + /// + public extendedAmountType tip; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { @@ -2295,6 +2320,18 @@ public partial class transactionRequestType : object, System.ComponentModel.INot [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public userField[] userFields; + /// + public extendedAmountType surcharge; + + /// + public string merchantDescriptor; + + /// + public subMerchantType subMerchant; + + /// + public extendedAmountType tip; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { @@ -2798,6 +2835,9 @@ public partial class transRetailInfoType : object, System.ComponentModel.INotify /// public string customerSignature; + /// + public string terminalNumber; + public transRetailInfoType() { this.marketType = "2"; } @@ -2836,6 +2876,57 @@ protected void RaisePropertyChanged(string propertyName) { } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class subMerchantType : object, System.ComponentModel.INotifyPropertyChanged { + + /// + public string identifier; + + /// + public string doingBusinessAs; + + /// + public string paymentServiceProviderName; + + /// + public string paymentServiceFacilitator; + + /// + public string streetAddress; + + /// + public string phone; + + /// + public string email; + + /// + public string postalCode; + + /// + public string city; + + /// + public string regionCode; + + /// + public string countryCode; + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -3152,6 +3243,10 @@ public partial class ARBSubscriptionMaskedType : object, System.ComponentModel.I /// public orderType order; + /// + [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] + public arbTransaction[] arbTransactions; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { @@ -3242,6 +3337,51 @@ public enum ARBSubscriptionUnitEnum { months, } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class arbTransaction : object, System.ComponentModel.INotifyPropertyChanged { + + /// + public string transId; + + /// + public string response; + + /// + public System.DateTime submitTimeUTC; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool submitTimeUTCSpecified; + + /// + public int payNum; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool payNumSpecified; + + /// + public int attemptNum; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool attemptNumSpecified; + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -3510,6 +3650,9 @@ public partial class transactionSummaryType : object, System.ComponentModel.INot /// public fraudInformationType fraudInformation; + /// + public customerProfileIdType profile; + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) { @@ -3582,16 +3725,22 @@ protected void RaisePropertyChanged(string propertyName) { [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public partial class webCheckOutDataType : object, System.ComponentModel.INotifyPropertyChanged { + public partial class webCheckOutDataTypeToken : object, System.ComponentModel.INotifyPropertyChanged { /// - public webCheckOutTypeEnum type; + public string cardNumber; /// - public string id; + public string expirationDate; /// - public webCheckOutDataTypeToken token; + public string cardCode; + + /// + public string zip; + + /// + public string fullName; public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; @@ -3603,41 +3752,25 @@ protected void RaisePropertyChanged(string propertyName) { } } - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public enum webCheckOutTypeEnum { - - /// - PAN, - - /// - TOKEN, - } - /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public partial class webCheckOutDataTypeToken : object, System.ComponentModel.INotifyPropertyChanged { - - /// - public string cardNumber; + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class webCheckOutDataType : object, System.ComponentModel.INotifyPropertyChanged { /// - public string expirationDate; + public webCheckOutTypeEnum type; /// - public string cardCode; + public string id; /// - public string zip; + public webCheckOutDataTypeToken token; /// - public string fullName; + public bankAccountType bankToken; public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; @@ -3649,6 +3782,19 @@ protected void RaisePropertyChanged(string propertyName) { } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public enum webCheckOutTypeEnum { + + /// + PAN, + + /// + TOKEN, + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -3766,6 +3912,7 @@ public partial class merchantAuthenticationType : object, System.ComponentModel. public string name; /// + [System.Xml.Serialization.XmlElementAttribute("accessToken", typeof(string))] [System.Xml.Serialization.XmlElementAttribute("clientKey", typeof(string))] [System.Xml.Serialization.XmlElementAttribute("fingerPrint", typeof(fingerPrintType))] [System.Xml.Serialization.XmlElementAttribute("impersonationAuthentication", typeof(impersonationAuthenticationType))] @@ -3798,6 +3945,9 @@ protected void RaisePropertyChanged(string propertyName) { [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IncludeInSchema=false)] public enum ItemChoiceType { + /// + accessToken, + /// clientKey, @@ -4273,12 +4423,25 @@ public partial class getCustomerProfileRequest : ANetApiRequest { /// public string customerProfileId; + /// + public string merchantCustomerId; + + /// + public string email; + /// public bool unmaskExpirationDate; /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool unmaskExpirationDateSpecified; + + /// + public bool includeIssuerInfo; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool includeIssuerInfoSpecified; } /// @@ -4319,6 +4482,13 @@ public partial class getCustomerPaymentProfileRequest : ANetApiRequest { /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool unmaskExpirationDateSpecified; + + /// + public bool includeIssuerInfo; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool includeIssuerInfoSpecified; } /// @@ -4701,6 +4871,12 @@ public partial class getTransactionDetailsResponse : ANetApiResponse { /// public transactionDetailsType transaction; + + /// + public string clientId; + + /// + public string transrefId; } /// @@ -5382,6 +5558,15 @@ public enum settingNameEnum { /// hostedPaymentStyleOptions, + + /// + typeEmailReceipt, + + /// + hostedProfilePaymentOptions, + + /// + hostedProfileSaveButtonText, } /// @@ -5573,6 +5758,13 @@ public partial class ARBGetSubscriptionRequest : ANetApiRequest { /// public string subscriptionId; + + /// + public bool includeTransactions; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool includeTransactionsSpecified; } /// @@ -5588,6 +5780,28 @@ public partial class ARBGetSubscriptionResponse : ANetApiResponse { public ARBSubscriptionMaskedType subscription; } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + [System.Xml.Serialization.XmlRootAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IsNullable=false)] + public partial class getTransactionListForCustomerRequest : ANetApiRequest { + + /// + public string customerProfileId; + + /// + public string customerPaymentProfileId; + + /// + public TransactionListSorting sorting; + + /// + public Paging paging; + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -5727,6 +5941,9 @@ public partial class getMerchantDetailsResponse : ANetApiResponse { /// [System.Xml.Serialization.XmlArrayItemAttribute("currency")] public string[] currencies; + + /// + public string publicClientKey; } /// @@ -5771,4 +5988,27 @@ public enum paymentMethodsTypeEnum { /// AndroidPay, } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + [System.Xml.Serialization.XmlRootAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IsNullable=false)] + public partial class updateMerchantDetailsRequest : ANetApiRequest { + + /// + public bool isTestMode; + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + [System.Xml.Serialization.XmlRootAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IsNullable=false)] + public partial class updateMerchantDetailsResponse : ANetApiResponse { + } } diff --git a/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.cs b/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.cs index 3c3f3cb6..30e4b704 100644 --- a/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.cs +++ b/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.cs @@ -175,6 +175,7 @@ public static void transactionSummaryType(transactionSummaryType argument) subscriptionPaymentType(argument.subscription); if (argument.hasReturnedItems) { argument.hasReturnedItemsSpecified = true; } fraudInformationType(argument.fraudInformation); + customerProfileIdType(argument.profile); } } public static void subscriptionPaymentType(subscriptionPaymentType argument) @@ -215,6 +216,12 @@ public static void settingType(settingType argument) if (null != argument) { } + } + public static void subMerchantType(subMerchantType argument) + { + if(null != argument) + { + } } public static void emailSettingsType(emailSettingsType argument) { @@ -279,6 +286,9 @@ public static void transactionRequestType(transactionRequestType argument) transRetailInfoType(argument.retail); if (null != argument.transactionSettings) { foreach (var value in argument.transactionSettings) { settingType(value); } } if (null != argument.userFields) { foreach (var value in argument.userFields) { userField(value); } } + extendedAmountType(argument.surcharge); + subMerchantType(argument.subMerchant); + extendedAmountType(argument.tip); } } public static void paymentType(paymentType argument) @@ -517,7 +527,10 @@ public static void transactionDetailsType(transactionDetailsType argument) solutionType(argument.solution); if(null != argument.emvDetails){ foreach( var value in argument.emvDetails) { transactionDetailsTypeTag(value);} } - + + customerProfileIdType(argument.profile); + extendedAmountType(argument.surcharge); + extendedAmountType(argument.tip); } } public static void paymentMaskedType(paymentMaskedType argument) @@ -574,6 +587,7 @@ public static void transactionResponse(transactionResponse argument) nameAndAddressType(argument.shipTo); transactionResponseSecureAcceptance(argument.secureAcceptance); transactionResponseEmvResponse(argument.emvResponse); + customerProfileIdType(argument.profile); } } @@ -760,6 +774,12 @@ public static void customerProfileType(customerProfileType argument) if (null != argument.paymentProfiles) { foreach (var value in argument.paymentProfiles) { customerPaymentProfileType(value); } } if (null != argument.shipToList) { foreach (var value in argument.shipToList) { customerAddressType(value); } } } + } + public static void securePaymentContainerErrorType(securePaymentContainerErrorType argument) + { + if(null != argument) + { + } } public static void customerType(customerType argument) { @@ -836,6 +856,7 @@ public static void impersonationAuthenticationType(impersonationAuthenticationTy { } } + public static void merchantAuthenticationType(merchantAuthenticationType argument) { if (null != argument) @@ -870,6 +891,33 @@ public static void ANetApiResponse(ANetApiResponse argument) { messagesType(argument.messages); } + } + public static void securePaymentContainerRequest(securePaymentContainerRequest argument) + { + if(null != argument) + { + webCheckOutDataType(argument.data); + } + } + public static void securePaymentContainerResponse(securePaymentContainerResponse argument) + { + if(null != argument) + { + opaqueDataType(argument.opaqueData); + } + } + public static void webCheckOutDataType(webCheckOutDataType argument) + { + if (null != argument) + { + webCheckOutDataTypeToken(argument.token); + } + } + public static void webCheckOutDataTypeToken(webCheckOutDataTypeToken argument) + { + if (null != argument) + { + } } public static void isAliveRequest(isAliveRequest argument) { @@ -1014,6 +1062,8 @@ public static void getCustomerProfileRequest(getCustomerProfileRequest argument) if (null != argument) { if(argument.unmaskExpirationDate) { argument.unmaskExpirationDateSpecified=true;} + if(argument.includeIssuerInfo) { argument.includeIssuerInfoSpecified=true;} + } } public static void getCustomerProfileResponse(getCustomerProfileResponse argument) @@ -1027,6 +1077,8 @@ public static void getCustomerPaymentProfileRequest(getCustomerPaymentProfileReq { if (null != argument) { + if(argument.includeIssuerInfo) { argument.includeIssuerInfoSpecified=true;} + } } public static void getCustomerPaymentProfileResponse(getCustomerPaymentProfileResponse argument) @@ -1417,7 +1469,7 @@ public static void EnumCollection(EnumCollection argument) { customerProfileSummaryType(argument.customerProfileSummaryType); paymentSimpleType(argument.paymentSimpleType); - } + } } public static void auDetailsType(auDetailsType argument) @@ -1505,7 +1557,27 @@ public static void getMerchantDetailsResponse(getMerchantDetailsResponse argumen } } - } + public static void getTransactionListForCustomerRequest(getTransactionListForCustomerRequest argument) + { + if(null != argument) + { + TransactionListSorting(argument.sorting); + Paging(argument.paging); + } + } + public static void updateMerchantDetailsRequest(updateMerchantDetailsRequest argument) + { + if (null != argument) + { + } + } + public static void updateMerchantDetailsResponse(updateMerchantDetailsResponse argument) + { + if (null != argument) + { + } + } + } // ReSharper restore InconsistentNaming diff --git a/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.generated.org b/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.generated.org index a750f1da..a1ad4c41 100644 --- a/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.generated.org +++ b/Authorize.NET/Api/Contracts/V1/RequestFactoryWithSpecified.generated.org @@ -36,6 +36,7 @@ namespace AuthorizeNet.Api.Contracts.V1 { if(null != argument) { + [System.Xml.Serialization.XmlArrayItemAttribute("cardType")] } } public static void auDetailsType(auDetailsType argument) @@ -83,12 +84,6 @@ namespace AuthorizeNet.Api.Contracts.V1 long(argument.profileCount); } } - public static void customerProfileIdType(customerProfileIdType argument) - { - if(null != argument) - { - } - } public static void customerPaymentProfileListItemType(customerPaymentProfileListItemType argument) { if(null != argument) @@ -219,6 +214,7 @@ namespace AuthorizeNet.Api.Contracts.V1 nameAndAddressType(argument.shipTo); transactionResponseSecureAcceptance(argument.secureAcceptance); transactionResponseEmvResponse(argument.emvResponse); + customerProfileIdType(argument.profile); } } public static void transactionResponsePrePaidCard(transactionResponsePrePaidCard argument) @@ -270,6 +266,12 @@ namespace AuthorizeNet.Api.Contracts.V1 { } } + public static void customerProfileIdType(customerProfileIdType argument) + { + if(null != argument) + { + } + } public static void returnedItemType(returnedItemType argument) { if(null != argument) @@ -299,6 +301,9 @@ namespace AuthorizeNet.Api.Contracts.V1 if(null != argument.returnedItems){ foreach( var value in argument.returnedItems) { returnedItemType(value);} } solutionType(argument.solution); if(null != argument.emvDetails){ foreach( var value in argument.emvDetails) { transactionDetailsTypeTag(value);} } + customerProfileIdType(argument.profile); + extendedAmountType(argument.surcharge); + extendedAmountType(argument.tip); } } public static void subscriptionPaymentType(subscriptionPaymentType argument) @@ -502,6 +507,9 @@ namespace AuthorizeNet.Api.Contracts.V1 transRetailInfoType(argument.retail); if(null != argument.transactionSettings){ foreach( var value in argument.transactionSettings) { settingType(value);} } if(null != argument.userFields){ foreach( var value in argument.userFields) { userField(value);} } + extendedAmountType(argument.surcharge); + subMerchantType(argument.subMerchant); + extendedAmountType(argument.tip); } } public static void paymentType(paymentType argument) @@ -635,6 +643,12 @@ transRetailInfoType() { { } } + public static void subMerchantType(subMerchantType argument) + { + if(null != argument) + { + } + } public static void mobileDeviceType(mobileDeviceType argument) { if(null != argument) @@ -733,6 +747,7 @@ transRetailInfoType() { if(argument.status) { argument.statusSpecified=true;} subscriptionCustomerProfileType(argument.profile); orderType(argument.order); + if(null != argument.arbTransactions){ foreach( var value in argument.arbTransactions) { arbTransaction(value);} } } } public static void paymentScheduleType(paymentScheduleType argument) @@ -751,6 +766,15 @@ transRetailInfoType() { { } } + public static void arbTransaction(arbTransaction argument) + { + if(null != argument) + { + if(argument.submitTimeUTC) { argument.submitTimeUTCSpecified=true;} + if(argument.payNum) { argument.payNumSpecified=true;} + if(argument.attemptNum) { argument.attemptNumSpecified=true;} + } + } public static void securePaymentContainerErrorType(securePaymentContainerErrorType argument) { if(null != argument) @@ -812,6 +836,7 @@ transRetailInfoType() { subscriptionPaymentType(argument.subscription); if(argument.hasReturnedItems) { argument.hasReturnedItemsSpecified=true;} fraudInformationType(argument.fraudInformation); + customerProfileIdType(argument.profile); } } public static void ARBSubscriptionType(ARBSubscriptionType argument) @@ -829,17 +854,18 @@ transRetailInfoType() { customerProfileIdType(argument.profile); } } - public static void webCheckOutDataType(webCheckOutDataType argument) + public static void webCheckOutDataTypeToken(webCheckOutDataTypeToken argument) { if(null != argument) { - webCheckOutDataTypeToken(argument.token); } } - public static void webCheckOutDataTypeToken(webCheckOutDataTypeToken argument) + public static void webCheckOutDataType(webCheckOutDataType argument) { if(null != argument) { + webCheckOutDataTypeToken(argument.token); + bankAccountType(argument.bankToken); } } public static void paymentDetails(paymentDetails argument) @@ -1039,6 +1065,7 @@ transRetailInfoType() { if(null != argument) { if(argument.unmaskExpirationDate) { argument.unmaskExpirationDateSpecified=true;} + if(argument.includeIssuerInfo) { argument.includeIssuerInfoSpecified=true;} } } public static void getCustomerProfileResponse(getCustomerProfileResponse argument) @@ -1053,6 +1080,7 @@ transRetailInfoType() { if(null != argument) { if(argument.unmaskExpirationDate) { argument.unmaskExpirationDateSpecified=true;} + if(argument.includeIssuerInfo) { argument.includeIssuerInfoSpecified=true;} } } public static void getCustomerPaymentProfileResponse(getCustomerPaymentProfileResponse argument) @@ -1409,6 +1437,7 @@ transRetailInfoType() { { customerProfileSummaryType(argument.customerProfileSummaryType); paymentSimpleType(argument.paymentSimpleType); + typeEmailReceipt, } } public static void getCustomerPaymentProfileListRequest(getCustomerPaymentProfileListRequest argument) @@ -1430,6 +1459,7 @@ transRetailInfoType() { { if(null != argument) { + if(argument.includeTransactions) { argument.includeTransactionsSpecified=true;} } } public static void ARBGetSubscriptionResponse(ARBGetSubscriptionResponse argument) @@ -1439,6 +1469,14 @@ transRetailInfoType() { ARBSubscriptionMaskedType(argument.subscription); } } + public static void getTransactionListForCustomerRequest(getTransactionListForCustomerRequest argument) + { + if(null != argument) + { + TransactionListSorting(argument.sorting); + Paging(argument.paging); + } + } public static void getAUJobSummaryRequest(getAUJobSummaryRequest argument) { if(null != argument) @@ -1486,6 +1524,18 @@ transRetailInfoType() { System.Nullable< } } + public static void updateMerchantDetailsRequest(updateMerchantDetailsRequest argument) + { + if(null != argument) + { + } + } + public static void updateMerchantDetailsResponse(updateMerchantDetailsResponse argument) + { + if(null != argument) + { + } + } } // ReSharper restore InconsistentNaming #pragma warning restore 1591 diff --git a/Authorize.NET/Api/Controllers/getAUJobDetailsController.cs b/Authorize.NET/Api/Controllers/getAUJobDetailsController.cs index 69f67c73..19703b54 100644 --- a/Authorize.NET/Api/Controllers/getAUJobDetailsController.cs +++ b/Authorize.NET/Api/Controllers/getAUJobDetailsController.cs @@ -23,7 +23,6 @@ override protected void ValidateRequest() { protected override void BeforeExecute() { var request = GetApiRequest(); - RequestFactoryWithSpecified.getAUJobDetailsType(request); } } #pragma warning restore 1591 diff --git a/Authorize.NET/Api/Controllers/getAUJobSummaryController.cs b/Authorize.NET/Api/Controllers/getAUJobSummaryController.cs index a131c4a3..e1302c02 100644 --- a/Authorize.NET/Api/Controllers/getAUJobSummaryController.cs +++ b/Authorize.NET/Api/Controllers/getAUJobSummaryController.cs @@ -23,7 +23,6 @@ override protected void ValidateRequest() { protected override void BeforeExecute() { var request = GetApiRequest(); - RequestFactoryWithSpecified.getAUJobSummaryType(request); } } #pragma warning restore 1591 diff --git a/Authorize.NET/Api/Controllers/getTransactionListForCustomerController.cs b/Authorize.NET/Api/Controllers/getTransactionListForCustomerController.cs new file mode 100644 index 00000000..63b64407 --- /dev/null +++ b/Authorize.NET/Api/Controllers/getTransactionListForCustomerController.cs @@ -0,0 +1,30 @@ +namespace AuthorizeNet.Api.Controllers +{ + using System; + using AuthorizeNet.Api.Contracts.V1; + using AuthorizeNet.Api.Controllers.Bases; + +#pragma warning disable 1591 + public class getTransactionListForCustomerController : ApiOperationBase { + + public getTransactionListForCustomerController(getTransactionListForCustomerRequest apiRequest) : base(apiRequest) { + } + + override protected void ValidateRequest() { + var request = GetApiRequest(); + + //validate required fields + //if ( 0 == request.SearchType) throw new ArgumentException( "SearchType cannot be null"); + //if ( null == request.Paging) throw new ArgumentException("Paging cannot be null"); + + //validate not-required fields + } + + protected override void BeforeExecute() + { + var request = GetApiRequest(); + RequestFactoryWithSpecified.getTransactionListForCustomerRequest(request); + } + } +#pragma warning restore 1591 +} \ No newline at end of file diff --git a/Authorize.NET/Api/Controllers/securePaymentContainerController.cs b/Authorize.NET/Api/Controllers/securePaymentContainerController.cs new file mode 100644 index 00000000..72e1c66a --- /dev/null +++ b/Authorize.NET/Api/Controllers/securePaymentContainerController.cs @@ -0,0 +1,30 @@ +namespace AuthorizeNet.Api.Controllers +{ + using System; + using AuthorizeNet.Api.Contracts.V1; + using AuthorizeNet.Api.Controllers.Bases; + +#pragma warning disable 1591 + public class securePaymentContainerController : ApiOperationBase { + + public securePaymentContainerController(securePaymentContainerRequest apiRequest) : base(apiRequest) { + } + + override protected void ValidateRequest() { + var request = GetApiRequest(); + + //validate required fields + //if ( 0 == request.SearchType) throw new ArgumentException( "SearchType cannot be null"); + //if ( null == request.Paging) throw new ArgumentException("Paging cannot be null"); + + //validate not-required fields + } + + protected override void BeforeExecute() + { + var request = GetApiRequest(); + RequestFactoryWithSpecified.securePaymentContainerRequest(request); + } + } +#pragma warning restore 1591 +} \ No newline at end of file diff --git a/Authorize.NET/Api/Controllers/updateMerchantDetailsController.cs b/Authorize.NET/Api/Controllers/updateMerchantDetailsController.cs new file mode 100644 index 00000000..364919e0 --- /dev/null +++ b/Authorize.NET/Api/Controllers/updateMerchantDetailsController.cs @@ -0,0 +1,30 @@ +namespace AuthorizeNet.Api.Controllers +{ + using System; + using AuthorizeNet.Api.Contracts.V1; + using AuthorizeNet.Api.Controllers.Bases; + +#pragma warning disable 1591 + public class updateMerchantDetailsController : ApiOperationBase { + + public updateMerchantDetailsController(updateMerchantDetailsRequest apiRequest) : base(apiRequest) { + } + + override protected void ValidateRequest() { + var request = GetApiRequest(); + + //validate required fields + //if ( 0 == request.SearchType) throw new ArgumentException( "SearchType cannot be null"); + //if ( null == request.Paging) throw new ArgumentException("Paging cannot be null"); + + //validate not-required fields + } + + protected override void BeforeExecute() + { + var request = GetApiRequest(); + RequestFactoryWithSpecified.updateMerchantDetailsRequest(request); + } + } +#pragma warning restore 1591 +} \ No newline at end of file diff --git a/Authorize.NET/AuthorizeNET.csproj b/Authorize.NET/AuthorizeNET.csproj index 19dd13bf..3b282525 100644 --- a/Authorize.NET/AuthorizeNET.csproj +++ b/Authorize.NET/AuthorizeNET.csproj @@ -10,7 +10,7 @@ Properties AuthorizeNet AuthorizeNet - v3.5 + v4.5 512 @@ -30,6 +30,7 @@ 4 bin/Debug/AuthorizeNet.XML 0219,1591,1635 + false AnyCPU @@ -40,6 +41,7 @@ prompt 4 bin/Release/AuthorizeNet.XML + false @@ -73,6 +75,8 @@ + + @@ -85,17 +89,20 @@ + + + diff --git a/Authorize.NET/CIM/ICustomerGateway.cs b/Authorize.NET/CIM/ICustomerGateway.cs index d396bf3f..60530ef1 100644 --- a/Authorize.NET/CIM/ICustomerGateway.cs +++ b/Authorize.NET/CIM/ICustomerGateway.cs @@ -11,25 +11,30 @@ public interface ICustomerGateway { string AddShippingAddress(string profileID, AuthorizeNet.Address address); string AddShippingAddress(string profileID, string first, string last, string street, string city, string state, string zip, string country, string phone); - IGatewayResponse AuthorizeAndCapture(string profileID, string paymentProfileID, decimal amount, decimal tax, decimal shipping); IGatewayResponse AuthorizeAndCapture(string profileID, string paymentProfileID, decimal amount); + IGatewayResponse AuthorizeAndCapture(string profileID, string paymentProfileID, decimal amount, decimal tax, decimal shipping); IGatewayResponse AuthorizeAndCapture(AuthorizeNet.Order order); - IGatewayResponse Authorize(string profileID, string paymentProfileID, decimal amount, decimal tax, decimal shipping); IGatewayResponse Authorize(string profileID, string paymentProfileID, decimal amount); + IGatewayResponse Authorize(string profileID, string paymentProfileID, decimal amount, decimal tax, decimal shipping); IGatewayResponse Authorize(AuthorizeNet.Order order); + IGatewayResponse Capture(string profileID, string paymentProfileId, string cardCode, decimal amount, string approvalCode); + IGatewayResponse PriorAuthCapture(string profileID, string paymentProfileId, string shippingProfileId, string transId, decimal amount); + IGatewayResponse PriorAuthCapture(string profileID, string paymentProfileId, string transId, decimal amount); + IGatewayResponse PriorAuthCapture(string transId, decimal amount); + [Obsolete("This method has been deprecated, instead use the overloaded method without the appoval code")] - IGatewayResponse Refund(string profileID, string paymentProfileId, string approvalCode,string transactionId, decimal amount); + IGatewayResponse Refund(string profileID, string paymentProfileId, string transactionId, string approvalCode, decimal amount); [Obsolete("This method has been deprecated, instead use the overloaded method without the appoval code")] IGatewayResponse Void(string profileID, string paymentProfileId, string approvalCode, string transactionId); - IGatewayResponse Refund(string profileID, string paymentProfileId, string transactionId, decimal amount); IGatewayResponse Void(string profileID, string paymentProfileId, string transactionId); + AuthorizeNet.Customer CreateCustomer(string email, string description); bool DeleteCustomer(string profileID); bool DeletePaymentProfile(string profileID, string paymentProfileID); diff --git a/Authorize.NET/Util/Constants.cs b/Authorize.NET/Util/Constants.cs index e1856459..3dd5eb17 100644 --- a/Authorize.NET/Util/Constants.cs +++ b/Authorize.NET/Util/Constants.cs @@ -26,7 +26,7 @@ public static class Constants { public const int HttpConnectionDefaultTimeout = 30000; public const int HttpReadWriteDefaultTimeout = 30000; - public const string SDKVersion = "1.9.1"; + public const string SDKVersion = "1.9.4"; public static readonly string DCDRequestIdHeaderName = "x-DCD-RequestId"; } diff --git a/Authorize.NET/Util/HttpUtility.cs b/Authorize.NET/Util/HttpUtility.cs index 8241976d..70618ecc 100644 --- a/Authorize.NET/Util/HttpUtility.cs +++ b/Authorize.NET/Util/HttpUtility.cs @@ -70,6 +70,10 @@ public static ANetApiResponse PostData(AuthorizeNet.Environment env, TQ // Get the response String responseAsString = null; Logger.debug(string.Format("Retreiving Response from Url: '{0}'", postUrl)); + + // Set Tls to Tls1.2 + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; + using (var webResponse = webRequest.GetResponse()) { Logger.debug(string.Format("Received Response: '{0}'", webResponse)); diff --git a/Authorize.NET/Utility/AnetApiSchema.generated.cs b/Authorize.NET/Utility/AnetApiSchema.generated.cs index ebc459a5..b761ed23 100644 --- a/Authorize.NET/Utility/AnetApiSchema.generated.cs +++ b/Authorize.NET/Utility/AnetApiSchema.generated.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.8662 +// Runtime Version:2.0.50727.8689 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -59,6 +59,13 @@ public partial class processorType { /// public string name; + + /// + public int id; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("cardType")] + public string[] cardTypes; } /// @@ -124,6 +131,9 @@ public partial class creditCardMaskedType { /// public cardArt cardArt; + + /// + public string issuerNumber; } /// @@ -183,24 +193,6 @@ public partial class auResponseType { public string reasonDescription; } - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public partial class customerProfileIdType { - - /// - public string customerProfileId; - - /// - public string customerPaymentProfileId; - - /// - public string customerAddressId; - } - /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -819,6 +811,9 @@ public partial class transactionResponse { /// public string transHashSha2; + + /// + public customerProfileIdType profile; } /// @@ -972,6 +967,24 @@ public partial class emvTag { public string formatted; } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class customerProfileIdType { + + /// + public string customerProfileId; + + /// + public string customerPaymentProfileId; + + /// + public string customerAddressId; + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -1149,6 +1162,18 @@ public partial class transactionDetailsType { /// [System.Xml.Serialization.XmlArrayItemAttribute("tag", IsNullable=false)] public transactionDetailsTypeTag[] emvDetails; + + /// + public customerProfileIdType profile; + + /// + public extendedAmountType surcharge; + + /// + public string employeeId; + + /// + public extendedAmountType tip; } /// @@ -1853,6 +1878,18 @@ public partial class transactionRequestType { /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public userField[] userFields; + + /// + public extendedAmountType surcharge; + + /// + public string merchantDescriptor; + + /// + public subMerchantType subMerchant; + + /// + public extendedAmountType tip; } /// @@ -2213,6 +2250,9 @@ public partial class transRetailInfoType { /// public string customerSignature; + /// + public string terminalNumber; + public transRetailInfoType() { this.marketType = "2"; } @@ -2233,6 +2273,48 @@ public partial class settingType { public string settingValue; } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class subMerchantType { + + /// + public string identifier; + + /// + public string doingBusinessAs; + + /// + public string paymentServiceProviderName; + + /// + public string paymentServiceFacilitator; + + /// + public string streetAddress; + + /// + public string phone; + + /// + public string email; + + /// + public string postalCode; + + /// + public string city; + + /// + public string regionCode; + + /// + public string countryCode; + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -2512,6 +2594,10 @@ public partial class ARBSubscriptionMaskedType { /// public orderType order; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] + public arbTransaction[] arbTransactions; } /// @@ -2576,6 +2662,42 @@ public enum ARBSubscriptionUnitEnum { months, } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class arbTransaction { + + /// + public string transId; + + /// + public string response; + + /// + public System.DateTime submitTimeUTC; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool submitTimeUTCSpecified; + + /// + public int payNum; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool payNumSpecified; + + /// + public int attemptNum; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool attemptNumSpecified; + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -2780,6 +2902,9 @@ public partial class transactionSummaryType { /// public fraudInformationType fraudInformation; + + /// + public customerProfileIdType profile; } /// @@ -2835,29 +2960,22 @@ public partial class ARBSubscriptionType { [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public partial class webCheckOutDataType { + public partial class webCheckOutDataTypeToken { /// - public webCheckOutTypeEnum type; + public string cardNumber; /// - public string id; + public string expirationDate; /// - public webCheckOutDataTypeToken token; - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public enum webCheckOutTypeEnum { + public string cardCode; /// - PAN, + public string zip; /// - TOKEN, + public string fullName; } /// @@ -2865,23 +2983,33 @@ public enum webCheckOutTypeEnum { [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] - public partial class webCheckOutDataTypeToken { + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public partial class webCheckOutDataType { /// - public string cardNumber; + public webCheckOutTypeEnum type; /// - public string expirationDate; + public string id; /// - public string cardCode; + public webCheckOutDataTypeToken token; /// - public string zip; + public bankAccountType bankToken; + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + public enum webCheckOutTypeEnum { /// - public string fullName; + PAN, + + /// + TOKEN, } /// @@ -2974,6 +3102,7 @@ public partial class merchantAuthenticationType { public string name; /// + [System.Xml.Serialization.XmlElementAttribute("accessToken", typeof(string))] [System.Xml.Serialization.XmlElementAttribute("clientKey", typeof(string))] [System.Xml.Serialization.XmlElementAttribute("fingerPrint", typeof(fingerPrintType))] [System.Xml.Serialization.XmlElementAttribute("impersonationAuthentication", typeof(impersonationAuthenticationType))] @@ -2997,6 +3126,9 @@ public partial class merchantAuthenticationType { [System.Xml.Serialization.XmlTypeAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IncludeInSchema=false)] public enum ItemChoiceType { + /// + accessToken, + /// clientKey, @@ -3445,12 +3577,25 @@ public partial class getCustomerProfileRequest : ANetApiRequest { /// public string customerProfileId; + /// + public string merchantCustomerId; + + /// + public string email; + /// public bool unmaskExpirationDate; /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool unmaskExpirationDateSpecified; + + /// + public bool includeIssuerInfo; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool includeIssuerInfoSpecified; } /// @@ -3491,6 +3636,13 @@ public partial class getCustomerPaymentProfileRequest : ANetApiRequest { /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool unmaskExpirationDateSpecified; + + /// + public bool includeIssuerInfo; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool includeIssuerInfoSpecified; } /// @@ -3873,6 +4025,12 @@ public partial class getTransactionDetailsResponse : ANetApiResponse { /// public transactionDetailsType transaction; + + /// + public string clientId; + + /// + public string transrefId; } /// @@ -4545,6 +4703,15 @@ public enum settingNameEnum { /// hostedPaymentStyleOptions, + + /// + typeEmailReceipt, + + /// + hostedProfilePaymentOptions, + + /// + hostedProfileSaveButtonText, } /// @@ -4736,6 +4903,13 @@ public partial class ARBGetSubscriptionRequest : ANetApiRequest { /// public string subscriptionId; + + /// + public bool includeTransactions; + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool includeTransactionsSpecified; } /// @@ -4751,6 +4925,28 @@ public partial class ARBGetSubscriptionResponse : ANetApiResponse { public ARBSubscriptionMaskedType subscription; } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + [System.Xml.Serialization.XmlRootAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IsNullable=false)] + public partial class getTransactionListForCustomerRequest : ANetApiRequest { + + /// + public string customerProfileId; + + /// + public string customerPaymentProfileId; + + /// + public TransactionListSorting sorting; + + /// + public Paging paging; + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] [System.SerializableAttribute()] @@ -4890,6 +5086,9 @@ public partial class getMerchantDetailsResponse : ANetApiResponse { /// [System.Xml.Serialization.XmlArrayItemAttribute("currency")] public string[] currencies; + + /// + public string publicClientKey; } /// @@ -4934,4 +5133,27 @@ public enum paymentMethodsTypeEnum { /// AndroidPay, } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + [System.Xml.Serialization.XmlRootAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IsNullable=false)] + public partial class updateMerchantDetailsRequest : ANetApiRequest { + + /// + public bool isTestMode; + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd")] + [System.Xml.Serialization.XmlRootAttribute(Namespace="AnetApi/xml/v1/schema/AnetApiSchema.xsd", IsNullable=false)] + public partial class updateMerchantDetailsResponse : ANetApiResponse { + } } diff --git a/AuthorizeNET.sln b/AuthorizeNET.sln index a1c1a7b8..d23eb032 100644 --- a/AuthorizeNET.sln +++ b/AuthorizeNET.sln @@ -1,6 +1,8 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthorizeNET", "Authorize.NET\AuthorizeNET.csproj", "{5D52EAEC-42FB-4313-83B8-69E2F55EBF14}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthorizeNETtest", "AuthorizeNETtest\AuthorizeNETtest.csproj", "{CDA0D4D8-E4AA-4BEA-8839-04D69607D914}" @@ -16,9 +18,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProjectSection EndProject Global - GlobalSection(TestCaseManagementSettings) = postSolution - CategoryFile = AuthorizeNET.vsmdi - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU @@ -29,22 +28,25 @@ Global {5D52EAEC-42FB-4313-83B8-69E2F55EBF14}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D52EAEC-42FB-4313-83B8-69E2F55EBF14}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D52EAEC-42FB-4313-83B8-69E2F55EBF14}.Release|Any CPU.Build.0 = Release|Any CPU - {5D52EAEC-42FB-4313-83B8-69E2F55EBF14}.USELOCAL|Any CPU.ActiveCfg = USELOCAL|Any CPU - {5D52EAEC-42FB-4313-83B8-69E2F55EBF14}.USELOCAL|Any CPU.Build.0 = USELOCAL|Any CPU + {5D52EAEC-42FB-4313-83B8-69E2F55EBF14}.USELOCAL|Any CPU.ActiveCfg = Release|Any CPU + {5D52EAEC-42FB-4313-83B8-69E2F55EBF14}.USELOCAL|Any CPU.Build.0 = Release|Any CPU {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.Debug|Any CPU.Build.0 = Debug|Any CPU {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.Release|Any CPU.ActiveCfg = Release|Any CPU {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.Release|Any CPU.Build.0 = Release|Any CPU - {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.USELOCAL|Any CPU.ActiveCfg = USELOCAL|Any CPU - {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.USELOCAL|Any CPU.Build.0 = USELOCAL|Any CPU + {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.USELOCAL|Any CPU.ActiveCfg = Release|Any CPU + {CDA0D4D8-E4AA-4BEA-8839-04D69607D914}.USELOCAL|Any CPU.Build.0 = Release|Any CPU {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.Debug|Any CPU.Build.0 = Debug|Any CPU {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.Release|Any CPU.ActiveCfg = Release|Any CPU {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.Release|Any CPU.Build.0 = Release|Any CPU - {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.USELOCAL|Any CPU.ActiveCfg = USELOCAL|Any CPU - {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.USELOCAL|Any CPU.Build.0 = USELOCAL|Any CPU + {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.USELOCAL|Any CPU.ActiveCfg = Release|Any CPU + {79796297-BA7B-4F22-8C53-D9B6EFDD7EB7}.USELOCAL|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(TestCaseManagementSettings) = postSolution + CategoryFile = AuthorizeNET.vsmdi + EndGlobalSection EndGlobal diff --git a/AuthorizeNETtest/Api/Controllers/MockTest/getTransactionListForCustomerControllerTest.cs b/AuthorizeNETtest/Api/Controllers/MockTest/getTransactionListForCustomerControllerTest.cs new file mode 100644 index 00000000..97fe3378 --- /dev/null +++ b/AuthorizeNETtest/Api/Controllers/MockTest/getTransactionListForCustomerControllerTest.cs @@ -0,0 +1,71 @@ +namespace AuthorizeNet.Api.Controllers.MockTest +{ + using System; + using System.Collections.Generic; + using AuthorizeNet.Api.Contracts.V1; + using AuthorizeNet.Api.Controllers; + using AuthorizeNet.Api.Controllers.Test; + using AuthorizeNet.Util; + using NUnit.Framework; + + [TestFixture] + public class getTransactionListForCustomerTest : ApiCoreTestBase + { + + [TestFixtureSetUp] + public new static void SetUpBeforeClass() + { + ApiCoreTestBase.SetUpBeforeClass(); + } + + [TestFixtureTearDown] + public new static void TearDownAfterClass() + { + ApiCoreTestBase.TearDownAfterClass(); + } + + [SetUp] + public new void SetUp() + { + base.SetUp(); + } + + [TearDown] + public new void TearDown() + { + base.TearDown(); + } + + [Test] + public void MockgetTransactionListForCustomerTest() + { + //define all mocked objects as final + var mockController = GetMockController(); + var mockRequest = new getTransactionListForCustomerRequest + { + merchantAuthentication = new merchantAuthenticationType() {name = "mocktest", Item = "mockKey", ItemElementName = ItemChoiceType.transactionKey}, + }; + var mockResponse = new getTransactionListForCustomerResponse + { + refId = "1234", + sessionToken = "sessiontoken", + Yyyyy = Yyyy, + }; + + var errorResponse = new ANetApiResponse(); + var results = new List(); + const messageTypeEnum messageTypeOk = messageTypeEnum.Ok; + + SetMockControllerExpectations( + mockController.MockObject, mockRequest, mockResponse, errorResponse, results, messageTypeOk); + mockController.MockObject.Execute(AuthorizeNet.Environment.CUSTOM); + //mockController.MockObject.Execute(); + // or var controllerResponse = mockController.MockObject.ExecuteWithApiResponse(AuthorizeNet.Environment.CUSTOM); + var controllerResponse = mockController.MockObject.GetApiResponse(); + Assert.IsNotNull(controllerResponse); + + Assert.IsNotNull(controllerResponse.Yyyyy); + LogHelper.info(Logger, "getTransactionListForCustomer: Details:{0}", controllerResponse.Yyyyy); + } + } +} diff --git a/AuthorizeNETtest/Api/Controllers/MockTest/securePaymentContainerControllerTest.cs b/AuthorizeNETtest/Api/Controllers/MockTest/securePaymentContainerControllerTest.cs new file mode 100644 index 00000000..591c594a --- /dev/null +++ b/AuthorizeNETtest/Api/Controllers/MockTest/securePaymentContainerControllerTest.cs @@ -0,0 +1,67 @@ +namespace AuthorizeNet.Api.Controllers.MockTest +{ + using System; + using System.Collections.Generic; + using AuthorizeNet.Api.Contracts.V1; + using AuthorizeNet.Api.Controllers; + using AuthorizeNet.Api.Controllers.Test; + using AuthorizeNet.Util; + using NUnit.Framework; + + [TestFixture] + public class securePaymentContainerTest : ApiCoreTestBase + { + + [TestFixtureSetUp] + public new static void SetUpBeforeClass() + { + ApiCoreTestBase.SetUpBeforeClass(); + } + + [TestFixtureTearDown] + public new static void TearDownAfterClass() + { + ApiCoreTestBase.TearDownAfterClass(); + } + + [SetUp] + public new void SetUp() + { + base.SetUp(); + } + + [TearDown] + public new void TearDown() + { + base.TearDown(); + } + + [Test] + public void MocksecurePaymentContainerTest() + { + //define all mocked objects as final + var mockController = GetMockController(); + var mockRequest = new securePaymentContainerRequest + { + merchantAuthentication = new merchantAuthenticationType() {name = "mocktest", Item = "mockKey", ItemElementName = ItemChoiceType.transactionKey}, + }; + var mockResponse = new securePaymentContainerResponse + { + refId = "1234", + sessionToken = "sessiontoken", + }; + + var errorResponse = new ANetApiResponse(); + var results = new List(); + const messageTypeEnum messageTypeOk = messageTypeEnum.Ok; + + SetMockControllerExpectations( + mockController.MockObject, mockRequest, mockResponse, errorResponse, results, messageTypeOk); + mockController.MockObject.Execute(AuthorizeNet.Environment.CUSTOM); + //mockController.MockObject.Execute(); + // or var controllerResponse = mockController.MockObject.ExecuteWithApiResponse(AuthorizeNet.Environment.CUSTOM); + var controllerResponse = mockController.MockObject.GetApiResponse(); + Assert.IsNotNull(controllerResponse); + } + } +} diff --git a/AuthorizeNETtest/Api/Controllers/MockTest/updateMerchantDetailsControllerTest.cs b/AuthorizeNETtest/Api/Controllers/MockTest/updateMerchantDetailsControllerTest.cs new file mode 100644 index 00000000..7a87ce67 --- /dev/null +++ b/AuthorizeNETtest/Api/Controllers/MockTest/updateMerchantDetailsControllerTest.cs @@ -0,0 +1,69 @@ +namespace AuthorizeNet.Api.Controllers.MockTest +{ + using System; + using System.Collections.Generic; + using AuthorizeNet.Api.Contracts.V1; + using AuthorizeNet.Api.Controllers; + using AuthorizeNet.Api.Controllers.Test; + using AuthorizeNet.Util; + using NUnit.Framework; + + [TestFixture] + public class updateMerchantDetailsTest : ApiCoreTestBase + { + + [TestFixtureSetUp] + public new static void SetUpBeforeClass() + { + ApiCoreTestBase.SetUpBeforeClass(); + } + + [TestFixtureTearDown] + public new static void TearDownAfterClass() + { + ApiCoreTestBase.TearDownAfterClass(); + } + + [SetUp] + public new void SetUp() + { + base.SetUp(); + } + + [TearDown] + public new void TearDown() + { + base.TearDown(); + } + + [Test] + public void MockupdateMerchantDetailsTest() + { + //define all mocked objects as final + var mockController = GetMockController(); + var mockRequest = new updateMerchantDetailsRequest + { + merchantAuthentication = new merchantAuthenticationType() {name = "mocktest", Item = "mockKey", ItemElementName = ItemChoiceType.transactionKey}, + }; + var mockResponse = new updateMerchantDetailsResponse + { + refId = "1234", + sessionToken = "sessiontoken", + }; + + var errorResponse = new ANetApiResponse(); + var results = new List(); + const messageTypeEnum messageTypeOk = messageTypeEnum.Ok; + + SetMockControllerExpectations( + mockController.MockObject, mockRequest, mockResponse, errorResponse, results, messageTypeOk); + mockController.MockObject.Execute(AuthorizeNet.Environment.CUSTOM); + //mockController.MockObject.Execute(); + // or var controllerResponse = mockController.MockObject.ExecuteWithApiResponse(AuthorizeNet.Environment.CUSTOM); + var controllerResponse = mockController.MockObject.GetApiResponse(); + Assert.IsNotNull(controllerResponse); + + + } + } +} diff --git a/AuthorizeNETtest/Api/Controllers/Test/AllGeneratedEnumTest.cs b/AuthorizeNETtest/Api/Controllers/Test/AllGeneratedEnumTest.cs index 47eeede2..196102a2 100644 --- a/AuthorizeNETtest/Api/Controllers/Test/AllGeneratedEnumTest.cs +++ b/AuthorizeNETtest/Api/Controllers/Test/AllGeneratedEnumTest.cs @@ -165,6 +165,13 @@ public void AllEnumTest() Assert.AreEqual(anEnum, enumFromValue); } + foreach (var anEnum in Enum.GetValues(typeof(webCheckOutTypeEnum))) + { + var aValue = anEnum.ToString(); + webCheckOutTypeEnum enumFromValue; + Assert.IsTrue(Enum.TryParse(aValue, out enumFromValue)); + Assert.AreEqual(anEnum, enumFromValue); + } foreach (var anEnum in Enum.GetValues(typeof(ItemChoiceType))) { var aValue = anEnum.ToString(); @@ -306,4 +313,5 @@ public void AllEnumTest() } */ } -} +} + diff --git a/AuthorizeNETtest/App.config b/AuthorizeNETtest/App.config index ffbdeb5b..27eeb418 100644 --- a/AuthorizeNETtest/App.config +++ b/AuthorizeNETtest/App.config @@ -1,9 +1,12 @@ - + + + + diff --git a/AuthorizeNETtest/AuthorizeNETtest.csproj b/AuthorizeNETtest/AuthorizeNETtest.csproj index 23034dc1..b31829d5 100644 --- a/AuthorizeNETtest/AuthorizeNETtest.csproj +++ b/AuthorizeNETtest/AuthorizeNETtest.csproj @@ -10,13 +10,14 @@ Properties AuthorizeNETtest AuthorizeNETtest - v4.0 + v4.5 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 3.5 + AnyCPU @@ -28,6 +29,7 @@ prompt 4 0219,1591,1635 + false AnyCPU @@ -37,6 +39,7 @@ TRACE prompt 4 + false @@ -78,7 +81,9 @@ + + @@ -132,9 +137,6 @@ AuthorizeNET - - - @@ -144,6 +146,9 @@ + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/license.txt b/LICENSE.txt similarity index 100% rename from license.txt rename to LICENSE.txt diff --git a/README.md b/README.md index 2da36a79..13b7c462 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,72 @@ -# Authorize.Net .Net SDK +# Authorize.Net .NET SDK -[![Travis](https://img.shields.io/travis/AuthorizeNet/sdk-dotnet/master.svg)] -(https://travis-ci.org/AuthorizeNet/sdk-dotnet) +[![Travis CI Status](https://travis-ci.org/AuthorizeNet/sdk-dotnet.svg?branch=master)](https://travis-ci.org/AuthorizeNet/sdk-dotnet) [![Code Climate](https://codeclimate.com/github/AuthorizeNet/sdk-dotnet/badges/gpa.svg)](https://codeclimate.com/github/AuthorizeNet/sdk-dotnet) [![NuGet](https://badge.fury.io/nu/authorizenet.svg)](https://www.nuget.org/packages/authorizenet) -`PM> Install-Package AuthorizeNet` - +## Requirements +* .NET 3.5 or later +* Microsoft® Visual Studio 2008 or later +* Nunit 2.6.3; +* An Authorize.Net account (see _Registration & Configuration_ section below) -## Prerequisites - -Requires .NET 3.5 or later and Microsoft® Visual Studio 2008 or 2010; Nunit 2.6.3; +### TLS 1.2 +The Authorize.Net APIs only support connections using the TLS 1.2 security protocol. It's important to make sure you have new enough versions of all required components to support TLS 1.2. Additionally, it's very important to keep these components up to date going forward to mitigate the risk of any security flaws that may be discovered in your system or any libraries it uses. ## Installation -To install AuthorizeNet, run the following command in the Package Manager Console: +To install the AuthorizeNet .NET SDK, run the following command in the Package Manager Console: `PM> Install-Package AuthorizeNet` -## Usage -Apart from this README, you can find details and examples of using the SDK in the following places: - -- [Github Sample Code Repository](https://github.com/AuthorizeNet/sample-code-csharp) -- [Developer Center Reference](http://developer.authorize.net/api/reference/index.html) - -### Charging a Credit Card -````csharp - ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.SANDBOX; - - 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 transactionRequest = new transactionRequestType - { - transactionType = transactionTypeEnum.authCaptureTransaction.ToString(), - amount = 133.45m, - payment = paymentType - }; - - var request = new createTransactionRequest { transactionRequest = transactionRequest }; - - var controller = new createTransactionController(request); - controller.Execute(); - - var response = controller.GetApiResponse(); - - if (response.messages.resultCode == messageTypeEnum.Ok) - { - if (response.transactionResponse != null) - { - Console.WriteLine("Success, Auth Code : " + response.transactionResponse.authCode); - } - } - else - { - Console.WriteLine("Error: " + response.messages.message[0].code + " " + response.messages.message[0].text); - } -```` - -### Setting the Production Environment -Set the appropriate environment constant using the ApiOperationBase RunEnvironment. For example, in the method above, to switch to production environment use: +## Registration & Configuration +Use of this SDK and the Authorize.Net APIs requires having an account on our system. You can find these details in the Settings section. +If you don't currently have a production Authorize.Net account and need a sandbox account for testing, you can easily sign up for one [here](https://developer.authorize.net/sandbox/). + +### Authentication +To authenticate with the Authorize.Net API you will need to use your account's API Login ID and Transaction Key. If you don't have these values, you can obtain them from our Merchant Interface site. Access the Merchant Interface for production accounts at (https://account.authorize.net/) or sandbox accounts at (https://sandbox.authorize.net). + +Once you have your keys simply load them into the appropriate variables in your code, as per the below sample code dealing with the authentication part of the API request. + +#### To set your API credentials for an API request: ```csharp +ApiOperationBase.MerchantAuthentication = new merchantAuthenticationType() +{ + name = "YOUR_API_LOGIN_ID", + ItemElementName = ItemChoiceType.transactionKey, + Item = "YOUR_TRANSACTION_KEY", +}; +``` + +You should never include your Login ID and Transaction Key directly in a file that's in a publically accessible portion of your website. A better practice would be to define these in a constants file, and then reference those constants in the appropriate place in your code. + +### Switching between the sandbox environment and the production environment +Authorize.Net 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 using ApiOperationBase `RunEnvironment` method. For example: +```csharp +// For PRODUCTION use ApiOperationBase.RunEnvironment = AuthorizeNet.Environment.PRODUCTION; -``` +``` + +API credentials are different for each environment, so be sure to switch to the appropriate credentials when switching environments. -## Running the SDK Tests +## SDK Usage Examples and Sample Code +To get started using this SDK, it's highly recommended to download our sample code repository: +* [Authorize.Net C# Sample Code Repository (on GitHub)](https://github.com/AuthorizeNet/sample-code-csharp) +In that respository, we have comprehensive sample code for all common uses of our API: + +Additionally, you can find details and examples of how our API is structured in our API Reference Guide: +* [Developer Center API Reference](http://developer.authorize.net/api/reference/index.html) + +The API Reference Guide 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. + + +## Building & Testing the SDK + +### Running the SDK Tests All the tests can be run against a stub backend using the USELOCAL run configuration. Get a sandbox account at https://developer.authorize.net/sandbox/ @@ -88,21 +74,9 @@ Update app.config in the AuthorizeNetTest folder to run all the tests against yo For reporting tests, go to https://sandbox.authorize.net/ under Account tab->Transaction Details API and enable it. - -## Credit Card Test Numbers - -For your reference, you can use the following test credit card numbers. -The expiration date must be set to the present date or later. Use 123 for -the CCV code. - -| Card | Test Numbers | -| :-------------------------- | :----------------------------------------------------------- | -| American Express | 370000000000002 | -| Discover | 6011000000000012 | -| Visa | 4007000000027 | -| MasterCard | 5555555555554444 | -| JCB | 3088000000000017 | -| Diners Club/ Carte Blanche | 38000000000006 | -| Visa (Card Present Track 1) | %B4111111111111111^DOE/JOHN^1803101000000000020000831000000? | +### Testing Guide +For additional help in testing your own code, Authorize.Net maintains a [comprehensive testing guide](http://developer.authorize.net/hello_world/testing_guide/) that includes test credit card numbers to use and special triggers to generate certain responses from the sandbox environment. +## License +This repository is distributed under a proprietary license. See the provided [`LICENSE.txt`](/LICENSE.txt) file. \ No newline at end of file