How to Create Ads in PHP (V5)

We will release PHP samples in V5 to MSDN by May 2008. In the interim, we'll use this site to release PHP samples in V5.

The following PHP example shows how to create advertisements by using the Campaign Management Web service. This example assumes that you have already determined which ad group ID will be used for the ads; you must substitute your ad group ID for the $adGroupID variable that is assigned 50786905 in the following code.

Thanks,
Walter Poupore
Lead Programming Writer
Microsoft adCenter API

<?php

// This program requires the following PHP extensions:
//    php_soap.dll
//    php_openssl.dll

// To ensure that a cached WSDL is not being used,
// disable WSDL caching.
ini_set("soap.wsdl_cache_enabled", "0");

try
{

    $adGroupId = 50786905;  //Application-specific value.

    // Use either the sandbox or production URI.
    // This example is for the sandbox URI.
    $URI =
        "https://sandboxapi.adcenter.microsoft.com/api/advertiser/v5/";
    // The following commented-out line contains the production URI.
    //$URI = "https://adcenterapi.microsoft.com/api/advertiser/v5/";

    // The adCenter API namespace.
    $xmlns = "https://adcenter.microsoft.com/api/advertiser/v5";

    // The proxy for the Campaign Management Web service.
    $campaignProxy =
        $URI . "CampaignManagement/CampaignManagementService.svc?wsdl";

    // The name of the service operation that will be called.
    $action = "AddAds";

    // The user name, password, and developer token are
    // expected to be passed in as command-line
    // arguments.
    // $argv[0] is the PHP file name.
    // $argv[1] is the user name.
    // $argv[2] is the password.
    // $argv[3] is the developer token.
    if ($argc !=4)
    {
        printf("Usage:\n");
        printf(
          "php file.php username password devtoken\n");
        exit(0);
    }
    $username = $argv[1];
    $password = $argv[2];
    $developerTokenValue = $argv[3];
    $applicationTokenValue="";

    // Assign the credentials to the classes
    // that are used by the SOAP headers.
    $userCredentials=new UserCredentials();
    $userCredentials->Username=$username;
    $userCredentials->Password=$password;
    $developerToken=new DeveloperToken();
    $developerToken->Value=$developerTokenValue;
    $applicationToken=new ApplicationToken();
    $applicationToken->Value=$applicationTokenValue;

    // Create the SOAP headers.
    $headerApplicationToken =
        new SoapHeader
        (
            $xmlns,
            'ApplicationToken',
            $applicationToken,
            false
        );
    $headerDeveloperToken =
        new SoapHeader
        (
            $xmlns,
            'DeveloperToken',
            $developerToken,
            false
        );
    $headerUserCredentials =
        new SoapHeader
        (
            $xmlns,
            'UserCredentials',
            $userCredentials,
            false
        );

    // Create the SOAP input header array.
    $inputHeaders = array
    (
        $headerApplicationToken,
        $headerDeveloperToken,
        $headerUserCredentials
    );

    // Create the SOAP client.
    $opts = array('trace' => true);
    $client = new SOAPClient($campaignProxy, $opts);

    // Create an array of ads.
    $ads[] = array
    (
        DestinationUrl => 'https://www.alpineskihouse.com/',
        DisplayUrl => 'alpineskihouse.com',
        Text =>
            'Alpine Ski House has a great selection for you.',
        Title => 'Alpine Ski House',
    );

    $ads[] = array
    (
        DestinationUrl => 'https://www.alpineskihouse.com/',
        DisplayUrl => 'alpineskihouse.com',
        Text =>
            'Alpine Ski House has winter gear for you.',
        Title => 'Winter deals',
    );

    // Encode the ads to adCenter type "TextAd".
    $adStruct[] = new SoapVar
                    (
                        $ads[0],  // First ad in the array.
                        SOAP_ENC_OBJECT,
                        "TextAd",
                        $xmlns
                    );
    $adStruct[] = new SoapVar
                    (
                        $ads[1],  // Second ad in the array.
                        SOAP_ENC_OBJECT,
                        "TextAd",
                        $xmlns
                    );

    // Specify the parameters for the SOAP call.
    $params = array
    (
        'AdGroupId' => $adGroupId,
        'Ads' => array('Ad' => $adStruct)
    );
   
    // Execute the SOAP call.
    $result = $client->__soapCall
    (
        $action,
        array( $action.'Request' => $params ),
        null,
        $inputHeaders,
        $outputHeaders
    );
   
    print "$action succeeded with Tracking ID "
          . $outputHeaders['ApiCallTrackingData']->TrackingId
          . ".\n";

    // Retrieve the ad IDs.
    if (isset(
        $result->AdIds->int
        ))
    {
        if (is_array($result->AdIds->int))
        {
            // An array of ad IDs has been returned.
            $obj = $result->AdIds->int;
        }
        else
        {
            // A single ad ID has been returned.
            $obj = $result->AdIds;
        }
        print "The following ad IDs were returned by $action:\n";
        foreach ($obj as $adId)
        {
            print "Ad ID: " . $adId . "\n";
        }
    }
}

