FROM CACHE - jp_header

ShopifyのカスタムアプリにてAPP_UNINSTALLEDのWebhooksが失敗する

wwww2
Shopify Partner
5 0 0

shopify/shopify-apiを使ってAPP_UNINSTALLEDのWebhooksでエラーが出てしまいます

なぜエラーが出るのかわかっておらず、回避方法わかる方いたら教えてもらえないでしょうか?


現在下記のshopifyから提供されている下記のライブラリを使って、nodeアプリを作成しています
ライブラリ名:shopify/shopify-api
バージョン:6.1.0
URL:https://github.com/Shopify/shopify-api-js

上記URLを参考に、記載されているWebhooksの手順に沿って、アプリケーションを作成し、アプリケーションがアンインストールされた際のWebhooksを登録しているのですが、
実際に、ショップサイトからアプリを削除を実施したところ、以下のエラーが表示されました
>  Could not validate request for topic app/uninstalled

私のコードは下記になっています(★の箇所でエラーが出力)

 

    this.shopify = shopifyApi({
      apiKey: apiKey,
      apiSecretKey: apiSecretKey,
      scopes: scopes,
      hostName: hostName,
      apiVersion: LATEST_API_VERSION,
      isEmbeddedApp: true, 
    });

 // webhookを生成
    await this.shopify.webhooks.addHandlers({
      APP_UNINSTALLED: [
        {
          deliveryMethod: DeliveryMethod.Http,
          callbackUrl: '/webhooks',
          callback: this.handleAppUninstalled,
        }
      ]
    });

 // callbackが呼ばれた際の処理
    app.get('/auth/callback', async (req: Request, res: Response) => {
      const shop = this.shopify.utils.sanitizeShop(req.query.shop.toString(), true);
      const callback = await this.shopify.auth.callback({
        rawRequest: req,
        rawResponse: res
      });

      // Webhooksの登録
      const response = await this.shopify.webhooks.register({
        session: callback.session
      });
      Logger.info(response);
      if (!response['APP_UNINSTALLED'][0].success) {
        Logger.error(`${this.TAG} Failed register APP_UNINSTALLED webhook: ${response['APP_UNINSTALLED'][0].result}`);
      }

      const host = req.query.host;
      const session = new Session(callback.session.toObject());
      for (const shopInfo of this.activeShopifyList) {
        if (shopInfo.shopName === shop) {
          shopInfo.session = session;
          break;
        }
      }
      // トップへリダイレクト
      res.redirect(`/?shop=${callback.session.shop}&host=${host}`);
    });

    // webhooks受信時の処理
    app.post('/webhooks', express.text({ type: '*/*' }), async (req: any, res: any) => {
      try {
        await this.shopify.webhooks.process({
          rawBody: JSON.stringify(req.body),
          rawRequest: req,
          rawResponse: res
        });
        Logger.info(`${this.TAG} webhook processed, returned status code 200`);
      } catch (error: any) {
        Logger.error(`${this.TAG} webhooks error ${error.message} response code=500`); ★ここが呼ばれる
        res.status(500).send();
      }
    });


よろしくお願いします

 

1件の返信1

株式会社フルバランス
Shopify Partner
1508 541 675

お世話になっております。

フルバランスの道家と申します。

 

ご質問確認しました。

https://github.com/Shopify/shopify-cli/issues/2067

こちらですと、.envとshopifyダッシュボードのAPI KEYに齟齬あったことでエラーになっていたケースがありました。

 

なにかヒントになれば幸いです。

 

私たちの励みにもなりますので、

お役に立てていればBest Answerボタンを押して頂ければ嬉しいです。

 

フルバランス 道家

株式会社フルバランス(Shopify Experts)
Shopify専門のEC成長支援会社です。ストアの新規構築から運用や改善のサポートなどShopifyに関する幅広いサービスを行なっております。
ECの技術・実務・成長、お悩みのことがあれば、お気軽にご相談ください。
『すべてのブランドの特大成長エンジンを搭載する』 株式会社フルバランス