【问题标题】:Fatal error: Class '\PayPal\Log\PayPalDefaultLogFactory' not found致命错误:找不到类 '\PayPal\Log\PayPalDefaultLogFactory'
【发布时间】:2023-04-10 06:31:01
【问题描述】:

当我想创建付款时,我首先使用 Paypal REST SDK。出现此错误。

致命错误:在 /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

【问题讨论】:

    标签: php paypal-rest-sdk


    【解决方案1】:

    第 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 on您的测试平台。我正在使用 wampserver。

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

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 2017-01-16
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2018-07-18
      • 2015-08-23
      • 1970-01-01
      相关资源
      最近更新 更多