Shopify GraphQL PHP - PullRequest
       23

Shopify GraphQL PHP

0 голосов
/ 14 апреля 2020

У меня проблемы с использованием API-интерфейса GraphQL от Shopify. Я уже сделал несколько вызовов REST, но для этого мне понадобится GraphQL. Я пытаюсь добавить видео к определенным продуктам, и это то, что у меня есть:

mutation productCreateMedia($productId: ID!, $media: [CreateMediaInput!]!) {
  productCreateMedia(productId: $productId, media: $media) {
    media {
      alt
    }
    mediaUserErrors {
      code
      field
      message
    }
    product {
      id
    }
  }
}

, а для переменных у меня есть массив:

$gid = "gid://shopify/Product/".row('shopifyID');
$videoLink = "https://www.youtube.com/watch?v=".row('youtubeID');
$media = array('originalSource'=>$videoLink,'mediaContentType'=>'EXTERNAL_VIDEO');
$variables = array ('productId'=>$gid,'media'=>$media);

Я использую следующая функция для вызова:

function graph($query , $variables = []){
$domain = 'domain.myshopify.com';
$url = 'https://'.$domain.'/admin/api/2020-01/graphql.json';

$request = ['query' => $query];

if(count($variables) > 0) { $request['variables'] = $variables; }

$req = json_encode($request);
$parameters['body'] = $req;

$stack = HandlerStack::create();
$client = new \GuzzleHttp\Client([
    'handler'  => $stack,
    'headers'  => [
        'Accept'       => 'application/json',
        'Content-Type' => 'application/json',
        'X-Shopify-Access-Token'=>'myAPIpass' // shopify app accessToken
    ],
]);

$response = $client->request('post',$url,$parameters);
return $body =  json_decode($response->getBody(),true);

}

Но я получаю следующее: Variable productId типа ID! было предоставлено недопустимое значение

Я использовал php -shopify SDK для REST API, но не смог выяснить, как он работает для GraphQL, поэтому пошел обычным способом простого вызова конечной точки JSON. Любая помощь в том, что я делаю не так здесь?

1 Ответ

0 голосов
/ 14 апреля 2020

Итак ... чтобы ответить на мой собственный вопрос ... строка идентификатора shopify должна быть в кодировке base 64. Я добавил только эту строку, и теперь она работает:

$gid = base64_encode($gid);
...