Personalization Bloc Issue | Community
Skip to main content
Level 2
January 4, 2024
Solved

Personalization Bloc Issue

  • January 4, 2024
  • 2 replies
  • 1070 views

Hello,

 

I am setting a personalization bloc to encrypt and decrypt as the following:

<%
var IV_SIZE = 8; // Replace with the desired size

String.prototype.hexEncode = function () {
var result = '';
for (var i=0; i<this.length; i++) {
result += this.charCodeAt(i).toString(16);
}
return result;
}

function generateRandomString(size) {
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var result = '';

for (var i = 0; i < size; i++) {
var randomIndex = Math.floor(Math.random() * characters.length);
result += characters.charAt(randomIndex);
}

return result;
}

//Adobe Campaign JS CODE to crypt 'Hello my friend' with 'CF12D5998AE799C6' key :
var key = '11be5d01690fb6f9dfb99c79fXXXXX';
var mBuffer = new MemoryBuffer(); mBuffer.fromString(key);
var b64Key = mBuffer.toBase64();

var recipientMongoId = '',
recipientSalt = '',
deliveryCode = '',
gridCode = '',
gridVersion = '',
parentCartId = '',
delivery = '',
recipient = '',
variables = '',
randomString = '',
ivString = '',
IV_SIZE = '',
dateX = '';

if (typeof rtEvent != 'undefined') {
// Get given encryptedString, decrypt it and modify its value
var encryptedString = rtEvent.ctx.@encryptedData.toString();
var iv = ivString.slice(0, IV_SIZE).hexEncode();
encryptedString = encryptedString.slice(IV_SIZE);
var cryptkey = CryptoJS.enc.Utf8.parse('11be5d01690fb6f9dfb99cXXXXX'); //The key used, in text format
crypted = "toEncrypt"; //encrypted data
var _decrypted = CryptoJS.AES.decrypt(crypted, cryptkey, {
iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});

logInfo("-- " + decrypt.toString(CryptoJS.enc.Utf8) + " --")

recipientMongoId = _decrypted.lid;
recipientSalt = _decrypted.salt;
gridCode = variables.gridCode;
gridVersion = variables.gridVersion;
deliveryCode = variables.deliveryCode;

} else {
// Get deliveryCode from delivery template
deliveryCode = delivery.deliveryCode;

// Get lead mongoId & salt
recipientMongoId = recipient.mongoId;
recipientSalt = recipient.salt;

// For loyalty products, the gridCode has been moved into gridVersion and the gridCode is the lead score
gridVersion = variables.gridVersion;
gridCode = recipient.scoring;

if (variables.gridCode && variables.gridCode != '') {
gridCode = variables.gridCode;
}

// For AC/PM mailing: Concatenate gridVersion from previous cart (MD) with an eventually existing gridVersion stored into the delivery template
// Get also cart mongoId from previous cart (MD) in order to link carts for stats
// Be careful, alias must be "orderHistory" in enrichment
try {
// For normal strat, gridVersion stored in targetData (data stored in working tables of workflows)
if (targetData.gridVersion && targetData.gridVersion != '') {
gridVersion = targetData.gridVersion;
}
if (targetData.gridCode && targetData.gridCode != '') {
gridCode = targetData.gridCode;
}
if (targetData.dateX && targetData.dateX != '') {
dateX = targetData.dateX;
}

if (targetData.orderHistory) {
if (targetData.orderHistory.gridVersion && targetData.orderHistory.gridVersion != '') {
gridVersion = targetData.orderHistory.gridVersion + gridVersion;
}
if (targetData.orderHistory.mongoOrderId && targetData.orderHistory.mongoOrderId != '') {
parentCartId = targetData.orderHistory.mongoOrderId;
}
if (targetData.orderHistory.gridCode && targetData.orderHistory.gridCode != '') {
gridCode = targetData.orderHistory.gridCode;
}
}
}
catch (e) {
}
}

//var ivString = randomString(IV_SIZE)
var iv = ivString.hexEncode();//'11be5d01690fb6f9';

var data = {
lid: recipientMongoId,
salt: recipientSalt,
data: {
channel: {
"name" : "EMAIL",
"source" : {
"type" : "ADOBE_CAMPAIGN",
"detail" : variables.detail
}
},
dropCode: deliveryCode,
gridCode: gridCode,
gridVersion: gridVersion
}
};

if (parentCartId && parentCartId != '') data.data.parentCartId = parentCartId;
if (dateX && dateX != '') data.data.date = dateX;

var toEncrypt = JSON.stringify(data);

var encrypted = '?k=' + ivString + cryptString(toEncrypt,key,'CBC',iv).replace(/\//g,'_').replace(/\+/g,'-').replace(/=+$/, '');

%>

 

When I try to sent an email I get an error that recipient  and recipient.OrderHistory are undefined not defined. 

 

 

 

Anyone can help here? What I am doing wrong?

 

Thanks in advance. 

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by assiba_johnson

Hi @satheeskannak,

 

I found a solution from my end by using cryptoJS.DES encryption method. We can archive this case.

 

Thanks,

Assiba

2 replies

SatheeskannaK
Community Advisor
Community Advisor
January 5, 2024

@assiba_johnson, Are you using adobe campaign standard?

Thanks, Sathees
Level 2
January 5, 2024

Hello @satheeskannak , no sorry Adobe Campaign Classic. Thanks.

Amine_Abedour
Community Advisor
Community Advisor
January 5, 2024

Hello @assiba_johnson 

 

Would you mind checking if you have used recipient.OrderHistory in any other part of your delivery, perhaps in the text version?

The fastest way to check is to open your delivery in xml format like below and check for recipient.OrderHistory 

 

Br,

Amine 

 

Amine ABEDOUR
Level 2
January 5, 2024

@2111311, many thanks for your reply. Actually you could not find one.