If you have any question left, please drop a note with the discussion link of this page.

PHP SOAP Account Browser

From Wiki.zanox.com

Jump to: navigation, search

Screenshot

Screenshot - PHP SOAP Account Browser

Code

 
<?php
/******************************************************************************
 * File:            accountbrowser.php
 * Date:            25.02.2009
 *
 * Purpose:         reports program partnerships and payments of the zanox
 *                  affiliate network.
 *                  This is just a demo case for the webservices and by no
 *                  means a complete and supported zanox application!
 *
 * Requirements:    zanox PHP client API
 *                  http://wiki.zanox.com/en/Web_Services
 *
 * Author:          Stefan Misch
 * Contact:         webservices@zanox.com
 *
 * Update:          09.03.2009 - added GetSales
 *                  03.04.2009 - added GetAllPrograms
 *                  08.04.2009 - added GetLeads
 *                  14.04.2009 - added multiple day requests for leads and sales
 *
 ******************************************************************************/
// you need to install the zanox PHP client API
// http://wiki.zanox.com/en/PHP_Client_Library
#path to the API-class
include '/zx_php_client/zanox-api.class.php';
define('DATE_STRING','d.m.Y H:i:s'); //date string used in the UI
define('ITEMS',50); //items to retrieve per webservice request. max is 50.
define('WEEKDAYS',7);
define('SECONDS_PER_DAY', 86400);
$exported_admedia = array('TEXT', 'PICTURE'); //admedia types to be exported to CSV
$zx = ZanoxAPI::factory('soap');
 
// set the authentication credentials
$application_id = $_POST['applicationID'];
$shared_key     = $_POST['sharedkey'];
$zx->setMessageCredentials($application_id, $shared_key);
 
