Magento 2 добавить php-файл нескольких классов в модуль

#magento #magento-2.0

#magento #magento-2.0

Вопрос:

Я работаю над платежным модулем magento 2, но я застрял в точке, в которой мне нужно включить php-файл стороннего платежного шлюза, в котором объявлено несколько классов, таких как class a, class b, class c в class.php файл, который я использую require_once(‘magento_path/class.php ‘) ; но, похоже, это не работаетпожалуйста, помогите!

—Обновлено — вот мой пример кода для размещения запроса к шлюзу —
Примечание: все переменные приведены только для примера

      public function placeRequest(TransferInterface $transferObject)
            {
                require_once ("ThePaymentGateway/PaymentSystem.php");
                $rgeplRequestGatewayEntryPointList = new RequestGatewayEntryPointList();
$rgeplRequestGatewayEntryPointList->add("gw1.".$PaymentProcessorFullDomain, 100, 1);
                $rgeplRequestGatewayEntryPointList->add("https://gw2.".$PaymentProcessorFullDomain, 200, 1);
                $rgeplRequestGatewayEntryPointList->add("https://gw3.".$PaymentProcessorFullDomain, 300, 1);
            $cdtCardDetailsTransaction = new CardDetailsTransaction($rgeplRequestGatewayEntryPointList);

            $cdtCardDetailsTransaction->getMerchantAuthentication()->setMerchantID($MerchantID);
            $cdtCardDetailsTransaction->getMerchantAuthentication()->setPassword($Password);

            $cdtCardDetailsTransaction->getTransactionDetails()->getMessageDetails()->setTransactionType("SALE");

            $cdtCardDetailsTransaction->getTransactionDetails()->getAmount()->setValue($Amount);
            $cdtCardDetailsTransaction->getTransactionDetails()->setOrderID($OrderID);
            $cdtCardDetailsTransaction->getTransactionDetails()->setOrderDescription($OrderDescription);

            $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoCardType()->setValue(true);
            $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoAmountReceived()->setValue(true);
            $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoAVSCheckResult()->setValue(true);
            $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoCV2CheckResult()->setValue(true);
            $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getThreeDSecureOverridePolicy()->setValue(true);
            $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getDuplicateDelay()->setValue(60);

            $cdtCardDetailsTransaction->getTransactionDetails()->getThreeDSecureBrowserDetails()->getDeviceCategory()->setValue(0);
            $cdtCardDetailsTransaction->getTransactionDetails()->getThreeDSecureBrowserDetails()->setAcceptHeaders("*/*");
            $cdtCardDetailsTransaction->getTransactionDetails()->getThreeDSecureBrowserDetails()->setUserAgent($_SERVER["HTTP_USER_AGENT"]);

            $cdtCardDetailsTransaction->getCardDetails()->setCardName($CardName);
            $cdtCardDetailsTransaction->getCardDetails()->setCardNumber($CardNumber);
            $cdtCardDetailsTransaction->getCardDetails()->setIssueNumber($IssueNumber);
            $cdtCardDetailsTransaction->getCardDetails()->setCV2($CV2);
            $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress1($Address1);
            $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress2($Address2);
            $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress3($Address3);
            $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress4($Address4);
            $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setCity($City);
            $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setState($State);
            $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setPostCode($PostCode);
            $cdtCardDetailsTransaction->getCustomerDetails()->setEmailAddress("test@test.com");
            $cdtCardDetailsTransaction->getCustomerDetails()->setPhoneNumber("123456789");
            $cdtCardDetailsTransaction->getCustomerDetails()->setCustomerIPAddress($_SERVER["REMOTE_ADDR"]);

            $boTransactionProcessed = $cdtCardDetailsTransaction->processTransaction($cdtrCardDetailsTransactionResult, $todTransactionOutputData);
            if ($boTransactionProcessed == false)
                {
                    // could not communicate with the payment gateway 
                    $NextFormMode = "PAYMENT_FORM";
                    $Message = "Couldn't communicate with payment gateway";
                    PaymentFormHelper::reportTransactionResults($OrderID, 30, $Message, null);
                }
                else
                {
                 echo "Payment Success";
                }
       }  
 

Все классы платежных шлюзов определены в Paymentsystem.php предоставлено payzone, но здесь require_once, похоже, не работает

Ответ №1:

В Magento есть метод разработки собственных пользовательских модулей. Если вы не будете следовать этому методу, у вас будут ошибки пути, подобные той, о которой вы говорите, особенно в модуле оплаты, где у вас есть множество проверок и способов обеспечения безопасности.

Я предлагаю проверить эту страницу. http://alanstorm.com/category/magento-2/page/3 /

Он создал фреймворк под названием PESTLE, который значительно упрощает создание пользовательских модулей http://alanstorm.com/magento2_pestle_code_generation /

Проверьте их.

Комментарии:

1. Я создаю пользовательский платежный модуль для подключения к платежному шлюзу payzone, но payzone предоставляет библиотеку php, которую необходимо включить в мой модуль для подключений, но библиотека содержит так много классов, определенных в одном php-файле, поэтому мой вопрос в том, как я могу включить этот файл в свой модуль?

2. Хорошо, я понимаю. Ну, я бы добавил эти классы в свой блочный файл. Вы можете создавать классы в одном и том же php-файле. Всякий раз, когда вы захотите их использовать, инициируйте их, создав новый экземпляр $NewClass = новый класс A … Затем, когда вы захотите использовать метод из этого объекта, вы можете сделать $NewClass->method(); Если вы хотите узнать о пространстве имен с помощью этого, вы можете добавить эти классы через внедрение зависимостей в свой block __construct, чтобы вы могли следовать пути Magento. Просто создайте пространство имен для новых классов в том же блочном файле