私は小さな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だと思いますか?手伝って頂けますか?
ありがとう!