I’ve completed code.
but from call back file redirect url go to the admin
import { authenticate } from “../shopify.server”;
const PLAN_CONFIGS = {
basic: { price: 9.99 },
pro: { price: 29.99 },
enterprise: { price: 59.99 },
};
export const loader = async ({ request }) => {
// ─────────────────────────────────────
// SHOPIFY AUTHENTICATION
// ─────────────────────────────────────
const { redirect } = await authenticate.admin(request);
const url = new URL(request.url);
const plan = url.searchParams.get(“plan”);
const shop = url.searchParams.get(“shop”);
const chargeId = url.searchParams.get(“charge_id”);
console.log(“
Billing callback:”, {
plan,
shop,
chargeId,
});
// ─────────────────────────────────────
// VALIDATION
// ─────────────────────────────────────
if (!plan || !shop || !PLAN_CONFIGS[plan]) {
return redirectToEmbeddedApp(redirect, shop, false);
}
try {
// ─────────────────────────────────────
// SAVE SUBSCRIPTION
// ─────────────────────────────────────
const laravelRes = await fetch(
“https://shopapps.perceptioncare.in/api/subscriptions”,
{
method: “POST”,
headers: {
“Content-Type”: “application/json”,
},
body: JSON.stringify({
shop_domain: shop,
shopify_admin_id: shop,
plan,
price: PLAN_CONFIGS[plan].price,
status: “active”,
charge_id: chargeId ?? null,
}),
}
);
const laravelData = await laravelRes.json();
console.log(“
Laravel response:”, laravelData);
return redirectToEmbeddedApp(
redirect,
shop,
laravelData.success
);
} catch (error) {
console.error(“
Callback error:”, error);
return redirectToEmbeddedApp(
redirect,
shop,
false
);
}
};
// ─────────────────────────────────────
// REDIRECT HELPER
// ─────────────────────────────────────
function redirectToEmbeddedApp(
redirect,
shop,
success = true
) {
const appHandle = “thinkcontent”;
const storeHandle = shop.replace(
“.myshopify.com”,
“”
);
const redirectUrl =
`https://admin.shopify.com/store/${storeHandle}\` +
`/apps/${appHandle}/app/plans?` +
`${success ? “success=true” : “error=true”}`;
console.log(“
Redirect URL:”, redirectUrl);
return redirect(redirectUrl, {
target: “_top”,
});
}
export default function BillingCallback() {
return null;
}
my flow is
my flow is plan page subscribe → then run api for billing(appSubscriptionCreate) → added return url for billing callback(const returnUrl = `${process.env.SHOPIFY_APP_URL}/app/billing/callback?plan=${plan}&shop=${session.shop}`; ) ->from callback added redirect url( const appHandle = “thinkcontent”; const redirectUrl = `https://admin.shopify.com/admin/apps/${appHandle}\` + `/app/plans?${success ? “success=true” : “error=true”}`; ) problem is after approve it’s redirect to login from my shopify app url login page