PHP code example of kbart / amazon-ads-sdk

1. Go to this page and download the library: Download kbart/amazon-ads-sdk library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

kbart / amazon-ads-sdk example snippets


AMAZON_ADS_DEFAULT_CLIENT_ID="amzn1.application-oa2-client.xxxx"
AMAZON_ADS_DEFAULT_CLIENT_SECRET="amzn1.oa2-client.v1.xxxx"
AMAZON_ADS_DEFAULT_REFRESH_TOKEN="Atzr|xxxx"
AMAZON_ADS_DEFAULT_REGION="EU" # EU, NA, or FE
AMAZON_ADS_DEFAULT_PROFILE_ID="xxx"

use KBart\AmazonAds\AmazonAds;
use App\Http\Middleware\Authenticate;

// Registers the routes under api/amazon-ads/sdk/{seller}/...
AmazonAds::routes([
    'middleware' => [Authenticate::class, 'your-custom-access-check'],
]);

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use KBart\AmazonAds\Facades\AmazonAdsSdk;
use KBart\AmazonAds\Auth\AmazonAdsCredentials;
use KBart\AmazonAds\Generated\SponsoredProducts\Api\CampaignsApi;

// The facade takes care of EVERYTHING:
// Token Refresh, Retries, Rate Limits AND the automatic 
// hydration of the array into complex Amazon DTOs!
class CustomAmazonController extends Controller
{
    // Via Request: Pass the Request, as well as the Namespace, desired Api Class and Method.
    public function createCampaignWithRequest(Request $request)
    {
        return $this->handleApiCall(function () use ($request) {
            return AmazonAdsSdk::execute(
                request: $request,
                namespace: 'SponsoredProduct',
                apiClass: CampaignsApi::class,
                method: 'listSponsoredProductsCampaigns'
            );
        });
    }

    // Via Payload: Pass the Payload, as well as the Namespace, desired Api Class and Method.
    public function createCampaignWithArray(array $payload)
    {
        return $this->handleApiCall(function () use ($payload) {
            $credentials = AmazonAdsCredentials::fromArray($payload);

            return AmazonAdsSdk::executeWithCredentials(
                credentials: $credentials,
                namespace: 'SponsoredProduct',
                apiClass: CampaignsApi::class,
                method: 'createCampaigns',
                payload: $payload
            );
        });
    }
}

// in app/Providers/AppServiceProvider.php

use Illuminate\Support\Facades\Log;
use Illuminate\Support\Carbon;
use Illuminate\Validation\Rule;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use KBart\AmazonAds\AmazonAds;
use KBart\AmazonAds\Auth\AmazonAdsCredentials;
use App\Models\Seller;

public function boot(): void
{
    AmazonAds::resolveCredentialsUsing(function (Request $request) {
        $request->mergeIfMissing([
            'seller' => $request->route('seller', $request->query('seller', $request->input('seller', null))),
            'endpoint' => 'EU',
            'countryCode' => 'DE',
        ]);

        $validated = $request->validate([
            'seller'     => [
                'int', $validated['endpoint'])
                        ->limit(1)
                        ->with([
                            'profiles' => function ($q) use ($validated) {
                                $q->where('countryCode', $validated['countryCode'])
                                    ->limit(1);
                            },
                        ]);
                },
            ])
            ->first();

        if (empty($seller)) {
            Log::error("Doesn't find Seller {$validated['seller']} with Login for endpoint {$validated['endpoint']} or profile for {$validated['countryCode']}, in Database.");
            throw new \InvalidArgumentException("Can't find Sellerprofile {$validated['seller']}");
        }

        $login = $seller->logins->first();
        $profile = $login->profiles->first();

        if (! empty($login->clientSecretExpiry)) {
            if (Carbon::parse($login->clientSecretExpiry)->subDays(3)->lessThanOrEqualTo(now())) {
                Log::error("clientSecret of {$seller->seller} is very close to expire!", [
                    'expiresAt' => $login->clientSecretExpiry,
                    'hoursLeft' => Carbon::parse($login->clientSecretExpiry)->diffInHours(now()),
                ]);
            } elseif (Carbon::parse($login->clientSecretExpiry)->subDays(14)->lessThanOrEqualTo(now())) {
                Log::info("clientSecret of {$seller->seller} is about to expire!", [
                    'expiresAt' => $login->clientSecretExpiry,
                    'daysLeft' => Carbon::parse($login->clientSecretExpiry)->diffInDays(now()),
                ]);
            }
        }

        return new AmazonAdsCredentials(
            clientId: $login->clientId,
            clientSecret: $login->clientSecret,
            refreshToken: $login->refreshToken,
            region: $login->endpoint,
            profileId: $profile->profileId,
        );
    });
}

'settings' => [
    'user-agent' => 'Your-User-Agent/1.0.0/PHP',
]

'cache-ttl' => [
    'catalogItemsV20220401' => [
        'getCatalogItem'     => 3600, // cache for 1 hour
        'searchCatalogItems' => 600,  // cache for 10 minutes
    ],
    'productPricingV0' => [
        'getPricing'         => 300,  // cache for 5 minutes
    ],
]

'settings' => [
    'debug' => true,
    'debugFile' => base_path('storage/logs/amazon-ads-sdk.log'),
]
cli
php artisan vendor:publish --tag="amazon-ads-config"