PHP code example of christianjbrown / etsy-open-api-sdk

1. Go to this page and download the library: Download christianjbrown/etsy-open-api-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/ */

    

christianjbrown / etsy-open-api-sdk example snippets


use ChristianBrown\Etsy\EtsyFactory;
use ChristianBrown\KeyValueStore\MemoryKeyValueStore;
use Symfony\Component\Clock\NativeClock;

// Access token: transient, an in-memory store is fine.
$accessTokenStore = new MemoryKeyValueStore(new NativeClock());

// Refresh token: must persist and already hold a valid refresh token.
// Any KeyValueStoreInterface works (DatabaseKeyValueStore, FirestoreKeyValueStore, …).
$refreshTokenStore = new MemoryKeyValueStore(new NativeClock());
$refreshTokenStore->setValue('your-seed-refresh-token');

$etsy = (new EtsyFactory())->create(
    12345678,                 // your shop id
    'your-app-keystring',     // OAuth client_id, and the first half of x-api-key
    'your-app-shared-secret', // the second half of x-api-key
    $accessTokenStore,
    $refreshTokenStore
);

$shopReceiptApi = $etsy->getShopReceiptApi();  // ShopReceiptApiInterface

$receipts = $shopReceiptApi->getMultiple(limit: 25, offset: 0);   // ReceiptInterface[]
foreach ($receipts as $receipt) {
    printf("Receipt #%d — %s\n", $receipt->getReceiptId(), $receipt->getName() ?? 'unknown buyer');

    $grandtotal = $receipt->getGrandtotal();
    if ($grandtotal !== null) {
        printf("  Total: %d %s (÷%d)\n", $grandtotal->getAmount(), $grandtotal->getCurrencyCode(), $grandtotal->getDivisor());
    }

    foreach ($receipt->getTransactions() as $transaction) {
        printf("  %d × listing %d\n", $transaction->getQuantity() ?? 0, $transaction->getListingId() ?? 0);
    }
}

$receipt = $shopReceiptApi->getOneById(1234567890);   // ReceiptInterface
echo $receipt->getStatus() ?? 'unknown', "\n";

$limit = 100;
$offset = 0;
$soldPerListing = [];

do {
    $page = $shopReceiptApi->getPage(limit: $limit, offset: $offset);   // ReceiptPageInterface

    foreach ($page->getReceipts() as $receipt) {
        foreach ($receipt->getTransactions() as $transaction) {
            $listingId = $transaction->getListingId();
            if ($listingId === null) {
                continue;
            }
            $soldPerListing[$listingId] = ($soldPerListing[$listingId] ?? 0) + ($transaction->getQuantity() ?? 0);
        }
    }

    $offset += $limit;
} while ($offset < $page->getCount());

use ChristianBrown\Etsy\Model\ShopReturnPolicyRequest;

$shopReturnPolicyApi = $etsy->getShopReturnPolicyApi();

$request = (new ShopReturnPolicyRequest(acceptsReturns: true, acceptsExchanges: true))
    ->setReturnDeadline(30);

$policy = $shopReturnPolicyApi->create($request);   // ShopReturnPolicyInterface
echo $policy->getReturnPolicyId(), "\n";

$shopReturnPolicyApi->delete($policy->getReturnPolicyId());   // void

use ChristianBrown\Etsy\Host\EtsyHost;

$host = new EtsyHost(
    apiBaseUrl: 'https://openapi.etsy.com',                         // default; every API_URL* constant is rooted here
    oAuthTokenUrl: 'https://api.etsy.com/v3/public/oauth/token',     // default OAuth2 token endpoint
);

$etsy = (new EtsyFactory())->createForHost(12345678, 'your-app-keystring', 'your-app-shared-secret', $accessTokenStore, $refreshTokenStore, $host);

// Before
$etsy = new Etsy(12345678, 'your-app-keystring', 'your-app-shared-secret', $accessTokenStore, $refreshTokenStore);
$etsy = new Etsy(12345678, 'your-app-keystring', 'your-app-shared-secret', $accessTokenStore, $refreshTokenStore, $host);

// After
$etsy = (new EtsyFactory())->create(12345678, 'your-app-keystring', 'your-app-shared-secret', $accessTokenStore, $refreshTokenStore);
$etsy = (new EtsyFactory())->createForHost(12345678, 'your-app-keystring', 'your-app-shared-secret', $accessTokenStore, $refreshTokenStore, $host);

use ChristianBrown\Etsy\Exception\ExceptionInterface;

try {
    $receipts = $shopReceiptApi->getMultiple();
} catch (ExceptionInterface $exception) {
    // Anything this library throws lands here.
}

