1

REST API を介して Salesforce と対話する Wordpress プラグインを作成しました。ユーザー名/パスワードを使用して、インスタンス URL と認証トークンを正常に取得します。

wp_remote_post と GET および POST をそれぞれ使用して、クエリを送信し、オブジェクトを作成できます。

ただし、オブジェクトを作成すると、Salesforce インスタンスで正常に作成されますが、POST への応答として次のようになります。

{"メッセージ":"HTTP メソッド 'POST' は許可されていません。許可されているのは HEAD、GET、PATCH、DELETE です","errorCode":"METHOD_NOT_ALLOWED"}

これらのリクエストと同じ json 本文コンテンツを使用して、Salesforce Workbench を介して問題なく送信および作成できます。次のような適切な応答が得られます。

{ "id": "003E000000OubjkIAB", "成功": true, "エラー": [] }

私が送信しているヘッダーに、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()
        )
    );

$content は、この時点に到達する前に json_encode を介してエンコードされています。

更新: WP_Http_Curl クラスによって送信される追加の CURL オプションの 1 つに固有のものです。Salesforce が問題を抱えているのはどれか、まだ絞り込んでいません。

4

1 に答える 1

1

解決策は、リクエストでリダイレクトを無効にすることです。5(デフォルト)として使用できます。これを機能させるには、0に設定する必要があります。

最初のリクエストは機能しますが、Salesforcelocationはレスポンスの一部としてヘッダー(新しく作成されたオブジェクトのURL)を送信します。WordPressは、URLが移動したため、この新しいURLで再試行する必要があると通知されていると考えています。表示されている応答は、作成したばかりの実際のオブジェクトに対する2番目のリクエストの結果です。POSTそのURLは明らかにリクエストを受け入れません。

Salesforceがそのようなヘッダーを送信するのは少し奇妙ですが、WordPress側では、これを解決する非/応答のヘッダーにWordPressが従うべきではないという議論もあります。location301302

ちなみにこれを投稿していただきありがとうございます。更新すると、デバッグが開始WP_Http_Curlされ、実際に2番目のHTTPリクエストを作成していることがわかりました。

于 2013-02-16T02:16:43.710 に答える