我要创建付款时首先使用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
答案 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。