首页 > 解决方案 > Json 和 GraphQL 变量期望 String 是一个 Hash

问题描述

我第一次使用 GraphQL,据我所知,格式与 Json 相同。但我很难让它正常工作。我使用 PostMan 来确保我的查询是正确的。但是当从 Postman 获取它并尝试在 PHP 中运行它时,我遇到了无穷无尽的问题。

我最后一次尝试在这里查看另一篇文章,分别传递查询和变量但我不断得到的响应是:

{"errors":{"variables":"expected String to be a Hash"}}

我的代码:

 $query = <<<'JSON'
query ($first: Int, $sku: String)
{ productVariants(first: $first, query: $sku) {
    edges {
      node {
        title
        id
        sku
        product {
          title
        }
        inventoryItem {
          id
          inventoryLevels(first: 3) {
            edges {
              node {
                id
                available
                location {
                  id
                  name
                  address {
                    city
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
JSON;

            $variables = '{
  "first": 4,  
  "sku": "100560 OR 100559 OR 100558 OR 100557"
}';

curl_setopt_array($curl, array(
            CURLOPT_URL => "https://XXXXXXXXXXXXXXXXXXXXXXX.myshopify.com/admin/api/2020-04/graphql.json",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => $json,
            CURLOPT_HTTPHEADER => array(
                "Content-Type: application/json",
                "Cookie: __cfduid=d10b3b9586e13d4b79ffd43e3cdec77f21592474922"
            ),
        ));

        $response = curl_exec($curl);

我的格式错了吗?

这是 Postman 的原始副本:

query ($first: Int, $sku: String)
{ productVariants(first: $first, query: $sku) {
    edges {
      node {
        title
        id
        sku
        product {
          title
        }
        inventoryItem {
          id
          inventoryLevels(first: 3) {
            edges {
              node {
                id
                available
                location {
                  id
                  name
                  address {
                    city
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

变量:

{
  "first": 4,  
  "sku": "100560 OR 100559 OR 100558 OR 100557"
}

标签: phpjsongraphql

解决方案


很头疼之后。看起来它只需要在数组中格式化变量。

$variables = array(
    "first" => 4,
    "sku" => "100560 OR 100559 OR 100558 OR 9995565"
);

希望这可以帮助遇到同样错误的其他人。不知道为什么它说哈希,这样一个误导性的错误。


推荐阅读