PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Primera 3 Schnittstelle gesucht.



Inetconn
24.04.2013, 02:47
Moinsen zusammen,

gibt es schon eine Schnittstelle zur neuen Primus 3 API für das VMS?

Wenn nicht, was soll sowas kosten wenn es einer von euch macht?
Würde es dann auch hier zum Download anbieten.

Gruß
Inetconn

jpwfour
24.04.2013, 14:23
Gibts da eine öffentliche Dokumentation zu der API oder ist die Geheim?

mine321
24.04.2013, 16:07
https://www.primusportal.de/api/beschreibung/

müsste die beschreibung sein

Inetconn
24.04.2013, 22:42
Job ist richtig.
Kann auch gerne einen Primera-EF zur Verfügung stellen damit man das testen kann.

jpwfour
27.04.2013, 12:15
Im Prinzip ist das genau analog zu allen bisherigen Schnittstellen, also eine Schnittstellen Datei kopieren, und die URLs + Fehlercodes entsprechend anpassen.
Aber: Klamm etc geben die Daten getrennt mit "|" aus, Primera bietet jetzt scheinbar nur noch JSON oder XML an. Eigene Parser dafür schreiben kommt damit eigentlich nicht in Frage, kann man machen, aber iwie doch sehr unsinnig ^^


Seit PHP 5.2.0 ist die JSON-Erweiterung standardmäßig mit PHP gebündelt und kompiliert.

JSON läuf man also Gefahr, dass dies auf älteren Sharedhosting Angeboten nicht verfügbar ist.

XML sollte eigentlich sogut wie überall verfügbar sein, da dies standardmäßig aktiviert ist, der Hoster kann es aber auch explizit deaktivieren:


Die XMLReader-Erweiterung steht für PHP 5.0.0 unter PECL zur Verfügung. Ab PHP 5.1.0 ist sie standardmäßig mitgeliefert und seit PHP 5.1.2 standardmäßig aktiviert.

