1

次のコードを使用して、Paypal への呼び出しから返される PHP データをデータベースに記録しようとしています。

$db = new Zend\Db\Adapter\Adapter(array(
'driver' => $config->database->adapter,
'database' => $config->database->params->dbname,
'username' => $config->database->params->username,
'password' => $config->database->params->password
));

$paypalLog = array(
'transactionId' => 'transactionId',
'transactionType'  => 'transactionType',
'paymentType'   => 'paymentType',
'orderTime' => 'orderTime',
'currencyCode' => 'currencyCode',
'feeAmt' => 'feeAmt',
'taxAmt' => 'taxAmt',
'paymentStatus' => 'paymentStatus',
'pendingReason' => 'pendingReason',
'reasonCode' => 'reasonCode'
);

$writer = new Zend\Log\Writer\Db($db, 'paypal', $paypalLog);
$logger = new Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info($transactionId,
    $transactionType,
    $paymentType,
    $orderTime, 
    $currencyCode,
    $feeAmt,        
    $taxAmt,
    $paymentStatus,
    $pendingReason,
    $reasonCode);
?>

以下のエラーが発生し続けます

Fatal error: Uncaught exception 'Zend\Log\Exception\InvalidArgumentException' with message '$extra must be an array or implement Traversable' in C:\xampp\htdocs\app\library\Zend\Log\Logger.php:236 Stack trace: #0 C:\xampp\htdocs\app\library\Zend\Log\Logger.php(333): Zend\Log\Logger->log(6, '2SH18664DB63910...', 'expresscheckout') #1 C:\xampp\htdocs\app\public\orderconfirm.php(124): Zend\Log\Logger->info('2SH18664DB63910...', 'expresscheckout', 'instant', '2013-02-06T10:4...', 'AUD', '0.52', '0.00', 'Completed', 'None', 'None') #2 {main} thrown in C:\xampp\htdocs\app\library\Zend\Log\Logger.php on line 236

どんな助けでも感謝します。

4

2 に答える 2

2

ロガーを正しく使用していません。

それが受け入れる2つのパラメータがあります:

/**
 * @param string $message
 * @param array|Traversable $extra
 * @return Logger
 */
public function info($message, $extra = array())
{
    return $this->log(self::INFO, $message, $extra);
}

$transactionType を「余分な」フィールドとして渡していますが、これはおそらく配列でも通過可能なオブジェクトでもありません。

これを試してください。配列はログ ファイルの文字列に変換されます。

$logger->info(paypalLog); 
// or convert it to a string before logging.. it
$logger->info(implode(',', $paypalLog));
于 2013-02-11T17:16:39.447 に答える
0

「追加」情報を含む配列を作成して送信することで、これを機能させました。

$data = array(
        'transactionId' => $transactionId,
        'transactionType'  => $transactionType,
        'paymentType'   => $paymentType,
        'orderTime' => $orderTime,
        'amt' => $amt,
        'currencyCode' => $currencyCode,
        'feeAmt' => $feeAmt,
        'taxAmt' => $taxAmt,
        'paymentStatus' => $paymentStatus,
        'pendingReason' => $pendingReason,
        'reasonCode' => $reasonCode
        );

     $mapping = array(
        'message'   => 'message',
        'extra' => $data);

     $writer = new Zend\Log\Writer\Db($db, 'paypal', $paypalLog);
     $logger = new Zend\Log\Logger();
     $logger->addWriter($writer);
     $logger->info($mapping);       
于 2013-02-12T00:00:37.610 に答える