axelvnk/sylius-mollie-payum-bundle

适用于Sylius网店并使用Payum的Mollie支付网关实现

安装: 157

依赖者: 0

建议者: 0

安全: 0

星标: 5

关注者: 3

分支: 4

开放问题: 3

类型:symfony-bundle

v0.1 2017-04-16 22:04 UTC

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');