jacobdekeizer / ccvshop-client
CCV shop API client for PHP
Installs: 29 907
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 2
Forks: 5
Open Issues: 0
Requires
- php: ^8.0
- ext-ctype: *
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ^6.5|^7.0
Requires (Dev)
- doctrine/inflector: ^2.0
- squizlabs/php_codesniffer: ^3.5
- symfony/css-selector: ^5.3
- symfony/dom-crawler: ^5.3
README
An object oriented PHP client for the CCV Shop API. See here for the CCV Shop API documentation.
Contributing
Any help is appreciated, see contributing for more information. The models and endpoints are automatically generated.
Installation
You can install this package via composer:
composer require jacobdekeizer/ccvshop-client
Usage
This readme shows basic usage of this package, for all available options see the class definitions and the api documentation.
Create the client
$client = new \JacobDeKeizer\Ccv\Client(); $client->setBaseUrl('https://demo.ccvshop.nl'); $client->setPublicKey('public_key'); $client->setPrivateKey('private_key');
Documented endpoints
Root endpoint
This endpoint returns the supported endpoints for your CCV Shop API keys.
$result = $client->root()->all(); foreach ($result->getItems() as $item) { var_dump($item); }
Apps
Get all apps in a certain store category
You can optionally filter, expand or sort.
In the example below, we're filtering by name, expanding categories and sorting by date.
$parameters = (new \JacobDeKeizer\Ccv\Parameters\Apps\AllFromAppstorecategory()) ->setName('FooBar') ->expandCategories() ->orderByDateAsc(); $apps = $client->apps()->allFromAppstorecategory(11, $parameters); foreach ($apps->getItems() as $app) { var_dump($app->getName()); }
Get all apps
This will get all apps associated with the current public and private key.
You can use the \JacobDeKeizer\Ccv\Parameters\Apps\All
parameter to filter the results, like above.
$apps = $client->apps()->all(); foreach ($apps->getItems() as $app) { var_dump($app->getName()); }
Get an app
$app = $client->apps()->get(123456); var_dump($app->getName());
Update an app
For example set the app to installed
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Apps\Patch\Patch()) ->setIsInstalled(true); $client->apps()->update(12345, $patch);
Attributes
Get attribute
$client->attributes()->get(1234);
Get all attributes
$client->attributes()->all();
Get all attribute combinations
$client->attributes()->allFromAttributecombination(1234);
Create attribute
$attribute = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Attributes\Input\Input()) ->setName('Foo') ->setType('option_menu_required'); $client->attributes()->create($attribute);
Update attribute
$attribute = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Attributes\Input\Input()) ->setName('Foo') ->setType('option_menu_required'); $client->attributes()->update(1234, $attribute);
Delete attribute
$client->attributes()->delete(1234);
Attribute values
Get attribute values
$client->attributevalues()->get(1234);
Get all attribute values for attribute
$client->attributevalues()->allFromAttribute(1234);
Get all attribute values for combination
$client->attributevalues()->allFromAttributecombination(1234);
Create attribute value
$create = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Attributevalues\Post\Post()) ->setName('Bar') ->setDefaultPrice(0); $client->attributevalues()->createForAttribute(1234, $create);
Update attribute value
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Attributevalues\Patch\Patch()) ->setName('Bar') ->setDefaultPrice(0); $client->attributevalues()->update(1234, $patch);
Delete attribute values
$client->attributevalues()->delete(1234);
Categories
Get all child categories of a category
$categories = $client->categories()->allFromCategory(1);
Get all categories
$parameter = (new \JacobDeKeizer\Ccv\Parameters\Categories\All) ->setSize(10); // optional $categories = $client->categories()->all($parameter); $nextParameter = \JacobDeKeizer\Ccv\Parameters\Categories\All::fromUrl($categories->getNext());
Get category
$category = $client->categories()->get(1); $category->getId(); $category->getName(); $category->getDescription();
Create category
$client->categories()->create( (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Categories\Post\Post()) ->setName('foo bar') );
Update category
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Categories\Patch\Patch()) ->setName('foo bar'); $client->categories()->update(1, $patch);
Delete category
$client->categories()->delete(12345);
Invoices
Get all invoices
Get all invoices between 2020-01-01 and 2020-01-31
// see the code and documentation for all available methods $getInvoicesParameter = (new \JacobDeKeizer\Ccv\Parameters\Invoices\All) ->setMinCreateDate('2020-01-01') ->setMaxCreateDate('2020-01-31'); $invoices = $client->invoices()->all($getInvoicesParameter);
Get invoice
$invoice = $client->invoices()->get(123456);
Update invoice
$invoice = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Invoices\Input\Input()) ->setStatus(1); // ->set... $client->invoices()->update(123456, $invoice);
Create invoice
$invoice = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Invoices\Input\Input()) ->setStatus(2); //->set.. $client->invoices()->createForOrder(123, $invoice);
Orders
Get all orders with order rows
Get all open orders which are paid and completed
$getOrdersParameter = (new \JacobDeKeizer\Ccv\Parameters\Orders\All) ->setStatus(1) ->setIsPaid(true) ->setIsCompleted(true); do { $orders = $client->orders()->all($getOrdersParameter); foreach ($orders->getItems() as $order) { // see the code and documentation for all available methods var_dump($order); $order->getUser()->getId(); $order->getCustomer()->getBillingaddress()->getStreet(); $order->getCustomer()->getBillingaddress()->getHousenumber(); $order->getCustomer()->getBillingaddress()->getHousenumberSuffix(); $order->getCustomer()->getBillingaddress()->getZipcode(); $order->getCustomer()->getBillingaddress()->getCity(); $order->getCustomer()->getDeliveryaddress()->getStreet(); $order->getCustomer()->getDeliveryaddress()->getHousenumber(); $order->getCustomer()->getDeliveryaddress()->getHousenumberSuffix(); $order->getCustomer()->getDeliveryaddress()->getZipcode(); $order->getCustomer()->getDeliveryaddress()->getCity(); $order->getCustomer()->getBillingaddress()->getFirstName(); $order->getCustomer()->getBillingaddress()->getLastName(); $order->getCustomer()->getBillingaddress()->getTelephone(); $order->getCustomer()->getEmail(); $orderRows = $client->orderrows()->allFromOrder($order->getId()); var_dump($orderRows); foreach ($orderRows->getItems() as $orderRow) { var_dump($orderRow); $orderRow->getId(); $orderRow->getCount(); $orderRow->getPrice(); $orderRow->getProductId(); $orderRow->getProductName(); $orderRow->getPriceWithoutDiscount(); $orderRow->getDiscount(); $orderRow->getStockLocation(); $orderRow->getWeight(); $orderRow->getSubEanNumber(); } } $getOrdersParameter = \JacobDeKeizer\Ccv\Parameters\Orders\All::fromUrl($orders->getNext()); } while($getOrdersParameter !== null);
Get order
// see the code and documentation for all available methods $order = $client->orders()->get(123456);
Update order
For example update the order status and the customer email
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Orders\Patch\Patch()) ->setStatus(6) ->setCustomer( (new \JacobDeKeizer\Ccv\Models\Internal\Entity\Personalinfo\Input\Input()) ->setEmail('example@example.com') ); // ->set... $client->orders()->update(123456, $patch);
Create order
$order = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Orders\Post\Post()) ->setInvoicenumber(123456); //->set.. $client->orders()->create($order);
Order rows
Get all order rows of an order
$orderId = 123456; $parameter = (new \JacobDeKeizer\Ccv\Parameters\OrderRows\AllFromOrder()) // optional parameter ->setStart(10); $orderRows = $client->orderrows()->allFromOrder($orderId, $parameter); $nextParameter = \JacobDeKeizer\Ccv\Parameters\OrderRows\AllFromOrder::fromUrl($orderRows->getNext());
Get order row
$orderRow = $client->orderrows()->get(336401521);
Update order row
Order must not be completed to update orderrows
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Orderrows\Patch\Patch()) ->setCount(1) ->setDiscount(20) ->setPrice(100); $client->orderrows()->update(123456, $patch);
Replace order rows of order
$orderId = 123456; $newOrderrows = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Orderrows\Put\Put()) ->setOrderrows( (new \JacobDeKeizer\Ccv\Models\Internal\Entity\Orderrow\Input\Input) ->setProductId(12345) ->setCount(1) ->setPrice(100) ->setDiscount(20) // ->set.. ); $client->orderrows()->updateForOrder($orderId, $newOrderrows);
Order notes
Order notes are for internal use only; they will not be seen by customers.
Get all order notes for order
$notes = $client->ordernotes()->allFromOrder(123);
Get order note
$note = $client->ordernotes()->get(123456);
Create order note
$ordernote = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Ordernotes\Post\Post()) ->setNote('this note will not be seen by the customer'); $client->ordernotes()->createForOrder(123, $ordernote);
Delete order note
$client->ordernotes()->delete(123456);
Order notifications
Get all order notifications for order
$notifications = $client->ordernotifications()->allFromOrder(123);
Get order notification
$notification = $client->ordernotifications()->get(123456);
Create order notification
$ordernotification = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Ordernotifications\Input\Input()) ->setType('customer_paymentlink'); $client->ordernotifications()->createForOrder(123, $ordernotification);
Packages
Get all packages
$packages = $client->packages()->all();
Get package
$package = $client->packages()->get(12345);
Create package
$client->packages()->create( (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Packages\Input\Input()) ->setName('foobar') );
Update package
$input = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Packages\Input\Input()) ->setName('baz boo'); $client->packages()->update(12345, $input);
Products
All products
// parameter is optional $getProductsParameter = (new \JacobDeKeizer\Ccv\Parameters\Products\All) ->setMinStock(5) ->expandProductPhotos() ->orderByIdAsc(); $products = $client->products()->all($getProductsParameter); foreach ($products->getItems() as $product) { // see the code and documentation for all available methods var_dump($product); $product->getId(); $product->getStock(); $product->getDiscount(); $product->getWeight(); $product->getPrice(); $product->getBrand()->getId(); $product->getEannumber(); $product->getVatrate(); // ... } $nextRequest = \JacobDeKeizer\Ccv\Parameters\Products\All::fromUrl($products->getNext());
All products from brand
$products = $client->products()->allFromBrand(1234);
All products from webshop
$products = $client->products()->allFromWebshop(1234);
All products from category
$products = $client->products()->allFromCategory(1234);
All products from condition
$products = $client->products()->allFromCondition(1234);
All products from supplier
$products = $client->products()->allFromSupplier(1234);
Get product
$product = $client->products()->get(1234);
Update product
// see the code and documentation for all available methods $patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Products\Patch\Patch()) ->setDiscount(4.99) ->setPrice(100) ->setProductnumber('my_number') ->setActive(true) ->setDescription('This is a description') ->setEannumber('an ean number') ->setMetaKeywords('keyword') ->setStock(100) ->setUnit('piece') ->setWeight(5.5); $client->products()->update(1234, $patch); // or only update stock $client->products()->update( 1234, (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Products\Patch\Patch()) ->setStock(99) );
Create product
// see the code and documentation for all available methods $product = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Products\Post\Post()) ->setDiscount(4.99) ->setPrice(100) ->setProductnumber('my_number') ->setActive(true) ->setDescription('This is a description') ->setEannumber('an ean number') ->setMetaKeywords('keyword') ->setStock(100) ->setUnit('piece') ->setWeight(5.5); // ->set... $client->products()->create($product);
Delete product
$client->products()->delete(1234);
Product attribute values
Get product attribute value
$client->productattributevalues()->get(1234);
Get all product attribute values from a product
$client->productattributevalues()->allFromProduct(1234);
Create product attribute values
$post = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Productattributevalues\Post\Post()) ->setPrice(2); // ->set... $client->productattributevalues()->createForProduct(1234, $post);
Update product attribute values
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Productattributevalues\Patch\Patch()) ->setPrice(2); // ->set... $client->productattributevalues()->update(1234, $patch);
Delete product attribute value
$client->productattributevalues()->delete(1234);
Product photos
Get product photo
$client->productphotos()->get(1234);
Delete product photo
$client->productphotos()->delete(1234);
Get all photos for product
$client->productphotos()->allFromProduct(1234);
Update product photo
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Productphotos\Patch\Patch()) ->setAlttext('text') ->setIsMainphoto(true); $client->productphotos()->update(1234, $patch);
Create product photo
// see the code and documentation for all available methods $post = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Productphotos\Post\Post()) ->setSource(base64_encode(file_get_contents('photo.png'))) ->setFileType('png'); // ->set... $client->productphotos()->createForProduct(1234, $post);
Replace all product photos
// see the code and documentation for all available methods $productPhoto1 = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Productphotos\Post\Post()) ->setSource(base64_encode(file_get_contents('photo1.png'))) ->setFileType('png'); // ->set... $productPhoto2 = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Productphotos\Post\Post()) ->setSource(base64_encode(file_get_contents('photo2.jpg'))) ->setFileType('jpg'); // ->set... $put = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Productphotos\Put\Put) ->setProductphotos($productPhoto1, $productPhoto2); $client->productphotos()->updateForProduct(1234, $put);
Product categories
Create product to category reference
$post = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Producttocategories\Post\Post()) ->setProductId(123) ->setCategoryId(456) ->setPosition(null); $client->producttocategories()->create($post);
Get product to category reference
$client->producttocategories()->get(123);
Get product to category references by product
$client->producttocategories()->allFromProduct(123);
Get product to category references by category
$client->producttocategories()->allFromCategory(123);
Delete product to category by reference
$client->producttocategories()->delete(123);
Update product to category reference
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Producttocategories\Patch\Patch()) ->setPosition(1); $client->producttocategories()->update(123, $patch);
Create product to category reference
$post = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Producttocategories\Post\Post()) ->setProductId(123) ->setCategoryId(456) ->setPosition(null); $client->producttocategories()->create($post);
Get product to category reference
$client->producttocategories()->get(123);
Get product to category references by product
$client->producttocategories()->allFromProduct(123);
Get product to category references by category
$client->producttocategories()->allFromCategory(123);
Delete product to category by reference
$client->producttocategories()->delete(123);
Update product to category reference
$patch = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Producttocategories\Patch\Patch()) ->setPosition(1); $client->producttocategories()->update(123, $patch);
Suppliers
Get all suppliers
$suppliers = $client->suppliers()->all();
Get supplier
$supplier = $client->suppliers()->get(12345);
Create supplier
$client->suppliers()->create( (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Suppliers\Input\Input()) ->setName('foobar') );
Update supplier
$input = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Suppliers\Input\Input()) ->setName('bazboo'); $client->suppliers()->update(12345, $input);
Delete supplier
$client->suppliers()->delete(12345);
Webhooks
Get all webhooks
$parameter = (new \JacobDeKeizer\Ccv\Parameters\Webhooks\All()) ->setSize(10); // optional $webhooks = $client->webhooks()->all($parameter); $nextParameter = \JacobDeKeizer\Ccv\Parameters\Webhooks\All::fromUrl($webhooks->getNext());
Get a webhook
$webhook = $client->webhooks()->get(12345);
Create a webhook
$webhook = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Webhooks\Post\Post()) ->setEvent('foo.bar') ->setAddress('https://example.com/foo.bar') ->setIsActive(true); $createdWebhook = $client->webhooks()->create($webhook); var_dump($createdWebhook->getId());
Update a webhook
In this example, the webhook will be disabled.
$webhook = (new \JacobDeKeizer\Ccv\Models\Internal\Resource\Webhooks\Patch\Patch()) ->setIsActive(false); $client->webhooks()->update(12345, $webhook);
Delete a webhook
$client->webhooks()->delete(12345);