Re: Billing keeps looping again and again

Why is the billing page on my app continuously looping?

yadsgroup
Shopify Partner
8 0 7

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!

Replies 2 (2)

dandynz
Shopify Partner
1 0 0

I am having the same issues, did you manage to find a resolution?

AlexHooper
Shopify Partner
22 0 15

Hi @yadsgroup - did you ever find a solution for this? Currently experiencing the same problem.

AH