woothemes/woocommerce-api
PHP client wrapper for the WooCommerce REST API. Create a WC_API_Client with your store URL and API keys to fetch the API index, list/filter orders, and retrieve single orders. Supports debug output, array responses, timeouts, URL validation, and exceptions with request/response details.
composer require woothemes/woocommerce-api
use WC_API_Client;
$client = new WC_API_Client(
env('WOOCOMMERCE_STORE_URL'),
env('WOOCOMMERCE_CONSUMER_KEY'),
env('WOOCOMMERCE_CONSUMER_SECRET'),
['ssl_verify' => false, 'debug' => env('APP_DEBUG')]
);
Store credentials in .env:
WOOCOMMERCE_STORE_URL=https://your-store.com
WOOCOMMERCE_CONSUMER_KEY=ck_your_key
WOOCOMMERCE_CONSUMER_SECRET=cs_your_secret
// Get all orders (returns stdClass by default)
$orders = $client->orders->get();
// Get a single order
$order = $client->orders->get(123);
// Filter orders (e.g., completed status)
$completedOrders = $client->orders->get(null, ['status' => 'completed']);
// Return as associative array
$client->set_return_as_array(true);
$ordersArray = $client->orders->get();
$orderData = [
'payment_method' => 'bacs',
'payment_method_title' => 'Direct Bank Transfer',
'set_paid' => true,
'billing' => [
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john@example.com',
],
'line_items' => [
[
'product_id' => 123,
'quantity' => 2,
],
],
];
$newOrder = $client->orders->create($orderData);
$client->orders->update(123, ['status' => 'processing']);
$client->orders->update(123, ['status' => 'cancelled']);
$products = $client->products->get();
$featuredProducts = $client->products->get(null, ['featured' => true]);
$productData = [
'name' => 'Premium Widget',
'type' => 'simple',
'regular_price' => '29.99',
'description' => 'A high-quality widget.',
'categories' => [['id' => 5]],
];
$newProduct = $client->products->create($productData);
$customResponse = $client->get('reports/top_sellers', ['period' => 'month']);
use Illuminate\Http\Request;
public function handle(Request $request, Closure $next) {
$signature = $request->header('X-WC-Webhook-Signature');
$payload = $request->getContent();
$secret = env('WOOCOMMERCE_WEBHOOK_SECRET');
if (!hash_equals($signature, hash_hmac('sha256', $payload, $secret))) {
abort(401, 'Invalid webhook signature');
}
return $next($request);
}
$orderIds = [123, 456, 789];
foreach ($orderIds as $id) {
$client->orders->update($id, ['status' => 'completed']);
}
Register the client as a singleton in AppServiceProvider:
public function register() {
$this->app->singleton('woocommerce', function ($app) {
return new WC_API_Client(
env('WOOCOMMERCE_STORE_URL'),
env('WOOCOMMERCE_CONSUMER_KEY'),
env('WOOCOMMERCE_CONSUMER_SECRET'),
['ssl_verify' => false, 'debug' => env('APP_DEBUG')]
);
});
}
$cacheKey = 'woocommerce_orders_' . $status;
$orders = Cache::remember($cacheKey, now()->addMinutes(1), function () use ($client, $status) {
return $client->orders->get(null, ['status' => $status]);
});
Mockery):
$mockClient = Mockery::mock('overload:WC_API_Client');
$mockClient->shouldReceive('orders->get')->andReturn(['data' => 'mocked']);
SSL Verification:
ssl_verify (e.g., for local testing) is not recommended for production. Use a valid SSL certificate or configure your CA bundle:
$options = [
'ssl_verify' => true,
'cafile' => '/path/to/cacert.pem',
];
API Versioning:
Pagination:
page and per_page parameters manually:
$client->orders->get(null, ['page' => 2, 'per_page' => 10]);
Debugging:
debug: true to log requests/responses, but disable in production for security:
$client = new WC_API_Client(..., ['debug' => true]);
Timeouts:
$client = new WC_API_Client(..., ['timeout' => 60]);
Webhook Delays:
Data Types:
"2023-10-01T12:00:00"). Parse with Carbon:
$orderDate = Carbon::parse($order->date_created);
Error Handling:
try-catch blocks:
try {
$order = $client->orders->get(123);
} catch (WC_API_Client_HTTP_Exception $e) {
Log::error('WooCommerce API Error: ' . $e->getMessage());
abort(500, 'Failed to fetch order');
}
Use return_as_array:
return_as_array: true for easier JSON/API response handling:
$client->set_return_as_array(true);
$order = $client->orders->get(123); // Now an associative array
Leverage get() for Custom Endpoints:
$reports = $client->get('reports/top_sellers', ['period' => 'year']);
Cache API Responses:
Cache::remember('woocommerce_products', now()->addHours(1), function () {
return $client->products->get();
});
Batch Processing:
$perPage = 100;
$page = 1;
do {
$orders = $client->orders->get(null, [
'page' => $page,
'per_page' => $perPage,
]);
// Process $orders
$page++;
} while (!empty($orders));
Webhook Testing:
ngrok http 8000
How can I help you explore Laravel packages today?