normalize(); $pixel_id = $this->container['pixel_id']; if ($this->endpoint_request != null && $this->endpoint_request->isSendToEndpointOnly()) { return $this->endpoint_request->sendEventAsync($pixel_id, $this->container['events'])->then(function($customEndpointResponse) { $response = $customEndpointResponse; return new EventResponse(array( 'data' => array('events_received' => count($this->container['events']), 'custom_endpoint_responses'=>$response) )); }); } $sendCAPIRequestPromise = $this->eventPromise( $pixel_id, $normalized_param ); if ($this->endpoint_request != null) { $customEndpointRequestPromise = $this->endpoint_request->sendEventAsync($this->container['pixel_id'], $this->container['events']); // put both promises in an an array $promises = Utils::all(array($sendCAPIRequestPromise, $customEndpointRequestPromise)); $promises->then(function($responses) { $CAPIResponse = $responses[0]; $customEndpointResponse = $responses[1]; $CAPIResponse->setCustomEndpointResponses($customEndpointResponse); return $CAPIResponse; }); return $promises; } return $sendCAPIRequestPromise; } private function eventPromise($pixel_id, array $params = array()) { $access_token = Api::instance()->getSession()->getAccessToken(); $headers = array( 'User-Agent' => 'fbbizsdk-php-v'.ApiConfig::APIVersion, 'Accept-Encoding' => '*', ); $domain = Client::DEFAULT_LAST_LEVEL_DOMAIN . '.' . Client::DEFAULT_GRAPH_BASE_DOMAIN; $base_url = 'https://' . $domain . '/v' . ApiConfig::APIVersion; $url = $base_url.'/'.$pixel_id.'/events'; $events_json = json_encode($params['data']); $multipart_contents = [ [ 'name' => 'access_token', 'contents' => $access_token, 'headers' => array('Content-Type' => 'multipart/form-data'), ], [ 'name' => 'data', 'contents' => $events_json, 'headers' => array('Content-Type' => 'multipart/form-data'), ] ]; foreach ($params as $key => $value) { if ($key !== 'data') { $multipart_contents[] = [ 'name' => $key, 'contents' => $value, 'headers' => array('Content-Type' => 'multipart/form-data'), ]; } } $body = new MultipartStream($multipart_contents); $request = new Request('POST', $url, $headers, $body); $client = AsyncClient::getInstance()->getClient(); return $client->sendRequest($request); } }