4 * -------------------------------------------
5 * Mit dieser Klasse ist ein einfacher Primeratransfer von Ihrem Account
6 * zu dem Account eines bei Primusportal.de registrierten Mitglieds möglich.
8 *------------------ Aenderungen durch Roland Haeder 09.08.2008 ----------------
9 * Klasse umbenannt nach PrimeraApi, damit sie in das Framework besser passt.
10 * Zudem sind alle oeffentlichen Attribute nun privat, der Konstruktor hat den
11 * neuen "magischen" Namen __construct() und "normale" Konstanten sind nach
12 * Klassenkonstanten umbenannt. Unsinnige else-Bloecke sind noch umgewandelt.
13 * Methodennamen fangen nun immer mit einem kleinen Buchstaben an. Zudem sind
14 * die Methoden Pay,Query und Parse umbenannt.
15 *------------------ Aenderungen durch Roland Haeder 09.08.2008 ----------------
17 * Die Einbindung des Interfaces geschieht folgendermaßen:
18 * 1. Einbindung der Klasse in Ihr PHP-Auszahlungsskript:
20 * require_once( "PFAD/ZU/DER/KLASSE/PrimeraApi.class.php" );
21 * $PPUsername = "username"; // Ihr Username bei Primusportal
22 * $PPPassword = "passwort"; // Ihr Passwort bei Primusportal
24 * $Interface = new PrimeraApi($PPUsername, $PPPassword);
25 * 2. Durchführen einer Auszahlung:
27 * $Status = $Interface->payPrimera($PayReceiver, $PayAmount, $PayDescription);
29 * Wobei $PayReicer der Username des Empfängers bei
30 * Primusportal.de ist. $PayAmount ist der gerundete( !! ) Betrag an Primera,
31 * die der Empfänger erhalten soll. $PayDescription ist eine von Ihnen
32 * festgelegte kurze Beschreibung. Die Länge dieses Textes darf 100 Zeichen
33 * nicht überschreiten. Beispiel:
34 * $status = $Interface->payPrimera("garbage", 10000, "Auszahlung IhreSeite.de - ID: 12345");
35 * 3. Überprüfung des Status (Rückgabecode):
38 * // Ein Fehler ist aufgetreten
39 * // Fehlerbehandlung hier einfügen...
41 * // Auszahlung erfolgreich durchgeführt
42 * // Führen Sie hier Ihre Datenbankabfragen durch, um die Auszahlung zu
46 * Die komplette Rückgabe des Interfaces wird als assoziatives Array in der Klassen-
47 * variable __data gespeichert:
48 * __data => array("status" => Rückgabecode (PI_DONE, PI_SENDER_ERROR, ...),
49 * "statustext" => Status in Worten (z.B.: "Transaktion erfolgreich durchgeführt"),
53 * @author Andreas Schmidt <xxgarbagexx@web.de>
54 * @author Roland Haeder <webmaster@ship-simu.org>
56 * @copyright (c) 2007 by Primusportal.de
57 * @copyright (c) 2008 by Roland Haeder
61 * Fehler - Interfacebenutzer
66 * Statuscode für erfolgreich ausgeführte Transaktion
71 * Fehler - User existiert nicht oder ist gesperrt
73 const PI_RECEIVER_ERROR = 301;
76 * Sender-Account Fehler (User nicht existent, gesperrt, ...)
78 const PI_SENDER_ERROR = 401;
83 const PI_AMOUNT_ERROR = 501;
88 const PI_TOO_LESS_PRIMERA = 502;
91 * User nicht aktiv oder existiert nicht
93 const PI_USER_CHECK_ERROR = 601;
98 const PI_USER_CHECK_OK = 602;
101 * Primerastand erfolgreich geholt
103 const PI_GET_PRIMERA_DONE = 701;
106 * URL für das Interface auf dem Primusserver:
108 var $host = "http://www.primusportal.de";
109 var $path = "/transfer.interface.2.0.php";
114 var $seperator = ":";
126 function PrimeraApi ($PPUsername, $PPPassword) {
128 $this->username = $PPUsername;
129 $this->password = $PPPassword;
133 * Anfrage senden und Rückgabecode in Variable speichern
135 function queryApi ( $data = array() ) {
136 // Base64-encode username and password hash
137 $data["PrimusInterface_Username"] = base64_encode($this->username);
138 $data["PrimusInterface_Password"] = base64_encode($this->password);
141 $return = POST_URL($this->host.$this->path, $data);
143 // Convert the array into a full string
144 $returnStr = implode("\n", $return);
146 // Extract the real content, strip header away
147 $content = explode("<!-- return-start -->", $returnStr);
149 // Store headers away for debugging
150 $this->headers = $content[0];
152 // Return the content
157 * Funktion parst die Rückgabe vom Transferskript:
159 function parseContent ( $content ) {
160 $x = explode("\n", $content);
162 foreach($x as $currentLine) {
163 $line_exploded = explode(":", $currentLine,2);
164 if (count($line_exploded) > 1) {
165 $return[$line_exploded[0]] = $line_exploded[1];
172 * @param int/string $Receiver UserID / Username des Empfängers
173 * @param int $Amount Betrag in ganzzahligen Primera
174 * @param string $Description Beschreibung (Sichtbar in Einzelauflistung)
176 function payPrimera ($Receiver, $Amount, $Description = "") {
178 $postData = array("PrimusInterface_Action" => "Pay",
179 "PrimusInterface_Receiver" => base64_encode($Receiver),
180 "PrimusInterface_Amount" => base64_encode($Amount),
181 "PrimusInterface_Description" => base64_encode($Description) );
183 $postReturn = $this->parseContent( $this->queryApi($postData) );
185 $this->data = $postReturn;
186 if ($postReturn["status"] == "200") {
193 * Überprüft den Status eines Primus-Users
194 * - existiert der User
196 * @param string/int $User Userid / Username
198 function CheckPrimusUser($User) {
200 $postData = array("PrimusInterface_Action"=> "CheckPrimusUser",
201 "PrimusInterface_CheckPrimusUser" => $User);
203 $postReturn = $this->parseContent( $this->queryApi($postData) );
205 $this->data = $postReturn;
207 if ($postReturn["status"] == self::PI_USER_CHECK_OK) {
214 * Die Funktion liefer den aktuellen Primerastand
216 function getPrimera() {
218 $postData = array( "PrimusInterface_Action" => "GetPrimera" );
219 $postReturn = $this->parseContent( $this->queryApi($postData) );
221 $this->data = $postReturn;
222 if ($postReturn["status"] == self::PI_GET_PRIMERA_DONE) {
223 $primera = $postReturn["primera"];
230 function getData () {
235 // Function to test the Primera API by getting the amount. If the returned value
236 // is not false the API data is valid, else invalid
237 function PRIMERA_TEST_API () {
239 $api = new PrimeraApi($_POST['primera_api_name'], $_POST['primera_api_md5']);
242 return ($api->getPrimera() !== false);
244 // Execute the withdraw of a sponsor only!
245 function PRIMERA_EXECUTE_WITHDRAW ($primusNick, $userMd5, $amount) {
248 // Is the sponsor extension installed?
249 if (!EXT_IS_ACTIVE("sponsor")) {
252 } elseif (!IS_SPONSOR()) {
253 // No sponsor, not allowed to withdraw!
258 $api = new PrimeraApi($primusNick, $userMd5);
261 $eval = "\$purpose = \"".COMPILE_CODE(sprintf(PRIMERA_API_PURPOSE_WITHDRAW, $_COOKIE['sponsorid']))."\";";
265 return $api->payPrimera($primusNick, $amount, $purpose);
267 // Execute the payout
268 function PRIMERA_EXECUTE_PAYOUT ($primusNick, $userMd5, $amount) {
272 $api = new PrimeraApi($_CONFIG['primera_api_name'], $_CONFIG['primera_api_md5']);
275 $eval = "\$purpose = \"".COMPILE_CODE(sprintf(PRIMERA_API_PURPOSE_PAYOUT, $GLOBALS['userid']))."\";";
279 return $api->payPrimera($primusNick, $amount, $purpose);