Skip to content

Commit 2efb5e7

Browse files
author
rupam
committed
verify by signature
1 parent ec73064 commit 2efb5e7

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/Shopify/AuthServiceProvider.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ public function boot()
5151
$object->username() => $myshopify_domain
5252
]);
5353
}
54-
} elseif ($request->has('shop') && $request->has('hmac')) {
55-
if (Shopify::verifyRequest($request->all())) {
54+
} elseif ($request->has('shop') && ($request->has('hmac') || $request->has('signature'))) {
55+
if (Shopify::verifyRequest($request->all()) || Shopify::verifySignature($request->all())) {
5656
$shop = $user_provider->retrieveByCredentials([
5757
$object->username() => $request->shop
5858
]);

src/Shopify/Shopify.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,35 @@ public function verifyRequest($queryParams)
340340
return hash_equals($hmac, $calculatedHmac);
341341
}
342342

343+
public function verifySignature($queryParams) : bool
344+
{
345+
if (is_string($queryParams)) {
346+
$data = [];
347+
348+
$queryParams = explode('&', $queryParams);
349+
foreach ($queryParams as $queryParam) {
350+
list($key, $value) = explode('=', $queryParam);
351+
$data[$key] = urldecode($value);
352+
}
353+
354+
$queryParams = $data;
355+
}
356+
357+
$hmac = $queryParams['signature'] ?? '';
358+
359+
unset($queryParams['signature']);
360+
361+
ksort($queryParams);
362+
363+
$query = urldecode(http_build_query($queryParams));
364+
365+
$params = str_replace('&', '', $query);
366+
367+
$calculatedHmac = hash_hmac('sha256', $params, self::getSecret());
368+
369+
return hash_equals($hmac, $calculatedHmac);
370+
}
371+
343372
public function verifyWebHook($data, $hmacHeader) : bool
344373
{
345374
$calculatedHmac = base64_encode(hash_hmac('sha256', $data, self::getSecret(), true));

0 commit comments

Comments
 (0)