Home > Mobile >  Shopify GraphQL Error "Parse error on \":\" (COLON) at [2, 35]" With PHP
Shopify GraphQL Error "Parse error on \":\" (COLON) at [2, 35]" With PHP

Time:12-02

Greetings I have a problem with my GraphQL I don't know how to pass data to my GraphQL without getting

Error Message: "Parse error on ":" (COLON) at [2, 35]"

here is what I'm trying to pass product variant id data and get some response here is the example of what I'm trying to do and my function for graphql

$variantId = (isset($data->variantId) && !empty($data->variantId)) ? strip_tags($data->variantId) : "";

        if(empty($variantId)){
            $result['error'] = "Product id not specified!";
        }

        $query = array("query" => '{
            productVariant(id: '. ($variantId) .') {
                availableForSale
            }
        }');

        $variants = shopify_gql_call($_SESSION['access_token'], $_SESSION['shop_name'], $query);
        if( isset($variants['response']) && !empty($variants['response']) ){
            $result[]  = $variants['response'];
        }else{
            $result['error'] = "Variants not found!";
        }

function shopify_gql_call($token, $shop, $query = array()) {
    // Build URL
    $url = "https://" . $shop . ".myshopify.com" . "/admin/api/".getenv('API_DATE')."/graphql.json";

    // Configure cURL
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HEADER, TRUE);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($curl, CURLOPT_MAXREDIRS, 3);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 3);
    // curl_setopt($curl, CURLOPT_SSLVERSION, 3);
    curl_setopt($curl, CURLOPT_USERAGENT, 'My New Shopify App v.1');
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);

    // Setup headers
    $request_headers[] = "";
    $request_headers[] = "Content-Type: application/json";
    if (!is_null($token)) $request_headers[] = "X-Shopify-Access-Token: " . $token;
    curl_setopt($curl, CURLOPT_HTTPHEADER, $request_headers);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($query));
    curl_setopt($curl, CURLOPT_POST, true);

    // Send request to Shopify and capture any errors
    $response = curl_exec($curl);
    $error_number = curl_errno($curl);
    $error_message = curl_error($curl);

    // Close cURL to be nice
    curl_close($curl);

    // Return an error is cURL has a problem
    if ($error_number) {
        return $error_message;
    } else {

        // No error, return Shopify's response by parsing out the body and the headers
        $response = preg_split("/\r\n\r\n|\n\n|\r\r/", $response, 2);

        // Convert headers into an array
        $headers = array();
        $header_data = explode("\n",$response[0]);
        $headers['status'] = $header_data[0]; // Does not contain a key, have to explicitly set
        array_shift($header_data); // Remove status, we've already set it above
        foreach($header_data as $part) {
            $h = explode(":", $part, 2);
            $headers[trim($h[0])] = trim($h[1]);
        }

        // Return headers and Shopify's response
        return array('headers' => $headers, 'response' => $response[1]);

    }

  }

CodePudding user response:

I strongly suggest the use of https://packagist.org/packages/shopify/shopify-api instead of implementing your own function/http requests.

Your query should be something like this

query anynamehere($id: ID!){
  productVariant(id:$id){
    availableForSale
  }
}

and then you submit the ID as part of another entry of the array, check the example below:

  $query = [
    "query" => 
        'query anynamehere($id: ID!){
          productVariant(id:$id){
            availableForSale
          }
        }',
    "variables"  => [
        'id' => $variantId
    ]
  ];

You should never concatenate the values as part of the query string (unless you want to deal with a lot of injection issues). Check more info about variables here https://graphql.org/learn/queries/

  • Related