【问题标题】:WP_remote_post how to add filters to JSON API callWP_remote_post 如何将过滤器添加到 JSON API 调用
【发布时间】:2021-02-05 13:14:50
【问题描述】:

我正在尝试将 API 集成到我的 Wordpress 插件中。以下 PHP 代码成功连接到 API 并检索房地产列表(API 来自房地产软件):

$url = 'https://api.whise.eu/v1/estates/list';

$body = array(
    'Filter' => array( 'languageId' => 'nl-BE'),
);

$args = array(
    'headers' => array( 'Authorization' => 'Bearer ' . $token),
    'body' => json_decode($body)
);

$response = wp_remote_post($url,$args);

根据文档 (http://api.whise.eu/WebsiteDesigner.html#operation/Estates_GetEstates),可以过滤结果,但我无法让它工作。我在 API 和 JSON 方面没有太多经验,所以我可能在这里遗漏了一些东西。

即使我按照文档中的说明添加了语言过滤器,上面的代码仍然检索英文数据。当我将'body' => json_decode($body) 替换为'body' => $body 时,我得到以下响应:

{"Message":"The request entity's media type 'application/x-www-form-urlencoded' is not supported for this resource."}

谢谢!

【问题讨论】:

  • 我看到您的代码中唯一缺少的是Content-Type 标头。通常,在发送以 JSON 字符串为正文的请求时,您还需要将其设置为 application/json。也许这就是您的语言过滤器不起作用的原因?
  • 谢谢,我添加了 Content-type 标头,当仅使用 'body' => $body 时,'error' 消息消失了。但是,语言过滤器似乎仍然无法正常工作。我可能会与他们的支持取得联系。谢谢 :)
  • 你应该使用'body' => json_decode($body),那部分代码是正确的。
  • 哦,我明白了,谢谢!
  • ...再想一想,不,不要使用它:P 你应该使用'body' => json_encode($body)

标签: json wordpress api


【解决方案1】:

只是为了让这个问题不会没有答案:

  • 您需要添加Content-Type 标头并将其设置为application/json。这样端点就可以将您的数据解释为 JSON 字符串。
  • 您还需要将'body' => json_decode($body) 更改为'body' => json_encode($body),因为您要将$body 数组转换为JSON 字符串(请参阅json_decode()json_encode())。

这就是您的代码现在的样子:

$url = 'https://api.whise.eu/v1/estates/list';

$body = array(
    'Filter' => array( 'languageId' => 'nl-BE'),
);

$args = array(
    'headers' => array(
        'Authorization' => 'Bearer ' . $token,
        'Content-Type' => 'application/json'
    ),
    'body' => json_encode($body)
);

$response = wp_remote_post($url,$args);

【讨论】:

  • 非常感谢您花时间写下这个答案并帮助我。像这样编辑我的代码修复了所有问题:语言过滤器工作正常,没有更多错误或消息。谢谢,周末愉快!
猜你喜欢
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2019-10-01
相关资源
最近更新 更多