if(isset($_POST['payments']) && $_POST['payments'] === 'Get Payments') {
 //TODO complete paging
 //TODO resolve bank account ID and Payment ID
 $payments = $zx->GetPayments($page, ITEMS);
 #var_dump($payments);
 $formatted_result = '<table style="border: 1px solid grey; border-collapse:collapse;padding: 2px;">';
 $formatted_result .= '<tr>';
 $formatted_result .= '<th>Createdate</th>';
 $formatted_result .= '<th>Modifydate</th>';
 $formatted_result .= '<th>Payoutdate</th>';
 $formatted_result .= '<th>Status</th>';
 $formatted_result .= '<th>amount</th>';
 $formatted_result .= '<th>Currency</th>';
 $formatted_result .= '<th>Bank</th>';
 $formatted_result .= '<th>Bank Account ID</th>';
 $formatted_result .= '<th>Payment ID</th>';
 $formatted_result .= '</tr>';
 if ($payments->total > 0) foreach($payments->paymentsResult->paymentItem as $account_payment) {
  $formatted_result .= '<tr>';
  $formatted_result .= '<td class="data">'.date(DATE_STRING,strtotime($account_payment->createdate)).'</td>';
  $formatted_result .= '<td class="data">'.date(DATE_STRING,strtotime($account_payment->modifydate)).'</td>';
  $formatted_result .= '<td class="data">'.($account_payment->payoutdate == '' ? '':  date(DATE_STRING,strtotime($account_payment->payoutdate))).'</td>';
  $formatted_result .= '<td class="data">'.$account_payment->status.'</td>';
  $formatted_result .= '<td class="data">'.number_format($account_payment->amount, 2, ',', '' ).'</td>';
  $formatted_result .= '<td class="data">'.$account_payment->currency.'</td>';
  $formatted_result .= '<td class="data">'.$account_payment->account->_.'</td>';
  $formatted_result .= '<td class="data">'.$account_payment->account->id.'</td>';
  $formatted_result .= '<td class="data">'.$account_payment->id.'</td>';
  $formatted_result .= '</tr>';
 }
 $formatted_result .= '</table>';
}
if(isset($_POST['adspaces']) && $_POST['adspaces'] === 'Get AdSpaces') {
 //TODO complete paging
 $zxadspaces = $zx->GetAdSpaces($page, ITEMS);
 #var_dump($zxadspaces );
 $formatted_result = '<table style="border: 1px solid grey; border-collapse:collapse; padding: 2px;">';
 $formatted_result .= '<tr>';
 $formatted_result .= '<th>ID</th>';
 $formatted_result .= '<th>Name</th>';
 $formatted_result .= '<th>Description</th>';
 $formatted_result .= '<th>url</th>';
 $formatted_result .= '<th>type</th>';
 $formatted_result .= '<th>scope</th>';
 $formatted_result .= '<th>visitors</th>';
 $formatted_result .= '<th>impressons</th>';
 $formatted_result .= '<th>Language</th>';
 $formatted_result .= '<th>Programs</th>';
 $formatted_result .= '</tr>';
 if(isset($zxadspaces->adspacesResult->adspaceItem->name)) {
  $adspaces = array($zxadspaces->adspacesResult->adspaceItem);
 } else {
  $adspaces = $zxadspaces->adspacesResult->adspaceItem;
 }
 foreach($adspaces as $account_adspace) {
  $formatted_result .= '<tr>';
  $formatted_result .= '<td class="data">'.$account_adspace->id.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->name.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->description.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->url.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->type.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->scope.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->visitors.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->impressions.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace->lang.'</td>';
  $formatted_result .= '<td class="data"><input type="submit" name="getprograms" value="'.$account_adspace->id.'" /></td>';
  $formatted_result .= '</tr>';
 }
 $formatted_result .= '</table>';/**/
}
if(isset($_POST['getprograms']) && is_numeric($_POST['getprograms'])) {
 $page = 0;
 $zxprograms = $zx->getProgramsByAdspace($_POST['getprograms'], $page, ITEMS);
 $total = $zxprograms->total;
 $programs = $zxprograms->programsResult->programItem;
 #echo "total:".$total."<br/>";
 //paging
 if(count($zxprograms->programsResult->programItem) < $total) {
  do {
   $page++;
   #echo $page." * ".ITEMS."=".(ITEMS * ($page +1))." ".$total."<br/>";
   $zxprograms = $zx->getProgramsByAdspace($_POST['getprograms'], $page, ITEMS);
   if(is_array($zxprograms->programsResult->programItem)) {
    $programs = array_merge($programs, $zxprograms->programsResult->programItem);
   } else {
    array_push($programs,$zxprograms->programsResult->programItem);
   }
  } while((ITEMS * ($page+1) )< $total );
 } elseif($total == 1) {
  $programs = array($zxprograms->programsResult->programItem);
 }
 #echo "anzahl:".count($programs)."<br/>";
 $formatted_result = '<table style="border: 1px solid grey; border-collapse:collapse;padding: 2px;">';
 $formatted_result .= '<tr>';
 $formatted_result .= '<th>ID</th>';
 $formatted_result .= '<th>Name</th>';
 $formatted_result .= '<th>AdRank</th>';
 $formatted_result .= '<th>Description</th>';
 $formatted_result .= '<th>Products</th>';
 $formatted_result .= '<th>vertical</th>';
 $formatted_result .= '<th>URL</th>';
 $formatted_result .= '<th>Image</th>';
 $formatted_result .= '</tr>';
 if (count($programs) > 0) foreach($programs as $account_adspace_program) {
  $formatted_result .= '<tr>';
  $formatted_result .= '<td class="data">'.$account_adspace_program->id.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace_program->name.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace_program->adrank.'</td>';
  $formatted_result .= '<td class="data">'.substr($account_adspace_program->description, 0,100).'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace_program->products.'</td>';
  $formatted_result .= '<td class="data">'.$account_adspace_program->vertical.'</td>';
  $formatted_result .= '<td class="data"><a href="'.$account_adspace_program->url.'">'.htmlentities($account_adspace_program->url).'</a></td>';
  $formatted_result .= '<td class="data"><img src="http://ui.zanox-affiliate.de/images/'.$account_adspace_program->image.'"/></td>';
  $formatted_result .= '<td class="data"><input type="submit" name="getadmedia" value="'.$account_adspace_program->id.'" /></td>';
  $formatted_result .= '</tr>';
 }
 $formatted_result .= '</table>';
 $formatted_result .= '<input type="hidden" name="adspaceID" value="'.$_POST['getprograms'].'"/>';/**/
}
if(isset($_POST['getadmedia']) && is_numeric($_POST['getadmedia'])) {
 $filter = array('adspace' => $_POST['adspaceID']);
 $page = 0;
 $zxadmedia = $zx->getAdmediaByProgram($_POST['getadmedia'], $filter, $page, ITEMS);
 $total = $zxadmedia->total;
 $admedia = $zxadmedia->admediaResult->admediumItem;
 //paging
 if(count($zxadmedia->admediaResult->admediumItem) < $total) {
  do {
   $page++;
   #echo $page." * ".ITEMS."=".(ITEMS * ($page +1))." ".$total." ".count($admedia)."<br/>";
   $zxadmedia = $zx->getAdmediaByProgram($_POST['getadmedia'], $filter, $page, ITEMS);
   #echo count($admedia)."<br/>";
   if(is_array($zxadmedia->admediaResult->admediumItem)) {
    $admedia = array_merge($admedia, $zxadmedia->admediaResult->admediumItem);
   } else {
    array_push($admedia,$zxadmedia->admediaResult->admediumItem);
   }
   #echo count($admedia)."<br/>";
  } while((ITEMS * ($page+1) )< $total );
 } elseif($total == 1) {
  $admedia = array($zxadmedia->admediaResult->admediumItem);
 }
 if(isset($_POST['csv'])) {
  $formatted_result = "ID;Name;Type;Width;Height;Category;Image;URL";
  $formatted_result .= "\n";
  if (count($admedia) > 0) foreach($admedia as $admedium) {
   if(!in_array($admedium->type->_, $exported_admedia)) continue;
   #var_dump($admedium);
   $formatted_result .= $admedium->id.";";
   $formatted_result .= $admedium->name.";";
   $formatted_result .= $admedium->type->_.";";
   $formatted_result .= $admedium->width.";";
   $formatted_result .= $admedium->height.";";
   $formatted_result .= $admedium->category->_.";";
   $formatted_result .= ($admedium->image == '' ? '' : 'http://'.$admedium->image ).";";
   $formatted_result .= $admedium->url->adspace->_;
   $formatted_result .= "\n";
  }
  header('Content-type: text/plain');
  #header('Content-Disposition: attachment; filename="admedia.csv"');
  echo $formatted_result;
  die();
 }
 #var_dump($admedia);
 $formatted_result = '<input type="submit" name="csv" value="Create CSV" />';
 $formatted_result .= '<table style="border: 1px solid grey; border-collapse:collapse;padding: 2px;">';
 $formatted_result .= '<tr>';
 $formatted_result .= '<th>ID</th>';
 $formatted_result .= '<th>Name</th>';
 $formatted_result .= '<th>Type</th>';
 $formatted_result .= '<th>Width</th>';
 $formatted_result .= '<th>Height</th>';
 $formatted_result .= '<th>Category</th>';
 $formatted_result .= '<th>Image</th>';
 $formatted_result .= '<th>URL</th>';
 $formatted_result .= '</tr>';
 if (count($admedia) > 0) foreach($admedia as $admedium) {
  $formatted_result .= '<tr>';
  $formatted_result .= '<td class="data">'.$admedium->id.'</td>';
  $formatted_result .= '<td class="data">'.$admedium->name.'</td>';
  $formatted_result .= '<td class="data">'.$admedium->type->_.'</td>';
  $formatted_result .= '<td class="data">'.$admedium->width.'</td>';
  $formatted_result .= '<td class="data">'.$admedium->height.'</td>';
  $formatted_result .= '<td class="data">'.$admedium->category->_.'</td>';
  $formatted_result .= '<td class="data">'.($admedium->image == '' ? '' : '<img src="http://'.$admedium->image.'" />' ).'</td>';
  $formatted_result .= '<td class="data"><a href="'.$admedium->url->adspace->_.'">'.htmlentities($admedium->url->adspace->_).'</a></td>';
  $formatted_result .= '</tr>';
 }
 $formatted_result .= '</table>';
 $formatted_result .= '<input type="hidden" name="adspaceID" value="'.$_POST['adspaceID'].'"/>';/**/
 $formatted_result .= '<input type="hidden" name="getadmedia" value="'.$_POST['getadmedia'].'"/>';/**/
}
if(isset($_POST['sales']) || isset($_POST['leads'])) {
	$date = strtotime($_POST['date']);
 
	#var_dump();
 
	$page = 0;
	$sales = array();
 
	for($day = 0; $day < WEEKDAYS; $day++) {
		$mydate = date('Y-m-d\TH:i:sP', $date + $day * SECONDS_PER_DAY);
		#echo $mydate."<br/>";
		if(isset($_POST['sales'])) {
			$zxsales = $zx->getSales( array('date' => $mydate));
			$total = $zxsales->total;
			if($total > 0) if ($total == 1) {
				array_push($sales, $zxsales->reportsResult->saleItem);
			} else {
				$sales = array_merge($sales, $zxsales->reportsResult->saleItem);
			}
 
		} else {
			$zxsales = $zx->getLeads( array('date' => $mydate));
			$total = $zxsales->total;
			if($total > 0) if ($total == 1) {
				array_push($sales, $zxsales->reportsResult->leadItem);
			} else {
				$sales = array_merge($sales, $zxsales->reportsResult->leadItem);
			}
		}
		#var_dump($sales);
		#echo "<br/><br/><br/>";
 
	}
 
	// Sales and Leads do not (yet?) support paging
 
	#var_dump($_POST);
	#var_dump($sales);
	#die();
 
	#$formatted_result = '<input type="submit" name="csv" value="Create CSV" />';	
	$formatted_result = '<table style="border: 1px solid grey; border-collapse:collapse;padding: 2px;">';
	$formatted_result .= '<tr>';
	$formatted_result .= '<th>ID</th>';
	$formatted_result .= '<th>Status</th>';
	$formatted_result .= '<th>Date</th>';
	$formatted_result .= '<th>Modifieddate</th>';
	$formatted_result .= '<th>Program</th>';
	$formatted_result .= '<th>Admedium</th>';
	$formatted_result .= '<th>Commission</th>';
	$formatted_result .= '<th>Currency</th>';
	$formatted_result .= '<th>SubID</th>';
	$formatted_result .= '</tr>';
 
	if (count($sales) > 0) foreach($sales as $sale) {
		$formatted_result .= '<tr>';
		$formatted_result .= '<td class="data">'.$sale->id.'</td>';
		$formatted_result .= '<td class="data">'.$sale->status.'</td>';
		$formatted_result .= '<td class="data">'.$sale->date.'</td>';
		$formatted_result .= '<td class="data">'.$sale->modifieddate.'</td>';
		$formatted_result .= '<td class="data">'.$sale->program->_.'</td>';
		$formatted_result .= '<td class="data">'.$sale->admedium->_.'</td>';
		$formatted_result .= '<td class="data">'.$sale->commission.'</td>';
		$formatted_result .= '<td class="data">'.$sale->currency.'</td>';
		$formatted_result .= '<td class="data">'.$sale->publisher->id.'</td>';
		$formatted_result .= '</tr>';
	}
	$formatted_result .= '</table>';
}
 
