Fehlermeldung bei Ratenzahlung powered by PayPal


#1

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.


#2

kommt das aus dem exception log?


#3

Nein. Ist die Log vom PayPal Ratenzahlung Modul


#4

wäre interessant, was im exception log steht


#5

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


#6

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


#7

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


#8

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


#9

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ß


#10

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?