簡體   English   中英

shopify 嵌入式應用程序 hmac 驗證失敗 php

[英]shopify embedded app hmac verification failed php

嗨,shopify 大師我知道這個問題已經出現了一千次左右,我知道這一點是因為我已經閱讀了我能找到的每一條線索。

我的應用程序驗證工作正常,但現在我切換到嵌入式應用程序,我似乎無法驗證 hmac。

    //Remove hmac from hash comparison
    $hmac = $data['hmac'];
    unset($data['hmac']);

    //sort the values alphabetically
    ksort($data);
    $data = urldecode(http_build_query($data));

    $hash = hash_hmac('sha256', $data, $this->ci->get('settings')['shopify']['api_secret']);

這段代碼將不斷返回與 hmac shopify 發送給我的不同的哈希值,我猜編碼或轉義有問題,我已經嘗試了所有我能想到的方法(htmlspecialchars、urldecode、strreplace、doublecheck secret 等)。

urldecode 行之后的字符串如下所示:

locale=en&protocol= https://&shop=mystorehandle.myshopify.com&timestamp=1539901099

任何幫助將不勝感激,我想在我的應用程序上完成一些工作,但過去 3 個小時一直在試圖讓我的 hmac 與 shopify 的同步:(

我很安靜,確定我做對了,但不知道為什么它那時不起作用。

我買餡餅給誰先知道答案。

好吧...不要問我這是如何或為什么工作,但它確實如此。 2-3 小時后,我在黑暗中完全刺傷了它,它奏效了。 我很確定它只能工作,因為 Shopify 方面存在錯誤。

我的嵌入式應用程序按此順序輸入 GET params hmac/shop/timestamp/protocol/locale。

出於某種原因,構建 shop=[myshop]&timestamp=[timestamp] 的查詢字符串有效。

換句話說,我刪除了 hmac,但也刪除了協議和語言環境。

但是,使用此代碼,破壞了我的應用程序的 TEST 版本,該版本實際上在包含協議和語言環境的情況下運行良好。

我在這里唯一的結論是,hmac 是從 hmac 后面的 GET 參數派生出來的,它們是按字母順序排列的,當后面的參數不是這個順序時停止。

因此,如果 GET 參數是 hmac/shop/timestamp/protocol/locale - 使用商店和時間戳生成您的哈希字符串。

如果 GET 參數是 hmac/locale/protocol/shop/timestamp - 使用區域設置、協議、商店和時間戳生成您的哈希字符串。

這么奇怪。 真的很想知道這是否也適合你!

這是我的代碼:

parse_str($_SERVER['QUERY_STRING'], $queryStringArray);
$providedHmac = $_GET['hmac'];

unset($queryStringArray['hmac']);
$amp = '';
$i = 0;
foreach($queryStringArray as $key => $value)
{
    $keyFirstLetter = substr($key, 0, 1);
    if($i == 0 || $keyFirstLetter > $lastKeyFirstLetter)
    {
        $newQueryString .= $amp . $key . '=' . $value;
        $amp = '&';
    }
    $lastKeyFirstLetter = $keyFirstLetter;
    $i++;
}

$calculatedHmac = hash_hmac('sha256', $newQueryString, SHOPIFY_APP_SHARED_SECRET);

$hmacValid = false;
if($calculatedHmac == $providedHmac)
{
    $hmacValid = true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM