Shopware PHP SDK is a simple SDK implementation of Shopware 6 APIs. It helps to access the API in an object-oriented way.
If you're familiar with Shopware 6 DAL syntax and how to retrieve it you might see this example is predictable and straightforward
Install with Composer
composer require vin-sw/shopware-sdk
-
Admin API
- CRUD API
- Sync Api
- Other services
- ... (TODO)
-
Webhook helper
- Webhook registration
- Webhook authentication
- Webhook receiver
-
If you're using Laravel 8, consider check this out Laravel Shopware SDK Adapter
More in the examples folder, for integrating the sdk in an App, have a look at this repository
- Supported 3 grant types, you can create one of these 3 grant type for authentication:
Using Password grant type
$grantType = new PasswordGrantType($username, $password);
Using Client credential grant type
$grantType = new ClientCredentialsGrantType($clientId, $clientSecret);
Using Refresh token grant type
$grantType = new RefreshTokenGrantType($refreshToken);
Or dynamically via
$grantType = GrantType::createFromConfig($config);
Check the authentication example for the reference.
After having a GrantType object, you can fetch the admin's access token using the AdminAuthenticator
$adminClient = new AdminAuthenticator($grantType, $shopUrl);
$accessToken = $adminClient->fetchAccessToken();
$context = new Context($shopUrl, $accessToken);
Notice: You might want to store the access token object into the database so you can create the object without request for another access token for every Admin API request.
It's pretty identical to what you expected when working with Shopware's core or repositories in the SW administration.
This is an example to retrieve a product that have free shipping
// Create the repository for the entity
$productRepository = RepositoryFactory::create(ProductDefinition::ENTITY_NAME);
// Create the criteria
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('shippingFree', true));
// Using this criteria and the context object that you create from authentication step, you can retrieving the result
$products = $productRepository->search($criteria, $context);
Each shopware's entity is mapped into Entity and Collection Classes which can be found in Data/Entity so you can easily access their properties when retrieving data from Admin API.
Support methods get
, search
, searchIds
, create
, update
, delete
, syncDeleted
, createVersion
, mergeVersion
, deleteVersion
, clone
, schema
.
Each method requires a Context object
Check examples/entity-repository.php for some useful references.
The example took from a Laravel route action, but it can be the same in other frameworks
public function register(ShopRepository $repository): RegistrationResponse
{
$authenticator = new WebhookAuthenticator();
$app = new App(config('sas_app.app_name'), config('sas_app.app_secret'));
$response = $authenticator->register($app);
// Save the response the database...
$repository->createShop($response->getShop());
$confirmationUrl = route('sas.app.auth.confirmation');
return new RegistrationResponse($response, $confirmationUrl);
}
public function confirm(Request $request, ShopRepository $shopRepository): Response
{
$shopId = $request->request->get('shopId');
$shopSecret = $shopRepository->getSecretByShopId($shopId);
if (!WebhookAuthenticator::authenticatePostRequest($shopSecret)) {
return new Response(null, 401);
}
$shopRepository->updateAccessKeysForShop(
$shopId,
$request->request->get('apiKey'),
$request->request->get('secretKey')
);
return new Response();
}
When receive a POST request from an action button, you can return one of these ActionResponse (PSR-7 Response) classes ported from Shopware's core
namespace Vin\ShopwareSdk\Data\Response;
/**
* @see Shopware\Core\Framework\App\ActionButton
*/
new EmptyResponse();
new ReloadDataResponse($shopSecret);
new OpenNewTabResponse($shopSecret, 'http://shopware.test');
new NotificationResponse($shopSecret, 'Success!', NotificationResponse::SUCCESS);
new NotificationResponse($shopSecret, 'Error!', NotificationResponse::ERROR);
new OpenModalResponse($shopSecret, $iframeUrl, OpenModalResponse::LARGE_SIZE, true);
- Current supported services:
- InfoService
- UserService
- StateMachineService
- SyncService
- For other services that does not have a concrete class, use: AdminActionService
An ApiService requires a Context object as its first argument. Check examples/sync-service.php or examples/info-service.php for some references.
Please see CHANGELOG for more information on what has changed recently.
- Check the integration on our AppExample
Feels free to create an issue on Github issues page or contact me directly at levienthuong@gmail.com
If you discover any security related issues, please email levienthuong@gmail.com instead of using the issue tracker.
- ext-curl
- PHP 7.4
- SW >= 6.4
This SDK is mainly dedicated to Shopware 6.4 and onwards, earlier SW application may still be usable without test
The MIT License (MIT). Please see License File for more information.