you can initialize these clients once, wherever you have access to the current $shop, and bind them in the application container. example:
$shop = Shop::query()->findOrFail($shop_id);
// if you have an interface for this class you can bind the interface instead
app()->bind(MyShopifyClient::class, MyShopifyClient::makeForShop($shop));
// or singleton to use the same instance in every call
// than you can dependency inject your class everywhere the container is used to resolve dependencies, like controllers, jobs, events, etc.
class ShopController
{
public function show(Request $request, MyShopifyClient $client)
....
// or get the instance out of the container yourself
class ShopService
{
public function __constuct()
{
$this->client = app(MyShopifyClient::class);
...