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
Screenshot
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>