XMLReader also für gaaanz alte Software auch nicht zu gebrauchen, soll ich also nun eine Schnittstelle mit XML Parser schreiben? nöö, keine Lust ;-) Ich würde der Einfachheit halber JSON (http://php.net/manual/de/book.json.php) oder SimpleXML (http://www.php.net/manual/de/book.simplexml.php) nehmen, aber mir dann anhören zu müssen, dass hier noch Webbis PHP4 nutzen, das will ich mir ersparen ^^

Kann nicht verstehen, warum Primera hier nur noch diese beiden Formate anbietet, und nicht mehr das gute alte "|" oder "," getrennte Datenformat. Spart sogar Traffic ^^

Ja ich weis, XML & JSON sind robuster und besser erweiterbar, aber hauptsächlich scheinen sie modern und trendy, weil EF und Werbenetzwerke nun seit mehr als 10 Jahren die CSV Variante nutzen, und iwie gabs da noch nie Probleme ....

jpwfour
28.04.2013, 18:30
Falls das mal wer testen mag, Schnittstellen Datei fürs VMS, abspeichern als primera3.php in /lib/schnittstellen/, im Adminforce entsprechend die Daten eintragen.

Voraussetzungen:

PHP 5
SimpleXML (http://www.php.net/manual/de/book.simplexml.php) Erweiterung: Dazu via phpinfo(); checken, ob libxml = active und SimpleXML Abschnitt vorhanden
https Unterstützung: Registered PHP Streams: https und Abschnitt openssl vorhanden?



<?php
/*
https://www.primusportal.de/api/beschreibung/
*/

// Primeraauszahlung
function auszahlen ($betreiber_id,$betreiber_pw,$kunden_id,$kunden_pw ,$betreiber_kennung,$trans_menge,$trans_betreff,$t rans_code) {
global $error,$trans_ausgabe;

// SecVMS change begin
$trans_betreff = urlencode($trans_betreff);
$kunden_id = urlencode($kunden_id);
$kunden_pw = urlencode($kunden_pw);
$trans_menge = urlencode($trans_menge);
// SecVMS change end

$returned='';
$ret=@file("https://www.primusportal.de/api/handler/pay.xml?username=".$betreiber_id."&password=".$betreiber_pw."&receiver=".$kunden_id."&subject=".$trans_betreff."&primera=".$trans_menge."");
for($i=0;$i<count($ret);$i++) {
$returned.=$ret[$i];
}

if( class_exists('SimpleXMLElement') ) {
try {
$xml = new SimpleXMLElement($returned);
if((string)$xml->success == "1"){
// alles ok? evtl die gesamte rueckgabe checken
}else{
$error = "true";
$trans_ausgabe = (string)$xml->{'error_description'};
if ($trans_ausgabe == "") $trans_ausgabe = "Unbekannter Fehler";
}
}catch(Exception $e){
$error = "true";
$trans_ausgabe = "SimpleXML error: ".$e->getMessage();
}
}else{
$error = "true";
$trans_ausgabe = "SimpleXML missing";
}

return $error;
return $trans_ausgabe;
}

// Primeraeinzahlung
function einzahlen ($betreiber_id,$betreiber_pw,$kunden_id,$kunden_pw ,$betreiber_kennung,$trans_menge,$trans_betreff,$t rans_code){
global $error,$trans_ausgabe;

// SecVMS change begin
$trans_betreff = urlencode($trans_betreff);
$kunden_id = urlencode($kunden_id);
$kunden_pw = urlencode($kunden_pw);
$trans_menge = urlencode($trans_menge);
// SecVMS change end

$returned='';
$ret=file("https://www.primusportal.de/api/handler/deposit.xml?username=".$betreiber_id."&password=".$betreiber_pw."&from=".$kunden_id."&subject=".$trans_betreff."&primera=".$trans_menge."&primera_password=".$kunden_pw."");
for($i=0;$i<count($ret);$i++) {
$returned.=$ret[$i];
}

if( class_exists('SimpleXMLElement') ) {
try {
$xml = new SimpleXMLElement($returned);
if((string)$xml->success == "1"){
// alles ok? evtl die gesamte rueckgabe checken
}else{
$error = "true";
$trans_ausgabe = (string)$xml->{'error_description'};
if ($trans_ausgabe == "") $trans_ausgabe = "Unbekannter Fehler";
}
}catch(Exception $e){
$error = "true";
$trans_ausgabe = "SimpleXML error: ".$e->getMessage();
}
}else{
$error = "true";
$trans_ausgabe = "SimpleXML missing";
}

return $error;
return $trans_ausgabe;
}

// Kontostand eines Users abfragen
function usercheck ($betreiber_id,$betreiber_pw,$kunden_id,$kunden_pw ){
global $error,$trans_ausgabe,$user_saldo;

// SecVMS change begin
$kunden_id = urlencode($kunden_id);
$kunden_pw = urlencode($kunden_pw);
// SecVMS change end

$returned='';
$ret=@file("https://www.primusportal.de/api/handler/get-user-primera.xml?username=".$betreiber_id."&password=".$betreiber_pw."&user_username=".$kunden_id."&user_primera_password=".$kunden_pw."");
for($i=0;$i<count($ret);$i++){
$returned.=$ret[$i];
}

if( class_exists('SimpleXMLElement') ) {
try {
$xml = new SimpleXMLElement($returned);
if((string)$xml->success == "1"){
$user_saldo = (float)$xml->{'get-user-primera'}->primera;
}else{
$error = "true";
$trans_ausgabe = (string)$xml->{'error_description'};
if ($trans_ausgabe == "") $trans_ausgabe = "Unbekannter Fehler";
}
}catch(Exception $e){
$error = "true";
$trans_ausgabe = "SimpleXML error: ".$e->getMessage();
}
}else{
$error = "true";
$trans_ausgabe = "SimpleXML missing";
}

return $error;
return $trans_ausgabe;
return $user_saldo;
}

// Kontostand eines Users abfragen wird benutzt zum Validieren der Userdaten, weil sonst nur noch Validieren von Usernamen ohne Passwort moeglich
function uservalidate ($betreiber_id,$betreiber_pw,$kunden_id,$kunden_pw ){
global $error,$trans_ausgabe;

// SecVMS change begin
$kunden_id = urlencode($kunden_id);
$kunden_pw = urlencode($kunden_pw);
// SecVMS change end

$returned='';
$ret=@file("https://www.primusportal.de/api/handler/get-user-primera.xml?username=".$betreiber_id."&password=".$betreiber_pw."&user_username=".$kunden_id."&user_primera_password=".$kunden_pw."");
for($i=0;$i<count($ret);$i++){
$returned.=$ret[$i];
}

if( class_exists('SimpleXMLElement') ) {
try {
$xml = new SimpleXMLElement($returned);
if((string)$xml->success == "1"){
$user_saldo = (float)$xml->{'get-user-primera'}->primera;
}else{
$error = "true";
$trans_ausgabe = (string)$xml->{'error_description'};
if ($trans_ausgabe == "") $trans_ausgabe = "Unbekannter Fehler";
}
}catch(Exception $e){
$error = "true";
$trans_ausgabe = "SimpleXML error: ".$e->getMessage();
}
}else{
$error = "true";
$trans_ausgabe = "SimpleXML missing";
}

return $error;
return $trans_ausgabe;
}
?>


Anmerkungen:

Testen natürlich auf eigene Gefahr.

Zur Überprüfung des Usernamens UND des Passworts bietet sich nur die Kontostand Abfragen Methode an, da "Validieren von Usernamen (https://www.primusportal.de/api/beschreibung/#validieren-von-usernamen)" nur den Namen ohne Passwort prüft, bietet sich bei der Anmeldung jetzt iwie nicht so an ...

Da die API Dokumentation keine Infos dazu enthält, wie die Fehlercodes/Beschreibungen zurückgegeben werden, hab ich das jetzt einfach geraten, und verwende die Beschreibung aus dem XML, in der Hoffnung, dass diese Aussagekräftig genug ist...

Im Fall, dass der <success> Knoten vorhanden ist und eine "1" enthält, werden die weiteren Daten, die geliefert werden, aktuell noch nicht überprüft. Könnte man natürlich noch checken, ob die Menge die transferiert wurde auch mit der abgeschickten übereinstimmt usw.

Wer tatsächlich noch PHP 4 nutzt, hat halt Pech gehabt/sollte updaten ^^ Merkt man daran, dass nix mehr geht, nachdem man die Datei hochgeladen hat und bspw. eine Auszahlung vornehmen will :P

Wer die Voraussetzungen nicht erfüllt, aber Alternativen hat, JSON, XML Reader etc. kann sich ja mal melden. Wer keine SSL Unterstützung hat, hat wohl auch Pech gehabt, da die Scnittstelle wohl nur via https:// angeboten wird. Hoster fragen, ob der das aktiviert.