PHP - > Subiekt Sfera łączenie przez COM

0

Witam,
Potrzebuję pomocy w połączeniu się z subiektem sfera przez PHP.
Poniżej kod który wykorzystuję.

<?php
$connS = new COM('Insert.gt') or die('Cannot create an InsERT GT object');
$dodatki = new COM("InsERT.Dodatki") or die("Cannot create an Dodatki object");
$connS->Produkt = 1; 
$connS->Serwer = $serverName;
$connS->Baza = $databaseName; 
$connS->Autentykacja = 0;
$connS->Uzytkownik = $user; 
$connS->UzytkownikHaslo = $dodatki->Szyfruj($password);
$connS->Operator = 'Jan Kowalski'; 
$connS->OperatorHaslo = $dodatki->Szyfruj("Admin");
$subiekt = $connS->Uruchom(0,4);


$Okh = $subiekt->Kontrahenci->Wczytaj('1');
$kNazwa=$Okh->Nazwa;
$kMiejsc=$Okh->Miejscowosc;
	
 echo '<p> Nazwa kontrahenta: '.$kNazwa.'</p><br/>';
 echo '<p> Miasto kontrahenta: '.$kMiejsc.'</p><br/>';

?>

Dostaję błąd:
Fatal error: Uncaught com_exception: Source: Unknown
Description: Unknown in C:\xampp\htdocs\Zlecenia\sfera_dodajTW.php:21 Stack trace: #0 C:\xampp\htdocs\Zlecenia\sfera_dodajTW.php(21): variant->Wczytaj('1') #1 {main} thrown in C:\xampp\htdocs\Zlecenia\sfera_dodajTW.php on line 21

serwer mam postawiony na Apache przez XAMPP

Generalnie szukałem rozwiązań i straciłem pół dnia bez żadnego postępu. Chętnie zlecę napisanie kodu/skonfigurowanie komuś odpłatnie.

0

A co potrzebujesz napisać?

0

Bardzo możliwe że brakuje Ci rozszerzenia COM w PHP.
Poszukaj w php.ini PHP_COM_DOTNET i odkomentuj dll'kę skoro to windows

0

@musrus: W php.ini dodałem:
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

Zanim to dodałem to pojawiał się komunikat, że nie rozumie polecenia COM. Także chyba rozpoznaje.
Co jest najlepsze, że bez znaczenia jest czy wpiszę "Jan Kowalski" czy "aaaa" to pojawia się ten sam błąd. Jeśli natomiast zmienię adres serwera albo nazwę bazy to już strona się w ogóle nie wczytuje.

@UglyMan - jak wyżej, chcę, żeby ktoś mi napisał kod odpowiedzialny za łączenie się PHP z Subiekt Sfera (ewentualnie skonfigurowanie php/subiekt jeżeli w tym tkwi przyczyna niepowodzenia)

0

COMy są dość niewdzięczne zwłaszcza jak próbuje się to zrobić w językach, które nie wspierają tego. Nie wiadomo czy błąd jest po stronie implementacji, czy pochodzi z obiektu. Jak bym poszukał czy nie można gdzieś kupić np API restowego, które opakowuje COMy. Może się okazać taniej niż implementować to w PHP. Masz w ogóle jakąś dokumentacje do tego?

Jaki błąd ci się pojawia? Masz w Subiekcie stworzonego użytkownika "Jan Kowalski"?

2

Błąd masz z pliku:
sfera_dodajTW.php
Wklej zawartość tego pilku i zwróć uwagę na linię 21.
To co wkliłeś to raczej nie ten plik.

P.S.
Dodaj TW to mi się źle kojarzy, ale ja tam stary jestem.

0

@jurek1980: TW Bolek xD jakoś nie skojarzyłem.

dokładnie ten plik wczytuję. Linia 21 to: $Okh = $subiekt->Kontrahenci->Wczytaj('1');

0

@UglyMan: mam dokumentację Subiekt Sfera (dość rozbudowaną). Jest tam sposób połączenia, z tym że tam chyba jest na przykładzie .net (?)
Tak, jest utworzony użytkownik Jan Kowalski, gdzie Kolumna uz_Imie: Jan, Kolumna uz_Nazwisko: Kowalski

0

Nie wiem jak wygląda logowanie do Subiekta ale czy nie ma tam pola login na użytkowniku?

0

Hmm. Jakiej wersji PHP używasz? Może zalecają tam konkretną?

0

@UglyMan: Tak wygląda tabela użytkowników:

SharedScreenshot.jpg

Tak wygląda logowanie do subiekt:

2.jpg

A tak wygląda treść dokumentacji Sfera:

3.jpg

0

W xampie masz chyba od razu info jaką wersję używasz.
Możesz też stworzyć plik typu test.php a w nim:

phpinfo();

Przy okazji wylisitują się rozszenia i zobaczysz czy COM jest widoczne.

0

@jurek1980: PHP Version 7.3.7
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

2

Dobra Panowie, udało się.

Problem był chyba podwójnej natury:

Napisałem makro w VBA, żeby spróbować połączyć się z Subiektem

  1. Nie wiem czemu, ale przy 1 aktywnej licencji VBA informował mnie, że osiągnięto limit licencji. Więc dokupiłem drugą i już zaczął łączyć się z bazą.

  2. $Okh = $subiekt->Kontrahenci->Wczytaj(Id); - tutaj myślałem, że Id to jest id z SQL a nie symbol nadawany w subiekcie. Po prostu wywalało błąd, ponieważ symbolu = "1" nie było w bazie.

Rozumiem, że komunikacja bezpośrednio przez PHP nie będzie idealnym rozwiązaniem, ale na pewno lepszym, niż to co próbowałem na początku, czyli bezpośrednie zapytania do SQL.

W każdym razie dziękuję każdemu kto poświęcił czas za pomoc i wskazówki.

Temat ze stworzeniem WebService i tak mnie w przyszłości czeka. Na razie to wszystko jest przejściowe aby sprawdzić zapotrzebowanie na dane funkcjonalności serwisu.

Pozdrawiam

0

@Mateusz Arciszewski: Cześć,
z tego co pamiętam to jeżeli wpiszesz szukanego kh w apostrofach to szuka po symbolu, jeżeli zaś wpiszesz jako int (bez apostrofów które lubię nazywać ciaparakami) to poszuka po id z bazy

0
Mateusz Arciszewski napisał(a):

Rozumiem, że komunikacja bezpośrednio przez PHP nie będzie idealnym rozwiązaniem, ale na pewno lepszym, niż to co próbowałem na początku, czyli bezpośrednie zapytania do SQL.

Wg mnie to właśnie jest gorsze rozwiązanie.
Główna wada to wprowadzenie pośrednika (Subiekt Sfera). Przez co znacznie spowalniasz requesty, dodajesz wiele błędów związanych z tym pośrednikiem, uzależniasz się od jednej platformy (Windows). Generalnie ograniczasz swoje możliwości (nawet w dokumentacji do Sfery posiłkują się zapytaniami do bazy przy trudniejszych operacjach).

Na razie to wszystko jest przejściowe aby sprawdzić zapotrzebowanie na dane funkcjonalności serwisu.

W takim wypadku cokolwiek z .NET będzie lepsze.

Opisz dokładniej co chcesz zrobić bo COM i serwer www średnio do siebie pasują.

1 użytkowników online, w tym zalogowanych: 0, gości: 1