catch (Exception $e)
{
  
    print "$action failed.\n";
   
    // Display the fault code and the fault string.
    print $e->faultcode . " " . $e->faultstring . ".\n";

    print "TrackingID: " .
        $e->detail->EditorialApiFaultDetail->TrackingId . ".\n";

    // Process editorial validation errors.
    if (isset(
        $e->detail->EditorialApiFaultDetail->EditorialErrors->EditorialError
        ))
    {
        if (is_array(
            $e->detail->EditorialApiFaultDetail->
            EditorialErrors->EditorialError
            ))
        {
            // An array of editorial validation errors has been returned.
            $obj =
                $e->detail->EditorialApiFaultDetail->
                EditorialErrors->EditorialError;
        }
        else
        {
            // A single editorial validation error has been returned.
            $obj = $e->detail->EditorialApiFaultDetail->EditorialErrors;
        }
        foreach ($obj as $evError)
        {
            print "Editorial error " .
                $evError->Code . " encountered. ";
            print "Failed text: " . $evError->DisapprovedText . "\n";
            print $evError->Message . "\n";
        }
    }

    // Process operation errors.
    if (isset(
        $e->detail->EditorialApiFaultDetail->OperationErrors->OperationError
        ))
    {
        if (is_array(
            $e->detail->EditorialApiFaultDetail->OperationErrors->OperationError
            ))
        {
            // An array of operation errors has been returned.
            $obj =
                $e->detail->EditorialApiFaultDetail->OperationErrors->OperationError;
        }
        else
        {
            // A single operation error has been returned.
            $obj = $e->detail->EditorialApiFaultDetail->OperationErrors;
        }
        foreach ($obj as $operationError)
        {
            print "Operation error " .
                $operationError->Code . " encountered. ";
            print $operationError->Message . "\n";
        }
    }

    // Process batch errors.
    if (isset(
        $e->detail->EditorialApiFaultDetail->BatchErrors->BatchError
        ))
    {
        if (is_array(
            $e->detail->EditorialApiFaultDetail->BatchErrors->BatchError
            ))
        {
            // An array of batch errors has been returned.
            $obj = $e->detail->EditorialApiFaultDetail->BatchErrors->BatchError;
        }
        else
        {
            // A single batch error has been returned.
            $obj = $e->detail->EditorialApiFaultDetail->BatchErrors;
        }
        foreach ($obj as $batchError)
        {
            print "Ad index " . $batchError->Index . "\n";
            print "Batch error " .
                $batchError->Code . " encountered. ";
            print $batchError->Message . "\n";
        }
    }
}

// Definitions for classes that are used by the SOAP headers.
class ApplicationToken
{
    public $Value;
}
class DeveloperToken
{
    public $Value;
}
class UserCredentials
{
    public $Password;
    public $Username;
}

?>