Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * @package ImpressPages
- */
- namespace Plugin\Advertising;
- use Ip\Response;
- use Ip\Request;
- use Facebook;
- use FacebookAds\Api;
- use FacebookAds\Object;
- ini_set('display_errors', 1);
- error_reporting(E_ALL);
- // The Api object is now available trough singleton
- class SiteController extends \Ip\Controller
- {
- private $access_token;
- private $app_id = '1147231458632127';
- private $app_secret = '124aa5f6f7de35c208d8339e0572ab49';
- static $fb_params;
- public $fb_instance;
- public $requests;
- private $my_facebook_id;
- public function __construct()
- {
- $this->setFacebookParams();
- $this->fb_instance = new Facebook\Facebook(static::$fb_params);
- $this->requests = new Request();
- if (isset($_SESSION['facebook_access_token'])) {
- $this->access_token = $_SESSION['facebook_access_token'];
- } else {
- $this->access_token = 'EAAQTZAqORIb8BAJCKL0bRv4wWZC7EWpu4V3Hqwuiviqv8qmyIc8kw5h56b6hLsxuJr03S6jFZAcK6tH9mxGP3kWkJwxQpglzzji6iM7Fu71Tn2AJLWhDT5LOV8Ov0xrb6GXNwrjwdZB8iDbVM0HLeDuqSgh9cos1R2S0Y4TmIwZDZD';
- }
- }
- private function setFacebookParams()
- {
- static::$fb_params = [
- 'app_id' => $this->app_id,
- 'app_secret' => $this->app_secret,
- 'default_graph_version' => 'v2.5',
- ];
- }
- public function AdvertisingList()
- {
- ipResponse()->setTitle(__('Lead list', 'Advertising', false));
- if (is_null($this->access_token)) {
- $this->redirectToAdvertisingLogin();
- } else {
- $this->AdvertisingPerformFacebookAdsApiAuthentication();
- }
- /*return ipView('view/advertisingList.php', [
- 'advertisingList' => array(),
- 'searchOptions' => array(),
- 'advertisingStatuses' => array(),
- 'pageSize' => array(),
- 'paginator' => array(),
- ])->render();*/
- }
- /***************************
- * Redirect methods block
- ***************************/
- private function header302()
- {
- header('HTTP/1.1 302 Found');
- }
- private function redirectToAdvertisingList()
- {
- $this->header302();
- header('Location: http://portal.automote.local/AdvertisingList');
- }
- private function redirectToAdvertisingLogin()
- {
- $this->header302();
- header('Location: http://portal.automote.local/AdvertisingLogin');
- }
- /*******************************
- * End of redirect methods block
- *******************************/
- /*****************************
- * Facebook Login Block
- *****************************/
- public function AdvertisingLogin()
- {
- $helper = $this->fb_instance->getRedirectLoginHelper();
- $permissions = ['ads_management', 'read_insights']; // optional
- $loginUrl = $helper->getLoginUrl('http://portal.automote.local/AdvertisingLoginCallback', $permissions);
- ob_start();
- ?>
- <div class="container">
- <div class="well-lg">
- <div class="panel-group">
- <div class="panel panel-default">
- <div class="panel-body">Facebook Authentication</div>
- </div>
- <div class="panel panel-default">
- <div class="panel-body">
- <a href='<?php echo $loginUrl ?>' class='btn btn-default'><span class='glyphicon glyphicon-log-in'></span> Log in with Facebook!</a>
- </div>
- </div>
- </div>
- </div>
- </div>
- <?php
- echo ob_get_clean();
- }
- public function AdvertisingLoginCallback()
- {
- $helper = $this->fb_instance->getRedirectLoginHelper();
- try {
- $accessToken = $helper->getAccessToken();
- } catch (Facebook\Exceptions\FacebookResponseException $e) {
- // When Graph returns an error
- if ($e->getMessage() == 'This authorization code has been used.') {
- $this->redirectToAdvertisingList();
- } else {
- echo 'Graph returned an error: ' . $e->getMessage();
- exit;
- }
- } catch (Facebook\Exceptions\FacebookSDKException $e) {
- // When validation fails or other local issues
- echo 'Facebook SDK returned an error: ' . $e->getMessage();
- exit;
- }
- if (isset($accessToken)) {
- // Logged in!
- $_SESSION['facebook_access_token'] = $this->AdvertisingExtendingFacebookToken((string)$accessToken);
- $this->access_token = $_SESSION['facebook_access_token'];
- if (!is_null($this->access_token)) {
- $this->redirectToAdvertisingList();
- }
- // Now you can redirect to another page and use the
- // access token from $_SESSION['facebook_access_token']
- }
- }
- private function AdvertisingExtendingFacebookToken($token)
- {
- // OAuth 2.0 client handler
- $oAuth2Client = $this->fb_instance->getOAuth2Client();
- // Exchanges a short-lived access token for a long-lived one
- return $oAuth2Client->getLongLivedAccessToken($token);
- }
- /*******************************
- * End of Facebook Login Block
- ******************************/
- /*****************************
- * Facebook Ads Authentication Block
- *****************************/
- public function AdvertisingPerformFacebookAdsApiAuthentication()
- {
- $marketing_api_access_token =
- 'EAAQTZAqORIb8BAIiHgpLIFqDERUGBZC2Tnn95MLNhapZC4vwEOg9zzZAIP99pAaGfxv23Me99h7lYsQMV5IfVxi5MzkAn4kTAP2sO7N7zKt3uKxyrykhz3eJby0MCINF6vuH5JQAMPWE3KSDBJcmeMGtTzQyuTKovgC0yzxNowZDZD';
- Api::init($this->app_id, $this->app_secret, $marketing_api_access_token);
- $api = Api::instance();
- // Add to header of your file
- // Add after Api::init()
- $me = new Object\AdAccountUser('me');
- $my_adaccount = $me->getAdAccounts()->current();
- $account_user_data = $my_adaccount->getData(); //returns array $$my_account_data['id'] - returns ad account id
- //Getting List of Account data
- //$reflection_class = new \ReflectionClass("\FacebookAds\Object\Fields\AdAccountFields"); //Preparing reflection class for description of target class
- $account = new Object\AdAccount($account_user_data['id']); // Getting AdAccount instance
- $fields = array(
- Object\Fields\AdAccountFields::ID,
- Object\Fields\AdAccountFields::NAME,
- Object\Fields\AdAccountFields::MIN_CAMPAIGN_GROUP_SPEND_CAP,
- );
- $ad_account_data = $account->read($fields)->getData(); //Getting all constants from target class ($reflection_class->getConstants())
- /*echo "<pre>";
- var_dump($data); //Dumping all possible account data
- echo "</pre>";*/
- // Creating test ad set
- //$this->my_facebook_id = $this->fb_instance->get('/me?fields=id', $this->access_token)->getDecodedBody()['id'];
- $campaign = new Object\Campaign(null, $ad_account_data['id']);
- /*
- * Getting list of created campaigns
- * possible fields:
- * id,account_id,adlabels,buying_type,can_use_spend_cap,configured_status,created_time,effective_status,name,objective,recommendations,spend_cap,start_time,status,stop_time,updated_time,adsets,ads,insights,stats
- */
- $request = $this->fb_instance->get(
- "/$ad_account_data[id]/campaigns?fields=id,name,account_id,adlabels,buying_type,objective,created_time,start_time,effective_status,configured_status",
- $marketing_api_access_token,
- null,
- 'v2.7'
- )->getDecodedBody();
- $head = "";
- $body = "";
- $i = 0;
- foreach ($request['data'] as $data) {
- if ($i == 0) {
- $head = "<tr><td>" . join("</td><td>", array_flip($data)) . "</td></tr>";
- }
- $body .= "<tr><td>" . join("</td><td>", $data) . "</td></tr>";
- $i++;
- }
- echo <<<HTML
- <div class="container">
- <div class="well">
- <h3>List of created campaigns</h3>
- <table class="table table-bordered">
- <thead>
- $head
- </thead>
- <tbody>
- $body
- </tbody>
- </table>
- </div>
- </div>
- HTML;
- /*
- * End of created campaigns list
- */
- /*
- * Query to create campaign
- */
- $create_campaign = false;
- if ($create_campaign) {
- $campaign->setData(array(
- Object\Fields\CampaignFields::NAME => 'My campaign',
- Object\Fields\CampaignFields::OBJECTIVE => Object\Values\CampaignObjectiveValues::LINK_CLICKS,
- ));
- $campaign->create(array(
- Object\Campaign::STATUS_PARAM_NAME => Object\Campaign::STATUS_PAUSED
- ));
- }
- /*
- * End of create campaign query
- */
- // Search for targeting topic
- $result = Object\TargetingSearch::search(
- Object\Search\TargetingSearchTypes::INTEREST,
- null,
- 'cars sell')->getArrayCopy();
- $result = current($result)->getData();
- $thead = "<tr><th>" . implode("</th><th>", array_flip($result)) . "</th></tr>";
- $tbody = "<tr><td>" . implode("</td><td>", $result) . "</td></tr>";
- echo <<<HTML
- <div class="container">
- <div class="well">
- <h3>List to intrests</h3>
- <table class="table table-bordered">
- <thead>
- $thead
- </thead>
- <tbody>
- $tbody
- </tbody>
- </table>
- </div>
- </div>
- HTML;
- $start_time = (new \DateTime("+1 week"))->format(\DateTime::ISO8601);
- $end_time = (new \DateTime("+2 week"))->format(\DateTime::ISO8601);
- // Creating AdSet
- $adset = new Object\AdSet(null, $ad_account_data['id']);
- $adset->setData(array(
- Object\Fields\AdSetFields::NAME => 'My Ad Set',
- Object\Fields\AdSetFields::OPTIMIZATION_GOAL => Object\Values\AdSetOptimizationGoalValues::REACH,
- Object\Fields\AdSetFields::BILLING_EVENT => Object\Values\AdSetBillingEventValues::IMPRESSIONS,
- Object\Fields\AdSetFields::BID_AMOUNT => 2,
- Object\Fields\AdSetFields::DAILY_BUDGET => 1000,
- Object\Fields\AdSetFields::CAMPAIGN_ID => current($request['data'])['id'],
- //Only test settings gazilions of them left out... Seems like endless possibilities
- Object\Fields\AdSetFields::TARGETING => (new Object\Targeting())->setData(array(
- Object\Fields\TargetingFields::GEO_LOCATIONS => array(
- 'countries' => array('US'),
- ),
- Object\Fields\TargetingFields::INTERESTS => array_flip(
- $result['name']
- )
- )),
- Object\Fields\AdSetFields::START_TIME => $start_time,
- Object\Fields\AdSetFields::END_TIME => $end_time,
- ));
- $adset->create(array(
- Object\AdSet::STATUS_PARAM_NAME => Object\AdSet::STATUS_PAUSED,
- ));
- // Hashing image
- $image = new Object\AdImage(null, $ad_account_data['id']);
- $image->{Object\Fields\AdImageFields::FILENAME} = ipFile('file/repository/car.jpg');
- $image->create();
- $image_hash = $image->{Object\Fields\AdImageFields::HASH} . PHP_EOL;
- echo 'Image Hash: ' . $image_hash;
- // Creating ad
- $link_data = new Object\AdCreativeLinkData();
- $link_data->setData(array(
- Object\Fields\AdCreativeLinkDataFields::MESSAGE => 'try it out',
- Object\Fields\AdCreativeLinkDataFields::LINK => "http://".$_SERVER['HTTP_HOST'],
- Object\Fields\AdCreativeLinkDataFields::CAPTION => 'My caption',
- Object\Fields\AdCreativeLinkDataFields::IMAGE_HASH => $image_hash,
- ));
- $object_story_spec = new Object\AdCreativeObjectStorySpec();
- $object_story_spec->setData(array(
- Object\Fields\AdCreativeObjectStorySpecFields::PAGE_ID => '456163157907793',
- Object\Fields\AdCreativeObjectStorySpecFields::LINK_DATA => $link_data,
- ));
- $creative = new Object\AdCreative(null, $ad_account_data['id']);
- $creative->setData(array(
- Object\Fields\AdCreativeFields::NAME => 'Sample Creative',
- Object\Fields\AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
- ));
- $creative->create();
- /*$data = array(
- Object\AdFields::NAME => 'My Ad',
- Object\AdFields::ADSET_ID => <AD_SET_ID>,
- AdFields::CREATIVE => array(
- 'creative_id' => <CREATIVE_ID>,
- ),
- );
- $ad = new Object\Ad(null, 'act_<AD_ACCOUNT_ID>');
- $ad->setData($data);
- $ad->create(array(
- Object\Ad::STATUS_PARAM_NAME => Ad::STATUS_PAUSED,
- ));*/
- echo "<pre>";
- var_dump($creative->getData());
- echo "</pre>";
- /*if ($this->requests->isPost() && $should_authenticate = $this->requests->getRequest('do_ads_authentication')) {
- if ($should_authenticate == "yes") {*/
- // }
- /*} else {
- // Create a form object
- $form = new \Ip\Form();
- // Add a text field to form object
- $do_ads_authentidation_hidden_input = new \Ip\Form\Field\Hidden(
- array(
- 'name' => 'do_ads_authentication', // HTML "name" attribute
- 'value' => 'yes', // HTML "name" attribute
- ));
- $field = new \Ip\Form\Field\Submit(
- array(
- 'name' => 'submit_auth_request', // HTML "name" attribute
- 'value' => "Authenticate Ads Access!", // Field label that will be displayed next to input field
- ));
- $form->addField($do_ads_authentidation_hidden_input);
- $form->addField($field);
- $form->setAction(ipConfig()->baseUrl() . 'AdvertisingPerformFacebookAdsApiAuthentication');
- $form->setAjaxSubmit(false);
- $formHtml = $form->render();
- ob_start();
- ?>
- <div class="container">
- <div class="well-lg">
- <div class="panel-group">
- <div class="panel panel-default">
- <div class="panel-body">Facebook Ads Authentication</div>
- </div>
- <div class="panel panel-default">
- <div class="panel-body">
- <?php echo $formHtml ?>
- </div>
- </div>
- </div>
- </div>
- </div>
- <?php
- echo ob_get_clean();
- }*/
- }
- /*****************************
- * End Facebook Ads Authentication Block
- *****************************/
- }
Advertisement
Add Comment
Please, Sign In to add comment