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 * ----------------- Aenderungen durch Roland Haeder 19.04.2011 ---------------
18 * Es ist nun bei allen Methoden- und Feldnamen der erste Buchstabe
19 * kleingeschrieben, damit es besser in meine Namenskonvention passt. Noch mehr
20 * doppelte Anfuehrungszeichen in einfache umgewandelt, damit die Klasse
21 * performanter (wegen sonst doppeltes Parsen) wird.
22 * ----------------- Aenderungen durch Roland Haeder 19.04.2011 ---------------
24 * ------------ Achtung! Bitte zuerst lesen, bevor Sie weiterlesen: -----------
25 * Das meiste aus der unteren Anleitung sollte auf die hier verwendeten Namen
26 * portiert sein. Falls Sie Fragen haben, bitte melden Sie sich bei Roland
27 * Haeder. Funktionell wurde hier aber nichts geaendert.
28 * ------------ Achtung! Bitte zuerst lesen, bevor Sie weiterlesen: -----------
30 * Die Einbindung des Interfaces geschieht folgenderma�en:
31 * 1. Einbindung der Klasse in Ihr PHP-Auszahlungsskript:
33 * $primusUsername = 'username'; // Ihr Username bei Primusportal
34 * $primusPassword = 'passwort'; // Ihr Passwort bei Primusportal
36 * $apiInstance = ObjectFactory::createObjectByName('PrimeraApi', array($primusUsername, $primusPassword));
37 * 2. Durchf�hren einer Auszahlung:
39 * $Status = $apiInstance->payPrimera($PayReceiver, $PayAmount, $PayDescription);
41 * Wobei $PayReicer der Username des Empf�ngers bei
42 * Primusportal.de ist. $PayAmount ist der gerundete( !! ) Betrag an Primera,
43 * die der Empf�nger erhalten soll. $PayDescription ist eine von Ihnen
44 * festgelegte kurze Beschreibung. Die L�nge dieses Textes darf 100 Zeichen
45 * nicht �berschreiten. Beispiel:
46 * $status = $apiInstance->payPrimera('garbage', 10000, 'Auszahlung IhreSeite.de - ID: 12345');
47 * 3. �berpr�fung des Status (R�ckgabecode):
49 * if ($status === FALSE) {
50 * // Ein Fehler ist aufgetreten
51 * // Fehlerbehandlung hier einf�gen...
53 * // Auszahlung erfolgreich durchgef�hrt
54 * // F�hren Sie hier Ihre Datenbankabfragen durch, um die Auszahlung zu
58 * Die komplette R�ckgabe des Interfaces wird als assoziatives Array in der Klassen-
59 * variable $data gespeichert:
61 * 'status' => R�ckgabecode (PI_DONE, PI_SENDER_ERROR, ...),
62 * 'statustext' => Status in Worten (z.B.: 'Transaktion erfolgreich durchgef�hrt'),
66 * @author Andreas Schmidt <xxgarbagexx@web.de>
67 * @author Roland Haeder <webmaster.shipsimu.org>
69 * @copyright (c) 2007 by Primusportal.de
70 * @copyright (c) 2008, 2011 by Roland Haeder
72 class PrimeraApi extends BaseFrameworkSystem {
74 * Fehler - Interfacebenutzer
79 * Statuscode f�r erfolgreich ausgef�hrte Transaktion
84 * Fehler - User existiert nicht oder ist gesperrt
86 const PI_RECEIVER_ERROR = 301;
89 * Sender-Account Fehler (User nicht existent, gesperrt, ...)
91 const PI_SENDER_ERROR = 401;
96 const PI_AMOUNT_ERROR = 501;
101 const PI_TOO_LESS_PRIMERA = 502;
104 * User nicht aktiv oder existiert nicht
106 const PI_USER_CHECK_ERROR = 601;
111 const PI_USER_CHECK_OK = 602;
114 * Primerastand erfolgreich geholt
116 const PI_GET_PRIMERA_DONE = 701;
121 const HTTP_EOL = "\r\n";
124 * URL f�r das Interface auf dem Primusserver:
126 private $host = 'www.primusportal.de';
127 private $path = '/transfer.interface.2.0.php';
132 private $separator = ':';
134 private $username = '';
135 private $password = '';
137 private $data = array();
142 public function __construct ($primusUsername, $primusPassword) {
143 // Call parent constructor
144 parent::__construct();
147 $this->username = $primusUsername;
148 $this->password = $primusPassword;
152 * Anfrage senden und Rueckgabecode in Variable speichern
154 private function queryApi ( $data = array() ) {
155 $fp = fsockopen($this->host, 80, $this->errno, $this->_err);
156 if (!$fp) return false;
158 $data['PrimusInterface_Username'] = base64_encode($this->username);
159 $data['PrimusInterface_Password'] = base64_encode(md5($this->password));
161 // POST-Daten uebermitteln:
162 $queryData = http_build_query($data, '', '&');
164 $request .= 'POST ' . $this->path . 'HTTP/1.1' . self::HTTP_EOL;
165 $request .= 'Host: ' . $this->host . self::HTTP_EOL;
166 $request .= 'Content-type: application/x-www-form-urlencoded' . self::HTTP_EOL;
167 $request .= 'Content-length: '. strlen($queryData) . self::HTTP_EOL;
168 $request .= 'Connection: close' . self::HTTP_EOL;
169 $request .= self::HTTP_EOL;
170 $request .= $queryData;
172 fputs($fp, $request);
176 $return .= fgets($fp, 128);
179 $content = explode('<!-- return-start -->', $return);
184 * Funktion parst die R�ckgabe vom Transferskript:
186 private function parseContent ( $content ) {
187 $x = explode("\n", $content);
189 foreach($x as $currentLine) {
190 $line_exploded = explode($this->separator, $currentLine,2);
191 if (count($line_exploded) > 1) {
192 $return[$line_exploded[0]] = $line_exploded[1];
199 * @param int/string $Receiver UserID / Username des Empf�ngers
200 * @param int$Amount Betrag in ganzzahligen Primera
201 * @param string $Description Beschreibung (Sichtbar in Einzelauflistung)
203 public function payPrimera ($Receiver, $Amount, $Description = '') {
206 'PrimusInterface_Action' => 'Pay',
207 'PrimusInterface_Receiver' => base64_encode($Receiver),
208 'PrimusInterface_Amount' => base64_encode($Amount),
209 'PrimusInterface_Description' => base64_encode($Description)
212 $postReturn = $this->parseContent( $this->queryApi($postData) );
214 $this->data = $postReturn;
215 if ($postReturn['status'] == '200') {
222 * �berpr�ft den Status eines Primus-Users
223 * - existiert der User
225 * @param string/int $User Userid / Username
227 public function checkPrimusUser ($userName) {
230 'PrimusInterface_Action' => 'CheckPrimusUser',
231 'PrimusInterface_CheckPrimusUser' => $userName
234 $postReturn = $this->parseContent( $this->queryApi($postData) );
236 $this->data = $postReturn;
238 if ($postReturn['status'] == self::PI_USER_CHECK_OK) {
245 * Die Funktion liefer den aktuellen Primerastand
247 public function getPrimera() {
250 'PrimusInterface_Action' => 'GetPrimera'
252 $postReturn = $this->parseContent( $this->queryApi($postData) );
254 $this->data = $postReturn;
255 if ($postReturn['status'] == self::PI_GET_PRIMERA_DONE) {
256 $primera = $postReturn['primera'];