2

私は小さなlaravelアプリを持っていて、http://phphttpclient.com/を追加しました-外部APIで動作するhttpful RESTクライアント - http://en.help.mailstore.com/spe/Management_API___Using_the_API

メールストア API と「話す」ことができました。以下に一例を示します。

public function GetEnvironmentInfo()
{
    $uri = 'https://bla.com:8474/api/invoke/GetEnvironmentInfo';
    $response = Httpful::post($uri)             

        ->authenticateWith('admin', 'password')  
        ->send();  
    $errors = $response->body->error;
    $version = $response->body->result->version;
    $license = $response->body->result->licenseeName;
        dd($version . $license . $errors);
}

その機能が働いています。しかし、追加のデータを API に送信しようとすると問題が発生します。

APIのマニュアルには、次の文があります。

「関数に追加データが必要な場合、このデータは urlencoded で送信する必要があります。HTTP ヘッダーの Content-Type: application/x-www-form-urlencoded を設定する必要があります。」

たとえば、API を使用してユーザー パスワードを設定したいとします。

ユーザーパスワードの設定

MailStoreユーザーのパスワードを設定します。

引数 名前 タイプ 説明 instanceID 文字列 このコマンドが呼び出される MailStore インスタンスの一意の ID。userName string MailStore ユーザーのユーザー名。password 文字列 MailStore ユーザーのパスワード。

このコードを試しました。

public function SetUserPassword()
{
    $uri = 'bla.com:8474/api/invoke/SetUserPassword';
    $response = Httpful::post($uri)             

        ->authenticateWith('admin', 'password') 
        ->addHeaders(array(
            'instanceID' => 'bla',
            'userName' => 'myuser',
            'password' => 'mypassword'
            ))
        ->sendsType(\Httpful\Mime::FORM)
        ->send();  
        dd($response->body->error);
}

そして、ここに私が得るエラー応答があります:

object(stdClass)[142]
  public 'message' => string 'Argument instanceID is missing.' (length=31)
  public 'details' => string 'System.Exception: Argument instanceID is missing.
  bei #Y3c.#VGc.#X3c(#ncb #tPc, #8xe #I9f, String #GPf, NameValueCollection #P5b, Int32     #joc)
   bei #Y3c.#VGc.#Slc(#LLc #Rmc, #8xe #I9f)
' (length=192)

instanceID とその他の引数をヘッダーに追加しましたが、API は引数または値を見つけることができません。

問題はurlencodeだと思いますか?手伝って頂けますか?

ありがとう!

4

1 に答える 1

1

addHeaders メソッドでは、配列 ['Content-Type' => 'application/x-www-form-urlencoded'] を渡す必要があります。残りのパラメーターは、投稿リクエストの本文として渡す必要があります。

于 2014-10-10T09:07:32.900 に答える