Как работает пул команд? и как мы можем перенаправить на платежный шлюз? Magento 2

#curl #redirect #magento2 #payment-gateway #payment

#curl #перенаправление #magento2 #платежный шлюз #оплата

Вопрос:

Я интегрирую платежный шлюз, используя пул команд gateway.

Это di.xml

 <virtualType name="AuthorizeCommand" type="MagentoPaymentGatewayCommandGatewayCommand">
    <arguments>
        <argument name="requestBuilder" xsi:type="object">AuthorizationRequest</argument>
        <argument name="transferFactory" xsi:type="object">InternationalSampleGatewayHttpTransferFactory</argument>
        <argument name="client" xsi:type="object">InternationalSampleGatewayHttpClientClientMock</argument>
    </arguments>
</virtualType>
  

Это TransferFactory.php

 public function create(array $request) {

    return $this->transferBuilder
                    ->setBody($request)
                    ->setMethod('Curl::POST')
                    ->setHeaders(['Content-Type' => 'application/json'])
                    ->setUri('https://api-gateway-sample-payments.com/transactions')
                    ->build();
}
  

Это ClientMock.php

 public function placeRequest(TransferInterface $transferObject)
{
    //response
}
  

Как получить ответ CURL в placeRequest ?
Как мы можем перенаправить на страницу платежного шлюза после этой операции CURL?
Нужно ли нам писать отдельные операции CURL под placeRequest ?

Пожалуйста, посоветуйте, я был в круге в течение нескольких дней, меньше спал и перехватывал линию дат..

Спасибо

Ответ №1:

Мы должны выполнить действие CURL в ClientMock — placeRequest(). Поток пула команд платежного шлюза равен:

  1. Конструктор запросов (обрабатывает информацию о заказе), реализует MagentoPayment GatewayRequest BuilderInterface;
  2. ClientMock обрабатывает платежное действие
  3. ResponseValidator (расширяет AbstractValidator), решает, прошел платеж успешно или нет
  4. Обработчик ответа (реализует HandlerInterface), выполните последнее действие, вы можете указать дополнительную информацию для платежа здесь.

Ответ №2:

Чтобы использовать curl, используйте внедрение зависимостей, чтобы получить экземпляр клиента Magento Curl. Это легко сделать с помощью

1. импортируйте curl со следующей строкой в верхней части вашего MockClient.php файл:

 use MagentoFrameworkHTTPClientCurl; // use curl to make http requests
  
  1. Затем вы можете добавить параметр в свой конструктор, чтобы он был введен:
 public function __construct(
        Logger $logger,
        Curl $curl
    ) {
        $this->logger = $logger;
        // save the curl instance so you can use it
        $this->curl = $curl;
    }
  
  1. Теперь, когда у вас есть экземпляр Curl, вы можете отправлять запросы curl в функции placeRequest следующим образом:
 public function placeRequest(TransferInterface $transferObject)
{
   $this->curl->post($url, $curl_post_data);
   return $this->curl->getBody();
}
  

Для получения более подробной информации о клиенте Magento Curl проверьте эту ссылку