Inkasso-Module erstellen: Unterschied zwischen den Versionen

Aus sourceDESK Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „== Grundaufbau == ... == Methoden == ...“)
 
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
 +
Sie können ein eigenes [[Inkasso]]-Modul erstellen, um einen neuen [[Inkasso]]-Anbieter an sourceDESK anzubinden.
 +
 
== Grundaufbau ==
 
== Grundaufbau ==
...
+
Ein Inkasso-Modul bekommt ein eigenes Verzeichnis unter ''modules/encashment''. In diesem Verzeichnis muss sich eine PHP-Datei mit dem gleichen Namen wie das Verzeichnis und der Endung ''.php'' befinden. In dieser PHP-Datei wird eine Klasse definiert, die von der Klasse ''Encashment'' erbt.
 +
 
 +
== Attribute ==
 +
Es werden mehrere Attribute innerhalb der erstellten Klasse benötigt, die höchstens ''protected'' sein dürfen:
 +
 
 +
* ''$short'' gibt den Kurznamen des Moduls an, das entspricht dem Verzeichnis- bzw. Dateinamen
 +
* ''$name'' gibt einen Anzeigenamen für das Modul an
 +
* ''$version'' definiert die Version des Moduls
  
 
== Methoden ==
 
== Methoden ==
...
+
Folgende Methoden können definiert werden:
 +
 
 +
* ''getSettings()'' gibt die verfügbaren Modul-Einstellungen als Array zurück - auf sie kann nachher über das Objekt (stdClass) ''$this->options'' zugegriffen werden
 +
* ''newClaim($debtor, $claim)'' dient der Übergabe einer neuer Forderung an den Anbieter - ''$debtor'' enthält Kundeninformationen, ''$claim'' Forderungsinformationen
 +
* ''claimStatus($id)'' ruft den aktuellen Status vom Anbieter ab, dazu wird das Aktenzeichen übergeben
 +
 
 +
== Beispiel-Code ==
 +
<source lang="php">
 +
<?php
 +
 
 +
class Mediafinanz extends Encashment {
 +
protected $short = "mediafinanz";
 +
protected $name = "Mediafinanz";
 +
protected $version = "1.0";
 +
 
 +
public function getSettings() {
 +
return Array(
 +
"mid" => Array("type" => "text", "name" => "Mandanten-ID"),
 +
"mkey" => Array("type" => "password", "name" => "Mandanten-Schl&uuml;ssel"),
 +
);
 +
}
 +
 
 +
public function newClaim($debtor, $claim) {
 +
$auth = Array(
 +
"clientId" => $this->options->mid,
 +
"sandbox" => false,
 +
);
 +
 
 +
$options = Array(
 +
"trace" => 1,
 +
"compression" => true,
 +
"exceptions" => true,
 +
);
 +
 
 +
try {
 +
$soap = new SoapClient('https://soap.mediafinanz.de/encashment204.wsdl', $options);
 +
 
 +
$debt = Array(
 +
"address" => "@",
 +
"firstname" => $debtor->firstname,
 +
"lastname" => $debtor->lastname,
 +
"company" => $debtor->company,
 +
"co" => "",
 +
"street" => $debtor->street . " " . $debtor->street_number,
 +
"postcode" => $debtor->postcode,
 +
"city" => $debtor->city,
 +
"country" => $debtor->country_alpha2,
 +
"telephone1" => $debtor->telephone,
 +
"telephone2" => "",
 +
"fax" => "",
 +
"email" => $debtor->mail,
 +
);
 +
 
 +
if (!empty($debtor->ID)) {
 +
$debt['id'] = $debtor->ID;
 +
}
 +
 
 +
if (strtotime($debtor->birthday) !== false) {
 +
$debt['dateOfBirth'] = $debtor->birthday;
 +
}
 +
 
 +
$claim = Array(
 +
"invoiceid" => $claim->invoice,
 +
"type" => "3",
 +
"reason" => $claim->reason,
 +
"originalValue" => $claim->amount,
 +
"overdueFees" => $claim->latefee,
 +
"dateOfOrigin" => $claim->date,
 +
"dateOfLastReminder" => $claim->lastnotice,
 +
"note" => $claim->note,
 +
);
 +
 
 +
foreach ($claim as $key => &$value) {
 +
$value = utf8_encode($value);
 +
}
 +
 
 +
foreach ($debt as $key => &$value) {
 +
$value = utf8_encode($value);
 +
}
 +
 
 +
$res = $soap->newClaim($auth, $claim, $debt);
 +
 
 +
if (!empty($res->fileNumber)) {
 +
return Array(true, $res->fileNumber);
 +
}
 +
 
 +
$text = "Es ist ein technischer Fehler aufgetreten.";
 +
if (is_array($res->errorList)) {
 +
if (count($res->errorList) == 1) {
 +
$text = $res->errorList[0];
 +
} else {
 +
$text = "<ul>";
 +
foreach ($res->errorList as $e) {
 +
$text .= "<li>$e</li>";
 +
}
 +
 
 +
$text .= "</ul>";
 +
}
 +
}
 +
 
 +
return Array(false, $text);
 +
} catch (SoapFault $ex) {
 +
return Array(false, $ex->getMessage());
 +
}
 +
}
 +
 
