使用wp_remote_post()的Active Campaign API 403错误;

时间:2019-07-10 10:53:37

标签: php wordpress rest activecampaign

我正在创建一个简单的集成,该集成应该通过API(V3)将我们的WooCommerce订单发布到Deep Data seciton中

这是我要提出的请求的简单示例。

我暂时手动运行此脚本只是为了使其正常运行。这是我使用wp_remote_post($ url,$ request)作为请求发送的数组。

Array
(
[key] => KEY
[url] => URL/ecomOrders
[settings] => Array
    (
    [method] => POST
    [timeout] => 5
    [redirection] => 5
    [httpversion] => 1.0
    [user-agent] => WordPress/5.2.1; https://www.XXXX.com
    [blocking] => 1
    [body] => {"ecomOrder":{JSONORDER}}
    [headers] => Array
        (
            [Api-Token] => KEY
        )

    )

)

这是我从回复中得到的(部分)。

[body] => 
[response] => Array
(
    [code] => 403
    [message] => Forbidden
)

我已经仔细检查了API密钥和URL,只是一个旁注,我们已经在类似的要求中使用了相同的方法和脚本详细信息来添加联系人,效果很好。

这是Im正在使用的代码(所有$ var在脚本的前面都已定义):

$request = array(
        'key' => $key,
        'url' => $url,
        'settings' => array(
            'method' => 'POST',
            'sslverify' => false,
            'timeout'     => 5,
            'redirection' => 0,
            'httpversion' => '1.0',
            'user-agent'  => 'WordPress/' . $wp_version . '; ' . home_url(),
            'blocking'    => true,
            'body'        => $body,
            'headers' => array(
                'Api-Token' => $key,
            )

        )
    );

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

1 个答案:

答案 0 :(得分:0)

我们今天遇到了类似的问题;所有标头和有效负载均已正确设置,但API返回了401。

我们的有效载荷需要作为json发送,我们必须在标头中明确定义它。像这样:

'content-type' => 'application/json'   

此外,它看起来好像没有按WordPress推荐in the codex的方式构造request / args数组。 (arguements

$key = 'myKey';
$url = 'myURL'
$body = array('ecomOrder' => $myOrder);

$request = array(
    'method'      => 'POST',
    'sslverify'   => false,
    'timeout'     => 5,
    'redirection' => 0,
    'httpversion' => '1.0',
    'user-agent'  => 'WordPress/' . $wp_version . '; ' . home_url(),
    'blocking'    => true,
    'body'        => json_encode($body),
    'headers'     => array(
        'content-type' => 'application/json',
        'Api-Token'    => $key,
    )
);

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

由于我对Active Campaign的API并不熟悉,这可能是一个黑暗的镜头,但希望对您有所帮助。

资源

stackoverflow article确实有所帮助。