我在Woocommerce Oauth 1.0身份验证和this solution 为我工作。我正在本地主机上运行它,到目前为止还不错。
Edit:
让我详细解释一下这个答案。昨晚我刚开始学习反应,最好的学习方法就是做。我会以新手的身份向新手解释。我们开始吧。。。
我创建了这个可以从任何组件调用的Woocommerce帮助对象,它为您完成了所有艰苦的工作:
Woocommerce.js
import axios from "axios";
import Oauth from "oauth-1.0a";
import CryptoJS from "crypto-js";
import jQuery from "jquery";
const ck = "ck_...";
const cs = "cs_...";
const baseURL = "http://yourdomain.com/wp-json";
const Woocommerce = {
getProducts: () => {
return makeRequest("/wc/v3/products");
},
getProductByID: id => {
return makeRequest("/wc/v3/products/" + id);
}
};
function makeRequest(endpoint, method = "GET") {
const oauth = getOauth();
const requestData = {
url: baseURL + endpoint,
method
};
const requestHTTP =
requestData.url + "?" + jQuery.param(oauth.authorize(requestData));
return axios.get(requestHTTP);
}
function getOauth() {
return Oauth({
consumer: {
key: ck,
secret: cs
},
signature_method: "HMAC-SHA1",
hash_function: function(base_string, key) {
return CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA1(base_string, key));
}
});
}
export default Woocommerce;
您需要通过运行以下命令来安装所有必要的软件包:
npm install axios jquery crypto-js
npm install oauth-1.0a --production
How to use it
首先将其导入组件:
import Woocommerce from "./functions/Woocommerce";
然后从组件内部,您可以这样调用它以获取所有产品:
// All products (array of objects)
state = { products: [], isLoaded: false };
componentWillMount() {
Woocommerce.getProducts().then(res =>
this.setState({ products: res.data, isLoaded: true })
);
}
或者,要按ID仅获取一个产品,您可以执行以下操作:
// Single product (object)
state = { product: {}, isLoaded: false };
componentWillMount() {
Woocommerce.getProductByID(123).then(res =>
this.setState({ product: res.data, isLoaded: true })
);
}
正如您可能看到的,您可以在Woocommerce助手中详细说明更多功能,并根据需要使用Woocommerce REST API检索产品。
快乐编码…;)