Sylius:添加一个新的Payum Gateway(Rabobank Omnikassa)

时间:2014-06-02 13:08:26

标签: php symfony sylius payum

我一直在查看很多帖子,但我找不到解决问题的方法。在互联网上的一个地方解释如何正确地向Sylius Payum Bundle添加新的支付网关并不相同。

我使用的是最新的sylius 0.10.*版本,我想添加一个新的支付网关(Rabobank Omnikassa,荷兰支付终端)。

有关如何为PaymentFactory添加PayumPayumBundle的一些信息,但此捆绑包的文件夹结构与SyliusPayumBundle完全不同。我已经创建了自己的Acme\Bundle\PayumBundle,其覆盖了SyliusPayumBundle

我想以与PaypalExpressCheckoutPaymentFactory类似的方式进行设置。

配置/ payum.yml

在这里,我只是测试一些事情让Sylius找到我的东西。

payum:
    contexts:
        rabobank:
            storages:
                Sylius\Component\Core\Model\Order:
                    doctrine:
                        driver: orm
                Sylius\Component\Core\Model\Payment:
                    doctrine:
                        driver: orm

            custom:
                actions:
                    - Shopfish\Bundle\PayumBundle\Payum\Rabobank\Action\CapturePaymentAction
                    - Shopfish\Bundle\PayumBundle\Payum\Rabobank\Action\NotifyOrderAction

配置/ services.xml中

我不确定在哪里使用哪些服务标签..

<parameters>
    <parameter key="shopfish.payum.rabobank.action.capture_payment.class">Shopfish\Bundle\PayumBundle\Payum\Rabobank\Action\CapturePaymentAction</parameter>
    <parameter key="shopfish.payum.rabobank.action.notify_order.class">Shopfish\Bundle\PayumBundle\Payum\Rabobank\Action\NotifyOrderAction</parameter>
    <parameter key="shopfish.payum.rabobank.action.payment_status.class">Shopfish\Bundle\PayumBundle\Payum\Rabobank\Action\PaymentStatusAction</parameter>
</parameters>

<services>
    <!-- Rabobank Omnikassa -->
    <service id="shopfish.payum.rabobank.action.capture_payment" class="%shopfish.payum.rabobank.action.capture_payment.class%" public="false">
        <tag name="payum.action" factory="omnipay" />
    </service>

    <service id="shopfish.payum.rabobank.action.notify_order" class="%shopfish.payum.rabobank.action.notify_order.class%" public="false">
        <argument type="service" id="event_dispatcher" />
        <argument type="service" id="sylius.manager.payment" />
        <argument type="service" id="finite.factory" />

        <tag name="payum.action" factory="paypal_express_checkout_nvp" />
    </service>
</services>

配置/ config.yml

当然,我在config.yml文件中注册了网关

sylius_payment:
    gateways:
        rabobank: Rabobank Omnikassa

例外:路径

的配置无效

似乎无法将Rabobank视为有效类型。人们在哪里注册新类型?

InvalidConfigurationException: Invalid configuration for path "payum.contexts.rabobank.omnipay": Given type Rabobank is not supported. These types AuthorizeNet_AIM, AuthorizeNet_SIM, Buckaroo, CardSave, Dummy, Eway_Rapid, GoCardless, Manual, Migs_ThreeParty, Migs_TwoParty, Mollie, MultiSafepay, Netaxept, NetBanx, PayFast, Payflow_Pro, PaymentExpress_PxPay, PaymentExpress_PxPost, PayPal_Express, PayPal_Pro, Pin, SagePay_Direct, SagePay_Server, SecurePay_DirectPost, Stripe, TargetPay_Directebanking, TargetPay_Ideal, TargetPay_Mrcash, TwoCheckout, WorldPay are supported.

注册付款工厂

this file中,您可以看到他们如何在Payum注册工厂。我想在我自己的Bundle中在Sylius做同样的事情。

从这里采取什么好的步骤?

2 个答案:

答案 0 :(得分:3)

有两种方法可以向Payum \ Sylius添加自定义付款解决方案。

  • 最快的是使用自定义工厂。你做了什么,但你必须向actions部分添加服务而不是类。标记payum.action可以与<tag name="payum.action" context="rabobank" />这种方法一起使用。我没有在标记中使用工厂custom,因为在这种情况下,操作将添加到自定义工厂创建的所有上下文中。这不是我们想要的。

  • 第二种方法是创建一个支付工厂。为此,您必须实现PaymentFactoryInterface并将其注册到Payum扩展。如果您需要在创建付款之前配置一些选项,则必须选择此选项。标记payum.action可以与<tag name="payum.action" context="rabobank" /><tag name="payum.action" factory="rabobank" />这种方法一起使用。不同之处在于:第一个标签仅向一个上下文添加一个操作,第二个标记将第二个操作添加到由工厂创建的所有上下文。

一些一般性建议:

  

有关如何为PayumBundle添加PaymentFactory的一些信息,但是这个包的文件夹结构与SyliusPayumBundle完全不同。

不应该。 SyliusPayumBundle是Sylius和PayumBundle之间的薄集成层。

  

我创建了自己的Acme \ Bundle \ PayumBundle,它覆盖了SyliusPayumBundle。

你不必这样做,没有这个,一切都应该正常。

  

我不确定在哪里使用哪些服务标签..

如果您选择自定义工厂,则不需要标签,请正确配置actions部分。

  

InvalidConfigurationException:路径的配置无效&#34; payum.contexts.rabobank.omnipay&#34;:

你确定你发布了正确的配置吗?我相信你发布的内容不能得到这个例外。我希望不同的异常与不同的消息。

  

当然,我在config.yml文件中注册了网关

您还必须在payment_gateway表格中放置一些数据(如果我正确地记得表格名称)。

  

在此文件中,您可以看到他们如何在Payum注册工厂。我想在我自己的Bundle中在Sylius做同样的事情。

在你的bundle的构建方法中做同样的事情。

答案 1 :(得分:0)

也许您可以将您的代码发布到github,以便社区可以提供/审核? Rabobank Omnikassa在荷兰非常庞大,所以寻找活跃的开发者不应该那么困难。