SwagPaymentPaypal, Express und sShippingcosts

hmm,

also hier wird die warenkorb für paypal-express geholt
SwagPaymentPaypal/PaymentPaypal.php at master · shopwareLabs/SwagPaymentPaypal · GitHub

$basket = $this->get('modules')->Basket()->sGetBasket();

und gleich danach geschaut ob es “sShippingcosts” hat:

if (!empty($basket['sShippingcosts'])) {

nun, wenn $this-\>get('modules')-\>Basket()-\>sGetBasket() ist engine/Shopware/Core/sBasket.php, frage ich mich von wo da diese “sShippingcosts” überhaupt kommen soll, weil es nirgens da definiert wird:

$ grep sShippingcosts engine/Shopware/Core/sBasket.php | wc -l
0

und wenn ich es debugge, ist “sShippingcosts” wirklich leer in $basket.
also woher soll “sShippingcosts” ins $basket kommen?
ist es vielleicht was altes was mit shopware 5.2.x garnicht mehr gefüllt wird?

aber was auch immer, hier wäre wie ich in unseren system die versandkosten (die immer gleich sind, egal welche addresse) an paypal-express (vor login) senden konnte:

diff --git a/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php b/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php
index e2d11ab..08762f8 100644
--- a/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php
+++ b/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php
@@ -821,6 +821,11 @@ class Shopware_Controllers_Frontend_PaymentPaypal extends Shopware_Controllers_F
             }
             $params['PAYMENTREQUEST_0_AMT'] = $basket['AmountNumeric'];
         }
+
+        $shippingcosts = Shopware()->Modules()->Admin()->sGetPremiumShippingcosts();
+        $params['PAYMENTREQUEST_0_SHIPPINGAMT'] = $shippingcosts["surcharge"];
+        $params['PAYMENTREQUEST_0_AMT'] += $params['PAYMENTREQUEST_0_SHIPPINGAMT'];
+
         $params['PAYMENTREQUEST_0_AMT'] = number_format($params['PAYMENTREQUEST_0_AMT'], 2, '.', '');
         $params['PAYMENTREQUEST_0_SHIPPINGAMT'] = number_format($params['PAYMENTREQUEST_0_SHIPPINGAMT'], 2, '.', '');
         $params['PAYMENTREQUEST_0_ITEMAMT'] = number_format($params['PAYMENTREQUEST_0_AMT'] - $params['PAYMENTREQUEST_0_SHIPPINGAMT'], 2, '.', '');

hat jemand bessere ideen?

ps. hab noch nicht getestet ob diese jetzt für paypal-express versandkosten doppelt addiert…

ok, paypal sandbox geht endlich wieder mit express, und sieht so aus das $basket[‚sShippingcosts‘] ist plötzlich gefüllt in letzten bestellung step… daher wäre wohl diese ne bessere lösung:

diff --git a/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php b/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php
index e2d11ab..28a913e 100644
--- a/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php
+++ b/engine/Shopware/Plugins/Community/Frontend/SwagPaymentPaypal/Controllers/Frontend/PaymentPaypal.php
@@ -821,6 +821,15 @@ class Shopware_Controllers_Frontend_PaymentPaypal extends Shopware_Controllers_F
             }
             $params['PAYMENTREQUEST_0_AMT'] = $basket['AmountNumeric'];
         }
+
+ if (empty($basket['sShippingcosts'])) {
+ $shippingcosts = Shopware()->Modules()->Admin()->sGetPremiumShippingcosts();
+ if ($shippingcosts) {
+ $params['PAYMENTREQUEST_0_SHIPPINGAMT'] = $shippingcosts["surcharge"];
+ $params['PAYMENTREQUEST_0_AMT'] += $params['PAYMENTREQUEST_0_SHIPPINGAMT'];
+ }
+ }
+
         $params['PAYMENTREQUEST_0_AMT'] = number_format($params['PAYMENTREQUEST_0_AMT'], 2, '.', '');
         $params['PAYMENTREQUEST_0_SHIPPINGAMT'] = number_format($params['PAYMENTREQUEST_0_SHIPPINGAMT'], 2, '.', '');
         $params['PAYMENTREQUEST_0_ITEMAMT'] = number_format($params['PAYMENTREQUEST_0_AMT'] - $params['PAYMENTREQUEST_0_SHIPPINGAMT'], 2, '.', '');

hmm, wir berechnen unsere versandkosten mit plugin in php durch sAdmin::sGetPremiumShippingcosts::after hook, und diese ist gut genug für frontend, sprich, in frontend werden unsere versandkosten schon vor login angezeigt (weil unsere berechnungen nicht adress abhängig sind).

nun frage ich mich was der richtige weg ist shopware versandkosten über plugin zu erweitern, so das auch diese plugin die versankosten (so wie frontend) vor login erhält…