[How2]IPN System mit OneBip

03/18/2011 19:56 ooCheateroo#1
[Only registered and activated users can see links. Click Here To Register...]
Ansich ist dies ein Weg die Spenden zu "automatisieren"

Das System basiert auf dem API das OneBip zur verfügung stellt:
Vorkentnisse in PHP können von Vorteil sein...

Datenbank:
PHP Code:
CREATE TABLE `coins_onebip` (
  `
idint(10NOT NULL auto_increment,
  `
buyer_idvarchar(100NOT NULL default '',
  `
coinsvarchar(100NOT NULL default '',
  `
statusvarchar(100NOT NULL default '',
  `
passvarchar(100NOT NULL default '',
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 
IPN (Instant Payment Notification):
PHP Code:
<?php
/*
-------------------------------------------------------
------------OneBip IPN System by ooCheateroo---------
-------------Basierend auf OneBip's API Script----------
-------------------------------------------------------
*/
session_start();
// Wenn eine payment_id "übertragen" wird dann: (Wird nicht zwingend benötigt)
if(isset($_REQUEST['payment_id'])){
if(!isset(
$_SESSION["OneBip_Pass"])){
?>
<?php
// Schauen OB ein hash abgesendet wurde, wenn nicht dann:
if (!isset($_REQUEST['hash'])) {
    echo 
"ERROR: Invalid hash code!!!";
    exit(); 
//Raus, raus, raus, abbruch
}else{
//Wenn doch, dann:
$my_api_key 'Dieser Key wird über die Accountinfos festgelegt'// Normaler Hash-Code (Nicht gecryptet) => Bei den Einstellungen zu finden
$basename basename($_SERVER['REQUEST_URI']);// Hiner dem haupt URI, um auf die aktuelle Seite zuzugreifen ( z.B '/index.php') wird gelöscht. 
$pos strrpos($basename"&hash");//Sucht die position von &hash im string (URI)
$basename_without_hash substr($basename0$pos);//Den URI ohne den hash
$my_hash md5($my_api_key $basename_without_hash);//Mein Key und Uri alles verschlüsselt
//Wenn mein hash dem im Request nicht gleicht, dann:
if ($my_hash != $_REQUEST['hash']) {
log("ERROR: this isn't a valid Onebip notification!"); 
// Note: "log()" sample function -> Wird von OneBip gebraucht ;-)
echo "ERROR: Invalid hash code";
exit();
//Alles abgebrochen
}
}
//Wenns jedoch gut ausgeht, dann kommt das:
//Daten die OneBip zu einem Sendet
$payment_id $_REQUEST['payment_id'];
$country $_REQUEST['country'];
$currency $_REQUEST['currency'];
$price $_REQUEST['price'];
$tax $_REQUEST['tax'];
$commission $_REQUEST['commission'];
$amount $_REQUEST['amount'];
$original_price $_REQUEST['original_price'];
$original_currency $_REQUEST['original_currency'];

if(
$error){
    echo 
"ERROR: Fehler bei der Zahlung!";
}else{
echo 
'OK'// OneBip braucht ein OK als Zeichen dass alles gut ausgegangen ist

//DB Verbindung herstellen
include('database.php');

$pass2 rand(1000,1000000);
$_SESSION["OneBip_Pass"] = $pass2;
$pass md5($pass2);
$money $price*100//1 Cent = 100 Coins

$sql mysql_query("SELECT * FROM coins_onebip WHERE buyer_id = '$payment_id'");
$menge mysql_num_rows($sql);

//Onebip refresht das ganze ständig, deswegen wird kontrolliert ob die Buyer_id schon benutzt wurde/ eingesetzt wurde
if($menge == 0)
    {
                
mysql_query("INSERT INTO coins_onebip (buyer_id, coins, status, pass) VALUES ('"mysql_real_escape_string($payment_id) ."', '".mysql_real_escape_string($money)."', 'Aktiv' , '".mysql_real_escape_string($pass)."') ");

    }

}

//Ende OK

//OneBip pass aktiv
}else{
    echo 
"ERROR: Anderes OneBip Passwort!";
}
//Wenn gar kein OneBip geöffnet wird
}else{
    echo 
"ERROR: Nichterlaubter Zutritt!!!";
}
?>

So hier ne kleine Erklärung:

1. Ihr fügt die DB in eure mt2 Datenbank ein.
2. Ihr macht ne php Datei, mit dem IPN Sys und schreib einen Buchtsabensalat hier rein (Dies ist euer API Key)
PHP Code:
$my_api_key 'Buchtabensalat hier rein'// Normaler Hash-Code (Nicht gecryptet) => Bei den Einstellungen zu finden. 
3. Ihr ladet die php Datei auf euren Webspace hoch (die database.php muss natürlich angepasst werden...)
Beispiel der databse.php
PHP Code:
<?php
mysql_connect
("localhost""root" "passwort")
or die(
"Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("datenbank") or die ("Datenbank konnte nicht ausgewählt werden");
?>
4. Ihr geht zu OneBip Pannel dort zu Manage -> My Profile und dann zu Settings.
5. Ihr schreibt den API Key von Vorhin hier rein (Onebib vergleicht den Code im IPN System mit dem Key den ihr hier eingebt, ist dieser nicht gleich wird das Script abgebrochen)
6. Ihr ändert die Thank You Page zu eurer Seite
7. Ihr ändert die Nortification URL zu eurer Seite mit dem IPN Sys.
8. Ihr geht zu Request Money -> My Buttons und macht euch nen Button.
9. Den HTML-Code des Buttons macht ihr auf eure Seite
10. Jetzt aufpassen: Wenn der User was kauft wird zwar alles in die coins_onebip Datenbank geschrieben, er hat aber nochimmer keine Coins:
Dies kann man so lösen machen (Ne seperate Datei erstellen mit diesem Inhalt):
PHP Code:
  <?php
/*
-------------------------------------------------------
------------OneBip IPN System by ooCheateroo---------
-------------Basierend auf OneBip's API Script----------
-------------------------------------------------------
*/
session_start();

if(isset(
$_POST['submit2']) && $_POST['submit2'] == 'Coins abholen') {
    
    require_once(
'database.php');

if(isset(
$_SESSION["OneBip_Pass"])){

    
$username $_SESSION["username"]; // Gegebenenfalls anpassen


        
$passw md5($_SESSION["OneBip_Pass"]);
    
$id mysql_real_escape_string($_POST["id"]);

    
$ip $_SERVER['REMOTE_ADDR'];
    
$zeit time();
        
$zeit_ende $zeit 86400//Ein Tag hat 86400 Sekunden

//IP-Sperre Anschaun
$sqla mysql_query("SELECT * FROM ip_sperre WHERE ip = '$ip' AND $zeit < zeit");
$mengea mysql_num_rows($sqla);

if(
$mengea != 0)
    {
echo 
"Du bist ein Tag lang gesperrt!";

}else{

//Test ob alles richtig eingegeben
$sqls mysql_query("SELECT * FROM coins_onebip WHERE buyer_id = '$id' AND status = 'Aktiv' AND pass = '$passw'");
$menge mysql_num_rows($sqls);

if(
$menge == 0)
    {
//IP sperre bei falscher Eingabe        
mysql_query("INSERT INTO ip_sperre (ip, zeit) VALUES ('$ip', '$zeit_ende') ");

echo 
"ID falsch, überprüfe deine Daten.";

    }else{
        
    
$sql mysql_query("SELECT * FROM coins_onebip WHERE buyer_id = '$id'");
    
$row mysql_fetch_array($sql);

    
$coins $row['coins'];  
    
        
mysql_query("UPDATE coins_onebip SET status='Abgeschlossen' WHERE buyer_id = '$id'");

$eintrag "UPDATE account SET coins=coins+'$coins' WHERE login = '$username'";
    
$eintragen mysql_query($eintrag);

    if(
$eintragen == true)
            {
        unset(
$_SESSION["OneBip_Pass"]); 
        echo 
"Sie haben jetz $coins Coins mehr auf dem Konto";    
        
        }
    else
        {
        echo 
"Fehler";
        }
        
        
    
    
//menege = 0 else
    
}

//IP kontrolle
}
//session
}else{
echo 
"Du hast keine Coins gekauft!!!";
}
//Btton:
}
?>
Und das hier drunter:
HTML Code:
<br>
<form action="" method="post">
ID:<br>
<input type="text" size="24" maxlength="50" name="id"  ><br>
<input type="submit" name="submit2" value="Coins abholen">
</form>
Mit diesem Script können die Spieler ihre Coins abrufen indem sie die OneBip ID des Kaufs eingeben. Nach dem Erhalten der Coins wird der Status der ID in eurer DB auf Abgeschlossen gesetzt, dadurch können die Spieler die Coins nicht nochmal bekommen.

Achtung: Ihr müsst die Daten in der Datenbank lassen, da Onebib das ganze ständig updatet. Dies hat zur Folge dass wenn ihr einen Abgeschlossenen Datensatz löscht, dass OneBip wieder einen neuen in der Datenbank erstellt, wodurch der Spieler die Coins nochmals abrufen kann.
Achtung 2: Wenn ein User Coins gekauft hast muss er als erstes die Coins eincashen bevor er neue kaufen kann!!!

#Update- ip-Sperre:
PHP Code:
CREATE TABLE `ip_sperre` (
  `
idint(10NOT NULL auto_increment,
  `
ipvarchar(100NOT NULL default '',
  `
zeitvarchar(100NOT NULL default '',
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 
#Update2: Sessionsicherung eingebaut

mfg, ooCheateroo
03/18/2011 20:06 Luna.Host#2
nice !
03/18/2011 20:08 Legend2007#3
Hast ne PM. Und danke für's releasen!
03/18/2011 20:28 nico_w#4
Du musst ja nicht Zwangsweise eine numerische ID nehmen, kannst ja auch eine Zahlen/Buchstabenkombination nehmen, ist dann nichtmehr so einfach die rauszufinden.
03/18/2011 20:30 CranK™#5
Thanks.
Hat das was mit IP zu tun oder mit IPN?
Weil IPN kenn ich nich xD

Ach nico lies mal pls pn's habe dir vor fast 6 Wochen eine geschrieben und immer noch keine antwort :(
03/18/2011 20:32 sLay.#6
Cool das du meinen Thread erwähnt hast ;) Hatte auch ebend fertiges Script von MKMT2 bekommen ;p
03/18/2011 20:37 ooCheateroo#7
Quote:
Originally Posted by nico_w View Post
Du musst ja nicht Zwangsweise eine numerische ID nehmen, kannst ja auch eine Zahlen/Buchstabenkombination nehmen, ist dann nichtmehr so einfach die rauszufinden.
An sich ist es ja ne gute Idee, jedoch lässt sich die Session des Users nicht aufrufen und so hat man zwar nen Kombination drauf, jedoch weiß der User es nicht (Leider verschickt OneBip keine request mit der E-mail also auch keine Kontaktmöglichkeit). Die ID hat der user in seinem OneBip Konto stehen...

Quote:
Originally Posted by sLay. View Post
Cool das du meinen Thread erwähnt hast ;) Hatte auch ebend fertiges Script von MKMT2 bekommen ;p
Wär interessant mein und deren Script zu vergleichen, natürlich nur wenn du deren Einverständniss hast...
03/18/2011 20:41 sLay.#8
Yo hab ich. Adde mich in Skype oder ICQ.
Skype:vladii.1
03/18/2011 21:46 Imperium2#9
danke,werde es mal probieren
03/18/2011 21:56 CanbiZ#10
Danke!
03/18/2011 22:02 AkinCooperation#11
Thx 4 how to!
03/19/2011 08:50 ooCheateroo#12
So hab jetzt ne zusätzliche sicherheit mit Sessions eingebaut, der User darf sich nur nicht ausloggen...
03/19/2011 16:44 Legend2007#13
Ich würd die Session noch in cookies abspeichern die nach dem ausloggen auch gelöscht werden weil die Session allein wird nur für ca. 30 - 60 minuten aufrecht gehalten.. wenn nicht weniger.. kommt aber an den php.ini einstellungen an.. wenn du das ganze dann in cookies abspeicherst, musst du dann noch einen check implementieren was überprüft ob der gespeicherte pass auch gültig ist (noch nicht benutzt or w.e)
03/19/2011 18:55 ~|-FairPlay-|~#14
das teste ich gleich mal net schlecht danke
03/19/2011 22:48 KillHumans#15
Skype: LoopYz555


Pls i need your help!

Thank You...