====== .NET XML Subscriptions ======
**NOTE:**
* - Supported on .NET Framework 4.5
* - .NET Core is not supported
The sample code below requires the **{{:developer:sample_codes:nuvei-api-dotnet.zip|.NET XML API}}**.
\\
----
**Subscription registration:**
using System;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Text;
using NuveiClient;
namespace ApiTest
{
class SubscriptionRegistrationSample
{
static void Main (string[] args)
{
String gateway = "nuvei"; // Gateway that will process the transaction.
String terminalId = ""; // Terminal ID
String secret = ""; // Shared Secret as configured in the Terminal Setup in your Nuvei 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 NuveiClient;
namespace ApiTest
{
class SubscriptionUpdateSample
{
static void Main (string[] args)
{
String gateway = "nuvei"; // Gateway that will process the transaction.
String terminalId = ""; // Terminal ID
String secret = ""; // Shared Secret as configured in the Terminal Setup in your Nuvei 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 NuveiClient;
namespace ApiTest
{
class SubscriptionDeletionSample
{
static void Main (string[] args)
{
String gateway = "nuvei"; // Gateway that will process the transaction.
String terminalId = ""; // Terminal ID
String secret = ""; // Shared Secret as configured in the Terminal Setup in your Nuvei 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
}
}
}
}