Połącz aplikację PHP z dokumentami ONLYOFFICE i zapisz zmiany

Niestandardowa aplikacja PHP integruje się z ONLYOFFICE Docs, udostępniając adres URL dokumentu, który Docs może pobrać, ładując interfejs API JavaScript Docs w przeglądarce i akceptując wywołanie zwrotne, które zapisuje edytowany plik. Zachowaj podpisywanie JWT na serwerze PHP i zapewnij, aby zarówno adres URL dokumentu, jak i adres URL wywołania zwrotnego były dostępne z sieci, w której działa ONLYOFFICE Docs.

Wiele błędów integracji wynika z pomieszania adresów widzianych przez przeglądarkę, PHP i serwer dokumentów. Przetestuj każdą trasę z sieci, która z niej korzysta.

Przygotuj aplikację PHP i serwer dokumentów

ONLYOFFICE Docs udostępnia edytor dokumentów. Twoja aplikacja pozostaje menedżerem dokumentów i usługą przechowywania: uwierzytelnia użytkowników, decyduje, które pliki mogą otwierać, dostarcza plik źródłowy i zapisuje wynik. Zainstaluj Serwer Dokumentów osobno, a następnie zweryfikuj jego /healthcheckpunkt końcowy przed debugowaniem kodu aplikacji.

Użyj w swojej konfiguracji trzech dostępnych adresów:

  • Adres URL dokumentów: adres, którego przeglądarka użytkownika używa do załadowania edytora i jego interfejsu API JavaScript.
  • Adres URL dokumentu: adres bezwzględny, którego serwer dokumentów może użyć do pobrania pliku źródłowego z pamięci masowej PHP.
  • Adres URL wywołania zwrotnego: bezwzględny adres, na który serwer dokumentów może wysłać żądanie POST po edycji, dzięki czemu PHP może zapisać zmiany.
Strona z plikami niestandardowego projektu PHP zawierająca plik DOCX i osadzony pod nim edytor ONLYOFFICE.
Przykładowy ekran aplikacji: aplikacja PHP jest właścicielem listy plików, podczas gdy edytor ONLYOFFICE otwiera się na jej stronie.

Na przykład, https://docs.example.commoże obsługiwać edytor, wskazując jednocześnie https://app.example.com/files/42/downloadna https://app.example.com/onlyoffice/callbackPHP. Przetestuj dostępność przeglądarki do Dokumentów i Dokumentów do PHP. We wdrożeniu localhostoznacza to bieżącą maszynę lub kontener, więc zazwyczaj jest to niewłaściwy adres międzyusługowy.

Zbuduj konfigurację dokumentu dla autoryzowanego pliku

W przypadku uwierzytelnionego żądania otwarcia, wczytaj metadane pliku i skompiluj konfigurację edytora w zapleczu PHP. Ustaw rozszerzenie pliku, tytuł, bezwzględny adres URL pobierania oraz klucz dokumentu. Zachowaj ten klucz stabilny dla współbieżnych edytorów tej samej wersji; zmień go, gdy PHP zastąpi kod źródłowy nową wersją.

<?php
$config = [
  'documentType' => 'word',
  'document' => [
    'fileType' => 'docx',
    'key' => $document['revision_key'],
    'title' => $document['name'],
    'url' => 'https://app.example.com/files/42/download',
    'permissions' => ['edit' => true],
  ],
  'editorConfig' => [
    'callbackUrl' => 'https://app.example.com/onlyoffice/callback',
    'user' => ['id' => (string)$user['id'], 'name' => $user['name']],
  ],
];
Widok kodu PHP config.php z typem pliku dokumentu, kluczem, tytułem, adresem URL i wartościami editorConfig callbackUrl.
Przykładowa konfiguracja PHP: adres URL dokumentu i adres URL wywołania zwrotnego łączą magazyn z edytorem.

Wymuś uprawnienia do pliku przed wygenerowaniem adresu URL. Nie ujawniaj danych uwierzytelniających do pamięci masowej ani nie omijaj autoryzacji; linki prywatne lub lokalne mogą również wymagać tokena zgodnie z zasadami ONLYOFFICE.

Informacje na temat wymaganych pól i ścieżki skryptu API można znaleźć w dokumencie ONLYOFFICE dotyczącym konfiguracji dokumentów oraz w podręczniku instalacji hostowanej samodzielnie .

Załaduj edytor i podpisz jego konfigurację

JWT oznacza JSON Web Token, podpisany token, który pozwala ONLYOFFICE zweryfikować, czy konfiguracja nie została zmieniona podczas przesyłania. Walidacja JWT jest domyślnie włączona w obecnych wdrożeniach; podpisz konfigurację edytora pasującym kluczem tajnym tokena przeglądarki skonfigurowanym w Docs. Jeśli Twoja konfiguracja używa oddzielnego klucza tajnego tokena wychodzącego, waliduj wywołania zwrotne również przy użyciu tego klucza tajnego skrzynki nadawczej. Od Docs 7.2 instalacje Dockera mogą automatycznie generować klucz tajny, więc ustaw i zachowaj stabilne klucze tajne na potrzeby produkcji.

