.NET XML Subscriptions
The sample code below requires the .NET XML API.
Subscription registration:
using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Text; using WorldNetClient; namespace ApiTest { class SubscriptionRegistrationSample { static void Main (string[] args) { String gateway = "worldnet"; // Gateway that will process the transaction. String terminalId = ""; // Terminal ID String secret = ""; // Shared Secret as configured in the Terminal Setup in your Worldnet 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<CustomField> customFields = new List<CustomField> (); // 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 WorldNetClient; namespace ApiTest { class SubscriptionUpdateSample { static void Main (string[] args) { String gateway = "worldnet"; // Gateway that will process the transaction. String terminalId = ""; // Terminal ID String secret = ""; // Shared Secret as configured in the Terminal Setup in your Worldnet 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<CustomField> customFields = new List<CustomField> (); // 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 WorldNetClient; namespace ApiTest { class SubscriptionDeletionSample { static void Main (string[] args) { String gateway = "worldnet"; // Gateway that will process the transaction. String terminalId = ""; // Terminal ID String secret = ""; // Shared Secret as configured in the Terminal Setup in your Worldnet 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 } } } }