0

我在我的应用程序中使用 node.js 和shopify-api-node(v3.2.0)来验证客户登录以及其他功能(如果是 shopify)。根据 shopify 文档(https://shopify.dev/docs/storefront-api/reference/mutation/customeraccesstokencreate),我正在使用 GraphQL 访问 shopify API。我的代码如下所示:-

const Shopify = require('shopify-api-node');

const shopify = new Shopify({
  shopName: process.env.SHOPIFY_DOMAIN_NAME,
  apiKey: process.env.SHOPIFY_API_KEY,
  password: process.env.SHOPIFY_API_KEY_PASSWORD
});

  const query = `mutation {
    customerAccessTokenCreate (input: {
      email: "user@mail.com",
      password: "password123"
     }
    ) 
    {
      customerAccessToken {
        accessToken
        expiresAt
      }
      customerUserErrors {
        code
        field
        message
      }
    }
  }`;

  shopify
    .graphql(query)
    .then((output) => {
      console.log(output);
    })
    .catch((err) => {
      console.error(err)
    });

在此之后我得到以下错误: -

Error: Field 'customerAccessTokenCreate' doesn't exist on type 'Mutation'
    at got.then (/Users/admin/Documents/Code/shopify-node-app/node_modules/shopify-api-node/index.js:239:19)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  locations: [ { line: 2, column: 5 } ],
  path: [ 'mutation', 'customerAccessTokenCreate' ],
  extensions:
   { code: 'undefinedField',
     typeName: 'Mutation',
     fieldName: 'customerAccessTokenCreate' }

甚至我从邮递员本身也得到了同样的东西。

任何帮助,将不胜感激。

4

1 回答 1

1

GraphQL 有两种类型:

虽然它们看起来很相似,但 strorefront 的限制要多得多,但可以在前端使用,而 admin 的方法和功能更丰富,但不能在字体端安全地使用。

您尝试制作的文档和方法是指 Storefront API,但您使用的包是用于 Admin GraphQL API。

storefrontAccessToken如果您想发出店面请求,您可以通过该方法创建店面访问令牌,但 Admin API GraphQL 允许进行更多自定义。

因此,您需要确保使用正确的 API。

如果您打算使用店面 API,则不应使用 NodeJS,而只需创建一个私有应用程序(来自 Admin -> APP -> 私有应用程序),它将为您提供一个 Store Front Access Token(如果您在底部启用它并且选择合适的范围),可以直接在前端使用。

如果您打算使用 Admin API,则需要创建一个公共应用程序并托管它,然后您可以使用 NodeJS 并通过 Shopify 中的代理传递信息。

概括

您正在向 Storefront API 发出请求,同时使用 Admin API 的库。

于 2020-02-18T17:08:23.090 回答