致命错误:找不到类'\ PayPal \ Log \ PayPalDefaultLogFactory'

时间:2019-06-12 04:27:53

标签: php paypal-rest-sdk

我要创建付款时首先使用Paypal REST SDK。发生此错误。

致命错误:在/ xxx / xxx / xxx / xxx / xxx / xxx / xxx / xxx / xxx / vendor / paypal / rest-api-sdk-php / lib / PayPal中找不到类'\ PayPal \ Log \ PayPalDefaultLogFactory' /Core/PayPalLoggingManager.php在第62行

执行此代码时发生错误。

try {
  $payment->create($apiContext);

  // Get PayPal redirect URL and redirect the customer
  $approvalUrl = $payment->getApprovalLink();

  // Redirect the customer to $approvalUrl
} catch (PayPal\Exception\PayPalConnectionException $ex) {
  echo $ex->getCode();
  echo $ex->getData();
  die($ex);
} catch (Exception $ex) {
  die($ex);
}

如何解决这个问题? ** SDK版本1.14.0

1 个答案:

答案 0 :(得分:0)

第62行包含代码$ factoryInstance-> getLogger($ loggerName)

         private function __construct($loggerName)
    {
        $config = PayPalConfigManager::getInstance()->getConfigHashmap();
        // Checks if custom factory defined, and is it an implementation of @PayPalLogFactory
        $factory = array_key_exists('log.AdapterFactory', $config) && in_array('PayPal\Log\PayPalLogFactory', class_implements($config['log.AdapterFactory'])) ? $config['log.AdapterFactory'] : '\PayPal\Log\PayPalDefaultLogFactory';
        /** @var PayPalLogFactory $factoryInstance */
        $factoryInstance = new $factory();
        $this->logger = $factoryInstance->getLogger($loggerName);
        $this->loggerName = $loggerName;
    }

如果您进一步查找代码,则会在查找“ log.AdapterFactory”设置。这通常不包含在配置文件中的ApiContext设置中。

将log.AdapterFactory设置插入配置文件或引导文件中的ApiContext设置,无论您决定创建哪个。

这通常与您正在使用的AdapterFactory相关联。

Here是来自Github存储库的非常有用的示例,说明了可以与PayPal中可用的新记录器功能一起使用的各种设置。特别看一下第94行

$apiContext->setConfig(
        array(
            'mode' => 'sandbox',
            'log.LogEnabled' => true,
            'log.FileName' => '../PayPal.log',
            'log.LogLevel' => 'DEBUG', // PLEASE USE `INFO` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS
            'cache.enabled' => true,
            //'cache.FileName' => '/PaypalCache' // for determining paypal cache directory
            // 'http.CURLOPT_CONNECTTIMEOUT' => 30
            // 'http.headers.PayPal-Partner-Attribution-Id' => '123123123'
            //'log.AdapterFactory' => '\PayPal\Log\DefaultLogFactory' // Factory class implementing \PayPal\Log\PayPalLogFactory
        )
    );

通常,您还必须使用官方的Paypal建议here创建一个MonologLogFactory类。请记住,相对于路径/文件夹/文件/位置,在文件顶部包括一个合适的名称空间。这是Paypal的代码:

use PayPal\Log\PayPalLogFactory;
    use Psr\Log\LoggerInterface;

    class MonologLogFactory implements PayPalLogFactory
    {

        /**
         * Returns logger instance implementing LoggerInterface.
         *
         * @param string $className
         * @return LoggerInterface instance of logger object implementing LoggerInterface
         */
        public function getLogger($className)
        {
            $logger = new Monolog\Logger($className);
            $logger->pushHandler(new Monolog\Handler\StreamHandler("mail.log"));

            return $logger;
        }
    }

如果仍然遇到问题,请仔细检查您是否确实在C:\ wamp32 \ www \ projectfoldername \ web \ vendor \ paypal \ rest-api-sdk-php \ lib \ PayPal \ Log \ PayPalDefaultLogFactory中找到该文件您的测试平台。我正在使用wampserver。

如果文件不在此处,请确保您的composer.json文件下带有“ paypal / rest-api-sdk-php”:“ *”,然后更新composer。