use ChristianBrown\ApiClient\ApiClientFactory;
use ChristianBrown\ApiClient\ClientOptions;
use ChristianBrown\Etsy\Api\ShopReceiptApi;
use ChristianBrown\Etsy\Auth\Credentials;
use ChristianBrown\Etsy\Cache\ResponseCache;
use ChristianBrown\Etsy\Serializer\CreateReceiptShipmentRequestSerializer;
use ChristianBrown\Etsy\Serializer\ReceiptShipmentCustomsItemRequestsSerializer;
use ChristianBrown\Etsy\Serializer\ReceiptShipmentCustomsItemRequestSerializer;
use ChristianBrown\Etsy\Serializer\UpdateShopReceiptRequestSerializer;
use ChristianBrown\Etsy\Transformer\ListingPropertyValuesTransformer;
use ChristianBrown\Etsy\Transformer\ListingPropertyValueTransformer;
use ChristianBrown\Etsy\Transformer\MoneyTransformer;
use ChristianBrown\Etsy\Transformer\ReceiptPageTransformer;
use ChristianBrown\Etsy\Transformer\ReceiptsTransformer;
use ChristianBrown\Etsy\Transformer\ReceiptTransformer;
use ChristianBrown\Etsy\Transformer\RefundsTransformer;
use ChristianBrown\Etsy\Transformer\RefundTransformer;
use ChristianBrown\Etsy\Transformer\ShipmentsTransformer;
use ChristianBrown\Etsy\Transformer\ShipmentTransformer;
use ChristianBrown\Etsy\Transformer\TransactionsTransformer;
use ChristianBrown\Etsy\Transformer\TransactionTransformer;
use ChristianBrown\Etsy\Transformer\TransactionVariationsTransformer;
use ChristianBrown\Etsy\Transformer\TransactionVariationTransformer;
use ChristianBrown\Etsy\Http\FormValueEncoder;
use ChristianBrown\KeyValueStore\MemoryKeyValueStore;
use ChristianBrown\OAuth2Client\Authentication\PublicClientAuthentication;
use ChristianBrown\OAuth2Client\Lock\NullLock;
use ChristianBrown\OAuth2Client\RefreshTokenManagerFactory;
use Symfony\Component\Clock\NativeClock;

$shopId = 12345678;
$keystring = 'your-app-keystring';
$sharedSecret = 'your-app-shared-secret';

$accessTokenStore = new MemoryKeyValueStore(new NativeClock());
$refreshTokenStore = new MemoryKeyValueStore(new NativeClock());
$refreshTokenStore->setValue('your-seed-refresh-token');

// Shared JSON request sender (wires Guzzle for you).
$requestSender = (new ApiClientFactory(new ClientOptions()))->create()->getJsonApiRequestSender();

// OAuth2 refresh machinery → a two-header credential (x-api-key + Bearer token).
$refreshTokenManager = (new RefreshTokenManagerFactory(new NativeClock()))->create(
    $requestSender,
    $accessTokenStore,
    $refreshTokenStore,
    'https://api.etsy.com/v3/public/oauth/token',
    new PublicClientAuthentication(),
    new NullLock()
);
$credentials = new Credentials($refreshTokenManager, $keystring, $sharedSecret);

// Receipt transformer chain. The single Money transformer is shared across every
// money field; the singular Receipt transformer is wrapped by ReceiptsTransformer
// for the list endpoint (and by ReceiptPageTransformer for getPage()) and used
// directly for getOneById().
$moneyTransformer = new MoneyTransformer();

$transactionTransformer = new TransactionTransformer(
    $moneyTransformer,
    new TransactionVariationsTransformer(new TransactionVariationTransformer()),
    new ListingPropertyValuesTransformer(new ListingPropertyValueTransformer())
);

$receiptTransformer = new ReceiptTransformer(
    $moneyTransformer,
    new TransactionsTransformer($transactionTransformer),
    new RefundsTransformer(new RefundTransformer($moneyTransformer)),
    new ShipmentsTransformer(new ShipmentTransformer())
);

$receiptsTransformer = new ReceiptsTransformer($receiptTransformer);

// Write-side serializers for createReceiptShipment()/updateShopReceipt().
$createReceiptShipmentRequestSerializer = new CreateReceiptShipmentRequestSerializer(
    new ReceiptShipmentCustomsItemRequestsSerializer(new ReceiptShipmentCustomsItemRequestSerializer())
);
$updateShopReceiptRequestSerializer = new UpdateShopReceiptRequestSerializer(new FormValueEncoder());

$shopReceiptApi = new ShopReceiptApi(
    $requestSender,
    $receiptTransformer,
    $receiptsTransformer,
    new ReceiptPageTransformer($receiptsTransformer),
    $createReceiptShipmentRequestSerializer,
    $updateShopReceiptRequestSerializer,
    new ResponseCache(), // getMultiple()
    new ResponseCache(), // getPage()
    new ResponseCache(), // getOneById()
    $credentials,
    $shopId
);