#shopify #shopify-app #shopify-api
#Shopify #Shopify-приложение #Shopify-api
Вопрос:
Мой вопрос / проблема очень похожа на этот вопрос в теме: https://community.shopify.com/c/shopify-apis-and-sdks/app-approval-issues-app-must-install-succesful… Однако, похоже, на этот вопрос нет ответа. Я также думаю, что он основан на встроенном приложении Shopify, а мое — это отдельное приложение shopify (хотя оно имеет поведение по умолчанию для встраивания).
Я проверил свое приложение, но оно было отклонено, потому что сначала оно переходит в мое автономное приложение Shopify, а затем приложение перенаправляет на вход oauth, если он не установлен, или на домашнюю страницу, если они установлены.
Вот короткий скринкаст, показывающий «установить приложение», который попадает на целевую страницу автономного приложения, а затем перенаправляется на страницу установки: https://drive.google.com/file/d/18jUb9r_VkJZqldJSoJqKVBFxWVIr4XvF/view?usp=sharing
И вот что у меня есть для URL-адреса приложения:
Вот ошибка, которую я получаю от группы проверки приложений:
Я не понимаю, как я могу «немедленно» перейти к «https://example.myshopify.com/admin/oauth/request_grant «ЕСЛИ я не знаю названия магазина?! Я должен получить эту информацию из параметров url, когда они попадают на мою страницу. вот почему я делаю перенаправление ПОСЛЕ того, как узнаю, есть ли у меня параметр shop и т. Д.
Порядок событий в моем коде. Использование интерфейса reactjs с вызовами axios для экспресс-серверной части.
Интерфейс:
-перейдите на страницу shopify_login_page и при загрузке страницы запускает эту функцию:
const checkShopParam = async () => {
const url = window.location
const shop = new URLSearchParams(url.search).get('shop');
console.log("shop: ", shop);
setInstallShop(shop)
axios.get(`${SHOPIFY_HOST}/foo?shopName=` installShop)
.then(response => {
console.log(response);
// setAuthRoute(response.data)
if(installShop){
// setTimeout(() => window.open(response.data), 50);
setTimeout(() => window.location.replace(response.data), 50);
console.log('install');
}
else{
setTimeout(() => window.location.replace(HOST), 50);
console.log('redirect to home page');
}
// response.render("usersRoutes", { Users: Users });
})
.catch(console.log("Error with shopify login func"));
}
Серверная часть:
-серверный маршрут принимает название магазина и создает ссылку авторизации, которую он отправляет в качестве ответа:
app.get('/foo', async (req, res) => {
const shopName = req.query.shopName
console.log('shop name: ', shopName);
let authRoute = await Shopify.default.Auth.beginAuth(
req,
res,
shopName,
// SHOP,
'/auth/callback',
true,
);
console.log(authRoute);
res.send(authRoute)
});
Любая помощь будет с благодарностью принята. Дайте мне знать, если вам нужна более подробная информация
Ответ №1:
понял это. приходилось выполнять все перенаправления из серверной части express, а не из интерфейса reactjs. имеет смысл
экспресс-маршрут:
app.get("/install", async (req, res) => {
const shopName = req.query.shop
console.log("shop name: ", shopName)
let authRoute = await Shopify.default.Auth.beginAuth(
req,
res,
shopName,
// SHOP,
'/auth/callback',
true,
);
console.log(authRoute);
return res.redirect(authRoute)
})