Inkasso-Module erstellen

Aus sourceDESK Wiki
Version vom 10. Oktober 2018, 08:32 Uhr von Richard Reiber (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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();
		}
	}
}