【问题标题】:Class 'PayPal\Api\Itemlist' not found找不到类“PayPal\Api\Itemlist”
【发布时间】:2018-12-05 04:42:17
【问题描述】:

我在生产站点上收到此 PHP 错误,但在本地主机上没有:

致命错误:未捕获的错误:在...中找不到类 'PayPal\Api\Itemlist' 堆栈跟踪:...

这是发生错误的函数:

function paypal_submit( $orderID, $cart ) {
    // Get settings
    global $settings;

    // Init SDK
    $paypal = paypal_init();

    // Create payer
    $payer = new \PayPal\Api\Payer();
    $payer->setPaymentMethod('paypal');

    // Iterate through items
    $items = array();
    $total = 0;

    foreach( $cart as $imageID => $imagePrice ):

        $total = $total + $imagePrice;

        $item = new \PayPal\Api\Item();
        $item->setName( 'Bild #' . $imageID )
             ->setCurrency( 'EUR' )
             ->setQuantity( 1 )
             ->setPrice( $imagePrice );

        $items[] = $item;

    endforeach;

    $itemList = new \PayPal\Api\Itemlist();
    $itemList->setItems( $items );

    $amount = new \PayPal\Api\Amount();
    $amount->setCurrency( 'EUR' )
           ->setTotal( $total );

    $transaction = new \PayPal\Api\Transaction();
    $transaction->setAmount( $amount )
                ->setItemList( $itemList )
                ->setDescription( 'Bestellung #' . $orderID )
                ->setInvoiceNumber( 'RE' . $orderID )
                ->setCustom( $orderID );


    $redirectURLs = new \PayPal\Api\RedirectUrls();
    $redirectURLs->setReturnUrl( add_query_arg( 'success', 1, permalink( 'checkout-paypal' ) ) )
                 ->setCancelUrl( add_query_arg( 'success', 0, permalink( 'checkout-paypal' ) ) );



    $payment = new \PayPal\Api\Payment();
    $payment->setIntent( 'sale' )
            ->setPayer( $payer )
            ->setRedirectUrls( $redirectURLs )
            ->setTransactions( [ $transaction ] );

    try {

        $payment->create( $paypal );

    } catch( PayPal\Exception\PayPalConnectionException $ex ) {

        echo $ex->getCode(); // Prints the Error Code
        echo $ex->getData(); // Prints the detailed error message 

        die( $ex );

    } catch( Exception $ex ) {
        die( $ex );
    }

    $approvalUrl = $payment->getApprovalLink();
    header( 'Location: ' . $approvalUrl ); exit;
}

这里是init函数(只是为了完整起见):

function paypal_init() {
    // Get settings
    global $setting;

    // Load PayPal SDK
    require_once( ABSPATH . 'system/classes/paypal/autoload.php' );

    // Register app
    $paypal = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential(
            $setting['paypal_clientid'],
            $setting['paypal_clientsecret']
        )
    );

    // Return app
    return $paypal;
}

所有其他类都可以工作。

奇怪的是,完全相同的集成在 localhost 上可以正常工作,但在生产环境中却不行…… PHP 版本是相同的。据我所知,唯一的区别是生产站点运行在 https 上。

任何想法可能是什么问题?我猜自动加载器可能出于任何原因不包含此类?

【问题讨论】:

  • 类被正确包含了吗?
  • 所有类都通过 PayPal 自己的自动加载器包含在这里 github.com/paypal/PayPal-PHP-SDK/wiki/…
  • 尝试\PayPal\Api\ItemList而不是\PayPal\Api\Itemlist ...自动加载的情况很重要..类文件本身实际上命名为ItemList
  • @IncredibleHat:嗯……这里没什么好说的。我已经检查了所有 PayPal 和其他与案例相关的部分,但我忽略了那个小 L -.- ...荣誉。如果您将其发布为答案……

标签: php paypal paypal-rest-sdk


【解决方案1】:

自动加载器会查找以您正在使用的类名命名的文件。由于您使用的是Itemlist,它会查找Itemlist.php 的文件。

将其更改为\PayPal\Api\ItemList 将允许自动加载器找到正确的文件(在区分大小写的系统上)。因为SDK中的实际文件是ItemList.php

【讨论】:

    猜你喜欢
    • 2017-01-16
    • 2015-04-29
    • 2020-03-16
    • 2021-01-31
    • 2021-02-19
    • 2017-06-04
    • 2019-09-07
    • 2014-03-29
    • 2013-05-23
    相关资源
    最近更新 更多