2012-10-08 24 views
1

我写了一个可以通过REST API与Salesforce交互的Wordpress插件。它使用用户名/密码成功获取实例URL和身份验证令牌。Salesforce创建记录,但回应了405

我可以使用wp_remote_post分别使用GET和POST来提交查询和创建对象。

然而,在创建对象时,虽然Salesforce的实例创建成功后,我得到的回应我的帖子下面:

{“消息”:“HTTP方法‘POST’不允许允许的HEAD,GET,PATCH,DELETE”,‘错误码’:‘METHOD_NOT_ALLOWED’}

使用这些请求相同的JSON主体内容,我能够通过Salesforce的工作台,没有任何问题,在所有提交和创造。我得到的是这样的一个适当的回应:

{ “ID”: “003E000000OubjkIAB”, “成功”:真实, “错误”:[] }

有我发送的标题中有一些Salesforce仅部分不同意?下面是越来越被作为使用wp_remote_post的结果,其他一些参数 - http://codex.wordpress.org/HTTP_API#Other_Arguments

这里的PHP代码调用它:

$connInfo['access_token'] = get_transient('npsf_access_token'); 
$connInfo['instance_url'] = get_transient('npsf_instance_url'); 
$url = $connInfo['instance_url'] . $service; 

$sfResponse = wp_remote_post($url, array(
     'method' => $method, 
     'timeout' => 5, 
     'redirection' => 5, 
     'httpversion' => 1.0, 
     'blocking' => true, 
     'headers' => array("Authorization" => "OAuth ". $connInfo['access_token'], "Content-type" => "application/json"), 
     'body' => $content, 
     'cookies' => array() 
     ) 
    ); 

的$内容正在通过json_encode编码它到达该点之前, 。

更新: 它是特定于由WP_Http_Curl类发送的额外CURL选项之一。我还没有缩小哪一个Salesforce遇到问题。

+0

你能分享你的PHP代码吗? –

+0

你使用的是PHP工具箱吗? – VictorKilo

+0

不,不使用php工具包。它似乎主要针对SOAP请求。我只是使用REST服务。 – Freddy

回答

1

解决方法是在请求中禁用重定向。你有它作为5(默认) - 它需要设置为0才能工作。

最初的请求起作用,但Salesforce发送location头作为响应的一部分(新创建的对象的URL)。 WordPress认为它被告知网址已移动,并且应该在这个新网址上再次尝试。您看到的响应是对刚创建的实际对象的第二次请求的结果。该URL显然不接受POST请求。

这是一个有点奇怪的Salesforce来进行发送这样的头,但也有some discussion going on上的WordPress不应该遵循location头方法,能解决这个非301/302响应WordPress的一面。

感谢您发表的方式。你更新让我开始调试WP_Http_Curl,这让我意识到它实际上正在发出第二个HTTP请求。

+0

这正是发生的事情,我显然认为我试图切换一切(事后总是这样)。感谢您的回应,我会验证它并将其标记为答案。非常感谢! – Freddy

相关问题