====== .NET XML Secure Cards ======
**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}}**.
\\
----
**SecureCard registration:**
using System;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Text;
using NuveiClient;
namespace ApiTest
{
class SecureCardRegistrationSample
{
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
String secureCardMerchantRef = ""; // Unique Merchant Reference. Length is limited to 48 chars.
String cardNumber = ""; // The cardholders PAN (or SecureCard Card Reference);
String cardType = ""; // See our Integrator Guide for a list of valid Card Type parameters
String cardExpiry = ""; // Format: MMYY
String cardHolderName = ""; // Cardholders name
String dontCheckSecurity = ""; // (optional) "Y" if you do not want the CVV to be validated online.
String cvv = ""; // (optional) 3 digit (4 for AMEX cards) security digit on the back of the card.
String issueNo = ""; // (optional) Issue number for Switch and Solo cards.
IList permittedTerminals = new List (); // PERMITTED TERMINALS
//permittedTerminals.Add ("1002");
//permittedTerminals.Add ("1009");
IList customFields = new List (); // CustomFields
//customFields.Add ("name1", "value1"));
//customFields.Add ("name2", "value2"));
Boolean testAccount = true;
XmlSecureCardRegRequest securereg = new XmlSecureCardRegRequest (secureCardMerchantRef, terminalId, cardNumber, cardExpiry, cardType, cardHolderName);
if (!String.IsNullOrEmpty (dontCheckSecurity)) {
securereg.SetDontCheckSecurity (dontCheckSecurity);
}
if (!String.IsNullOrEmpty (cvv)) {
securereg.SetCvv (cvv);
}
if (!String.IsNullOrEmpty (issueNo)) {
securereg.SetIssueNo (issueNo);
}
if (permittedTerminals != null && permittedTerminals.Count != 0) {
securereg.SetPermittedTerminals (permittedTerminals);
}
if (customFields != null && customFields.Count != 0) {
securereg.SetCustomFields (customFields);
}
XmlSecureCardRegResponse response = securereg.ProcessRequest (secret, testAccount, gateway);
String expectedResponseHash = Response.GetResponseHash (terminalId + response.MerchantRef + response.CardRef + 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 ("SecureCard successfully stored.");
Console.Out.WriteLine ("CARDREFERENCE : " + response.CardRef);
//Handle Response
}
}
}
}
\\
----
**SecureCard record update:**
using System;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Text;
using NuveiClient;
namespace ApiTest
{
class SecureCardRecordUpdateSample
{
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
String secureCardMerchantRef = ""; // Unique Merchant Reference. Length is limited to 48 chars.
String cardNumber = ""; // The cardholders PAN (or SecureCard Card Reference);
String cardType = ""; // See our Integrator Guide for a list of valid Card Type parameters
String cardExpiry = ""; // Format: MMYY
String cardHolderName = ""; // Cardholders name
String dontCheckSecurity = ""; // (optional) "Y" if you do not want the CVV to be validated online.
String cvv = ""; // (optional) 3 digit (4 for AMEX cards) security digit on the back of the card.
String issueNo = ""; // (optional) Issue number for Switch and Solo cards.
IList permittedTerminals = new List (); // PERMITTED TERMINALS
//permittedTerminals.Add ("1003");
//permittedTerminals.Add ("1013");
IList customFields = new List (); // CustomFields
//customFields.Add (new CustomField ("name1", "value1"));
//customFields.Add (new CustomField ("name2", "value2"));
Boolean testAccount = true;
XmlSecureCardUpdRequest secureupd = new XmlSecureCardUpdRequest (secureCardMerchantRef, terminalId, cardNumber, cardExpiry, cardType, cardHolderName);
if (!String.IsNullOrEmpty (dontCheckSecurity)) {
secureupd.SetDontCheckSecurity (dontCheckSecurity);
}
if (!String.IsNullOrEmpty (cvv)) {
secureupd.SetCvv (cvv);
}
if (!String.IsNullOrEmpty (issueNo)) {
secureupd.SetIssueNo (issueNo);
}
if (permittedTerminals != null && permittedTerminals.Count != 0) {
secureupd.SetPermittedTerminals (permittedTerminals);
}
if (customFields != null && customFields.Count != 0) {
secureupd.SetCustomFields (customFields);
}
XmlSecureCardUpdResponse response = secureupd.ProcessRequest (secret, testAccount, gateway);
String expectedResponseHash = Response.GetResponseHash (terminalId + response.MerchantRef + response.CardRef + 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 ("SecureCard successfully updated.");
//Handle Response
}
}
}
}
\\
----
**SecureCard record deletion:**
using System;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Text;
using $GatewayClient;
namespace ApiTest
{
class SecureCardRecordDeletionSample
{
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
String secureCardMerchantRef = ""; // Unique Merchant Reference. Length is limited to 48 chars.
String secureCardCardRef = ""; // This is the Nuvei generated 16 digit card number token
Boolean testAccount = false;
XmlSecureCardDelRequest securedel = new XmlSecureCardDelRequest (secureCardMerchantRef, terminalId, secureCardCardRef);
XmlSecureCardDelResponse response = securedel.ProcessRequest (secret, testAccount, gateway);
String expectedResponseHash = Response.GetResponseHash (terminalId + response.MerchantRef + 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 ("SecureCard successfully deleted.");
//Handle Response
}
}
}
}
\\
----
**SecureCard Search:**
using System;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Text;
using NuveiClient;
namespace ApiTest
{
class SecureCardSearchSample
{
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
String secureCardMerchantRef = ""; // Unique Merchant Reference. Length is limited to 48 chars.
Boolean testAccount = true;
XmlSecureCardSearchRequest securesearch = new XmlSecureCardSearchRequest (secureCardMerchantRef, terminalId);
XmlSecureCardSearchResponse response = securesearch.ProcessRequest (secret, testAccount, gateway);
String expectedResponseHash = Response.GetResponseHash (terminalId + response.MerchantRef + response.CardRef + response.CardType + response.CardExpiry + response.CardHolderName + 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 ("SecureCard successfully found.");
Console.Out.WriteLine ("MERCHANTREF : " + response.MerchantRef);
Console.Out.WriteLine ("CARDREFERENCE : " + response.CardRef);
Console.Out.WriteLine ("CARDTYPE : " + response.CardType);
Console.Out.WriteLine ("CARDEXPIRY : " + response.CardExpiry);
Console.Out.WriteLine ("CARDHOLDERNAME : " + response.CardHolderName);
//Handle Response
}
}
}
}