if(isset($_POST['getallprograms'])) {
	$filter = array();
 
	//unfortunately necessary due to the large result set
	set_time_limit(0);
	$page = 0;
	$zxprograms = $zx->getPrograms(false, $page, ITEMS);
	$total = $zxprograms->total;
	#var_dump($zxprograms); 
	#die();
	$programs = $zxprograms->programsResult->programItem;
 
	//less received items than available
	//align everything into the same array structure
	if(count($zxprograms->programsResult->programItem) < $total) {
		do {
			//get next page
			$page++;
			$zxprograms = $zx->getPrograms(false, $page, ITEMS);
			//more than one item on page
			if(is_array($zxprograms->programsResult->programItem)) {
				$programs = array_merge($programs, $zxprograms->programsResult->programItem);
			} else {
				//only one item
				array_push($programs,$zxprograms->programsResult->programItem);
			}
		} while((ITEMS * ($page+1) )< $total );
	} elseif($total == 1) {
		//only one item in array
		$programs = array($zxprograms->programsResult->programItem);
	}
	#var_dump($programs);
 
 
	$formatted_result = '<table style="border: 1px solid grey; border-collapse:collapse;padding: 2px;">';
	$formatted_result .= '<tr>';
	$formatted_result .= '<th>ID</th>';
	$formatted_result .= '<th>Name</th>';
	$formatted_result .= '</tr>';
 
	if (count($programs) > 0) foreach($programs as $program) {
		$formatted_result .= '<tr>';
		$formatted_result .= '<td class="data">'.$program->id.'</td>';
		$formatted_result .= '<td class="data">'.$program->name.'</td>';
		$formatted_result .= '</tr>';
	}
	$formatted_result .= '</table>';
}
 
 
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
 <head>
  <title>zanox Account Browser</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <style type="text/css">
   td.data{
    border: 1px solid grey;
    padding: 2px;
   }
   th {
    border: 1px solid grey;
    padding: 2px;
   }
   html {width: 100%; height: 100%; font-size: 0.8em;}
   body {
    width: 100%;
    height: 100%;
    padding:0px;
    margin: 0px;
    font-family: Arial, Verdana, sans-serif;
    font-size: 1em;
   }
   #headline{
    background: #ff9900;
    width: 100%;
    height: 2.0em;
    display: block;
   }
   #content{
    width:80%;
    float:right;
    text-align: left;
    padding-left: 10px;
    padding-right: 0px;
   }
   #footer{
    position: fixed; bottom: 0px;
    width: 100%;
    height: 2.5%;
    background: #ff9900;
    text-align:center;
   }
   a{
   color: #333;
   }
   a:hover {
    color: #ff9900;
    text-decoration:underline;
   }
  </style>
 </head>
 <body>
  <br/>
  <div id="headline">
   <table width="100%" border="0">
    <tr>
      <td><b>zanox Account Browser</b></td>
    </tr>
   </table>
  </div>
  <br/>
  <form name="credentials" action="#" method="post">
   <table>
    <tr>
     <td>Application ID:</td>
     <td><input type="text" name="applicationID" id="applicationID" size="25" value="<?=$application_id?>"/></td>
    </tr>
    <tr>
     <td>Shared Key:</td>
     <td><input type="text" name="sharedkey" id="sharedkey" size="50" value="<?=$shared_key?>"/></td>
    </tr>
   </table>
   <input type="submit" name="getallprograms" value="Get All Programs" /> <input type="submit" name="payments" value="Get Payments" /> <input type="submit" name="adspaces" value="Get AdSpaces" /><br/>
   <p><label for="date">Tracking Date </label>(Format: 2009-03-12T00:00:00+02:00)<input type="text" name="date" id="date" value="<?=$_POST['date']?>" /><input type="submit" name="sales" value="Get Sales" /><input type="submit" name="leads" value="Get Leads" /></p>
   <div style="width:95%; margin:auto; margin-top: 20px;">
   <?php
    echo $formatted_result;
   ?>
   </div>
  </form>
  <br style="clear:both;"/><br/>
  <div id="footer">For help please contact <a href="mailto:webservices@zanox.com">webservices@zanox.com</a>.</div>
 </body>
</html>
 
 
Personal tools