Skip to content

Commit 1fd0908

Browse files
authored
Merge pull request #235 from sdinteractive/ADO-313-capi-changes
ADO-313: fixes issues with message queue implementation for capi events
2 parents db00867 + 37f7b2d commit 1fd0908

File tree

4 files changed

+32
-9
lines changed

4 files changed

+32
-9
lines changed

app/code/Meta/Conversion/Controller/Pixel/Tracker.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Magento\Framework\Controller\Result\Json;
1212
use Magento\Framework\MessageQueue\PublisherInterface;
1313
use Magento\Framework\Serialize\Serializer\Json as JsonSerializer;
14+
use FacebookAds\Object\ServerSide\Util;
1415

1516
class Tracker implements HttpPostActionInterface
1617
{
@@ -84,6 +85,10 @@ public function execute(): Json
8485
$payload = $this->pixelEvents[$eventName]->getPayload($params);
8586
$payload['event_id'] = $params['eventId'];
8687
$payload['event_type'] = $this->pixelEvents[$eventName]->getEventType();
88+
$payload['request_uri'] = Util::getRequestUri();
89+
$payload['user_agent'] = Util::getHttpUserAgent();
90+
$payload['fbp'] = Util::getFbp();
91+
$payload['fbc'] = Util::getFbc();
8792
if (isset($payload)) {
8893
$this->publisher->publish('send.conversion.event.to.meta', $this->jsonSerializer->serialize($payload));
8994
$response['success'] = true;

app/code/Meta/Conversion/Helper/ServerEventFactory.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,24 @@ public function __construct(
6262
* @param string|null $eventId
6363
* @return Event
6464
*/
65-
public function newEvent($eventName, $eventId = null)
65+
public function newEvent($eventName, $additionalPayloadData, $eventId = null)
6666
{
6767
// Capture default user-data parameters passed down from the client browser.
68+
69+
$userAgent = $this->getValueOrFallback('user_agent', $additionalPayloadData, [Util::class, 'getHttpUserAgent']);
70+
$fbp = $this->getValueOrFallback('fbp', $additionalPayloadData, [Util::class, 'getFbp']);
71+
$fbc = $this->getValueOrFallback('fbc', $additionalPayloadData, [Util::class, 'getFbc']);
6872
$userData = (new UserData())
6973
->setClientIpAddress($this->getIpAddress())
70-
->setClientUserAgent(Util::getHttpUserAgent())
71-
->setFbp(Util::getFbp())
72-
->setFbc(Util::getFbc());
74+
->setClientUserAgent($userAgent)
75+
->setFbp($fbp)
76+
->setFbc($fbc);
7377

78+
$requestUri = $this->getValueOrFallback('request_uri', $additionalPayloadData, [Util::class, 'getRequestUri']);
7479
$event = (new Event())
7580
->setEventName($eventName)
7681
->setEventTime(time())
77-
->setEventSourceUrl(Util::getRequestUri())
82+
->setEventSourceUrl($requestUri)
7883
->setActionSource('website')
7984
->setUserData($userData)
8085
->setCustomData(new CustomData());
@@ -88,6 +93,11 @@ public function newEvent($eventName, $eventId = null)
8893
return $event;
8994
}
9095

96+
private function getValueOrFallback($key, $data, $fallbackCallback)
97+
{
98+
return (!empty($data[$key])) ? $data[$key] : $fallbackCallback();
99+
}
100+
91101
/**
92102
* Get the IP address from the $_SERVER variable
93103
*
@@ -178,9 +188,9 @@ private function addCustomData($event, $data)
178188
* @param string|null $eventId
179189
* @return Event
180190
*/
181-
public function createEvent($eventName, $data, $eventId = null)
191+
public function createEvent($eventName, $data, $additionalPayloadData, $eventId = null)
182192
{
183-
$event = $this->newEvent($eventName, $eventId);
193+
$event = $this->newEvent($eventName, $additionalPayloadData, $eventId);
184194

185195
return $this->addCustomData($event, $data);
186196
}

app/code/Meta/Conversion/Model/CapiEventHandler.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,15 @@ public function process(string $message): void
3434
unset($payload['event_id']);
3535
unset($payload['event_type']);
3636

37+
$additionalPayloadKeys = ['request_uri', 'user_agent', 'fbp', 'fbc'];
38+
$additionalPayloadData = array_intersect_key($payload, array_flip($additionalPayloadKeys));
39+
$payload = array_diff_key($payload, array_flip($additionalPayloadKeys));
40+
3741
// Add source and pluginVersion in the payload as custom properties
3842
$payload['custom_properties'] = [];
3943
$payload['custom_properties']['source'] = $this->fbeHelper->getSource();
4044
$payload['custom_properties']['pluginVersion'] = $this->fbeHelper->getPluginVersion();
41-
42-
$event = $this->serverEventFactory->createEvent($eventType, array_filter($payload), $eventId);
45+
$event = $this->serverEventFactory->createEvent($eventType, array_filter($payload), $additionalPayloadData, $eventId);
4346
if (isset($payload['userDataFromOrder'])) {
4447
$this->serverSideHelper->sendEvent($event, $payload['userDataFromOrder']);
4548
} else {

app/code/Meta/Conversion/Model/CapiTracker.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
namespace Meta\Conversion\Model;
55

6+
use FacebookAds\Object\ServerSide\Util;
67
use Magento\Customer\Model\Session as CustomerSession;
78
use Magento\Framework\Serialize\Serializer\Json as JsonSerializer;
89
use Magento\Framework\MessageQueue\PublisherInterface;
@@ -29,6 +30,10 @@ public function execute(array $payload, string $eventName, string $eventType, bo
2930
$eventId = $this->generateEventId($eventName, $useSessionForEventIds);
3031
$payload['event_id'] = $eventId;
3132
$payload['event_type'] = $eventType;
33+
$payload['request_uri'] = Util::getRequestUri();
34+
$payload['user_agent'] = Util::getHttpUserAgent();
35+
$payload['fbp'] = Util::getFbp();
36+
$payload['fbc'] = Util::getFbc();
3237
$this->publisher->publish('send.conversion.event.to.meta', $this->jsonSerializer->serialize($payload));
3338
}
3439
}

0 commit comments

Comments
 (0)