Symfony Payum Bundle получает шлюзы из базы данных

Я собираюсь использовать Payum Bundle с Symfony 3.2 для одного из моих проектов. Платежная система довольно сложна, потому что у меня есть несколько организаций, и у каждого из них есть один или несколько предопределенных способов оплаты. У каждого объекта есть свои учетные данные. Итак, для примера:

У сущности 1 есть Paypal, а у Strype у сущности 2 только Paypal

Но учетные данные для Paypal сущности 1 и 2 различны. Лучший способ справиться с этим - создать форму для вставки и редактирования учетных данных и сохранить их все в базе данных.

Я вижу, что Payum поддерживает хранилище базы данных конфигурации шлюза, но я не могу правильно настроить Symfony.

После прав и файла конфигурации до сих пор.

// /app/config/config.yml
payum:
    security:
        token_storage:
            AppBundle\Entity\PaymentToken: { doctrine: orm }

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

Используя документы Payum, я создал фоллинг-сущность и сгенерировал соответствующую таблицу в базе данных:

<?php
// AppBundle/Entity/GatewayConfig.php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Payum\Core\Model\GatewayConfig as BaseGatewayConfig;

/**
 * @ORM\Table
 * @ORM\Entity
 */
class GatewayConfig extends BaseGatewayConfig
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     *
     * @var integer $id
     */
    protected $id;
}

Затем я сгенерировал сущность и сохранил ее в своей базе данных со следующим контроллером:

    /**
     * @Route("/testGateway", name="gateway")
     */
    public function testGetawayCreationAction(){
        $gatewayConfig = new GatewayConfig();
        $gatewayConfig->setGatewayName('paypal');
        $gatewayConfig->setFactoryName('paypal_express_checkout_nvp');
        $gatewayConfig->setConfig(array(
            'username' => 'MY COOL USERNAME',
            'password' => 'MY COOL PASSWORD',
            'signature' => 'MY ELEGANT SIGNATURE',
            'sandbox' => true,
        ));


      $em=$this->get('doctrine')->getManager();
      $em->persist($gatewayConfig);
      $em->flush();
      return new Response("Gateway insered");
    }
}

Теперь у меня есть сущность, у меня есть данные в базе данных, но когда я пытаюсь запустить транзакцию Payum, я получаю эту ошибку при создании токена внутри следующего контроллера:

/**
     * @Route("/doPayment", name="doPayment")
     */
    public function prepareAction()
    {
        $gatewayName = 'paypal';

        $storage = $this->get('payum')->getStorage('AppBundle\Entity\PaymentDetails');

        $payment = $storage->create();
        $payment->setNumber(uniqid());
        $payment->setCurrencyCode('EUR');
        $payment->setTotalAmount(123); // 1.23 EUR
        $payment->setDescription('A description');
        $payment->setClientId('anId');
        $payment->setClientEmail('foo@example.com');

        $storage->update($payment);

        $captureToken = $this->get('payum')->getTokenFactory()->createCaptureToken(
            $gatewayName,
            $payment,
            'done' // the route to redirect after capture
        );

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

Ошибка 500: шлюз "PayPal" не существует.

Я полагаю, это потому, что я правильно настроил Payum для поиска шлюза через Doctrine в базе данных, но я не могу найти никаких документов об этом последнем этапе конфигурации.

1 ответ

Все, что вы разместили, выглядит хорошо, кроме этой части конфига

#app/config/config.yml

payum:
    dynamic_gateways:
        sonata_admin: true
        config_storage: 
            Acme\PaymentBundle\Entity\GatewayConfig: { doctrine: orm }
Другие вопросы по тегам