<?php class license_key{ var $keylen= 20; var $basechar='23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; var $formatstr= '55555'; var $isvalid="YES"; var $invalid="NO"; var $software=""; function codeGenerate($name=""){ $keylen= $this->keylen; $initlen=$this->initLen(); $initcode=$this->initCode($initlen); $fullcode=$this->extendCode($initcode,$name); return $this->formatLicense($fullcode); } function codeValidate($serial,$name=""){ $serial); $keylen= $this->keylen; if($keylen<>$thislen)return $this->invalid; $initlen=$this->initLen(); $extendedcode=$this->extendCode($initcode,$name); if($fullcode==$serial) return $this->isvalid; else return $this->invalid; } function initCode($length=14){ $list=$this->basechar; $codestring=""; if($length>0){ } } return $codestring; } function extendCode($initcode,$name) { $software=$this->software; $p1str=$this->sumDigit($initcode); $p1str.=$this->add32($initcode,$name."abhishek".$software); $p1str); $extrabit="";$i=0; $i++; } return $initcode.$extrabit."6F75"; } function formatLicense($serial){ $farray=str_split($this->formatstr); $sarray=str_split($serial); $s0=$farray[0]; $s1=$farray[1]+$s0; $s2=$farray[2]+$s1; $s3=$farray[3]+$s2; $s4=$farray[3]+$s3; $scount=$this->keylen;$sformated=""; for ($i=0;$i<$scount;$i++){ if($i==$s0||$i==$s1||$i==$s2||$i==$s3||$i==$s4) $sformated.="-"; $sformated.=$sarray[$i]; } return $sformated; } function initLen(){ $keylen=$this->keylen; return $initlen; } function add32($a,$b){ $sum32); return $sum32; } function sumDigit($str){ $a=str_split($str);$sum=0; $sum); return $sum; } } } ?>
Poniżej moje API:
<?php 'host' => 'localhost', 'user' => 'xxxxxxxx', 'pass' => 'xxxxxxxx', 'base' => 'xxxxxxxx' ); $db = new mysqli($config['host'], $config['user'], $config['pass'], $config['base']); if($db->connect_errno) { } $db->set_charset("utf8"); class Main { public function keygen($domain){ return $key[1].'-'.$key[2].'-'.$key[3].'-'.$key[4].'-'.$key[5]; } public function getLicInfo($domain){ $sql = "SELECT * FROM `lic` WHERE `domain` = '{$domain}' LIMIT 1"; $result = $db->query($sql); if($result->num_rows == 1){ return $result->fetch_assoc(); } return false; } } $main = new Main; $domain = "".$_GET['domain'].""; if($lic = $main->getLicInfo($domain)){ if($lic['license_status']){ $twokey = $main->keygen($lic['license_domain']); if($twokey == $key){ $a = 'OK_'.$lic['license_domain']; } else { $a = 'ERROR_wrongkey'; } } else { $a = 'ERROR_nolicense'; } } else { $a = 'ERROR_nolicense'; } ?>
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:
public function __destruct() { $request = file_get_contents("http://domain.com/api.php?domain=". $_SERVER['HTTP_HOST'] ."&key=".$this->config->lic_key."); $status = explode("_", $request); if($status[0] != "OK" && "".$_SERVER['HTTP_HOST']."" != $status[1]){ header("Location: <a href="http://domain.com/"%3b%29;" target="_blank">http://domain.com/");</a> } }