Заказ в magento2.4 EE с помощью marketplace

#php #magento2 #checkout #marketplace #magento2.4

Вопрос:

Процесс заказа Magento 2.4 с потоком на рынке:- У меня есть одна проблема с заказом. Мы используем marketplace и можем заказать несколько продуктов у разных поставщиков. Если мы используем способ оплаты администратора и учетные данные, все работает нормально, и оплата фиксируется в учетной записи администратора. и все товары заказываются с одним идентификатором заказа.

У нас есть два способа оплаты: stripe и paynet secure. Stripe также предоставляет функцию marketplace в их конце. Но paynet secure не поддерживает marketplace feature.so оплата поставщикам с помощью полосы автоматически распределяется в соответствии с заказанными поставщиками. Но paynet не имеет этой функции. Когда мы переходим к покупке продуктов нескольких поставщиков, в которых есть как paynet secure, так и stripe, оплата списывается с кредитной карты клиента и зачисляется на соответствующий счет поставщика платежных услуг.
Мое требование объясняется ниже с примером:- Предположим,что у клиента в корзине 3 поставщика(A, B и C). и их соответствующий способ оплаты: A, B: — Paynet, C:-Paynet. Поэтому, когда клиент разместил этот заказ(со всеми продуктами 3 поставщиков), клиент может один раз указать данные своей кредитной карты, и внутренняя сумма будет зачислена на соответствующий платежный счет поставщика в соответствии с расчетами.

Я застрял в точке, чтобы распределить заказ и назначить способ оплаты в нем. есть два сценария, которые я получаю:

  1. если я назначу способ оплаты checkmo,наложенный платеж, то заказ будет разделен, и с этим все работает нормально.
  2. Но мне нужно заказать продукты с помощью кредитной карты, и когда я назначаю код способа оплаты(способ оплаты кредитной картой — «nmi_directpost»), а также указываю данные карты в котировке, размещаю и заказываю, затем он показывает мне ошибку по-другому, некоторое время данные кредитной карты недействительны, иногда страница перенаправляется на страницу корзины без какого-либо журнала/исключения. Вот куча кода, который я пытаюсь сделать:-
 public function aroundPlaceOrder(QuoteManagement $subject, callable $proceed, $cartId, $payment = null)  {  $currentQuote = $this-gt;quoteRepository-gt;getActive($cartId);   // Separate all items in quote into new quotes.  $quotes = $this-gt;quoteHandler-gt;normalizeQuotes($currentQuote);  if (empty($quotes)) {  return $result = array_values([($proceed($cartId, $payment))]);  }  // Collect list of data addresses.  $addresses = $this-gt;quoteHandler-gt;collectAddressesData($currentQuote);   /** @var MagentoSalesApiDataOrderInterface[] $orders */  $orders = [];  $orderIds = [];  foreach ($quotes as $items) {  /** @var MagentoQuoteModelQuote $split */  $split = $this-gt;quoteFactory-gt;create();   // Set all customer definition data.  $this-gt;quoteHandler-gt;setCustomerData($currentQuote, $split);  $this-gt;toSaveQuote($split);   // Map quote items.  foreach ($items as $item) {  // Add item by item.  $item-gt;setId(null);  $split-gt;addItem($item);  }  MagentoFrameworkAppObjectManager::getInstance()-gt;get('PsrLogLoggerInterface')-gt;info('new quote 1st :-'. print_r($split-gt;getData(),true));  $this-gt;quoteHandler-gt;populateQuote($quotes, $split, $items, $addresses, $payment);  // $split-gt;getPayment()-gt;setMethod('nmi_directpost');  // if ($payment) {  // $split-gt;getPayment()-gt;setQuote($split);  // $data = $payment-gt;getData();   // $paymentDetails = $paymentCardDetails = '';  // $postData = file_get_contents("php://input");//Get all param  // $postData = (array)json_decode($postData);//Decode all json param  // foreach ($postData as $key =gt; $value) {  // if ($key == 'paymentMethod') { //Get paymentMethod details  // $paymentDetails = (array)$value;  // foreach ($paymentDetails as $key1 =gt; $paymentValue) {  // if ($key1 == 'additional_data') { //get paymentMethod Details like card details  // $paymentCardDetails = (array)$paymentValue;  // }  // }  // }  // }  // $split-gt;setMethod('checkmo');   MagentoFrameworkAppObjectManager::getInstance()-gt;get('PsrLogLoggerInterface')-gt;info('Paynet :-');  // $payment = $quotes-gt;getPayment();  $objectManager = MagentoFrameworkAppObjectManager::getInstance(); $cart = $objectManager-gt;get('MagentoCheckoutModelCart');  $quote = $cart-gt;getQuote(); $paymentMethod = $quote-gt;getPayment()-gt;getMethod();  $payment = $this-gt;checkoutSession-gt;getQuote()-gt;getData();  MagentoFrameworkAppObjectManager::getInstance()-gt;get('PsrLogLoggerInterface')-gt;info('second Paynet :-');  MagentoFrameworkAppObjectManager::getInstance()-gt;get('PsrLogLoggerInterface')-gt;info('new quote :-'. print_r($paymentMethod,true));  // $split-gt;setPayment($payment);  // $split-gt;getPayment()-gt;importData(array(  // 'method' =gt;'nmi_directpost',  // 'cc_type' =gt;'VI',  // 'cc_number' =gt;'4111111111111111',  // 'cc_exp_year' =gt;'2025',  // 'cc_exp_month'=gt;'10',  // ));  // }  // MagentoFrameworkAppObjectManager::getInstance()-gt;get('PsrLogLoggerInterface')-gt;info('original quote :-'. print_r($quotes-gt;getData(),true));  MagentoFrameworkAppObjectManager::getInstance()-gt;get('PsrLogLoggerInterface')-gt;info('new quote :-'. print_r($split-gt;getData(),true));  // MagentoFrameworkAppObjectManager::getInstance()-gt;get('PsrLogLoggerInterface')-gt;info('new quote :-'. print_r($payment-gt;getData(),true));  // Dispatch event as Magento standard once per each quote split.  $this-gt;eventManager-gt;dispatch(  'checkout_submit_before',  ['quote' =gt; $split]  );   $this-gt;toSaveQuote($split);  $order = $subject-gt;submit($split);   $orders[] = $order;  $orderIds[$order-gt;getId()] = $order-gt;getIncrementId();   if (null == $order) {  throw new LocalizedException(__('Please try to place the order again.'));  }  }  $currentQuote-gt;setIsActive(false);  $this-gt;toSaveQuote($currentQuote);   $this-gt;quoteHandler-gt;defineSessions($split, $order, $orderIds);   $this-gt;eventManager-gt;dispatch(  'checkout_submit_all_after',  ['orders' =gt; $orders, 'quote' =gt; $currentQuote]  );  return $this-gt;getOrderKeys($orderIds);  }  

Если у кого-нибудь есть решение по этому поводу, пожалуйста, поделитесь своим решением/мнением? Я буду очень благодарен за это.

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

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