Как передать токен доступа и название магазина в новый объект Shopify API Node - PullRequest
0 голосов
/ 10 мая 2019

Я создаю общедоступное приложение shopify и хочу добавить POST-маршрут, который позволяет создавать метаполе.

В модуле shopify-api-node указано следующее:

accessToken - Требуется для общедоступных приложений. - Строка, представляющая маркер постоянного доступа OAuth 2.0. Этот параметр является взаимоисключающим с параметрами apiKey и пароля. Если вы ищете готовое решение для получения токена доступа, взгляните на модуль shopify-token . "

Вот объект, которому нужны shopName и accessToken

const shopify = new Shopify({
                shopName: 'your-shop-name',
                accessToken: 'your-oauth-token' 
            });

В документации Shopify Node / Express вы добавляете в /shopify/callback маршрут, который включает 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 следующим образом (см. Ниже)? Или есть лучший способ сделать это / можете привести примеры?

Server.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.log(metafield),
                    err => console.error(err)
                );

            })

1 Ответ

0 голосов
/ 11 мая 2019

Это неправильный способ использовать токен доступа к магазину

Поскольку shopify/callback URL-адрес вызывается только тогда, когда администратор магазина устанавливает ваше приложение, но маркер доступа полезен в большинстве случаев

Чтобы использовать токен доступа к магазину для своей системы, вы можете сделать следующее:

shopify/callback Вызов API, когда ваше приложение устанавливается администратором магазина, тогда вы можете сохранить этот токен доступа в базе данных, и когда требуется просто получить данные из вашей БД, и этот токен доступа доступен на всю жизнь, пока администратор магазина не удалит ваше приложение.

...