【问题标题】:create product by api in shopify在shopify中通过api创建产品
【发布时间】:2019-02-23 16:09:37
【问题描述】:

我想通过api在shopify中创建产品。我尝试了下面的代码,但它不起作用。

<?php 
   $products_array = array(
                "product" => array( 
                    "title"        => "Test Product",
                    "body_html"    => "<strong>Description!</strong>",
                    "vendor"       => "DC",
                    "product_type" => "Test",
                    "published"    => true ,
                    "variants"     => array(
                        array(
                            "sku"     => "t_009",
                            "price"   => 20.00,
                            "grams"   => 200,
                            "taxable" => false,
                        )
                    )
                )
            );

            $SHOPIFY_API = "https://apikey:password@domainname.myshopify.com/admin/products.json";
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $SHOPIFY_API);
            $headers = array( "Authorization: Basic ".base64_encode("apikey:password"),  

  "Content-Type: application/json", 
  "charset: utf-8");
            curl_setopt($curl, CURLOPT_HTTPHEADER,$headers);

            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_VERBOSE, 0);
            curl_setopt($curl, CURLOPT_HEADER, 1);
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
            curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($products_array));
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 

            $response = curl_exec ($curl);
            curl_close ($curl);

            echo "<pre>";
            print_r($response); 
            echo "</pre>";
?>

它给出的响应是'{"errors":"[API] Invalid API key or access token (unrecognized login or wrong password)"}'。知道吗?

【问题讨论】:

  • 您的 API 密钥似乎无效
  • 基本身份验证不是base64(usr:pass),而是md5(md5(usr).':'.md5(relm).':'.md5(pass)),尽管查看文档,help.shopify.com/en/api/guides/… 您可以使用https://apikey:password@ 方式而不发送基本身份验证标头Authorization: Basic

标签: php api shopify


【解决方案1】:

请检查您的私有应用中的产品是否设置了写入权限。

【讨论】:

    【解决方案2】:

    我找到了问题,这与权限无关,而是与您发布错误 URL 的 API 的 URL 有关。这是正确的:

    https://{apikey}:{password}@{hostname}/admin/api/{version}/{resource}.json

    这里是代码:

    <?php
    $products_array = array(
        "product" => array( 
            "title"        => "New Test Product",
            "body_html"    => "<strong>Description!</strong>",
            "vendor"       => "DC",
            "product_type" => "Test",
            "published"    => true ,
            "variants"     => array(
                array(
                    "sku"     => "t_009",
                    "price"   => 20.00,
                    "grams"   => 200,
                    "taxable" => false,
                )
            )
        )
    );
    $API_KEY = 'apikey';
    $PASSWORD = 'password';
    $SHOP_URL = 'domainname.myshopify.com';
    $SHOPIFY_API = "https://$API_KEY:$PASSWORD@$SHOP_URL/admin/api/2020-04/products.json";
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $SHOPIFY_API);
    $headers = array(
        "Authorization: Basic ".base64_encode("$API_KEY:$PASSWORD"),
        "Content-Type: application/json",
        "charset: utf-8"
    );
    curl_setopt($curl, CURLOPT_HTTPHEADER,$headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_VERBOSE, 0);
    curl_setopt($curl, CURLOPT_HEADER, 1);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($products_array));
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    
    $response = curl_exec ($curl);
    curl_close ($curl);
    echo "<pre>";
    print_r($response);
    echo "</pre>";
    ?>
    

    【讨论】:

      【解决方案3】:

      尝试“已发布” => false ,

      【讨论】:

      • 请添加更多解释
      最近更新 更多