robby-bugatti / shopify-php-sdk
PHP SDK for Shopify API
Installs: 2 674
Dependents: 0
Suggesters: 0
Security: 0
Stars: 66
Watchers: 7
Forks: 41
Open Issues: 22
Requires
- php: >=7.2
- ext-curl: *
- ext-json: *
- guzzlehttp/guzzle: ^6.2 | ^7.2
- psr/log: ^1.0
Requires (Dev)
- overtrue/phplint: ^0.2.4
- phpunit/phpunit: ^5.1
- squizlabs/php_codesniffer: ^3.0
- dev-master
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.4
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.0
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-fix-composer-json
- dev-add-status-field-product
- dev-fix-webhooks-endpoints
- dev-move-create-service
- dev-fix-graphql-service
- dev-add-service-helpers
- dev-add-attachment-to-product-image
- dev-fix-shop-url
- dev-fix-api-version-url
- dev-fix-api-version
- dev-add-price-rule-service
This package is auto-updated.
Last update: 2024-11-21 19:48:59 UTC
README
Shopify PHP SDK
This SDK was created to enable rapid efficient development using Shopify's API.
Installation
Easily install this package with composer
composer require robwittman/shopify-php-sdk
Before you can start using this SDK, you have to create a Shopify Application You can now use the API key and secret to generate access tokens, which can then access a stores data
Initialization
To initialize the Api Client:
$client = new Shopify\Api(array( 'api_key' => '<api_key>', 'api_secret' => '<api_secret>', 'myshopify_domain' => 'store.myshopify.com', 'access_token' => '<store_access_token>' ));
If you are using a Private App for use on an individual store:
$client = new Shopify\PrivateApi(array( 'api_key' => '<api-key>', 'password' => '<password>', 'shared_secret' => '<shared-secret>', 'myshopify_domain' => '<store>.myshopify.com' ));
Once the client is initialized, you can then create a service, and use it to communicate with the api
Reading
$service = new Shopify\Service\ProductService($client); $service->all(); #Fetch all products, with optional params $service->get($productId); # Get a single product $service->count(); # Count the resources
Creating
$service = new Shopify\Service\ProductService($client); $product = new Shopify\Object\Product(); # Set some product fields $product->title = 'Test Product'; $product->vendor = 'Printer'; $service->create($product);
Updating
$service = new Shopify\Service\ProductService($client); $product = $service->get($productId); # Set some product fields $product->title = 'Test Product'; $product->vendor = 'Printer'; $service->update($product);
Deleting
$service = new Shopify\Service\ProductService($client); $service->delete($productId);
GraphQL
Query
$service = new Shopify\Service\GraphQLService($client); $service->graph( '{ products(query: "created_at:<2019", first: 5) { edges { node { title description } } } }' );
Mutation
$service = new Shopify\Service\GraphQLService($client); $service->graph( 'mutation productCreate($input: ProductInput!){ productCreate(input: $input) { product { id } } }', ['input' => ['title' => 'Sweet new product','productType' => 'Snowboard','vendor' => 'JadedPixel']] );
Authentication
Authentication to Shopify's API is done through access tokens, which are obtained through OAuth. To get a token, there is a helper library packaged with this client
$client = new Shopify\Api($params); $helper = $client->getOAuthHelper(); $redirectUri = 'https://localhost/install.php'; $scopes = 'write_products,read_orders,...'; $authorizationUrl = $helper->getAuthorizationUrl($redirectUri, $scopes); header("Location: {$authorizationUrl}");
At your redirect_uri
, instantiate the helper again to get an access token
$client = new Shopify\Api($params); $helper = $client->getOAuthHelper(); $token = $helper->getAccessToken($code); echo $token->access_token; echo $token->scopes;
By default, this uses simple session storage. You can implement a custom class that implements PersistentStorageInterface
,
pass that to new Shopify\Api()
, and OAuthHelper
will use that instead. This will be required if authorization requests and
redirects may be directed to different servers.
Using objects
Object properties can be accessed using object->property
. Nested objects are instantiated classes. All timestamp fields are instances of \DateTime
.
use Shopify\Enum\Fields\ProductFields; use Shopify\Enum\Fields\ProductVariantFields; $product = $service->get($productId); echo $product->created_at->format('Y-m-d H:i:s'); echo $product->title; foreach ($product->variants as $variant) { echo $variant->option1; echo $variant->option2; }