nimfus / laravel-shopify
Laravel shopify package
Requires
- php: >=7.0.0
- guzzlehttp/guzzle: ^6.2
- illuminate/support: ^7.0
README
Laravel Shopify is a simple package which helps to build robust integration into Shopify.
Installation
Add package to composer.json
composer require oseintow/laravel-shopify
Laravel 5.5+
Package auto discovery will take care of setting up the alias and facade for you
Laravel 5.4 <
Add the service provider to config/app.php in the providers array.
<?php 'providers' => [ ... Oseintow\Shopify\ShopifyServiceProvider::class, ],
Setup alias for the Facade
<?php 'aliases' => [ ... 'Shopify' => Oseintow\Shopify\Facades\Shopify::class, ],
Configuration
Laravel Shopify requires connection configuration. You will need to publish vendor assets
php artisan vendor:publish
This will create a shopify.php file in the config directory. You will need to set your API_KEY and SECRET
Usage
To install/integrate a shop you will need to initiate an oauth authentication with the shopify API and this require three components.
They are:
1. Shop URL (eg. example.myshopify.com)
2. Scope (eg. write_products, read_orders, etc)
3. Redirect URL (eg. http://mydomain.com/process_oauth_result)
This process will enable us to obtain the shops access token
use Oseintow\Shopify\Facades\Shopify; Route::get("install_shop",function() { $shopUrl = "example.myshopify.com"; $scope = ["write_products","read_orders"]; $redirectUrl = "http://mydomain.com/process_oauth_result"; $shopify = Shopify::setShopUrl($shopUrl); return redirect()->to($shopify->getAuthorizeUrl($scope,$redirectUrl)); });
Let's retrieve access token
Route::get("process_oauth_result",function(\Illuminate\Http\Request $request) { $shopUrl = "example.myshopify.com"; $accessToken = Shopify::setShopUrl($shopUrl)->getAccessToken($request->code); dd($accessToken); // redirect to success page or billing etc. });
To verify request(hmac)
public function verifyRequest(Request $request) { $queryString = $request->getQueryString(); if(Shopify::verifyRequest($queryString)){ logger("verification passed"); }else{ logger("verification failed"); } }
To verify webhook(hmac)
public function verifyWebhook(Request $request) { $data = $request->getContent(); $hmacHeader = $request->server('HTTP_X_SHOPIFY_HMAC_SHA256'); if (Shopify::verifyWebHook($data, $hmacHeader)) { logger("verification passed"); } else { logger("verification failed"); } }
To access API resource use
Shopify::get("resource uri", ["query string params"]); Shopify::post("resource uri", ["post body"]); Shopify::put("resource uri", ["put body"]); Shopify::delete("resource uri");
Let use our access token to get products from shopify.
NB: You can use this to access any resource on shopify (be it Product, Shop, Order, etc)
$shopUrl = "example.myshopify.com"; $accessToken = "xxxxxxxxxxxxxxxxxxxxx"; $products = Shopify::setShopUrl($shopUrl)->setAccessToken($accessToken)->get("admin/products.json");
To pass query params
// returns Collection $shopify = Shopify::setShopUrl($shopUrl)->setAccessToken($accessToken); $products = $shopify->get("admin/products.json", ["limit"=>20, "page" => 1]);
Controller Example
If you prefer to use dependency injection over facades like me, then you can inject the Class:
use Illuminate\Http\Request; use Oseintow\Shopify\Shopify; class Foo { protected $shopify; public function __construct(Shopify $shopify) { $this->shopify = $shopify; } /* * returns Collection */ public function getProducts(Request $request) { $products = $this->shopify->setShopUrl($shopUrl) ->setAccessToken($accessToken) ->get('admin/products.json'); $products->each(function($product){ \Log::info($product->title); }); } }
Miscellaneous
To get Response headers
Shopify::getHeaders();
To get specific header
Shopify::getHeader("Content-Type");
Check if header exist
if(Shopify::hasHeader("Content-Type")){ echo "Yes header exist"; }
To get response status code or status message
Shopify::getStatusCode(); // 200 Shopify::getReasonPhrase(); // ok