📜  magento 2 添加 cc transportbuilder (1)

📅  最后修改于: 2023-12-03 15:02:50.248000             🧑  作者: Mango

在Magento 2中添加cc transportbuilder

在Magento 2商城开发中, cc transportbuilder是一个非常重要的组件,用于构建请求和响应数据的传输。它不仅能帮助开发人员快速构建复杂的请求和响应数据传输,还可以提高系统的稳定性和性能。本文将介绍如何在Magento 2中添加cc transportbuilder。

步骤

以下是向Magento 2添加cc transportbuilder的步骤:

  1. 创建一个配置文件

在Magento 2中,所有的模块都需要一个配置文件。因此,首先需要创建一个名为module.xml的文件,该文件包含有关模块的所有信息。此文件应该放在app/code/<Vendor>/<Module>/etc目录中。下面是module.xml文件的示例内容:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="<Vendor>_<Module>" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Checkout" />
        </sequence>
    </module>
</config>
  1. 创建一个di.xml文件

接下来,需要创建一个用于将cc transportbuilder注入到Magento 2中的di.xml文件。将其放在app/code/<Vendor>/<Module>/etc目录下。以下是di.xml文件的示例内容:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\PaymentInformationManagement">
        <plugin name="cc_transportbuilder_payment_information_management"
                type="<Vendor>\<Module>\Plugin\PaymentInformationManagementPlugin"
                sortOrder="1"/>
    </type>
</config>
  1. 创建一个插件

现在,需要创建一个插件,使用cc transportbuilder对请求和响应数据进行传输。将其放在app/code/<Vendor>/<Module>/Plugin目录下。以下是PaymentInformationManagementPlugin.php文件的示例内容:

<?php
namespace <Vendor>\<Module>\Plugin;
use Magento\Checkout\Api\Data\PaymentDetailsInterface;
use Magento\Checkout\Model\PaymentInformationManagement as Subject;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\InputException;
use Magento\Framework\Exception\StateException;
use Magento\Framework\Message\ManagerInterface;

class PaymentInformationManagementPlugin
{
    /**
     * @var \cc\TransportBuilder
     */
    protected $ccTransportBuilder;

    /**
     * @var ManagerInterface
     */
    protected $messageManager;

    /**
     * PaymentInformationManagementPlugin constructor.
     * @param \cc\TransportBuilder $ccTransportBuilder
     * @param ManagerInterface $messageManager
     */
    public function __construct(
        \cc\TransportBuilder $ccTransportBuilder,
        ManagerInterface $messageManager
    ) {
        $this->ccTransportBuilder = $ccTransportBuilder;
        $this->messageManager = $messageManager;
    }

    /**
     * @param Subject $subject
     * @param $cartId
     * @param PaymentDetailsInterface $paymentDetails
     * @throws CouldNotSaveException
     * @throws InputException
     * @throws StateException
     * @return void
     */
    public function aroundSavePaymentInformationAndPlaceOrder(
        Subject $subject,
        callable $proceed,
        $cartId,
        PaymentDetailsInterface $paymentDetails
    ) {
        $request = [
            'payment_details' => [
                'payment_method' => $paymentDetails->getPaymentMethod()
            ],
            'customer_details' => [
                'email' => $paymentDetails->getEmail()
            ]
        ];

        $this->ccTransportBuilder->setRequestData($request);
        $response = $this->ccTransportBuilder->sendRequest();

        if ($response['status'] == 'success') {
            return $proceed($cartId, $paymentDetails);
        } else {
            throw new CouldNotSaveException(__('Unable to process order.'));
        }
    }
}

这个插件覆盖了Magento 2的PaymentInformationManagement类中的savePaymentInformationAndPlaceOrder方法。它使用cc transportbuilder将请求和响应数据进行传输,并在响应数据状态为成功时继续执行原来的方法,否则抛出一个异常。

总结

Magento 2的cc transportbuilder是构建请求和响应数据传输的重要组件。本文介绍了如何将cc transportbuilder添加到Magento 2中,并使用插件实现响应数据传输的功能。通过了解如何使用cc transportbuilder,开发人员可以更好地掌握Magento 2商城开发。