Symfony2.8 整合 Payum Bundle

标签 symfony paypal payum

我在我的站点中使用 PayumBundle 进行 Paypal 集成。 我已经设置了 bundle ,如中所述 https://github.com/Payum/PayumBundle/blob/master/Resources/doc/get_it_started.md

并为 payum 安装了 paypal 快速结账 nvp 扩展。

这是我的 Controller :

            $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());

这是配置文件:

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

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

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

key '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}

最佳答案

确保您的 payum/core 至少是 1.3 版本。

关于Symfony2.8 整合 Payum Bundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36355133/

相关文章:

php - 将 xmlns 值添加到 Symfony2 SoapServer 响应

paypal - 何时使用 IPN 以及何时使用 PayPal 中的 WebHooks 作为通知机制?

symfony - Payum/ Paypal 结账 : What to do after redirecting me to done action

asp.net - 如何在asp.net网站上使用zong

Android braintree SDK - Paypal 在 T&C View 中显示不同的公司名称

symfony - payum symfony 2 bundle - 基本配置 - 存储

Symfony2 SSL 证书,验证 CA 证书是否正常。错误 :14090086

php - 保存实体形式错误 - symfony2

php - EzPublish 根据页面类型使用不同的模板

jquery - symfony2 Twig : best pratice for highlighting a navbar when on the right page