Oficjalny przewodnik po podpisach ONLYOFFICE pokazuje kod PHP z obsługiwanym firebase/php-jwtpakietem. Zainstaluj go za pomocą composer require firebase/php-jwt, a następnie podpisz całą konfigurację w zapleczu, zanim przeniesiesz ją na stronę:

use Firebase\JWT\JWT;

$secret = getenv('ONLYOFFICE_JWT_SECRET');
if (!$secret) {
    throw new RuntimeException('ONLYOFFICE JWT secret is not configured');
}
$config['token'] = JWT::encode($config, $secret, 'HS256');
Widok kodu PHP sign.php odczytujący ONLYOFFICE_JWT_SECRET ze środowiska i podpisujący konfigurację za pomocą HS256.
Przykładowy kod zaplecza: serwer podpisuje konfigurację edytora bez ujawniania tajnego klucza JWT w przeglądarce.

Zachowaj tajemnicę poza kodem przeglądarki i kontrolą źródła. Załaduj https://docs.example.com/web-apps/apps/api/documents/api.jsi przekaż podpisany plik JSON do DocsAPI.DocEditor:

<div id="editor"></div>
<script src="https://docs.example.com/web-apps/apps/api/documents/api.js"></script>
<script>
  new DocsAPI.DocEditor("editor", <?= $signedConfigJson ?>);
</script>

Koduj JSON bezpiecznie json_encodelub pobieraj podpisaną konfigurację z punktu końcowego o tym samym źródle; nie łącz niezaufanych wartości z JavaScript. Przewodnik po podpisach dokumentuje HMAC-SHA256. W przypadku dokumentów Docs 8.1 i nowszych z równoważeniem obciążenia skrypt API może zawierać udokumentowany shardkeyparametr zapytania; pojedynczy serwer go nie potrzebuje.

Zapisz zmiany za pomocą wywołania zwrotnego PHP

Po edycji serwer dokumentów wysyła żądanie POST do callbackUrl. Status 2 oznacza, że ​​edycja jest zakończona i plik jest gotowy do zapisania; status 6 to wynik wymuszonego zapisu. Wywołanie zwrotne zawiera tymczasowy adres URL pobierania edytowanego pliku. Pobierz go i atomowo zastąp zapisaną wersję lub utwórz nową wersję zgodnie z polityką rewizji aplikacji. Zwróć {"error":0}dopiero po pomyślnym zapisie do pamięci masowej.

<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

$raw = file_get_contents('php://input');
$data = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$auth = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
$token = preg_replace('/^Bearer\s+/i', '', $auth);
$claims = JWT::decode($token, new Key($outboxSecret, 'HS256'));
$verified = (array)($claims->payload ?? []);

if (($verified['key'] ?? '') !== ($data['key'] ?? '')) {
    http_response_code(401);
    exit;
}
$document = findDocumentByRevisionKey($verified['key']);
if (!$document) {
    http_response_code(404);
    exit;
}
if (in_array((int)$data['status'], [2, 6], true)) {
    downloadAndStoreFromDocs($data['url'], $document);
}
header('Content-Type: application/json');
echo json_encode(['error' => 0]);
Widok kodu PHP callback.php obsługujący statusy edycji 2 i 6 i zwracający wartość błędu JSON równą zero.
Przykładowa logika wywołania zwrotnego: zapisz zwrócony dokument dla obsługiwanych statusów zapisu i potwierdź pomyślne przetworzenie.

W przykładzie przyjęto domyślny wychodzący Authorization: Bearernagłówek JWT i pasujący do niego klucz skrzynki nadawczej. Dostosuj go, jeśli Twój serwer używa innego nagłówka lub tokenu body. Pomocnik pobierania powinien zezwalać tylko na dostęp do hosta Docs, sprawdzać odpowiedź i bezpiecznie zastępować oczekiwany plik. Nigdy nie ufaj dowolnemu adresowi URL ani niepodpisanemu kluczowi dokumentu.

Po pomyślnym zapisaniu zwróć JSON zawierający {"error":0}. Zapoznaj się z dokumentacją wywołania zwrotnego, aby uzyskać informacje o statusach i ładunkach, oraz z cyklem życia zapisu , aby uzyskać informacje o czasie wywołania zwrotnego.

Sprawdź całą trasę w obie strony

Otwórz testowy plik DOCX jako autoryzowany użytkownik, wprowadź niewielką edycję i zamknij edytor. Sprawdź, czy klucz wywołania zwrotnego i status odpowiadają żądanemu plikowi, sprawdź, czy aplikacja zapisała nowe bajty, a następnie ponownie otwórz dokument. Jeśli ładowanie się nie powiedzie, sprawdź ścieżkę skryptu API i token konfiguracyjny; jeśli zapisywanie się nie powiedzie, sprawdź osiągalność wywołania zwrotnego, walidację JWT, odpowiedź JSON i logi pamięci PHP.

