Display campaigns, commission groups and commission settings of an affiliate via API

This is a complete sample code that shows the campaigns, commission groups, and commission settings of the commission group in which a particular affiliate is involved.

Note: The first parameter of setLimit() is an offset that is no longer used since version 5.11.8.1 — always pass 0. Paging is handled automatically: sending the same request object again returns the next page of records. The maximum number of records returned in one request is 500. Use the largest page size your script can handle, as it means fewer API calls. Details are described in the Gpf_Rpc_GridRequest article.

<?php
//Download PapApi.class.php from the merchant panel:
// Tools > Integration > API Integration > Download PAP API

// the include_once below assumes the PapApi.class.php is in the same folder as this script
include_once 'PapApi.class.php'; 

$papURL = "https://yoursite.com/pap"; //change it for the real URL of your PAP
$merchantUsername = "merchant@username.com"; //change it for your merchant username
$merchantPassword = "merchant password"; //change it for your merchant password

//ID of the affiliate whose campaigns, commission groups you wish to display
//you can dynamically read it from a $_GET or $_POST parameter
$userid = '11111111'; 


$session = new Pap_Api_Session($papURL."/scripts/server.php");

if(!$session->login($merchantUsername,$merchantPassword)) {
  die("Cannot login. Message: ". $session->getMessage());
}


$campaigngrups = array();
$campaigns = array();
$commissionGroups = array();
$commissionGroupsDefaultByCampaignId = array();

$request = new Gpf_Rpc_GridRequest("Pap_Features_CommissionGroups_CommissionsAffiliateGrid", "getRows", $session);

$request->addParam('userid', $userid);

// sets the page size to 500 rows, which is the maximum per request
// the first parameter is an offset which is not used, always keep it at 0
$request->setLimit(0, 500);

// execute request in a loop to load all data
// sending the same request again returns the next page
do {
  // send request
  try {
    $request->sendNow();
  } catch(Exception $e) {
    die("API call error: ".$e->getMessage());
  }
  // request was successful, get the grid result and its recordset
  $recordset = $request->getGrid()->getRecordset();
  $campaigngrups = array_merge($campaigngrups, iterateGroups($recordset));
} while ($recordset->getSize() == $request->getLimit());

function iterateGroups($recordset) {
  $campaigngrups = array();
  // iterate through the records
  foreach($recordset as $rec) {
    $campaigngrups['\''.$rec->get('campaignid').'\''] = $rec->get('commissiongroupid');
  }
  return $campaigngrups;
}

$request = new Gpf_Rpc_FormRequest("Pap_Db_Table_CommissionGroups", "getAllCommissionGroupsForAllCampaigns", $session);

try  {
  $request->sendNow();
} catch(Exception $e){
  die("API call error: " . $e->getMessage());
}

$responseForm = $request->getStdResponse();
$i = 0;
foreach ($responseForm->rows as $row) {
  $i++;
  if ($i==1) {
     $valuesNames = array_flip($row);
     continue;
  }
  $groupName = $row[$valuesNames['name']];
  $groupId = $row[$valuesNames['commissiongroupid']];
  $campaignId = $row[$valuesNames['campaignid']];
  $groupValue = $row[$valuesNames['commissiongroupvalue']];
  $commissionGroups[$groupId] = array($groupName, $groupValue);
  if ($groupName == 'Default commission group') {
    $commissionGroupsDefaultByCampaignId['\''.$campaignId.'\''] = array($groupId, $groupValue);
  }
}

$request = new Gpf_Rpc_GridRequest("Pap_Merchants_Campaign_CampaignsGrid", "getRows", $session);
//$request = new Gpf_Rpc_GridRequest("Pap_Affiliates_Promo_CampaignsGrid", "getRows", $session);

// adding parameters to the request to work with desired columns
$request->addParam('columns', new Gpf_Rpc_Array(array(array('id'), array('campaignid'), 
array('rtype'), array('rstatus'), array('name'), array('description'),
array('dateinserted'), array('rorder'), array('isdefault'), array('networkstatus'), 
array('logourl'), array('productid'), array('discontinueurl'), array('validfrom'), array('validto'), 
array('validnumber'), array('validtype'), array('overwritecookie'), array('accountid'), array('commissionsexist'), array('commissionsdetails'))));

// sets the page size to 500 rows, which is the maximum per request
// the first parameter is an offset which is not used, always keep it at 0
$request->setLimit(0, 500);

$request->addFilter('rstatus', '=', 'A');  //only active campaigns

// execute request in a loop to load all data
// sending the same request again returns the next page
do {
  // send request
  try {
    $request->sendNow();
  } catch(Exception $e) {
    die("API call error: ".$e->getMessage());
  }
  // request was successful, get the grid result and its recordset
  $recordset = $request->getGrid()->getRecordset();
  $campaigns = array_merge($campaigns, iterateCampaigns($recordset));
} while ($recordset->getSize() == $request->getLimit());

function iterateCampaigns($recordset) {
  $campaigns = array();
  // iterate through the records
  foreach($recordset as $rec) {
    $campaigns['\''.$rec->get('campaignid').'\''] = array($rec->get('name'), $rec->get('rtype'), $rec->get('commissionsdetails'));
  }
  return $campaigns;
}

$i = 1;
foreach ($campaigns as $campaignid=>$campaign) {

  if (array_key_exists($campaignid, $campaigngrups)) {

    echo $i."." .' campaignid: ' . $campaignid;
    echo '<br>campaignname: ' . $campaign[0];
    echo '<br>campaigntype: ' . $campaign[1]; // P = Public, M = Public with manual approval, I = Private
    echo '<br>commissiongroupID: ' . $campaigngrups[$campaignid];
    if ($campaigngrups[$campaignid] == 'notincampaign') {
       echo '<br>commissiondetails: ' . 'Affiliate is not assigned to this private or manual approval campaign (this campaign should be hidden for this affiliate)';
    } else {
       $commissionGroupDetail = $commissionGroups[$campaigngrups[$campaignid]];
       echo '<br>commissiongroupName: ' . $commissionGroupDetail[0];
       echo '<br>commissiondetails: ' . $commissionGroupDetail[1];
    }
  }
  $i ++;
  echo '<hr>';
}
?>