【问题标题】:Woocommerce API get all productsWoocommerce API 获取所有产品
【发布时间】:2018-02-19 12:53:12
【问题描述】:

我尝试通过一些参数从 API 获取产品。我用WooCommerce API Java Wrapper。带有 OAuth 1.0 的 REST API。简单的 getAll 方法返回一页(10 个产品)的列表。要获得所有信息,我必须设置一页中必须有多少产品并使用偏移量。要获取第三页必须发送此参数:“per_page=10&offset=20”。我在 get&post 程序中使用查询进行测试 - 一切正常。在 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);
    }

但我遇到了同样的错误。

【问题讨论】:

    标签: java api woocommerce get


    【解决方案1】:

    我刚刚发布了新版本的 wc-api-java 库(版本 1.2),现在您可以使用带有 params 参数的 getAll 方法,您可以在其中放置额外的请求参数。例如:

    // 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());
    

    【讨论】:

    • @icorederman 如何提取产品详细信息,如 products.get(0).name 或 products.get(0).get("name")
    • @DaniyalJavaid products.get(0).get("name") 应该可以工作,但你必须正确地转换它,像这样 ((List> )products).get(0).get("name")
    • @DaniyalJavaid 你可以做 List> products = wooCommerce.getAll(EndpointBaseType.PRODUCTS.getValue(), params);对象名称 = products.get(0).get("name");
    【解决方案2】:

    如您所见,您在添加查询参数后立即将 URL_SECURED_FORMAT 从 "%s?%s" 更改为 "%s&amp;%s"。但问题是签名是基于 all 查询参数生成的,不仅是 oauth_*,而且你的参数 offsetper_page 在生成签名时被忽略(只要库作者没有预料到额外的参数)。

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

    【讨论】:

    • 但是我在 url 中添加了额外的参数。和 url - 进入签名,不是吗?
    • 我没有看到从OAuthSignature 中的endpoint 提取参数。而且,正如我所说,基于URL_SECURED_FORMAT 的字符串格式(特别是以问号作为分隔符),它看起来不像端点url中的lib所期望的参数,
    • 嗨,@Evgeny 的回答是正确的,目前我的库不支持任何附加参数。我会尽快找到空闲时间来增加这种可能性。谢谢。
    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2015-06-12
    • 2019-09-03
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多