[MySQL][PHP]Licencja - API |
[MySQL][PHP]Licencja - API |
6.04.2020, 20:11:14
Post
#1
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) |
Witam, na podstawie wielu poradników w internecie próbowałem napisać własny skrypt sprawdzający licencję, na początek podam kod który tworzy mi licencję w formacie XXXXX-XXXXX-XXXXX-XXXXX i wysyła do bazy danych:
Poniżej moje API:
Struktura bazy wygląda tak: ID | client | email | software | domain | key | amount Przykład: 1 | test | test@test.pl | moduł | strona.pl | EYRA2-8965Z-3TSPN-RUAAU | 200 nie wiem co dokładnie mam źle w API ale wchodząc w link: domena.pl/api.php?domain=strona.pl&key=EYRA2-8965Z-3TSPN-RUAAU zwraca mi wynik ERROR_nolicense Chcę aby Klient kupując u mnie licencję na dany produkt i wpisując ja na swojej stronie skrypt łączył się z moim API które łączy się z bazą danych i sprawdza czy domena strony jak i podany klucz są zapisane w mojej jak i klucz jest przypisany do tej domeny. Walczę z tym już długi czas i nie wiem co mam źle... PS. nie wiem czy to ważne ale kod do łączenia się z moim api w skrypcie mam taki:
|
|
|
6.04.2020, 20:55:44
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
A sprawdziłeś chociaż co dostajesz z
$domain = "".$_GET['domain'].""; |
|
|
6.04.2020, 21:07:55
Post
#3
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) |
O ile dobrze zrozumiałem to... dodałem do api na końcu echo $domain; i wyświetla mi adres strony jaki podaję w linku: domena.pl/api.php?domain=strona.pl&key=EYRA2-8965Z-3TSPN-RUAAU
w tym wypadku pokazuje mi: strona.pl |
|
|
6.04.2020, 21:25:54
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
No to teraz sprawdź co masz w $lic
|
|
|
6.04.2020, 21:41:55
Post
#5
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) |
Zwraca mi Array i podejrzewam że błąde leży w tym kodzie:
Ale już nie ogarniam jak to naprawić |
|
|
7.04.2020, 07:16:28
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Skoro wiesz że łapie się else to wiesz że $twokey != $key. Dumpuj sobie dane i idź w górę kodu. W ogóle czemu w destruktorze cokolwiek robisz zwłaszcza header()?
Ten post edytował viking 7.04.2020, 07:17:40 -------------------- |
|
|
7.04.2020, 11:00:17
Post
#7
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Witam,
mam takie pytanie: czy ten klucz licencyjny ma być generowany losowo czy u Ciebie jest w nim jakiś ukryty sens (kolejność, logika itp)? Pytam, bo klasa strasznie rozbujana, można wygenerować klucz na podstawie np. generowania kluczy GUID funkcją sprintf Mozilla GUID, jedna prosta funkcja i po sprawie, można używając md5 i uniqid rand i tak dalej, parę linijek kodu. Sprawdzić przed zapisem czy aby takiego klucza nie ma już w bazie i po kłopocie. Poza tym Kod $sql = "SELECT * FROM `lic` WHERE `domain` = '{$domain}' LIMIT 1"; dlaczego LIMIT 1? A jak się powtórzy klucz? Prawdopodobieństwo istnieje, małe ale jest. Sprawdzić przed zapisem do bazy. gino |
|
|
8.04.2020, 19:04:11
Post
#8
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) |
viking,
wzorowałem się na różnych przykładach podobnych kodów, nie znam dobrze php dlatego nie wiem gdzie dokładnie jest błąd i jak go naprawić. gino, Poniżej daję kod jaki mam podczas generacji tej licencji:
Ogólnie to miałem zamiar by licencja była generowana z nazwy domeny, nazwy produktu/modułu oraz nazwy użytkownika (name) na podstawie tych 3 danych ma generować unikalną licencję (chyba tutaj poprawnie mam napisany kod), kod licencyjny w przypadku tego co robię będzie raczej nie możliwy do powtórzenia więc o to się nie martwię. co do twojego pytania o LIMIT 1 to tak jak napisałem koledze wyżej wzorowałem się na różnych przykładach dostępnych i w internecie. Byłbym wdzięczny gdyby ktoś pomógł naprawić moje API Pomoże ktoś? zależy mi na czasie Ten post edytował alkesz1718 7.04.2020, 17:03:49 |
|
|
9.04.2020, 07:09:09
Post
#9
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
A to co za twór?
Kod if($lic = $main->getLicInfo($domain)){ mam na myśli $lic['license_status']? Według kodu odwołujesz się do pola w tabeli bazy danych, którego nie masz.if($lic['license_status']){ Kod public function getLicInfo($domain){ global $db, $config; $sql = "SELECT * FROM `lic` WHERE `domain` = '{$domain}' LIMIT 1"; $result = $db->query($sql); if($result->num_rows == 1){ return $result->fetch_assoc(); } return false; } W tej metodzie zwracasz tablice asocjacyjną z zapytania sql, wywalasz to do zmiennej tablicowej $lic. Następnie usiłujesz odczytać pole license_status ( a w zasadzie sprawdzic jego stan) którego nie masz w tabeli. Przynajmniej tej, którą tutaj opisałeś. Albo coś obciąłeś w tablicy albo te klasy to niepełna implementacja, albo wszystkiego nie piszesz, albo pomyliły Ci się zmienne, etc.. gino Ten post edytował gino 9.04.2020, 07:13:57 |
|
|
9.04.2020, 17:21:08
Post
#10
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 0 Dołączył: 8.12.2014 Skąd: Czernina Ostrzeżenie: (0%) |
Ok, zmieniłem tą część co podałeś...
Teraz pokazuje błąd ERROR_wrongkey, wiem że teraz błąd leży w kodach:
oraz:
Mój generator tworzy klucz na podstawie nazwy użytkownika, nazwy modułu oraz nazwy domeny... w powyżej funkcji widzę że jest tylko sama domena. W generatorze mogę zmienić by klucz był wydawany na podstawie nazwy modułu i adresu strony ale teraz pytanie jak to zrobić by w/w kod zamiast samej domeny obsługiwał nazwę modułu... Całe te API jest sklejką z kilku poradników jakie znalazłem, nie jestem jakimś profesjonalistą w PHP... wręcz przeciwnie, moja wiedza jest bardzo niska, część funkcji ogarniam a część nie, takie API gdzie inna strona łączy się z stroną autora i sprawdza jakieś dane po czym zwraca informacje by skrypt wykonywał działanie jest czarną magią... |
|
|
9.04.2020, 19:39:25
Post
#11
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Błąd w dalszym ciągu leży w Twoich if-ach, sprawdzasz pola, których fizycznie nie ma, problem leży jeszcze tutaj:
Kod $twokey = $main->keygen($lic['license_domain']); if($twokey == $key){... nie masz pola licence_domain w tabeli bazy danych, co to za zmienna $key, która nie występuje nigdzie wcześniej? Strasznie to przekombinowane jest, klucz jest tylko kluczem, nieważne jak zbudowany, wcale nie musi być akurat z domeny, nazwy itp, bo tak naprawdę nie jest ta wiedza do niczego potrzebna, to tylko ciąg znaków, ważne, żeby był unikalny dal każdego użytkownika.. gino edit: $key to akurat jest z $_GET wuec jest ok Ten post edytował gino 9.04.2020, 20:00:50 |
|
|
10.04.2020, 19:08:30
Post
#12
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Piszessz jakiś kod i nie sprawdzasz co zwraca? Weź człowieku wstaw sobie kilka var_dump() w kodzie i patrze co dostajesz i z czym porównujesz. Trochę samodzielności.
|
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 15:29 |