Я разработал пару пользовательских приложений Shopify для людей, использующих node.js, и, честно говоря, это было много проб и ошибок. Этот метод проб и ошибок привел меня к следующему коду:
/* GET home page. */
router.get('/', adminMiddleware, function (req, res, next) {
const shop = req.query.shop;
if (req.query.session) {
// if we're here, that means the app was clicked on in the shopify admin panel
return res.send({hello: 'world'});
}
if (shop) {
// if we're here, that means this is install initialization
const state = nonce();
const redirectUri = forwardingAddress + '/shopify/callback';
const installUrl = 'https://' + shop +
'/admin/oauth/authorize?client_id=' + apiKey +
'&scope=' + scopes +
'&state=' + state +
'&redirect_uri=' + redirectUri;
res.cookie('state', state);
res.redirect(installUrl);
} else {
return res.status(400).send('Missing shop parameter. Please add ?shop=your-development-shop.myshopify.com to your request');
}
});
Итак, согласно моим методам проб и ошибок, в которых я совершенно не уверен, я окажусь в корне моих маршрутов Shopify (как определено в настройке URL-адреса приложения на панели инструментов партнера Shopify) в двух сценариях:
когда кто-то устанавливает приложение, и в этом случае я буду ожидать
shop
в параметрах запроса, иликогда кто-то нажимает на мое приложение в своей панели администратора магазина Shopify, и в этом случае будет установлена переменная
req.query.session
, и я могу ответить, я думаю, с помощью некоторого html + css, если я хочу (пример просто показывает простой ответ JSON ).
Но ... это правда? Это два сценария, в которых Shopify будет использовать мой корневой маршрут? И является ли проверка req.query.shop
или req.query.session
правильным способом различить эти два обстоятельства? Я не уверен, что справляюсь с этим должным образом.