Fehlermeldung bei Ratenzahlung powered by PayPal

Hallo zusammen,

ich habe das oben genannte Modul wie in der Dokumentation beschrieben installiert, aktiviert und eingerichtet. Nun kommt im Checkout diese Fehlermeldung:
"Während des Abschlusses der Ratenzahlung Powered by PayPal ist ein Fehler aufgetreten. Bitte wiederholen Sie den Checkout oder wählen Sie eine andere Zahlungsart."
Der PayPal-Support schiebt es auf den OXID-eshop und aus der log-Datei werde ich leider nicht schlau.

“[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: paypInstallmentsSdkObjectGenerator getPaymentDetailsObject [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: SetExpressCheckoutValidator validateRequest [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: paypInstallmentsSoapValidator validateRequest [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: SetExpressCheckoutValidator _validateOrderTotalValue [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: paypInstallmentsSoapParser _getValueByClassAndProperty [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: SetExpressCheckoutValidator _validateOrderCurrency [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: paypInstallmentsSoapParser _getValueByClassAndProperty [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: SetExpressCheckoutValidator _validateShippingCountry [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: paypInstallmentsSoapParser _getValueByClassAndProperty [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: SetExpressCheckoutValidator _validateFundingSource [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: paypInstallmentsSoapParser _getValueByClassAndProperty [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: SetExpressCheckoutValidator _validateLandingPage [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: paypInstallmentsSoapParser _getValueByClassAndProperty [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.INFO: SetExpressCheckoutDetails doRequest [] []
[2018-02-22 10:20:55] paypInstallmentsLogger.ERROR: SetExpressCheckoutDetails doRequest {“request”:”[object] (PayPal\PayPalAPI\SetExpressCheckoutReq: {“SetExpressCheckoutRequest”:{“SetExpressCheckoutRequestDetails”:{“OrderTotal”:null,“ReturnURL”:“http://www.domain.com/index.php?cl=order&paypinstallmentssuccess=1&force_paymentid=paypinstallments",“CancelURL”:"http://www.domainWährend des Abschlusses der Ratenzahlung Powered by PayPal ist ein Fehler aufgetreten. Bitte wiederholen Sie den Checkout oder wählen Sie eine andere Zahlungsart. .com/index.php?cl=payment&paypinstallmentscanceled=1”,“TrackingImageURL”:null,“giropaySuccessURL”:null,“giropayCancelURL”:null,“BanktxnPendingURL”:null,“Token”:null,“MaxAmount”:null,“OrderDescription”:null,“Custom”:null,“InvoiceID”:null,“ReqConfirmShipping”:0,“ReqBillingAddress”:null,“BillingAddress”:null,“NoShipping”:2,“AddressOverride”:0,“LocaleCode”:null,“PageStyle”:null,“cppheaderimage”:null,“cppheaderbordercolor”:null,“cppheaderbackcolor”:null,“cpppayflowcolor”:null,“cppcartbordercolor”:null,“cpplogoimage”:null,“Address”:null,“PaymentAction”:null,“SolutionType”:null,“LandingPage”:“Billing”,“BuyerEmail”:null,“ChannelType”:null,“BillingAgreementDetails”:null,“PromoCodes”:null,“PayPalCheckOutBtnType”:null,“ProductCategory”:null,“ShippingMethod”:null,“ProfileAddressChangeDate”:null,“AllowNote”:0,“FundingSourceDetails”:{“AllowPushFunding”:null,“UserSelectedFundingSource”:“Finance”},“BrandName”:null,“CallbackURL”:null,“EnhancedCheckoutData”:null,“OtherPaymentMethods”:null,“BuyerDetails”:null,“PaymentDetails”:[{“OrderTotal”:{“currencyID”:“EUR”,“value”:150.9},“ItemTotal”:{“currencyID”:“EUR”,“value”:146},“ShippingTotal”:{“currencyID”:“EUR”,“value”:4.9},“HandlingTotal”:{“currencyID”:“EUR”,“value”:0},“TaxTotal”:{“currencyID”:“EUR”,“value”:0},“OrderDescription”:null,“Custom”:null,“InvoiceID”:null,“ButtonSource”:“PayPal_SDK”,“NotifyURL”:null,“ShipToAddress”:{“Name”:“Name”,“Street1”:“Straße”,“Street2”:null,“CityName”:“Ort”,“StateOrProvince”:null,“Country”:“DE”,“CountryName”:null,“Phone”:null,“PostalCode”:“PLZ”,“AddressID”:null,“AddressOwner”:null,“ExternalAddressID”:null,“InternationalName”:null,“InternationalStateAndCity”:null,“InternationalStreet”:null,“AddressStatus”:null,“AddressNormalizationStatus”:null},“MultiShipping”:null,“FulfillmentReferenceNumber”:null,“FulfillmentAddress”:null,“PaymentCategoryType”:null,“ShippingMethod”:null,“ProfileAddressChangeDate”:null,“PaymentDetailsItem”:[{“Name”:“Sprenger -Dynamic RS- Sensogan doppelt gebrochen 16 mm, 13,5 cm”,“Number”:null,“Quantity”:1,“Tax”:{“currencyID”:“EUR”,“value”:null},“Amount”:{“currencyID”:“EUR”,“value”:146},“EbayItemPaymentDetailsItem”:null,“PromoCode”:null,“ProductCategory”:null,“Description”:null,“ItemWeight”:null,“ItemLength”:null,“ItemWidth”:null,“ItemHeight”:null,“ItemURL”:null,“EnhancedItemData”:null,“ItemCategory”:“Physical”}],“InsuranceTotal”:{“currencyID”:“EUR”,“value”:0},“ShippingDiscount”:{“currencyID”:“EUR”,“value”:0},“InsuranceOptionOffered”:null,“AllowedPaymentMethod”:null,“EnhancedPaymentData”:null,“SellerDetails”:null,“NoteText”:null,“TransactionId”:null,“PaymentAction”:“Sale”,“PaymentRequestID”:null,“OrderURL”:null,“SoftDescriptor”:null,“BranchLevel”:null,“OfferDetails”:null,“Recurring”:null,“PaymentReason”:null}],“FlatRateShippingOptions”:null,“CallbackTimeout”:null,“CallbackVersion”:null,“CustomerServiceNumber”:null,“GiftMessageEnable”:null,“GiftReceiptEnable”:null,“GiftWrapEnable”:null,“GiftWrapName”:null,“GiftWrapAmount”:null,“BuyerEmailOptInEnable”:null,“SurveyEnable”:null,“SurveyQuestion”:null,“SurveyChoice”:null,“TotalType”:null,“NoteToBuyer”:null,“Incentives”:null,“ReqInstrumentDetails”:null,“ExternalRememberMeOptInDetails”:null,“FlowControlDetails”:null,“DisplayControlDetails”:null,“ExternalPartnerTrackingDetails”:null,“CoupledBuckets”:null},“DetailLevel”:null,“ErrorLanguage”:null,“Version”:“124.0”}})",“error”:“Invalid userId “} []
[2018-02-22 10:20:55] paypInstallmentsLogger.ERROR: paypInstallmentsPayment::validatePayment An exception was caught. See EXCEPTION_LOG.txt for details {“exception”:”[object] (paypInstallmentsSetExpressCheckoutException(code: 0): Invalid userId at /…/vendor/oxid-esales/oxideshop-ce/source/Core/UtilsObject.php:231)”} []"

In der UtilsObject.php line 231 ist für mich keine UserID ersichtlich und die API-Daten sind richtig. mit PayPal Plus funktionieren diese ohne Probleme.

Hat von euch jemand Erfahrungen mit diesem Modul?
Oder einen Ansatz zur Fehlerbeseitigung?

Danke.

kommt das aus dem exception log?

Nein. Ist die Log vom PayPal Ratenzahlung Modul

wäre interessant, was im exception log steht

Hier der Auszug aus dem EXCEPTION_LOG.txt mit dem gleiche Zeitstempel:

[22 Feb 10:20:55.045237 2018] [exception] [type paypInstallmentsSetExpressCheckoutException] [code 0] [file /…/vendor/oxid-esales/oxideshop-ce/source/Core/UtilsObject.php] [line 231] [message Invalid userId ]
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #0 /…/source/oxfunctions.php(103): OxidEsales\EshopCommunity\Core\UtilsObject->oxNew(‘paypinstallment…’)
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #1 /…/source/modules/payp/installments/custom/handlers/paypinstallmentssetexpresscheckouthandler.php(209): oxNew(‘paypinstallment…’)
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #2 /…/source/modules/payp/installments/custom/handlers/paypinstallmentssetexpresscheckouthandler.php(120): paypInstallmentsSetExpressCheckoutHandler->_throwSetExpressCheckoutException('Invalid userId ')
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #3 /…/source/modules/payp/installments/controllers/paypinstallmentspayment.php(185): paypInstallmentsSetExpressCheckoutHandler->doRequest()
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #4 /…/vendor/oxid-esales/oxideshop-ce/source/Core/Controller/BaseController.php(523): paypInstallmentsPayment->validatePayment()
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #5 /…/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(332): OxidEsales\EshopCommunity\Core\Controller\BaseController->executeFunction(‘validatepayment’)
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #6 /…/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(274): OxidEsales\EshopCommunity\Core\ShopControl->executeAction(Object(paypInstallmentsPayment), ‘validatepayment’)
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #7 /…/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): OxidEsales\EshopCommunity\Core\ShopControl->_process(‘OxidEsales\Esho…’, ‘validatepayment’, NULL, NULL)
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #8 /…/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #9 /…/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()
[22 Feb 10:20:55.045237 2018] [exception] [stacktrace] #10 {main}

In der paypinstallmentssetexpresscheckouthandler.php(120) steht:

$this->_throwSetExpressCheckoutException($sMessage);

Schau dir mal im Code an wo diese Exception geworfen wird, evtl. bringt dich das weiter …

Da fehlt mir grade der Durchblick.
Hier der komplette Code der php:
<?php
/**
* This file is part of PayPal Installments module.
*
* PayPal Installments module is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PayPal Installments module is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PayPal Installments module. If not, see <http://www.gnu.org/licenses/>.
*
* @link https://www.paypal.com
* @copyright (C) PayPal (Europe) S.à r.l. et Cie, S.C.A. 2015
*/

/**
* Class paypInstallmentsSetExpressCheckoutHandler
*
* Handles the SetExpressCheckout Call to PalPal
*/
class paypInstallmentsSetExpressCheckoutHandler extends paypInstallmentsHandlerBase
{

/**
* An instance of oxBasket at the moment of checkout step 3
*
* @var oxBasket $_oBasket
*/
protected $_oBasket ;

/**
* This will be set to the oxorder__ordernr
*
* @var string $_sInvoiceId
*/
protected $_sInvoiceId ;

/**
* Calls SetExpressCheckout on the PayPalService
*
* Throws exceptions if:
* - the call fails
* - request is not valid or cannot be parsed
* - the response is not valid or cannot be parsed
*
* @throws Exception
*
* @return string The PayPal Token to be used in GetExpressCheckout, DoExpressCheckout, Refund, etc ..
*/
public function doRequest()
{
/** @var paypInstallmentsSdkObjectGenerator $oObjectGenerator */
$oObjectGenerator = $this->_getObjectGenerator();

$oModuleConfig = oxNew('paypInstallmentsConfiguration');
$oObjectGenerator->setConfiguration($oModuleConfig);

$oDataProvider = oxNew('paypInstallmentsCheckoutDataProvider');
$oBasket = $this->_getBasket();
$oDataProvider->setBasket($oBasket);
$oObjectGenerator->setDataProvider($oDataProvider);

/**
* Instance of the parser. Will throw exceptions if request or response cannot be parsed
*/
$oParser = $this->_getParser('paypInstallmentsSetExpressCheckoutParser');

/**
* Instance of the validator
*/
$oValidator = $this->_getValidator('paypInstallmentsSetExpressCheckoutValidator');
$oValidator->setParser($oParser);

/**
* set up lögging
*/

$oLogger = $this->getLogger();
$oValidator->setLogger($oLogger);
$oParser->setLogger($oLogger);

/**
* Get the request object
*/
$oRequest = $oObjectGenerator->getSetExpressCheckoutReqObject();

/**
* Validate the request. If validations (or parsing) fails an
* paypInstallmentsSetExpressCheckoutRequestValidationException
* exception is thrown.
* This is the last resource. The calling controller should already validate some basic values.
*
* @see paypInstallmentsSetExpressCheckoutValidator for validation conditions
*/
$oValidator->setRequest($oRequest);
$oValidator->validateRequest();

$oLogger->info("SetExpressCheckoutDetails doRequest", array("request" => $oRequest));

/**
* Call SetExpressCheckout.
* Rethrow Exception, so we can handle it in our own way.
*/
/** Get instance of the PayPal Service */
$oPayPalService = $oObjectGenerator->getPayPalServiceObject();
try {
/**
* Get the response from PayPal
*/
$oResponse = $oPayPalService->SetExpressCheckout($oRequest);
} catch (Exception $oPayPalException) {
$sMessage = $oPayPalException->getMessage();
$oLogger->error("SetExpressCheckoutDetails doRequest", array("request" => $oRequest, "error" => $sMessage));
$this->_throwSetExpressCheckoutException($sMessage);
// There is a strange behaviour in php code coverage, which reports the parenthesis as uncovered
// @codeCoverageIgnoreStart
}
// @codeCoverageIgnoreEnd

/**
* And validate the response. If the validation (or parsing) fails an exception is thrown here
*/
$oValidator->setResponse($oResponse);
$oValidator->validateResponse();

/**
* Return the PayPal Token for further processing if everything went fine :-)
*/
return (string) $oParser->getToken();
}

/**
* Property setter
*
* @codeCoverageIgnore
*
* @param $oBasket
*/
public function setBasket($oBasket) {
$this->_oBasket = $oBasket;
}

/**
* Property getter
*
* @codeCoverageIgnore
*
* @return oxBasket
*/
protected function _getBasket() {
return $this->_oBasket;
}

/**
* Property getter
*
* @codeCoverageIgnore
*
* @return string
*/
protected function _getInvoiceId()
{
return $this->_sInvoiceId;
}

/**
* Property setter
*
* @codeCoverageIgnore
*
* @param string $sInvoiceId
*/
public function setInvoiceId($sInvoiceId)
{
$this->_sInvoiceId = (string) $sInvoiceId;
}

/**
* Returns an instance paypInstallmentsSdkObjectGenerator.
* Needed for mocking.
*
* @codeCoverageIgnore
*
* @return paypInstallmentsSdkObjectGenerator
*/
protected function _getObjectGenerator()
{
$oObjectGenerator = oxNew('paypInstallmentsSdkObjectGenerator');

return $oObjectGenerator;
}

/**
* Re-Throws an exception in case the API call to SetExpressCheckout throws an exception
*
* @param $sMessage
*
* @throws paypinstallmentssetexpresscheckoutexception
*/
protected function _throwSetExpressCheckoutException($sMessage)
{
/** @var paypinstallmentssetexpresscheckoutexception $oEx */
$oEx = oxNew('paypinstallmentssetexpresscheckoutexception');
$oEx->setMessage($sMessage);
throw $oEx;
}
}

Für mich sieht es aus als ob hier nur mit PayPal kommuniziert wird

Hi @PBL hast du den Fehler beheben können?

Nein, solange das Ratenzahlung by PayPal-Modul keine Unterstützung für CE 6.x anbietet läuft es nicht. Auch der Support von PayPal hatte hierzu keine Informationen bezüglich eines Updates. Leider haben die anderen Anbieter von Finanzierungsdienstleistungen noch kein brauchbares Modul mit Unterstützung der neusten CE-Version. Gruß

1 Like

Das ist natürlich schade! 6.x ist natürlich schon ne weile draußen.
Hat das noch keiner von den Agenturen geported?
Gibts keine Alternatieve?

Hi @PBL
als info für dich.

Nach einem Langen Kampf mit Paypal wurde das Modul für uns geupdated.

Mit

composer require oxid-paypal/paypalinstallments

könnt ihr die neue Version laden.

Das wurde bei uns umsonst von BestIT eingebaut, die das für Paypal machen.
https://paypal.bestit-online.de/ratenzahlung/

Als kleiner Tipp, beantragt die Ratenzahlung bei Paypal über euren Paypal Accountmanager und lasst euch für EURE harte arbeit ein integrationspauschale von paypal zahlen das ihr das Modul bei euch einbaut. :wink:

Danke für die Info.
Habe das Update installiert, leider keine Veränderung.

Das modul ist bei mir auf Version 2.0.2
Die sandbox funktioniert komischerweise nicht. Live geht es aber.

Ich habe auch Version 2.0.2. Die Zahlungsart wird aber im Checkout nicht angezeigt. BestIT vermutet eine Inkompatibilität mit dem Modul von Klarna. Man wollte das mit PayPal klären. Dabei blieb es dann auch. Seit 2 Wochen nichts mehr von BestIT gehört.

Ja bei mir gab es auch irgend ein Problem, dass unsere Bestellnummern immer die selbern waren und die kein weiteres kondingent von Paypal hatten um daran zu arbeiten… Zudem wurde mir der error log mit Fehlermeldungen zugespammt. Paypal wollte das mit denen klären aber seither keine Rückmledung ~6 Wochen.