ONLYOFFICE publikuje przykład integracji PHP i przykładową aplikację PHP, ale wyraźnie ostrzega, że ​​przykładowe integracje nie posiadają zabezpieczeń produkcyjnych, takich jak autoryzacja pamięci masowej i walidacja żądania zapisu. Wykorzystaj je, aby zrozumieć przepływ API, a następnie zachowaj kontrolę dostępu i zabezpieczenia wywołań zwrotnych we własnej aplikacji.

Zostaw komentarz

Połącz aplikację PHP z dokumentami ONLYOFFICE i zapisz zmiany

Połącz aplikację PHP z dokumentami ONLYOFFICE i zapisz zmiany

Osadź edytor ONLYOFFICE w swojej aplikacji PHP, podpisz jego konfigurację za pomocą JWT i zapisz edytowane pliki za pomocą bezpiecznego wywołania zwrotnego.

Zachowaj ONLYOFFICE Spell Check w wybranym języku

Zachowaj ONLYOFFICE Spell Check w wybranym języku

Ustaw język sprawdzania poprawności całego dokumentu lub zaznaczonego tekstu, sprawdź, czy sprawdzanie pisowni jest aktywne i rozpoznaj, kiedy brakuje słownika serwera.

Śledź zmiany po ponownym otwarciu dokumentu

Śledź zmiany po ponownym otwarciu dokumentu

Włącz funkcję stałego śledzenia zmian dla wszystkich w dokumencie ONLYOFFICE, sprawdź, czy zmiany są rejestrowane, i zrozum ograniczenia tego ustawienia.

Śledź przepływ, aby wyczyścić Nginx 502 ONLYOFFICE

Śledź przepływ, aby wyczyścić Nginx 502 ONLYOFFICE

Sprawdź, czy usługa Nginx, sieć Docker lub wewnętrzna usługa ONLYOFFICE zwraca błąd 502, a następnie zweryfikuj poprawiony kod źródłowy i kontrolę kondycji.

Śledź wywołanie zwrotne zapisu, gdy ONLYOFFICE nie zapisuje w NextCloud

Śledź wywołanie zwrotne zapisu, gdy ONLYOFFICE nie zapisuje w NextCloud

Zdiagnozuj nieudane zapisy ONLYOFFICE, sprawdzając trasę wywołania zwrotnego Nextcloud, przekierowania proxy i dzienniki pamięci masowej, a następnie sprawdź, czy edytowany plik zostanie zachowany.

Zapobiegnij wyczerpaniu się pamięci VPS na serwerze dokumentów ONLYOFFICE

Zapobiegnij wyczerpaniu się pamięci VPS na serwerze dokumentów ONLYOFFICE

Znajdź przyczynę awarii pamięci ONLYOFFICE, sprawdź limity Dockera, prawidłowo dostosuj rozmiar pamięci RAM VPS, bezpiecznie dodaj wymianę i zweryfikuj otwieranie i zapisywanie dokumentów.

Śledź nieudany eksport pliku PDF ONLYOFFICE do źródła

Śledź nieudany eksport pliku PDF ONLYOFFICE do źródła

Oddziel problemy z pobieraniem przez przeglądarkę od błędów konwersji po stronie serwera i użyj odpowiedniego dziennika lub kontroli dostępu, aby eksportowanie plików PDF przebiegło pomyślnie.

Rozwiąż błąd „Token jest nieprawidłowy” w aplikacji ONLYOFFICE w NextCloud

Rozwiąż błąd „Token jest nieprawidłowy” w aplikacji ONLYOFFICE w NextCloud

Porównaj tajny klucz JWT używany przez ONLYOFFICE Docs i Nextcloud, zastosuj go bezpiecznie w instalacjach Docker lub Linux i zweryfikuj połączenie bez osłabiania uwierzytelniania.

Wdrażanie społeczności ONLYOFFICE Workspace w systemie Ubuntu 24.04

Wdrażanie społeczności ONLYOFFICE Workspace w systemie Ubuntu 24.04

Zainstaluj ONLYOFFICE Workspace Community na Ubuntu 24.04 przy użyciu oficjalnego skryptu Docker, sprawdź wymagania serwera, pomiń aplikację Mail, jeśli to konieczne, i zweryfikuj bezpieczeństwo portalu.

Skonfiguruj tajne klucze JWT ONLYOFFICE na serwerze i łączniku

Skonfiguruj tajne klucze JWT ONLYOFFICE na serwerze i łączniku

Skonfiguruj pasujące tajne klucze JWT dla ONLYOFFICE Docs i jego łącznika, podając bezpieczne kroki dla pakietów Linux, wdrożeń Docker i weryfikacji.