2

我一直在看很多帖子,但我没有找到解决我问题的方法。互联网上没有一个地方可以解释如何正确地将新的支付网关添加到 Sylius Payum Bundle。

我正在使用最新sylius 0.10.*版本,我想添加一个新的支付网关(荷兰合作银行 Omnikassa,一个荷兰支付端点)。

有一些关于如何添加 的信息PaymentFactoryPayumPayumBundle但是这个包的文件夹结构与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

配置/服务.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.

注册支付工厂

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

从这里可以采取哪些好的步骤?

4

1 回答 1

3

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

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

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

一些一般性建议:

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

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

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

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

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

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

InvalidConfigurationException:路径“payum.contexts.rabobank.omnipay”的配置无效:

你确定你发布了正确的配置?我相信您发布的内容无法获得此例外。我期望具有不同消息的不同异常。

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

您还必须在payment_gateway表中放入一些数据(如果我没记错表名)。

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

只需在你的包的构建方法中做同样的事情。

于 2014-06-02T14:12:18.103 回答