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 }