axelvnk / sylius-mollie-payum-bundle
适用于Sylius网店并使用Payum的Mollie支付网关实现
v0.1
2017-04-16 22:04 UTC
Requires
- php: ^5.6|^7.0
- mollie/mollie-api-php: ~1.9
- payum/payum: ^1.3
- payum/payum-bundle: ^2.1
- sylius/sylius: ^1.0@beta
- symfony/symfony: ^3.2
This package is not auto-updated.
Last update: 2024-09-29 02:04:53 UTC
README
欢迎使用SyliusMolliePayumBundle - 这是一个用于Sylius (~beta)网店的Mollie网关的Payum实现。
有关如何开始使用SyliusMolliePayumBundle的详细信息,请继续阅读。
SyliusMolliePayumBundle中包含的所有代码均按MIT或BSD许可证发布。
安装
步骤1 - 使用composer安装SyliusMolliePayumBundle
编辑您的composer.json以将捆绑包作为依赖项包括在内。
{ "require": { "axelvnk/sylius-mollie-payum-bundle": "dev-master", } }
打开命令行窗口,并告诉composer下载新的依赖项。
$ php composer.phar update axelvnk/sylius-mollie-payum-bundle
步骤2 - 在您的AppKernel文件中注册捆绑包
// app/AppKernel.php <?php public function registerBundles() { $bundles = array( ... new Axelvnk\SyliusMolliePayumBundle\SyliusMolliePayumBundle(), ); }
步骤3 - 包含捆绑包的支付网关配置
// app/config/config.yml imports: - { resource: "@SyliusMolliePayumBundle/Resources/config/config.yml" }
步骤4 - 配置捆绑包以使用您的Mollie API密钥
// app/config/parameters.yml parameters: axelvnk.payum.mollie_api_key: YOUR_API_KEY
步骤5 - 将网关配置添加到Sylius数据库中
这只是为了能够在管理员界面通过支付方式选择“mollie”作为网关。配置和工厂名称甚至都没有使用,因此不必担心是否正确。
INSERT INTO `sylius_gateway_config` (`config`, `gateway_name`, `factory_name`) VALUES ('a:1:{s:6:\"apiKey\";s:35:\"test_xxxxxxxxxxxxxxxxxxxxxxxxx\";}', 'mollie', 'axelvnk_mollie');
修改默认行为
您可以通过更改类的参数值来更改行为。
// app/config/parameters.yml parameters: axelvnk.payum.action.capture.class: Your\Own\CaptureAction axelvnk.payum.action.status.class: Your\Own\StatusAction axelvnk.payum.action.notify.class: Your\Own\NotifyAction axelvnk.payum.action.resolve_next_route.class: Your\Own\ResolveNextRouteAction
需要了解的...
默认情况下,Sylius在不知道支付是否成功的情况下,会将订单的结账状态移动到完成状态。
在我的ResolveNextRouteAction中,您可以看到如果由于某些原因支付失败,我会重定向到结账过程的最后一步。但是Sylius会在状态不再是新的情况下删除购物车。因此,如果您在Mollie处取消支付或支付失败后返回,您将会有一个空购物车。
要防止这种情况发生,您应该调整状态机,或者您可以在自定义CaptureAction中这样做
<?php $order->setCheckoutState(OrderCheckoutStates::STATE_PAYMENT_SELECTED);
并且在这您的自定义ResolveNextRouteAction中
<?php /** @var Payment $payment */ $payment = $request->getModel(); /** @var Order $order */ $order = $payment->getOrder(); if ($payment->getState() === Payment::STATE_COMPLETED) { $order->setCheckoutState(OrderCheckoutStates::STATE_COMPLETED); $this->orderEmailManager->sendConfirmationEmail($order); $request->setRouteName('sylius_shop_order_thank_you'); return; } $order->setState(OrderInterface::STATE_CART); $order->setCheckoutState(OrderCheckoutStates::STATE_PAYMENT_SELECTED); $order->setShippingState(OrderShippingStates::STATE_READY); $order->setPaymentState(OrderPaymentStates::STATE_AWAITING_PAYMENT); $request->setRouteName('sylius_shop_checkout_complete');