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 Erweiterung: Dazu via phpinfo(); checken, ob libxml = active und SimpleXML Abschnitt vorhanden
  • https Unterstützung: Registered PHP Streams: https und Abschnitt openssl vorhanden?


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

// Primeraauszahlung
function auszahlen ($betreiber_id,$betreiber_pw,$kunden_id,$kunden_pw,$betreiber_kennung,$trans_menge,$trans_betreff,$trans_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,$trans_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" 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.