php - 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"
}
解决方案
很头疼之后。看起来它只需要在数组中格式化变量。
$variables = array(
"first" => 4,
"sku" => "100560 OR 100559 OR 100558 OR 9995565"
);
希望这可以帮助遇到同样错误的其他人。不知道为什么它说哈希,这样一个误导性的错误。
推荐阅读
- python - 如何在python中传递简单的参数
- chisel - 如何在 Vec 中添加元素,如二叉树的叶节点?
- python - 如何根据 python3 中元素的值将平面列表转换为列表列表?
- c# - SemaphoreSlim 是充当看门人还是充当批处理人?
- shell - jq:错误:语法错误,意外 IDENT,期待 $end(Unix shell 引用问题?)在
- php - woocommerce中的覆盖模板
- python - 有没有办法从已签出的 github repo 导入?
- python - ValueError:未知激活函数:LeakyReLU
- c++ - 使用 cpack 生成作为启动服务的 rpm 包
- outlook - Outlook webhook - 获取电子邮件警报