如何将访问令牌和商店名称传递给Shopify API节点新对象

时间:2019-05-10 14:54:01

标签: javascript node.js express oauth shopify-app

我正在构建一个公共shopify应用,我想添加一个允许创建元字段的POST路由。

shopify-api-node module中指出:

accessToken-公共应用程序必需-表示永久性OAuth 2.0访问令牌的字符串。此选项与apiKey和password选项互斥。如果您正在寻找用于获取访问令牌的预制解决方案,请查看shopify-token module。”

这里是需要shopNameaccessToken

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

Shopify Node / Express文档中,您添加了/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路由访问/应该访问此信息吗?还是有更好的方法来做到这一点/您可以提供示例吗?

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 :(得分:0)

这不是使用商店访问令牌的正确方法

因为shopify/callback仅在商店管理员安装您的应用程序时进行一次网址调用,但是在大多数情况下访问令牌很有用

要为您的系统使用商店访问令牌,您可以执行以下操作

shopify/callback API调用,当您由商店管理员安装的应用程序此时可以将此访问令牌存储在数据库中,并且仅需要从数据库中获取该访问令牌并且该访问令牌可以终身使用,直到商店管理员未卸载即可您的应用程序