本文介绍了使用Shopify Admin API创建产品的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我第一次开始使用Reaction和Node.js,构建一个私有的Shopify App。该应用程序的目的是听取一个添加到购物车按钮,当点击它应该创建一个自定义产品在Shopify后端与Shopify产品API。我在基本JavaScript方面做过很多工作,在jQuery方面有丰富的经验,可以处理这个项目的更多基础知识。接下来的部分是将POST事件绑定到add to cart单击,创建产品并将其添加到购物车。
我正在尝试以下在后端创建产品的解决方案。这是正确的做法,还是有更好的解决方案?
如何将此提取函数绑定到单击事件?
let new_product = {
product: {
title: Custom,
body_html: test,
vendor: Custom,
product_type: customproduct,
tags: Customproduct
}
};
fetch('/admin/api/2020-07/products.json', {
method: 'post',
body: JSON.stringify(new_product),
headers: {
'X-Shopify-Access-Token': process.env.SHOPIFY_API_SECRET_KEY,
'Accept': 'application/json'
},
})
我在我的项目中使用同构获取,它应该可以在服务器和客户端工作。
如有任何帮助和指导,我们将不胜感激。
谢谢!
推荐答案
您有几个问题。在回答之前,重要的是要澄清我从您的措辞和示例代码中假定的一些误解。有3种类型的Shopify Apps。
- 公共
- 自定义
- 私有
因此,如果您正在构建专用应用程序,则提供的代码将无法用于创建产品,因为专用应用程序使用基本身份验证,而公共和自定义应用程序使用OAuth 2.0管理身份验证。
我在我的项目中使用同构FETCH,它应该可以在服务器和 客户端。
即使Shopify API可以在服务器和客户端上运行,也不要从客户端调用Shopify API,因为这会暴露您的私人应用凭据。
若要实现您尝试执行的操作,您需要修改Reaction App和后端代码。
- 向按钮添加事件侦听器
- 向后端服务器发送POST请求
- 通过API在Shopify上创建产品
- 使用上一步返回的ID将产品添加到购物车
- 返回购物车URL作为响应
Reaction中的示例代码将如下所示
function Product() {
const addProduct = async () => {
const cart = await fetch("/your-end-point", {
method: "post",
body: JSON.stringify({
// add product params
}),
});
};
return <button onClick={addProduct}>Add Product</button>;
}
ReactDOM.render(<Product />, document.getElementById("root"));
然后在Node.js应用程序中处理Shopify API部件。我建议使用Official Node.js module for Shopify而不是FETCH。
示例代码将如下所示
const Shopify = require("shopify-api-node");
router.post("/your-end-point", async (req, res) => {
try {
const shopify = new Shopify({
shopName: "your-shop-name",
apiKey: "your-api-key",
password: "your-app-password",
});
const product = await shopify.product.create(req.body);
// use product ID from previous request
const checkout = await shopify.checkout.create({
/*checkout params */
});
res.status(200).send(checkout);
} catch (ex) {
console.log(ex);
}
});
这篇关于使用Shopify Admin API创建产品的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!