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();
}
});
よろしくお願いします