Automatisierter Aufruf von Payone Capture im Shopware Backend

Hallo zusammen,

ich würde gerne ausgehend von einem Ereigniss (Die Rechnung wurde gedruckt) automatisch für die enstprechende Shopware-Bestellung das Payone Capture auslösen welches den Betrag vom Kunden einzieht.

Im Vordergrund gibt es hierfür eine Funktion die das macht:

  moptPayoneCallCapture: function(order, positionIds, finalize, options, includeShipment) {
    Ext.Ajax.request({
      url: '{url controller="MoptPayoneOrder" action="moptPayoneCaptureOrder"}',
      method: 'POST',
      params: { id: order.get('id'), 
                positionIds: Ext.JSON.encode(positionIds), 
                finalize: finalize, 
                includeShipment: includeShipment},
      headers: { 'Accept': 'application/json'},
      success: function(response)
      {
        var jsonData = Ext.JSON.decode(response.responseText);
        if (jsonData.success)
        {
          Ext.Msg.alert('{s name=detail/captureMoney}Geldeinzug{/s}', '{s name=detail/captureSuccess}Der Geldeinzug wurde erfolgreich durchgeführt.{/s}');
          
          //reload form
          options.callback(order);
        }
        else
        {
          Ext.Msg.alert('{s name=detail/captureMoney}Geldeinzug{/s}', jsonData.error_message);
        }
      }
    });
  },

Nur bin ich jetzt im Hintergrund in einem eigenen Plugin welches die gleiche Funktion aufrufen soll.

Sollte ich hier nun am ehesten:

a) Schauen dass ich Zugriff auf den Payone Controller bekomme in meinem Plugin und dessen Action (moptPayoneCaptureOrderAction) direkt ausführen, oder

b) Doch irgendwie per Curl die API von Shopware aufrufen so ähnlich wie es der Frontendaufruf macht, oder

c) ???

Wäre recht glücklich auf ein paar Beispiele und Hilfe.

Wundert mich vorallem dass es da nicht irgendwo was fertiges gibt, ist doch eigentlich kein ungewöhnlicher Vorgang.

Vielen Dank!

Thomas

Hallo Thomas,

was spricht denn dagegen wenn du wie der Ajax Call an die Url postest per Guzzle?

Die Parameter OrderId und so müsstest du ja haben.

Grüße Lukaschel

Moin,

das Thema ist leider nicht so ganz einfach, deshalb haben wir dafür leider kein Patentrezept.

Du könntest auch einen Blick auf den PayoneService werfen, der stellt Methoden für Capture und Refunds bereit: shopware-5/PayoneService.php at master · PAYONE-GmbH/shopware-5 · GitHub

Viele Grüße

Florian

Hallo Florian, Hallo Lukaschel,

vielen Dank für eure Antworten!

@Lukaschel‍ Ich habs jetzt ganz anders gemacht, folgt gleich.

@PAYONE‍ Ich hab probiert den Payone Service zu nutzen, hab dann aber die gleichen Probleme wie in diesem Issue gehabt: payone_service does not exist · Issue #219 · PAYONE-GmbH/shopware-5 · GitHub

-> Auch das einfügen in die service.xml mit oder ohne synthetic hat nicht geholfen. Bei synthetic hätte ich den Service wohl noch anders instanziieren müssen? Keine Ahnung, leider…

ABER: Ich spreche nun einfach direkt die Payone API ein.Die benötigt ein paar (wenige) Infos, so die Konfigurationsdaten vom Payone Plugin und die TransaktionID und den Betrag der Bestellung und dann löst diese ein Capture aus.

Hier musste ich nich erheblich mit einem verhalteten Guzzle rumkämpfen aber letztendlich klappte es dann mit curl.

Vielen Dank für euer beider Hilfe. Wenn ihr Teile vom Programmcode braucht kann ich dir gerne anbieten. Auch wenn diese sicherlich eher laienhaft geschrieben sind :slight_smile:

1 Like

Super, dass es jetzt klappt. Ich werd mir den Issue noch mal vornehmen. In meinem Test damals (allerdings schon en Weile her) hatte alles funktioniert.

Grüße

Florian

1 Like