 +
public function claimStatus($id) {
 +
$auth = Array(
 +
"clientId" => $this->options->mid,
 +
"sandbox" => false,
 +
);
 +
 
 +
$options = Array(
 +
"trace" => 1,
 +
"compression" => true,
 +
"exceptions" => true,
 +
);
 +
 
 +
try {
 +
$soap = new SoapClient('https://soap.mediafinanz.de/encashment204.wsdl', $options);
 +
 
 +
$res = $soap->getClaimStatus($auth, Array("fileNumber" => $id));
 +
return $res->statusText ?: false;
 +
} catch (SoapFault $ex) {
 +
return $ex->getMessage();
 +
}
 +
}
 +
}
 +
</source>

Aktuelle Version vom 10. Oktober 2018, 08:32 Uhr

Sie können ein eigenes Inkasso-Modul erstellen, um einen neuen Inkasso-Anbieter an sourceDESK anzubinden.

Grundaufbau

Ein Inkasso-Modul bekommt ein eigenes Verzeichnis unter modules/encashment. In diesem Verzeichnis muss sich eine PHP-Datei mit dem gleichen Namen wie das Verzeichnis und der Endung .php befinden. In dieser PHP-Datei wird eine Klasse definiert, die von der Klasse Encashment erbt.

Attribute

Es werden mehrere Attribute innerhalb der erstellten Klasse benötigt, die höchstens protected sein dürfen:

  • $short gibt den Kurznamen des Moduls an, das entspricht dem Verzeichnis- bzw. Dateinamen
  • $name gibt einen Anzeigenamen für das Modul an
  • $version definiert die Version des Moduls

Methoden

Folgende Methoden können definiert werden:

  • getSettings() gibt die verfügbaren Modul-Einstellungen als Array zurück - auf sie kann nachher über das Objekt (stdClass) $this->options zugegriffen werden
  • newClaim($debtor, $claim) dient der Übergabe einer neuer Forderung an den Anbieter - $debtor enthält Kundeninformationen, $claim Forderungsinformationen
  • claimStatus($id) ruft den aktuellen Status vom Anbieter ab, dazu wird das Aktenzeichen übergeben

Beispiel-Code

<?php
 
class Mediafinanz extends Encashment {
	protected $short = "mediafinanz";
	protected $name = "Mediafinanz";
	protected $version = "1.0";
 
	public function getSettings() {
		return Array(
			"mid" => Array("type" => "text", "name" => "Mandanten-ID"),
			"mkey" => Array("type" => "password", "name" => "Mandanten-Schl&uuml;ssel"),
		);
	}
 
	public function newClaim($debtor, $claim) {
		$auth = Array(
			"clientId" => $this->options->mid,
			"sandbox" => false,
		);
 
		$options = Array(
			"trace" => 1,
			"compression" => true,
			"exceptions" => true,
		);
 
		try {
			$soap = new SoapClient('https://soap.mediafinanz.de/encashment204.wsdl', $options);
 
			$debt = Array(
				"address" => "@",
				"firstname" => $debtor->firstname,
				"lastname" => $debtor->lastname,
				"company" => $debtor->company,
				"co" => "",
				"street" => $debtor->street . " " . $debtor->street_number,
				"postcode" => $debtor->postcode,
				"city" => $debtor->city,
				"country" => $debtor->country_alpha2,
				"telephone1" => $debtor->telephone,
				"telephone2" => "",
				"fax" => "",
				"email" => $debtor->mail,
			);
 
			if (!empty($debtor->ID)) {
				$debt['id'] = $debtor->ID;
			}
 
			if (strtotime($debtor->birthday) !== false) {
				$debt['dateOfBirth'] = $debtor->birthday;
			}
 
			$claim = Array(
				"invoiceid" => $claim->invoice,
				"type" => "3",
				"reason" => $claim->reason,
				"originalValue" => $claim->amount,
				"overdueFees" => $claim->latefee,
				"dateOfOrigin" => $claim->date,
				"dateOfLastReminder" => $claim->lastnotice,
				"note" => $claim->note,
			);
 
			foreach ($claim as $key => &$value) {
				$value = utf8_encode($value);
			}
 
			foreach ($debt as $key => &$value) {
				$value = utf8_encode($value);
			}
 
			$res = $soap->newClaim($auth, $claim, $debt);
 
			if (!empty($res->fileNumber)) {
				return Array(true, $res->fileNumber);
			}
 
			$text = "Es ist ein technischer Fehler aufgetreten.";
			if (is_array($res->errorList)) {
				if (count($res->errorList) == 1) {
					$text = $res->errorList[0];
				} else {
					$text = "<ul>";
					foreach ($res->errorList as $e) {
						$text .= "<li>$e</li>";
					}
 
					$text .= "</ul>";
				}
			}
 
			return Array(false, $text);
		} catch (SoapFault $ex) {
			return Array(false, $ex->getMessage());
		}
	}
 
	public function claimStatus($id) {
		$auth = Array(
			"clientId" => $this->options->mid,
			"sandbox" => false,
		);
 
		$options = Array(
			"trace" => 1,
			"compression" => true,
			"exceptions" => true,
		);
 
		try {
			$soap = new SoapClient('https://soap.mediafinanz.de/encashment204.wsdl', $options);
 
			$res = $soap->getClaimStatus($auth, Array("fileNumber" => $id));
			return $res->statusText ?: false;
		} catch (SoapFault $ex) {
			return $ex->getMessage();
		}
	}
}