首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2.8集成Payum Bundle

Symfony2.8集成Payum Bundle
EN

Stack Overflow用户
提问于 2016-04-01 11:24:50
回答 2查看 1.7K关注 0票数 3

我正在使用PayumBundle的贝宝集成在我的网站。我已经设置了包,如started.md中所描述的

并安装paypal快速结帐nvp分机支付。

这是我的控制器:

代码语言:javascript
复制
            $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());

下面是配置文件:

代码语言:javascript
复制
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

然而,当我提交表单时,我会得到以下错误“

代码语言:javascript
复制
 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

我查看了PaypalExpressCheckoutGatewayFactory类,其中在第89行的populateConfig函数中传递了配置,

代码语言:javascript
复制
 return new Api($paypalConfig, $config['payum.http_client'], $config['httplug.message_factory']);

键'httplug.message_factory‘在任何地方都没有定义?

堆栈跟踪:

代码语言:javascript
复制
 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}
EN

回答 2

Stack Overflow用户

发布于 2016-04-01 11:33:38

确保您有payum/core,至少有1.3版本。

票数 0
EN

Stack Overflow用户

发布于 2016-04-06 20:25:03

我在Symfony3中也遇到了同样的问题。若要解决此问题,请添加数组键=>值:

代码语言:javascript
复制
httplug.message_factory' => new GuzzleMessageFactory()

在PaypalExpressCheckoutGatewayFactory配置数组中。我将设法找到一个更好的解决方案,并在稍后更新这篇文章。

您还必须添加以下use语句:

代码语言:javascript
复制
use Http\Message\MessageFactory\GuzzleMessageFactory;

编辑--我终于让它在不改变库的情况下工作了,但实际上我不知道怎么做。我在服务器上安装了应用程序,并执行了php composer.phar安装-o,它可以工作。

这是我的composer.json:

代码语言:javascript
复制
 "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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36355133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档