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,
);
});
}