2016-04-01 13 views
2

私は自分のサイトにPaypalを統合するためにPayumBundleを使用しています。 https://github.com/Payum/PayumBundle/blob/master/Resources/doc/get_it_started.mdSymfony2.8 integration Payum Bundle

に記載さpayumためのインストールのPayPalエクスプレスチェックアウトNVP拡張として、私は、バンドル設定しています。

これは私のコントローラである:私はフォームを送信すると

payum: 
    security: 
    token_storage: 
     MyBundle\Entity\PaymentToken: { doctrine: orm } 

    storages: 
    MyBundle\Entity\PaymentDetails: { doctrine: orm } 

    gateways: 
    paypal-express-checkout-nvp: 
     factory: paypal_express_checkout 
     username: %paypal_user% 
     password: %paypal_password% 
     signature: %paypal_signature% 
     sandbox: true 

は、しかし、私はエラー次取得しています」

Catchable Fatal Error: Argument 3 passed to Payum\Paypal\ExpressCheckout\Nvp\Api::__construct() must be an instance of Http\Message\MessageFactory, null given, called in vendor/payum/paypal-express-checkout-nvp/Payum/Paypal/ExpressCheckout/Nvp/PaypalExpressCheckoutGatewayFactory.php on line 89 and defined in vendor/payum/paypal-express-checkout-nvp/Payum/Paypal/ExpressCheckout/Nvp/Api.php at 317 

私が持っていた:ここ

  $gatewayName = 'paypal-express-checkout-nvp'; 

      $storage = $this->get('payum')->getStorage(PaymentDetails::class); 

      $details = $storage->create(); 
      $details['PAYMENTREQUEST_0_CURRENCYCODE'] = 'CHF'; 
      $details['PAYMENTREQUEST_0_AMT'] = $amount; 
      $storage->update($details); 

      $captureToken = $this->get('payum')->getTokenFactory()->createCaptureToken(
       $gatewayName, $details, 'payment_done' 
      ); 

      return $this->redirect($captureToken->getTargetUrl()); 

は、設定ファイルでありますconfigがpopulateConfig関数の89行目に渡されるPaypalExpressCheckoutGatewayFactoryクラスを見てください。

return new Api($paypalConfig, $config['payum.http_client'], $config['httplug.message_factory']); 

「httplug.message_factory」キーはどこにも定義されていませんか?

スタックトレース:

0 vendor/payum/paypal-express-checkout-nvp/Payum/Paypal/ExpressCheckout/Nvp/Api.php(317): Symfony\Component\Debug\ErrorHandler->handleError(4096, 'Argument 3 pass...', '...', 317, Array) 
1 vendor/payum/paypal-express-checkout-nvp/Payum/Paypal/ExpressCheckout/Nvp/PaypalExpressCheckoutGatewayFactory.php(89): Payum\Paypal\ExpressCheckout\Nvp\Api->__construct(Array, Object(Payum\Core\Bridge\Guzzle\HttpClient), NULL) 
2 [internal function]: Payum\Paypal\ExpressCheckout\Nvp\PaypalExpressCheckoutGatewayFactory->Payum\Paypal\ExpressCheckout\Nvp\{closure}(Object(Payum\Core\Bridge\Spl\ArrayObject)) 
3 vendor/payum/core/Payum/Core/CoreGatewayFactory.php(123): call_user_func(Object(Closure), Object(Payum\Core\Bridge\Spl\ArrayObject)) 
4 vendor/payum/core/Payum/Core/Bridge/Symfony/ContainerAwareCoreGatewayFactory.php(35): Payum\Core\CoreGatewayFactory->buildClosures(Object(Payum\Core\Bridge\Spl\ArrayObject)) 
5 vendor/payum/core/Payum/Core/CoreGatewayFactory.php(40): Payum\Core\Bridge\Symfony\ContainerAwareCoreGatewayFactory->buildClosures(Object(Payum\Core\Bridge\Spl\ArrayObject)) 
6 vendor/payum/core/Payum/Core/GatewayFactory.php(33): Payum\Core\CoreGatewayFactory->create(Array) 
7 vendor/payum/core/Payum/Core/PayumBuilder.php(422): Payum\Core\GatewayFactory->create(Array) 
8 app/cache/dev/appDevDebugProjectContainer.php(2209): Payum\Core\PayumBuilder->getPayum() 
9 vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php(316): appDevDebugProjectContainer->getPayumService() 
10 vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php(391): Symfony\Component\DependencyInjection\Container->get('payum') 
11 src/zenpme/BusinessBundle/Controller/PaymentController.php(74): Symfony\Bundle\FrameworkBundle\Controller\Controller->get('payum') 
12 [internal function]: BusinessBundle\Controller\PaymentController->indexAction(Object(Symfony\Component\HttpFoundation\Request)) 
13 vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php(139): call_user_func_array(Array, Array) 
14 vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php(62): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) 
15 vendor/symfony/symfony/src/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php(69): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) 
16 vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php(185): Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) 
17 web/app_dev.php(30): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request)) 
18 {main} 
+0

