Skip to content

Commit 104ee53

Browse files
author
Tyler King
committed
Modified ApiHelper's shop finding method to support null instances
1 parent 135a400 commit 104ee53

File tree

2 files changed

+35
-26
lines changed

2 files changed

+35
-26
lines changed

src/ShopifyApp/Http/Middleware/AuthShopify.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Closure;
66
use Illuminate\Http\RedirectResponse;
77
use Illuminate\Http\Request;
8+
use Illuminate\Support\Arr;
89
use Illuminate\Support\Facades\Redirect;
910
use Illuminate\Support\Facades\Session;
1011
use Osiset\ShopifyApp\Contracts\ApiHelper as IApiHelper;
@@ -252,11 +253,7 @@ private function getShopDomainFromRequest(Request $request): ShopDomainValue
252253
DataSource::REFERER()->toNative() => function () use ($request): ?string {
253254
$url = parse_url($request->header('referer'), PHP_URL_QUERY);
254255
parse_str($url, $refererQueryParams);
255-
if (! $refererQueryParams || ! isset($refererQueryParams['shop'])) {
256-
return null;
257-
}
258-
259-
return $refererQueryParams['shop'];
256+
return Arr::get($refererQueryParams, 'shop');
260257
},
261258
];
262259

src/ShopifyApp/Services/ApiHelper.php

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
use Osiset\ShopifyApp\Objects\Enums\ApiMethod;
1919
use Osiset\ShopifyApp\Objects\Enums\AuthMode;
2020
use Osiset\ShopifyApp\Objects\Enums\ChargeType;
21+
use Osiset\ShopifyApp\Objects\Enums\DataSource;
2122
use Osiset\ShopifyApp\Objects\Transfers\PlanDetails as PlanDetailsTransfer;
2223
use Osiset\ShopifyApp\Objects\Transfers\UsageChargeDetails as UsageChargeDetailsTransfer;
2324
use Osiset\ShopifyApp\Objects\Values\ChargeReference;
24-
use Osiset\ShopifyApp\Objects\Values\ShopDomain;
25+
use Osiset\ShopifyApp\Objects\Values\NullableShopDomain;
2526

2627
/**
2728
* Basic helper class for API calls to Shopify.
@@ -43,7 +44,7 @@ public function make(Session $session = null): self
4344
// Create the options
4445
$opts = new Options();
4546

46-
$shop = $this->getShop($session)->toNative();
47+
$shop = $this->getShopDomain($session)->toNative();
4748
$opts->setApiKey(getShopifyConfig('api_key', $shop));
4849
$opts->setApiSecret(getShopifyConfig('api_secret', $shop));
4950
$opts->setVersion(getShopifyConfig('api_version', $shop));
@@ -473,31 +474,42 @@ protected function doRequestGraphQL(string $query, array $payload = null)
473474
}
474475

475476
/**
476-
* @param Session $session
477-
* @throws \InvalidArgumentException
478-
* @return ShopDomain
477+
* Find shop from session or request.
478+
*
479+
* @param Session $session
480+
*
481+
* @return NullableShopDomain
479482
*/
480-
private function getShop(Session $session = null)
483+
private function getShopDomain(Session $session = null): NullableShopDomain
481484
{
482-
$shop = '';
485+
// Check for existing session passed in
483486
if ($session && $session->getShop()) {
484-
$shop = $session->getShop();
487+
return NullableShopDomain::fromNative($session->getShop());
485488
}
486489

487-
if (! $shop) {
488-
$shop = Arr::get(Request::all(), 'shop');
489-
}
490-
491-
if (! $shop) {
492-
$refererQueryParams = [];
493-
parse_str(Request::server('HTTP_REFERER'), $refererQueryParams);
494-
$shop = Arr::get($refererQueryParams, 'shop');
495-
}
496-
497-
if (! $shop) {
498-
$shop = Request::header('X-Shop-Domain');
490+
$options = [
491+
// Input
492+
DataSource::INPUT()->toNative() => function (): ?string {
493+
return Arr::get(Request::all(), 'shop');
494+
},
495+
// Headers
496+
DataSource::HEADER()->toNative() => function (): ?string {
497+
return Request::header('X-Shop-Domain');
498+
},
499+
// Headers: Referer
500+
DataSource::REFERER()->toNative() => function (): ?string {
501+
$url = parse_url(Request::server('HTTP_REFERER'), PHP_URL_QUERY);
502+
parse_str($url, $refererQueryParams);
503+
return Arr::get($refererQueryParams, 'shop');
504+
}
505+
];
506+
foreach ($options as $method => $fn) {
507+
$result = $fn();
508+
if (!is_null($result)) {
509+
return NullableShopDomain::fromNative($result);
510+
}
499511
}
500512

501-
return is_a($shop, 'Osiset\ShopifyApp\Objects\Values\ShopDomain') ? $shop : ShopDomain::fromNative((string) $shop);
513+
return NullableShopDomain::fromNative(null);
502514
}
503515
}

0 commit comments

Comments
 (0)