in Helper/AAMFieldsExtractorHelper.php [45:102]
public function getNormalizedUserData($userDataArray = null)
{
if (!$userDataArray) {
$userDataArray = $this->magentoDataHelper->getUserDataFromSession();
}
$aamSettings = $this->fbeHelper->getAAMSettings();
if (!$userDataArray || !$aamSettings || !$aamSettings->getEnableAutomaticMatching()) {
return null;
}
//Removing fields not enabled in AAM settings
foreach ($userDataArray as $key => $value) {
if (!in_array($key, $aamSettings->getEnabledAutomaticMatchingFields())) {
unset($userDataArray[$key]);
}
}
// Normalizing gender and date of birth
// According to https://developers.facebook.com/docs/facebook-pixel/advanced/advanced-matching
if (array_key_exists(AAMSettingsFields::GENDER, $userDataArray)
&& !empty($userDataArray[AAMSettingsFields::GENDER])
) {
$userDataArray[AAMSettingsFields::GENDER] = $userDataArray[AAMSettingsFields::GENDER][0];
}
if (array_key_exists(AAMSettingsFields::DATE_OF_BIRTH, $userDataArray)
) {
// strtotime() and date() return false for invalid parameters
$unixTimestamp = strtotime($userDataArray[AAMSettingsFields::DATE_OF_BIRTH]);
if (!$unixTimestamp) {
unset($userDataArray[AAMSettingsFields::DATE_OF_BIRTH]);
} else {
$formattedDate = date("Ymd", $unixTimestamp);
if (!$formattedDate) {
unset($userDataArray[AAMSettingsFields::DATE_OF_BIRTH]);
} else {
$userDataArray[AAMSettingsFields::DATE_OF_BIRTH] = $formattedDate;
}
}
}
// Given that the format of advanced matching fields is the same in
// the Pixel and the Conversions API,
// we can use the business sdk for normalization
// Compare the documentation:
// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters
// https://developers.facebook.com/docs/facebook-pixel/advanced/advanced-matching
foreach ($userDataArray as $field => $data) {
try {
$normalizedValue = Normalizer::normalize($field, $data);
$userDataArray[$field] = $normalizedValue;
} catch (\Exception $e) {
unset($userDataArray[$field]);
}
}
return $userDataArray;
}