あなたが質問に例外スタックトレースを追加することができますか? –

+0

スタックトレースを追加しました。 :) –

+0

Symfony 3と同じ問題 – codeneuss

答えて

0

あなたはpayum/core少なくとも1.3バージョンを持っていることを確認してください。

+0

httplug-bundle、guzzle-adapterをインストールしました。 config.ymlのhttplugクラスを有効にしました。まだ同じエラーがあります。 –

+0

バージョン1.3以上で 'payum/core'があると確信していますか? –

+0

はい。 payum/coreを1.3.0に更新しました –

0

私はSymfony3で同じ問題を抱えて。 PaypalExpressCheckoutGatewayFactoryコンフィグアレイにおける

httplug.message_factory' => new GuzzleMessageFactory() 

:配列のキー=>値を追加回避策 。 もっと良い解決策を見つけて、後でその記事を更新しようとします。

また、この使用ステートメントを追加する必要があります。

use Http\Message\MessageFactory\GuzzleMessageFactory; 

EDIT 私は最終的にそれがライブラリを変更せずに動作するようになったが、私は実際にどのように知りません。私は自分のサーバーにアプリケーションをインストールし、php composer.pharを-oにインストールして動作させました。

これは私のcomposer.jsonです:

"require": { 
     "php": ">=5.5.9", 
     "symfony/symfony": "3.0.*", 
     "doctrine/orm": "^2.5", 
     "doctrine/doctrine-bundle": "^1.6", 
     "doctrine/doctrine-cache-bundle": "^1.2", 
     "symfony/swiftmailer-bundle": "^2.3", 
     "symfony/monolog-bundle": "^2.8", 
     "sensio/distribution-bundle": "^5.0", 
     "sensio/framework-extra-bundle": "^3.0.2", 
     "incenteev/composer-parameter-handler": "^2.0", 
     "beberlei/DoctrineExtensions": "^1.0", 
     "payum/payum-bundle": "^2.0", 
     "payum/paypal-express-checkout-nvp": "^1.3" 
    }, 
+0

どこでもGuzzleMessageFactoryクラスが見つかりません。私はそれのための任意のライブラリをインストールする必要はありますか?これは現在の作曲家です.json "payum/payum-bundle": "^ 2.0"、 "payum/paypal-express-checkout-nvp": "^ 1.3"、 "php-http/guzzle6-adapter": "^ 1.0" –

+0

まあ、私はあきらめます。私は自分のアプリケーションでPaypalのPHP APIを使用しています。しかし、私はこの質問を開いたままにしています。あなたが同じエラーで立ち往生している場合、誰かが解決策を得ることができるように、それを投稿してください。 –

+0

My Composer.jsonは "payum/payum-bundle": "^ 2.0"、 "payum/paypal-express-checkout-nvp": "^ 1.3"のように見えます。 – codeneuss