Как зарегистрировать новый способ оплаты payum и добавить действия?

Я создал метод оплаты payum. Я настроил платежную форму, в которой хранятся детали платежа, а затем я генерирую токен безопасности платежа. Пока все выглядит нормально, и payum генерирует токен в хранилище.

Однако я не могу его зарегистрировать. Я не знаю, где я должен добавить действия, чтобы они использовались при загрузке способа оплаты.

У меня есть следующие вопросы.

  • Где мне добавить ссылку на мою PaymentFactory? В данный момент я загружаю расширение payum в метод сборки пакета и добавляю экземпляр PaymentFactory в расширение. Это все, что мне нужно сделать?
  • Я создал действие Capture and Status. Где я могу добавить эти действия в платежный шлюз? Нужно ли регистрировать их в PaymentFactory? Я добавил дамп и выходы к обоим классам, и когда я запускаю платеж в браузере, кажется, что он никогда не выполняет действие и завершает работу в заданной точке.

Любая помощь будет оценена

Заранее спасибо :)


person jonupton    schedule 02.06.2014    source источник


Ответы (1)


Добавить действия к платежу можно несколькими способами:

  • Самый быстрый — использовать custom factory.

    payum:
        contexts:
            you_name_it:
                custom:
                    actions:
                        - your.action.service.from.container
                        - your.another.action.service.from.container
    
  • Создайте платежную фабрику. Это продвинутая технология, которая может быть полезна, если вам нужна пользовательская конфигурация. Для этого вам необходимо внедрить PaymentFactoryInterface и зарегистрировать его в расширении Payum. . Вы можете добавлять действия непосредственно в фабрику (требуется хорошее понимание контейнера symfony):

    <?php
    
    function create(ContainerBuilder $container, $contextName, array $config)
    {
        $paymentDefinition = new Definition;
        $paymentId = 'paymentId';
    
        $container->setDefinition($paymentId, $paymentDefinition);
    
        $paymentDefinition->addMethodCall('addAction', array(
            new Reference('your.action.service.from.container')
        ));
    }
    

    или вы можете загрузить xml-файл с действиями. Службы действий должны иметь тег payum.action. Тег должен иметь определенное значение factory. Оно должно совпадать с названием созданной вами фабрики. Пример: paypal_express_checkout_nvp.xml

    <service
        id="your.action.service.from.container"
        class="%your.action.service.from.container.class%"
        public="false"
    >
        <tag name="payum.action" factory="your_factory_name" />
    </service>
    
person Maksim Kotlyar    schedule 02.06.2014
comment
Отличный ответ. Это действительно помогло мне! Код моего способа оплаты теперь срабатывает, и я понял, как добавить нужный мне API. Спасибо за все что ты сделал для меня. - person jonupton; 02.06.2014
comment
Клавиша contexts заменена на payments. - person Meetai.com; 16.05.2015
comment
Более того, в 0.15.x и более поздних версиях он был переименован в gateways. - person Maksim Kotlyar; 18.05.2015