我一直在查看很多帖子,但我找不到解决问题的方法。在互联网上的一个地方解释如何正确地向Sylius Payum Bundle添加新的支付网关并不相同。
我使用的是最新的sylius
0.10.*
版本,我想添加一个新的支付网关(Rabobank Omnikassa,荷兰支付终端)。
有关如何为PaymentFactory
添加PayumPayumBundle
的一些信息,但此捆绑包的文件夹结构与SyliusPayumBundle
完全不同。我已经创建了自己的Acme\Bundle\PayumBundle
,其覆盖了SyliusPayumBundle
。
我想以与PaypalExpressCheckoutPaymentFactory类似的方式进行设置。
在这里,我只是测试一些事情让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
我不确定在哪里使用哪些服务标签..
<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文件中注册了网关
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做同样的事情。
从这里采取什么好的步骤?
答案 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在荷兰非常庞大,所以寻找活跃的开发者不应该那么困难。