У меня есть небольшое приложение Laravel, и я добавил http://phphttpclient.com/ — httpful REST Client для работы с внешним API — 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.
SetUserPassword
Установите пароль пользователя MailStore.
аргументы
Имя Тип Описание
instanceID строка Уникальный идентификатор экземпляра MailStore, в котором вызывается эта команда.
userName string Имя пользователя MailStore.
строка пароля Пароль пользователя 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? Вы можете мне помочь?
Спасибо!
В методе addHeaders вам нужно передать массив [‘Content-Type’ => ‘application / x-www-form-urlencoded’]. Остальные параметры должны быть переданы как тело запроса post.
Других решений пока нет …