У меня возникли проблемы с загрузкой изображения профиля для пользователя. Я продолжаю получать ошибку 404, которая, как говорят мне документы API, указывает на то, что профиль не может быть найден. Однако над кодом, который я покажу через секунду, у меня есть код для получения профиля, и он существует для конкретного идентификатора пользователя, который я использую. Кроме того:
- Это с PHP SDK
- Учетная запись, которую я использовал для аутентификации, имеет доступ к редактированию профилей пользователей.
- Тестовое изображение, которое я использую, существует, и я могу его прочитать.
Вот мой код. Это немного небрежно, но я исправлю это, как только сделаю это для этого конкретного тестового пользователя:
$file = "testimage.jpeg";
$image_data = file_get_contents($file);
// Build our data
$uid = uniqid();
$data = "--" . $uid . "\r\n".
"Content-Disposition: form-data; name=\"profileImage\"; filename=\"profileImage.jpeg\"\r\n".
"Content-Type: image/jpeg\r\n".
"\r\n".
$image_data . "\r\n".
"--" . $uid . "--";
$success = false;
$tryAgain = true;
$numAttempts = 1;
$url = "/d2l/api/lp/1.0/profile/user/".$userId."/image";
$uri = $opContext->createAuthenticatedUri($url, "POST");
curl_setopt($ch, CURLOPT_URL, $uri);
while ($tryAgain && $numAttempts < MAX_NUM_ATTEMPTS) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Disposition: multipart/form-data; boundary='.$uid,
'Content-Length: ' . strlen($data))
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$responseCode = $opContext->handleResult($response, $httpCode, $contentType);
if ($responseCode == D2LUserContext::RESULT_OKAY) {
$success = true;
$tryAgain = false;
}
elseif ($responseCode == D2LUserContext::RESULT_INVALID_TIMESTAMP) {
// Try again since time skew should now be fixed.
$tryAgain = true;
}
else { // Something bad happened
echo "here:\r\n".
$httpCode.
"\r\n\r\n".
$responseCode;
exit;
}
$numAttempts++;
}
Я в недоумении, чего мне не хватает. Мы будем очень признательны за любые советы. Спасибо
Изменить: я только что заметил этот раздел в документах API:
Примечание
Чтобы использовать это действие, служба должна предоставить конкретному приложению разрешение на выполнение этого действия (то есть предоставить разрешение конкретному идентификатору приложения и ключу для выполнения этого действия).
Я узнаю, действительно ли у нашего идентификатора/ключа приложения есть разрешение. Я думал, что да, но, возможно, мне дали неверную информацию. Я поинтересуюсь об этом.