Paypal API无法在服务器上完全加载,但加载到localhost

时间:2017-01-09 02:29:23

标签: php api paypal

我遇到这个问题,而Paypal API没有在我的服务器上加载,但它在我的localhost上加载完全正常。我真的不知道它出了什么问题。一切都与我从本地主机上传文件到服务器一样,没有任何变化,而且文件完全相同。

使用Paypal REST API进行付款时,我的服务器上出现此错误,但我的本地主机上没有此错误。

Fatal error: Class 'PayPal\Api\item' not found in /var/www/test.my-domain.com/public_html/controllers/credits.php on line 24

我的代码如下:

require_once('./inc/lib/paypal/autoload.php');
$apiContext = new \PayPal\Rest\ApiContext(
            new \PayPal\Auth\OAuthTokenCredential(
                'hidden-clientid',// ClientID
                'hidden-secret'// ClientSecret
            )
        );

        if (isset($_POST['checkout'])) {
            $payer = new \PayPal\Api\Payer();
            $payer->setPaymentMethod('paypal');

            $item = new \PayPal\Api\item();
            $item->setName('Top Up')
                    ->setDescription('My account.')
                    ->setCurrency('USD')
                    ->setQuantity(1)
                    ->setTax(0)
                    ->setPrice(10);

            $itemList = new \PayPal\Api\itemList();
            $itemList->setItems(array($item));

            $details = new \PayPal\Api\details();
            $details->setShipping("0")
                    ->setTax("0")
                    ->setSubtotal(10);

            $amount = new \PayPal\Api\amount();
            $amount->setCurrency("USD")
                   ->setTotal(10)
                   ->setDetails($details);

            $transaction = new \PayPal\Api\transaction();
            $transaction->setAmount($amount)
                ->setItemList($itemList)
                ->setDescription("Top up account")
                ->setInvoiceNumber(uniqid());

            $redirectUrls = new \PayPal\Api\RedirectUrls();
            $redirectUrls->setReturnUrl("http://".$_SERVER["HTTP_HOST"].$web_path."credits/done?status=success");
            $redirectUrls->setCancelUrl("http://".$_SERVER["HTTP_HOST"].$web_path."credits/done?status=cancel");

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

            $response = $payment->create($apiContext);
            $redirectUrl = $response->links[1]->href;

            header( "Location: $redirectUrl" );

奇怪的部分是它经过$payer->setPaymentMethod('paypal');但它没有通过$item = new \PayPal\Api\item();

所有代码都与我的localhost相同,并且可以在我的localhost上运行。 Paypal API也会在我的服务器上的确切位置上传(/ inc / lib / paypal /)。

2 个答案:

答案 0 :(得分:0)

自动加载包含什么。使用自动加载或

时,请尝试使用完整路径EX:/var/www/test.my-domain.com/public_html

答案 1 :(得分:0)

我通过逐个包含API文件解决了这个问题。

我在下面列出了以下几行:

require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/Item.php');
require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/ItemList.php');
require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/Details.php');
require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/Amount.php');
require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/Transaction.php');
require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/RedirectUrls.php');
require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/Payment.php');
require_once('./inc/lib/paypal/paypal/rest-api-sdk-php/lib/PayPal/Api/PaymentExecution.php');

这解决了这个问题。我认为这不是最好的解决方案,但它确实有效。我不知道为什么我仍然需要逐个包含这些内容,否则autoload.php应该包含所有这些API文件。

我希望这有助于遇到像我一样遇到同样问题的其他人。