node で Asset APIをPOSTしたい

解決済
Highlighted
新規メンバー
2 0 1

Shopify埋め込み公開アプリを、node (Shopify App CLI)、 React で構築しています。

指定したアセットファイルをテーマのアセットに追加するようなアプリを作りたいのですが、

node (server.js)で以下のように記述すると、下記のエラーがでてしまい、困っています。

 

   router.get("/post-assets", async (ctx, next) => {
    try {
      const shop = ctx.cookies.get("shopOrigin");
      
      //get main theme ID
      const themeId = await fetch(
        ...
(メインテーマのIDを取得)
     ...
console.log(ID);
return ID; }); // post asset await fetch( `https://${shop}/admin/api/2019-04/theme/${themeId}/assets.json`, { methods: "PUT", }, { headers: { "X-Shopify-Access-Token": ctx.cookies.get("accessToken"), "Content-Type": "application/json", }, }, { body: JSON.stringify({ assets: { key: "template/index.liquid", src: "http://apple.com/new_bg.gif", }, }), } ) .then((response) => response.json()) .then((data) => console.log(data)) .catch((error) => { console.error("Error:", error); }); } catch (err) { console.log(err); } });

 

エラーメッセージ

 

86586851463 // メインテーマのIDは取得できる
{
 errors: '[API] Invalid API key or access token (unrecognized login or wrong password)' 
 }

 

 

アセットファイルの追加方法が間違っているでしょうか? 記述がもし間違っていたら、教えていただけると幸いです。

0 件の「いいね!」
Highlighted
Community Manager
Community Manager
527 118 194

成功

以下の例が参考になるかと思います。
https://shopify.dev/docs/admin-api/rest/reference/online-store/asset?api[version]=2020-04#update-202...

ご提示のコードは、index.liquidというテンプレートを追加するコードなので、画像を追加する場合は、

 "key": "assets/empty.gif",
    "attachment": "R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==\n"
  }

のようになると思います。

また、エラーの内容は、アクセストークンのパーミションが足らないようにも見えますので、下記をみて、テーマの更新ができるscopeをつけてアクセストークンを生成しているか、確認された方が良いと思います。
https://shopify.dev/docs/admin-api/access-scopes

Technical Partner Manager, Japan
1 件の「いいね!」
Highlighted
新規メンバー
2 0 1

@junichiokamuraさん、

ありがとうございます。

画像を追加する方法参考にし、また、そもそも最初に書いたコードの中にいくつかミスがあり、それを修正して、無事AssetsのPUTができました。(お恥ずかしながらthemesがthemeになっていたり、fetchの記述が間違っておりました。。)

大変ありがとうございました。

1 件の「いいね!」