pixiPaySetInvoiceCapture
Verarbeitet das Ergebnis eines Zahlungseinzugs (Capture) zu einer Rechnung, bucht sie als bezahlt oder setzt sie auf unbezahlt zurück und protokolliert dies in CCPTranLog.
Verarbeitet das Ergebnis eines Zahlungseinzugs (Capture), das ein externer Zahlungsanbieter ("pixi Apps Payment Provider") für die Rechnung InvoiceNr meldet.
Zunächst wird die Rechnung zusammen mit Kunde und Währung gelesen (Shop CustomerOf des Kunden, CustRef, AddrRef, Währungscode). Alle Änderungen laufen in einer Transaktion (bzw. in einem Savepoint, falls bereits eine Transaktion offen ist).
Success = 1 (Einzug erfolgreich)
- Aufruf der internen Prozedur
pixi_SetInvoicePaidmitpaid = 1,EventIDundPaidSum = CaptureSum. Diese legt im Kundenkonto ein manuelles Buchungsereignis an und gleicht es mit der Rechnung ab.EventIDmuss ein manuelles, positives Kundenkonto-Ereignis sein, sonst wird keine Buchung erzeugt. - Bei
SetRemainingOrdersToHAL= 1 werden alle Auftragspositionen mit StatusANG, die zu einem Auftrag (gleicheOrderNr) mit mindestens einer Position auf dieser Rechnung gehören, auf StatusHALgesetzt. - Eintrag in
CCPTranLogmit TransaktionstypCAund FehlercodeCAPTURED, NotizMessage, GesamtbetragCaptureSumund Rechnungswährung. - Rückgabe
Status=Successmit der Meldung Successfully created CA manual booking event for InvoiceNr ….
Success = 0 (Einzug fehlgeschlagen)
- Aktualisierung der Rechnung:
ccpSetFailTrieswird erhöht,CCPNumOfTriesundccpSetFailLastTimegesetzt,PayedSumauf 0 undPayedauf NULL zurückgesetzt,CCPPaymentDoneundCCPReChargeaufNgesetzt. - Die verbleibenden
ANG-Auftragspositionen der betroffenen Aufträge werden immer aufHALgesetzt (unabhängig vonSetRemainingOrdersToHAL). - Eintrag in
CCPTranLogmit TransaktionstypERund FehlercodeCAPTURED FAILED. - Rückgabe
Status=Successmit der Meldung Reset payment data to unpaid for InvoiceNr ….
Bei einem Fehler wird die Transaktion zurückgerollt und eine Zeile mit Status = Error und der SQL-Fehlermeldung geliefert.
Hinweise
- Fehler in
pixi_SetInvoicePaid(z. B. Rechnung existiert nicht, Rechnung bereits bezahlt,EventIDfehlt oder ist kein manuelles positives Ereignis) werden abgefangen und nur ins Fehlerprotokoll (log.InsertError) geschrieben. Der Aufruf liefert trotzdemStatus=Successund schreibt denCCPTranLog-Eintrag; eineSuccess-Zeile garantiert also nicht, dass die Zahlung gebucht wurde. - Im beigefügten
pixi_SetInvoicePaidwird der offene Betrag der Rechnung im Kundenkonto gebucht;CaptureSumwird dort nicht als Buchungsbetrag verwendet, sondern nur inCCPTranLoggespeichert. PayIDundPayCodesind Pflichtparameter, werden aber nicht verwendet.- Jeder Wert von
Successaußer 1 (auch NULL) führt in den Fehlerzweig. CCPNumOfTrieswird ausccpSetFailTries+ 1 gesetzt, nicht aus dem eigenen bisherigen Wert.- Wird die Rechnung (bzw. der Join auf Kunde/Währung) nicht gefunden, werden weder Rechnung noch Auftragspositionen geändert, aber ein Protokolleintrag mit leeren Referenzen wird versucht.
- Änderungen an Auftragspositionen erfolgen mit
UpdateEmp=API Call PaySetAuth, an Rechnungen mitCCP Process. Lesezugriffe nutzenNOLOCK.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
InvoiceNr
Pflicht
|
varchar(20) string |
– |
Nummer der Rechnung, deren Capture-Ergebnis gemeldet wird. Beispiel: |
Success
Pflicht
|
bit boolean |
– |
Ergebnis des Einzugs beim Zahlungsanbieter. Erlaubte Werte
Beispiel: |
PayID
Pflicht
|
varchar(50) string |
– |
Zahlungs-ID des Anbieters. Pflichtparameter, wird aber nicht verwendet. Beispiel: |
PayCode
Pflicht
|
varchar(50) string |
– |
Zahlungscode des Anbieters. Pflichtparameter, wird aber nicht verwendet. Beispiel: |
Message
Pflicht
|
varchar(200) string |
– |
Freitext, der als Notiz ( Beispiel: |
CaptureSum
Pflicht
|
money decimal |
– |
Eingezogener Betrag; wird als Gesamtbetrag im CCP-Protokoll gespeichert und als Beispiel: |
EventID
|
varchar(3) string |
NULL |
Kundenkonto-Ereignis für die manuelle Zahlungsbuchung bei Beispiel: |
SetRemainingOrdersToHAL
Pflicht
|
bit boolean |
– |
Nur bei Erlaubte Werte
Beispiel: |
Antwort
Result-Set 1 · Immer, eine Zeile (Erfolgsmeldung des jeweiligen Zweigs oder Fehlerzeile bei einer Ausnahme).
Statuszeile des Aufrufs.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(7) string |
|
Message
Kann leer sein |
nvarchar(4000) string |
Erfolgstext mit Rechnungsnummer oder SQL-Fehlermeldung. NULL, wenn |
Beispielantwort
<SqlRowSet1>
<row>
<Status>Success</Status>
<Message>Successfully created CA manual booking event for InvoiceNr RE1000123</Message>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | {ERROR_MESSAGE()} | Beliebiger SQL-Fehler bei der Aktualisierung von Rechnung/Auftragspositionen oder beim Eintrag in `CCPTranLog` (z. B. Constraint-Verletzung). Die Transaktion wird zurückgerollt. Fehler in `pixi_SetInvoicePaid` werden hier nicht zurückgegeben, sondern nur protokolliert. |
Beispiele
POST https://apigateway.descartes.com/tms/pixi/
Content-Type: text/xml; charset=utf-8
Authorization: Basic BASE64(USERNAME:PASSWORD)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiPaySetInvoiceCapture>
<InvoiceNr>RE1000123</InvoiceNr>
<Success>1</Success>
<PayID>pay_8f3a21c9</PayID>
<PayCode>CAPTURE_OK</PayCode>
<Message>Capture confirmed by provider</Message>
<CaptureSum>119.90</CaptureSum>
<!-- <EventID>ZE</EventID> -->
<SetRemainingOrdersToHAL>0</SetRemainingOrdersToHAL>
</ns1:pixiPaySetInvoiceCapture>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
curl -X POST 'https://apigateway.descartes.com/tms/pixi/' \
--user 'USERNAME:PASSWORD' \
--header 'Content-Type: text/xml; charset=utf-8' \
--data-binary @- <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiPaySetInvoiceCapture>
<InvoiceNr>RE1000123</InvoiceNr>
<Success>1</Success>
<PayID>pay_8f3a21c9</PayID>
<PayCode>CAPTURE_OK</PayCode>
<Message>Capture confirmed by provider</Message>
<CaptureSum>119.90</CaptureSum>
<!-- <EventID>ZE</EventID> -->
<SetRemainingOrdersToHAL>0</SetRemainingOrdersToHAL>
</ns1:pixiPaySetInvoiceCapture>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML
<?php
$soapClient = new SoapClient(null, [
'login' => 'USERNAME',
'password' => 'PASSWORD',
'location' => 'https://apigateway.descartes.com/tms/pixi/',
'uri' => 'https://apigateway.descartes.com/tms/pixi/',
]);
$arguments = [
'InvoiceNr' => 'RE1000123',
'Success' => '1',
'PayID' => 'pay_8f3a21c9',
'PayCode' => 'CAPTURE_OK',
'Message' => 'Capture confirmed by provider',
'CaptureSum' => '119.90',
// 'EventID' => 'ZE',
'SetRemainingOrdersToHAL' => '0',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiPaySetInvoiceCapture', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiPaySetInvoiceCapture