Woocommerce API获取所有产品

时间:2018-02-19 12:53:13

标签: java api woocommerce get

我尝试使用一些参数从API获取产品。我用了WooCommerce API Java Wrapper。使用OAuth 1.0的REST API。简单的getAll方法返回一页的列表(10个产品)。为了得到所有我必须设置一个页面中必须有多少产品并使用偏移量。要获得第三页必须发送此参数:" per_page = 10& offset = 20"。我在get& post programm中使用查询进行测试 - 所有工作。在Java中,当我添加参数时 - 我得到错误(401) - "无效签名 - 提供的签名不匹配"。 我改变了WooCommerceAPI类:

private static final String API_URL_FORMAT = "%s/wp-json/wc/v2/%s";
    private static final String API_URL_ONE_ENTITY_FORMAT = "%s/wp-json/wc/v2/%s/%d";
    private HttpClient client;
    private OAuthConfig config;
 public List getAll(String endpointBase) {
        String url = String.format(API_URL_FORMAT, config.getUrl(), endpointBase) + "?per_page=10&offset=20";
        String signature = OAuthSignature.getAsQueryString(config, url, HttpMethod.GET);
        String securedUrl = String.format("%s&%s", url, signature);
        System.out.println("url="+url);
        System.out.println("securedUrl="+securedUrl);
        return client.getAll(securedUrl);
    }

但我也有同样的错误。

2 个答案:

答案 0 :(得分:2)

正如您所注意到的,只要添加了查询参数,就会将URL_SECURED_FORMAT从"%s?%s"更改为"%s&%s"。但问题是签名是基于所有查询参数生成的,不仅仅是oauth_ *,而且生成签名时会忽略你的参数offsetper_page(一旦lib作者没想到会有更多的参数。)

认为您需要修改此lib以支持基于所有参数的签名。

答案 1 :(得分:2)

我刚刚发布了新版本的wc-api-java库(版本1.2),现在您可以使用方法getAll和params参数,您可以在其中添加其他请求参数。例如:

// Get all with request parameters
Map<String, String> params = new HashMap<>();
params.put("per_page","100");
params.put("offset","0");
List products = wooCommerce.getAll(EndpointBaseType.PRODUCTS.getValue(), params);

System.out.println(products.size());