Hi there,
Everything works on dev but when Shopify Apps team tested my app, they are stuck in the billing page (it keeps looping again and again).
Here’s my ensure billing middleware:
import express from "express";
import shopify from "../shopify.js";
export async function ensureBillingMiddleware(
req: express.Request,
res: express.Response,
next: express.NextFunction
) {
const session = res.locals.shopify.session
const result = await ensureBilling(session)
if (result.paymentUrl) {
res.status(403);
res.header("X-Shopify-API-Request-Failure-Reauthorize", "1");
res.header("X-Shopify-API-Request-Failure-Reauthorize-Url", result.paymentUrl);
res.end();
return
}
next()
}
async function ensureBilling(
session: any,
isProdOverride = process.env.ENV === 'production'
) {
let hasPayment = true;
let confirmationUrl: string | null = null;
if (shopify.api.config.billing) {
hasPayment = await shopify.api.billing.check({
session,
plans: Object.keys(shopify.api.config.billing),
isTest: !isProdOverride,
});
if (!hasPayment) {
// Realistically, if there are more than one plan to choose from, you should redirect to
// a page that allows the merchant to choose a plan.
// For this example, we'll just redirect to the first plan
confirmationUrl = await shopify.api.billing.request({
session,
plan: Object.keys(shopify.api.config.billing)[0],
isTest: !isProdOverride,
});
}
}
return { hasPayment: hasPayment, paymentUrl: confirmationUrl };
}
app.use("/api/*", ensureBillingMiddleware)
Anyone faced the same issue?
Thanks!