Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Licencja - API
alkesz1718
post 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:
  1. <?php
  2.  
  3. if (!defined("LICENSE_KEY_INC") ) {
  4. define("LICENSE_KEY_INC",1) ;
  5.  
  6. class license_key{
  7. var $keylen= 20;
  8. var $basechar='23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
  9. var $formatstr= '55555';
  10. var $isvalid="YES";
  11. var $invalid="NO";
  12. var $software="";
  13.  
  14. function codeGenerate($name=""){
  15. $keylen= $this->keylen;
  16. $initlen=$this->initLen();
  17. $initcode=$this->initCode($initlen);
  18. $fullcode=$this->extendCode($initcode,$name);
  19. return $this->formatLicense($fullcode);
  20. }
  21.  
  22. function codeValidate($serial,$name=""){
  23. if(empty($serial)|| $serial=="")return $this->invalid;
  24. $serial=str_replace("-","",$serial);
  25. $serial=strtoupper($serial);
  26. $serial=str_replace(array("0","1","O","I",),
  27. array("","","","",),
  28. $serial);
  29. $keylen= $this->keylen;
  30. $thislen=strlen($serial);
  31. if($keylen<>$thislen)return $this->invalid;
  32. $initlen=$this->initLen();
  33. $initcode=substr($serial,0,$initlen);
  34. $extendedcode=$this->extendCode($initcode,$name);
  35. $fullcode=substr($extendedcode,0,$keylen);
  36. if($fullcode==$serial) return $this->isvalid;
  37. else return $this->invalid;
  38. }
  39.  
  40. function initCode($length=14){
  41. $list=$this->basechar;
  42. $lenlist=strlen($list)-1;
  43. $codestring="";
  44. $length=max($length,1);
  45. if($length>0){
  46. while(strlen($codestring)<$length){
  47. $codestring.=$list[mt_rand(0,$lenlist)];
  48. }
  49. }
  50. return $codestring;
  51. }
  52.  
  53. function extendCode($initcode,$name) {
  54. $software=$this->software;
  55. $p1str=$this->sumDigit($initcode);
  56. $p1str.=$this->add32($initcode,$name."abhishek".$software);
  57. $p1str=strtoupper($p1str);
  58. $p1str=str_replace( array("0","1","O","I",),
  59. array("","","","",),
  60. $p1str);
  61. $p1len=strlen($p1str);
  62. $extrabit="";$i=0;
  63. while(strlen($extrabit)<$this->keylen-2) {
  64. $extrabit.=substr($p1str,$i,1);
  65. $extrabit.=substr($p1str,$p1len-$i-1,1);
  66. $i++;
  67. if (defined('LKM_DEBUG'))echo "$p1str $extrabit<br/>";
  68. }
  69. return $initcode.$extrabit."6F75";
  70. }
  71.  
  72. function formatLicense($serial){
  73. $farray=str_split($this->formatstr);
  74. $sarray=str_split($serial);
  75. $s0=$farray[0];
  76. $s1=$farray[1]+$s0;
  77. $s2=$farray[2]+$s1;
  78. $s3=$farray[3]+$s2;
  79. $s4=$farray[3]+$s3;
  80. $scount=$this->keylen;$sformated="";
  81. for ($i=0;$i<$scount;$i++){
  82. if($i==$s0||$i==$s1||$i==$s2||$i==$s3||$i==$s4)
  83. $sformated.="-";
  84. $sformated.=$sarray[$i];
  85. }
  86. if (defined('LKM_DEBUG')) echo " $serial FORMATED AS $sformated<br/>";
  87.  
  88. return $sformated;
  89. }
  90.  
  91. function initLen(){
  92. $keylen=$this->keylen;
  93. $initlen=intval($keylen/3);
  94. $initlen=max($initlen,1);
  95. return $initlen;
  96. }
  97.  
  98. function add32($a,$b){
  99. $sum=base_convert($a,36,10)+base_convert($b,36,10);
  100. $sum32=base_convert($sum,10,36);
  101. $sum32=str_replace( array("0","1","O","I","o","i"),
  102. array("","","","","","",),
  103. $sum32);
  104. if (defined('LKM_DEBUG'))echo " ADD32 $a + $b = $sum32<br/>";
  105. return $sum32;
  106. }
  107.  
  108.  
  109. function sumDigit($str){
  110. $a=str_split($str);$sum=0;
  111. for($i=0;$i<count($a);$i++)$sum=$sum+base_convert($a[$i],36,10);
  112. $sum=str_replace( array("0","1","O","I","o","i"),
  113. array("AZ","BY","29","38","29","38",),
  114. $sum);
  115. if (defined('LKM_DEBUG'))echo " sumDigit $str = $sum<br/>";
  116. return $sum;
  117. }
  118. }
  119.  
  120. }
  121. ?>


Poniżej moje API:
  1. <?php
  2.  
  3. $config = array(
  4.  
  5. 'host' => 'localhost',
  6. 'user' => 'xxxxxxxx',
  7. 'pass' => 'xxxxxxxx',
  8. 'base' => 'xxxxxxxx'
  9.  
  10. );
  11.  
  12. $db = new mysqli($config['host'], $config['user'], $config['pass'], $config['base']);
  13. if($db->connect_errno) {
  14. exit('Błąd: nie udało się połączyć z bazą danych!');
  15. }
  16. $db->set_charset("utf8");
  17.  
  18. class Main {
  19. public function keygen($domain){
  20. $key[0] = strtoupper(md5($domain));
  21. $key[1] = substr($key[0], 0, 5);
  22. $key[2] = substr($key[0], 5, 5);
  23. $key[3] = substr($key[0], 10, 5);
  24. $key[4] = substr($key[0], 15, 5);
  25. $key[5] = substr($key[0], 20, 5);
  26.  
  27. return $key[1].'-'.$key[2].'-'.$key[3].'-'.$key[4].'-'.$key[5];
  28. }
  29.  
  30. public function getLicInfo($domain){
  31. global $db, $config;
  32.  
  33. $sql = "SELECT * FROM `lic` WHERE `domain` = '{$domain}' LIMIT 1";
  34. $result = $db->query($sql);
  35.  
  36. if($result->num_rows == 1){
  37. return $result->fetch_assoc();
  38. }
  39. return false;
  40. }
  41. }
  42.  
  43. $main = new Main;
  44.  
  45. $domain = "".$_GET['domain']."";
  46. $key = strtoupper($_GET['key']);
  47.  
  48.  
  49.  
  50. if($lic = $main->getLicInfo($domain)){
  51. if($lic['license_status']){
  52. $twokey = $main->keygen($lic['license_domain']);
  53. if($twokey == $key){
  54. $a = 'OK_'.$lic['license_domain'];
  55. } else {
  56. $a = 'ERROR_wrongkey';
  57. }
  58. } else {
  59. $a = 'ERROR_nolicense';
  60. }
  61. } else {
  62. $a = 'ERROR_nolicense';
  63. }
  64.  
  65. echo $a;
  66. exit();
  67. ?>


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:
  1. public function __destruct() {
  2. $request = file_get_contents("http://domain.com/api.php?domain=". $_SERVER['HTTP_HOST'] ."&key=".$this->config->lic_key.");
  3. $status = explode("_", $request);
  4.  
  5. if($status[0] != "OK" && "".$_SERVER['HTTP_HOST']."" != $status[1]){
  6. header("Location: <a href="http://domain.com/&quot%3b%29;" target="_blank">http://domain.com/");</a>
  7. }
  8. }

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 04:46