Просмотр исходного кода

Ticket #5580 - API Market: Related changes in Payments.

AntonLV 2 месяцев назад
Родитель
Сommit
eeee3b29a9

+ 10 - 7
modules/boonex/payment/classes/BxPaymentConfig.php

@@ -299,24 +299,27 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
     /**
      * Conver items to array with necessary structure.
      *
-     * @param  string/array $mixed - string with cart items divided with (:) or an array of cart items.
-     * @return array        with items.
+     * @param string/array $mixed - string with cart items divided with (:) or an array of cart items.
+     * @param boolean $bDescriptorsOnly - converts a string with cart items to an array of descriptors represented as strings.
+     * @return array with items.
      */
-    public function descriptorsM2A($mixed)
+    public function descriptorsM2A($mixed, $bDescriptorsOnly = false)
     {
-        $aResults = array();
+        $aResults = [];
 
+        $aItems = [];
         if(is_string($mixed))
            $aItems = explode($this->getDivider('DIVIDER_DESCRIPTORS'), $mixed);
         else if(is_array($mixed))
            $aItems = $mixed;
-        else
-            $aItems = array();
+
+        if($bDescriptorsOnly)
+            return $aItems;
 
         foreach($aItems as $mixedItem) {
             $aItem = is_array($mixedItem) ? $mixedItem : $this->descriptorS2A($mixedItem);
 
-            $aResult = array('vendor_id' => $aItem[0], 'module_id' => $aItem[1], 'item_id' => $aItem[2], 'item_count' => $aItem[3]);
+            $aResult = ['vendor_id' => $aItem[0], 'module_id' => $aItem[1], 'item_id' => $aItem[2], 'item_count' => $aItem[3]];
             if(isset($aItem[4]))
                 $aResult['item_addons'] = $aItem[4];
 

+ 21 - 11
modules/boonex/payment/classes/BxPaymentGridCart.php

@@ -63,31 +63,40 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
 
     public function performActionCheckout()
     {
-    	$aParams = array(
+        $aParams = array(
             'seller_id' => bx_process_input(bx_get('seller_id'), BX_DATA_INT), 
             'provider' => bx_process_input(bx_get('provider')), 
             'items' => bx_process_input(bx_get('ids'))
-    	);
+        );
 
-    	if(empty($aParams['seller_id']) || empty($aParams['provider']))
-            return echoJson(array());
+        if(empty($aParams['seller_id']) || empty($aParams['provider']))
+            return $this->_bIsApi ? [] : echoJson([]);
 
         if(empty($aParams['items']) || !is_array($aParams['items'])) 
-            return echoJson(array('msg' => _t('_bx_payment_err_nothing_selected')));
+            return ($sMsg = _t('_bx_payment_err_nothing_selected')) && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : echoJson(['msg' => $sMsg]);
 
         $oProvider = $this->_oModule->getObjectProvider($aParams['provider'], $aParams['seller_id']);
         if($oProvider !== false) {
-            if(method_exists($oProvider, 'overwriteCheckoutParamsSingle'))
-                return echoJson($oProvider->overwriteCheckoutParamsSingle($aParams, $this));
+            if(method_exists($oProvider, 'overwriteCheckoutParamsSingle') && ($aResults = $oProvider->overwriteCheckoutParamsSingle($aParams, $this)))
+                return $this->_bIsApi ? $aResults : echoJson($aResults);
 
             if(method_exists($oProvider, 'getCheckoutParamsSingle'))
                 $aParams = $oProvider->getCheckoutParamsSingle($aParams, $this);
         }
 
-        echoJson(array(
-            'eval' => $this->_oModule->_oConfig->getJsObject('cart') . '.onCartCheckout(oData);', 
-            'link' => bx_append_url_params($this->_oModule->_oConfig->getUrl('URL_CART_CHECKOUT'), $aParams)
-        ));
+        if($this->_bIsApi) {
+            $sItems = $this->_oModule->_oConfig->descriptorsA2S($aParams['items']);
+            $sRedirect = $this->_oModule->_oConfig->urlEncode($this->_oModule->_oConfig->getUrl('URL_HISTORY'));
+
+            return [
+                'url' => '/api.php?r=' . $this->MODULE . '/initialize_checkout_api&params[]=' . implode('&params[]=', [BX_PAYMENT_TYPE_SINGLE, $aParams['seller_id'], $aParams['provider'], $sItems, $sRedirect])
+            ];
+        }
+        else
+            echoJson([
+                'eval' => $this->_oModule->_oConfig->getJsObject('cart') . '.onCartCheckout(oData);', 
+                'link' => bx_append_url_params($this->_oModule->_oConfig->getUrl('URL_CART_CHECKOUT'), $aParams)
+            ]);
     }
 
     protected function _getCellTitle($mixedValue, $sKey, $aField, $aRow)
@@ -278,6 +287,7 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
                 continue;
 
             $aActions[$aProvider['name']] = [
+                'payment_type' => BX_PAYMENT_TYPE_SINGLE,
                 'name' => $aProvider['name'],
                 'title'=> _t('_bx_payment_grid_action_title_crt_checkout', _t($CNF['T']['TXT_CART_PROVIDER'] . $aProvider['name'])),
                 'icon' => '',

+ 7 - 6
modules/boonex/payment/classes/BxPaymentModule.php

@@ -1114,18 +1114,19 @@ class BxPaymentModule extends BxBaseModPaymentModule
 
     public function serviceInitializeCheckoutApi($sType, $iSellerId, $sProvider, $aItems = [], $sRedirect = '', $aCustoms = [])
     {
+        if(is_string($aItems))
+            $aItems = $this->_oConfig->descriptorsM2A($aItems, true);
+
         $mixedResult = $this->serviceInitializeCheckout($sType, $iSellerId, $sProvider, $aItems, $sRedirect, $aCustoms);
         if(is_string($mixedResult))
             return [bx_api_get_msg($mixedResult)];
         
         if(is_array($mixedResult)) {
-            if(isset($mixedResult['redirect'])) {
-                header('Location: ' . bx_api_get_relative_url($mixedResult['redirect']));
-                exit;
-            }
+            if(($sRedirect = $mixedResult['redirect'] ?? false))
+                return ['url' => $sRedirect];
 
-            if(isset($mixedResult['message']))
-                return [bx_api_get_msg($mixedResult['message'])];
+            if(($sMsg = $mixedResult['message'] ?? false))
+                return [bx_api_get_msg($sMsg)];
         }
 
         return [];

+ 5 - 2
modules/boonex/payment/classes/BxPaymentProviderCredits.php

@@ -30,11 +30,11 @@ class BxPaymentProviderCredits extends BxBaseModPaymentProvider implements iBxBa
     public function initializeCheckout($iPendingId, $aCartInfo, $sRedirect = '')
     {
         if(!BxDolModuleQuery::getInstance()->isEnabledByName($this->_sModuleCredits))
-            return $this->_sLangsPrefix . 'cdt_err_not_available';
+            return ($sMsg = $this->_sLangsPrefix . 'cdt_err_not_available') && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : $sMsg;
 
         $aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
         if(!empty($aPending['order']) || !empty($aPending['error_code']) || !empty($aPending['error_msg']) || (int)$aPending['processed'] != 0)
-            return $this->_sLangsPrefix . 'err_already_processed';
+            return ($sMsg = $this->_sLangsPrefix . 'err_already_processed') && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : $sMsg;
 
         $iSellerId = (int)$aCartInfo['vendor_id'];
         $sCustomData = $this->_constructCustomData($aCartInfo['vendor_id'], $iPendingId);
@@ -61,6 +61,9 @@ class BxPaymentProviderCredits extends BxBaseModPaymentProvider implements iBxBa
                 }
 
                 $sCheckoutUrl = bx_srv($this->_sModuleCredits, 'get_checkout_url');
+                if($this->_bIsApi)
+                    return ['redirect' => bx_api_get_relative_url(bx_append_url_params($sCheckoutUrl, $aFormData))];
+
                 $this->_oModule->_oTemplate->displayPageCodeRedirect($sCheckoutUrl, $aFormData);
                 exit;
 

+ 4 - 4
modules/boonex/payment/install/sql/install.sql

@@ -379,12 +379,12 @@ INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable
 ('bx_payment_grid_carts', 'items_price', '_bx_payment_grid_column_title_crts_items_price', '20%', 0, '16', '', 4),
 ('bx_payment_grid_carts', 'actions', '', '18%', 0, '', '', 5),
 
-('bx_payment_grid_cart', 'checkbox', '', '2%', 0, '', '', 1),
+('bx_payment_grid_cart', 'checkbox', '', '5%', 0, '', '', 1),
 ('bx_payment_grid_cart', 'title', '_bx_payment_grid_column_title_crt_title', '25%', 0, '24', '', 2),
-('bx_payment_grid_cart', 'description', '_bx_payment_grid_column_title_crt_description', '35%', 0, '48', '', 3),
+('bx_payment_grid_cart', 'description', '_bx_payment_grid_column_title_crt_description', '45%', 0, '48', '', 3),
 ('bx_payment_grid_cart', 'quantity', '_bx_payment_grid_column_title_crt_quantity', '10%', 0, '16', '', 4),
-('bx_payment_grid_cart', 'price_single', '_bx_payment_grid_column_title_crt_price', '10%', 0, '16', '', 5),
-('bx_payment_grid_cart', 'actions', '', '18%', 0, '', '', 6),
+('bx_payment_grid_cart', 'price_single', '_bx_payment_grid_column_title_crt_price', '5%', 0, '16', '', 5),
+('bx_payment_grid_cart', 'actions', '', '10%', 0, '', '', 6),
 
 ('bx_payment_grid_sbs_list_my', 'checkbox', '', '2%', 0, '0', '', 1),
 ('bx_payment_grid_sbs_list_my', 'seller_id', '_bx_payment_grid_column_title_sbs_seller_id', '16%', 0, '0', '', 2),