繁体   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