====== .NET XML Subscriptions ====== {gateway=docs.worldnettps.com}{gateway=testdocs.worldnettps.com} The sample code below requires the **{{:developer:sample_codes:worldnet-api-dotnet.zip|.NET XML API}}**. {/gateway} {gateway=helpdesk.globalone.me}{gateway=testhelpdeskglobaloneme.worldnettps.com} The sample code below requires the **{{:developer:sample_codes:globalone-api-dotnet.zip|.NET XML API}}**. {/gateway} {gateway=helpdesk.nuvei.com}{gateway=testhelpdesknuveicom.worldnettps.com} The sample code below requires the **{{:developer:sample_codes:nuvei-api-dotnet.zip|.NET XML API}}**. {/gateway} {gateway=docs.anywherecommerce.com}{gateway=testdocsanywherecommercecom.worldnettps.com} The sample code below requires the **{{:developer:sample_codes:anywherecommerce-api-dotnet.zip|.NET XML API}}**. {/gateway} \\ ---- **Subscription registration:** using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Text; using %GatewayClient; namespace ApiTest { class SubscriptionRegistrationSample { static void Main (string[] args) { String gateway = "%gatewayTransaction"; // Gateway that will process the transaction. String terminalId = ""; // Terminal ID String secret = ""; // Shared Secret as configured in the Terminal Setup in your %Gateway %SelfCare System Boolean testAccount = true; String subscriptionMerchantRef = ""; // Unique merchant identifier for the subscription. Length is limited to 48 chars. String storedSubscriptionMerchantRef = ""; // Merchant reference for the Stored Subscription under which this Subscription is to be created. String secureCardMerchantRef = ""; // Merchant reference for the SecureCard entry that you want to use to set up the subscription. String cardReference = ""; // Card Reference for the SecureCard entry that you want to use to set up the subscription. DateTime? subscriptionStartDate = new DateTime (2010, 4, 18); // Date on which the subscription should start (setup payment is processed immediately, and does not obey this). Format: DD-MM-YYYY. DateTime? endDate = new DateTime (2018, 8, 18); // (optional) set an end date for the subscription. Format: DD-MM-YYYY. String eDCCDecision = ""; // (optional) if eDCC was offered and accepted, you should set this to 'Y'. String name = ""; // (optional) String description = ""; // (optional) String periodType = ""; // (optional) int length = -1; // (optional) String currency = "EUR"; // (optional) double recurringAmount = -1.00; // (optional) double initialAmount = -1.00; // (optional) String type = ""; // (optional) String onUpdate = ""; // (optional) String onDelete = ""; // (optional) IList customFields = new List (); // CustomFields //customFields.Add (new CustomField ("name1", "value1")); //customFields.Add (new CustomField ("name2", "value2")); XmlSubscriptionRegRequest subreg = new XmlSubscriptionRegRequest (subscriptionMerchantRef, terminalId, storedSubscriptionMerchantRef, subscriptionStartDate.Value); if (!String.IsNullOrEmpty (secureCardMerchantRef)) { subreg.SetSecureCardMerchantRef (secureCardMerchantRef); } else { subreg.SetCardReference (cardReference); } if (!String.IsNullOrEmpty (name) || !String.IsNullOrEmpty (description) || !String.IsNullOrEmpty (periodType) || length > 0 || !String.IsNullOrEmpty (type) || !String.IsNullOrEmpty (onUpdate) || !String.IsNullOrEmpty (onDelete)) { subreg.SetNewStoredSubscriptionValues (name, description, periodType, length, currency, recurringAmount, initialAmount, type, onUpdate, onDelete); } else if (recurringAmount > 0 || initialAmount > 0) { subreg.SetSubscriptionAmounts (recurringAmount, initialAmount); } if (endDate.HasValue) subreg.SetEndDate (endDate.Value); if (!String.IsNullOrEmpty (eDCCDecision)) subreg.SetEdccDecision (eDCCDecision); if (customFields != null && customFields.Count != 0) { subreg.SetCustomFields (customFields); } XmlSubscriptionRegResponse response = subreg.ProcessRequest (secret, testAccount, gateway); String expectedResponseHash = Response.GetResponseHash (terminalId + response.MerchantReference + response.DateTimeHashString + secret); if (response.IsError == true) { Console.Out.WriteLine ("ERROR : " + response.ErrorString); //Handle Error Response } else if (response.Hash != expectedResponseHash) { Console.Out.WriteLine ("ERROR : Response HASH parameter not as expected. If live possible man-in-the-middle attack."); //Handle Invalid Hash scenario - inform merchant that transaction may have to be voided. } else { Console.Out.WriteLine ("Subscription successfully setup and setup payment processed succesfully."); //Handle Response } } } } \\ ---- **Subscription update:** using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Text; using %GatewayClient; namespace ApiTest { class SubscriptionUpdateSample { static void Main (string[] args) { String gateway = "%gatewayTransaction"; // Gateway that will process the transaction. String terminalId = ""; // Terminal ID String secret = ""; // Shared Secret as configured in the Terminal Setup in your %Gateway %SelfCare System Boolean testAccount = true; String subscriptionMerchantRef = ""; // Unique merchant identifier for the subscription. Length is limited to 48 chars. String secureCardMerchantRef = ""; // Merchant reference for the SecureCard entry that you want to use to set up the subscription. String cardReference = ""; // Card Reference for the SecureCard entry that you want to use to set up the subscription. DateTime? subscriptionStartDate = new DateTime (2010, 4, 18); // (optional) Date on which the subscription should start (setup payment is processed immediately, and does not obey this). Format: DD-MM-YYYY. DateTime? endDate = new DateTime (2018, 8, 18); // (optional) set an end date for the subscription. Format: DD-MM-YYYY. String eDCCDecision = ""; // (optional) if eDCC was offered and accepted, you should set this to 'Y'. String name = ""; // (optional) String description = ""; // (optional) int length = -1; // (optional) int skipPeriodCount = -1; // (optional) double recurringAmount = -1.00; // (optional) IList customFields = new List (); // CustomFields //customFields.Add (new CustomField ("name1", "value1")); //customFields.Add (new CustomField ("name2", "value2")); XmlSubscriptionUpdRequest subupd = new XmlSubscriptionUpdRequest (subscriptionMerchantRef, terminalId); if (!String.IsNullOrEmpty (secureCardMerchantRef)) { subupd.SetSecureCardMerchantRef (secureCardMerchantRef); } else { subupd.SetCardReference (cardReference); } if (!String.IsNullOrEmpty (name)) subupd.SetSubName (name); if (!String.IsNullOrEmpty (description)) subupd.SetDescription (description); if (length > 0) subupd.SetLength (length); if (skipPeriodCount > 0) subupd.SetSkipPeriodCount (skipPeriodCount); if (recurringAmount > 0) subupd.SetRecurringAmount (recurringAmount); if (subscriptionStartDate.HasValue) subupd.SetStartDate (subscriptionStartDate.Value); if (endDate.HasValue) subupd.SetEndDate (endDate.Value); if (!String.IsNullOrEmpty (eDCCDecision)) subupd.SetEDCCDecision (eDCCDecision); if (customFields != null && customFields.Count != 0) { subupd.SetCustomFields (customFields); } XmlSubscriptionUpdResponse response = subupd.ProcessRequest (secret, testAccount, gateway); String expectedResponseHash = Response.GetResponseHash (terminalId + response.MerchantReference + response.DateTimeHashString + secret); if (response.IsError == true) { Console.Out.WriteLine ("ERROR : " + response.ErrorString); //Handle Error Response } else if (response.Hash != expectedResponseHash) { Console.Out.WriteLine ("ERROR : Response HASH parameter not as expected. If live possible man-in-the-middle attack."); //Handle Invalid Hash scenario - inform merchant that transaction may have to be voided. } else { Console.Out.WriteLine ("Subscription successfully updated."); //Handle Response } } } } \\ ---- **Subscription deletion:** using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Text; using %GatewayClient; namespace ApiTest { class SubscriptionDeletionSample { static void Main (string[] args) { String gateway = "%gatewayTransaction"; // Gateway that will process the transaction. String terminalId = ""; // Terminal ID String secret = ""; // Shared Secret as configured in the Terminal Setup in your %Gateway %SelfCare System Boolean testAccount = true; String subscriptionMerchantRef = ""; // Unique merchant identifier for the subscription. Length is limited to 48 chars. XmlSubscriptionDelRequest subdel = new XmlSubscriptionDelRequest (subscriptionMerchantRef, terminalId); XmlSubscriptionDelResponse response = subdel.ProcessRequest (secret, testAccount, gateway); String expectedResponseHash = Response.GetResponseHash (terminalId + response.MerchantReference + response.DateTimeHashString + secret); if (response.IsError == true) { Console.Out.WriteLine ("ERROR : " + response.ErrorString); //Handle Error Response } else if (response.Hash != expectedResponseHash) { Console.Out.WriteLine ("ERROR : Response HASH parameter not as expected. If live possible man-in-the-middle attack."); //Handle Invalid Hash scenario - inform merchant that transaction may have to be voided. } else { Console.Out.WriteLine ("Subscription successfully deleted."); //Handle Response } } } }