Я создаю общедоступное приложение для покупок и хочу добавить маршрут POST, который позволяет создать метаполе.
В shopify-api-nodeмодуль указано следующее:
accessToken — требуется для общедоступных приложений — строка, представляющая постоянный токен доступа OAuth 2.0. Этот параметр является взаимоисключающим с параметрами apiKey и password. Если вы ищете готовое решение для получения токена доступа, взгляните на модуль shopify-token».
Вот объект, которому нужны shopName и accessToken
const shopify = new Shopify({
shopName: 'your-shop-name',
accessToken: 'your-oauth-token'
});
В документации Shopify Узел / Экспресс вы добавили /shopify/callback маршрут q, который включает Oauth:
// Shopify Callback Route //
app.get('/shopify/callback', (req, res) => {
const { shop, hmac, code, state } = req.query;
/// ... skipping over code ... ///
request.post(accessTokenRequestUrl, { json: accessTokenPayload })
.then((accessTokenResponse) => {
const accessToken = accessTokenResponse.access_token;
// DONE: Use access token to make API call to 'shop' endpoint
const shopRequestUrl = 'https://' + shop + '/admin/api/2019-04/shop.json';
const shopRequestHeaders = {
'X-Shopify-Access-Token': accessToken,
};
});
/// ... skipping over code ... ///
});
Могу ли я получить/должен ли я получить доступ к этой информации из маршрута shopify-token module вместо использования /shopify/callback следующим образом (см. ниже)? Или есть лучший способ сделать это/можете привести примеры?
Сервер.js
// Declare new global variables //
var accessTokenExport;
var shopExport;
// New Function //
function exportTokens(accessToken) {
accessTokenExport = accessToken;
shopExport = shop;
}
// Shopify Callback Route //
app.get('/shopify/callback', (req, res) => {
// Export variables to New Function
exportTokens(shop, accessToken);
});
// New POST route //
app.post("/api/createMetafield", function (req, res) {
const shopify = new Shopify({
shopName: shopExport,
accessToken: accessTokenExport
});
shopify.metafield.create({
key: 'warehouse',
value: 25,
value_type: 'integer',
namespace: 'inventory',
owner_resource: 'metafield',
// owner_id: 632910392
}).then(
metafield => console.info(metafield),
err => console.error(err)
);
})



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это неправильный способ использования токена доступа к магазину.
Потому что shopify/callback URL-адрес вызывается только один раз, когда администратор магазина устанавливает ваше приложение, но токен доступа полезен в большинстве случаев.
Чтобы использовать токен доступа к магазину для вашей системы, вы можете сделать следующее:
shopify/callback Вызов API, когда ваше приложение устанавливается администратором магазина, когда вы можете хранить этот токен доступа в базе данных, а когда требуется просто получить его из вашей БД, и этот токен доступа доступен на всю жизнь, пока администратор магазина не удалит ваше приложение.
Спасибо. Я забыл, что это должно было храниться в БД.
отлично, если у вас есть решение, выберите правильный ответ для дальнейшего использования. Спасибо
Должен ли я отправить его в БД после того, как был сделан request.post?
Вы можете отправить в БД в методе request.post
Насколько я знаю, когда вы сохраняете токен доступа, вы сохраняете его с именем магазина для дальнейшего использования. Я должен поднять вопрос об этой части ответа «когда требуется просто получить из вашей базы данных», но когда запрос попадает на shopify call_back_url, в нем нет адреса магазина, поэтому как мы можем просто получить этот токен из db для этого конкретного магазина?
Привет, хранить токен доступа в БД легко, но когда вы получаете запрос на call_back_url, как вы читаете соответствующий access_token из БД? пожалуйста, помогите