Browse Source

Ticket #4971 - Build-in API support: Stripe Connect. Payments form.

AntonLV 1 năm trước cách đây
mục cha
commit
fc525aa77d

+ 3 - 2
modules/boonex/payment/classes/BxPaymentDetails.php

@@ -70,11 +70,12 @@ class BxPaymentDetails extends BxBaseModPaymentDetails
             return ($sMsg = $this->_sLangsPrefix . 'msg_no_results') && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : MsgBox(_t($sMsg));
 
         $mixedContent = $this->_bIsApi ? [] : '';
-        foreach($aPaymentProviders as $sPaymentProvider) {
+        foreach($aPaymentProviders as $iIndex => $sPaymentProvider) {
             $mixedForm = $this->getForm($iUserId, $sPaymentProvider);
 
             if($this->_bIsApi)
                 $mixedContent[] = bx_api_get_block('form', $mixedForm, [
+                    'id' => $iIndex + 1,
                     'ext' => [
                         'name' => $this->MODULE, 
                         'request' => ['url' => '/api.php?r=' . $this->MODULE . '/get_block_details/Details', 'immutable' => true]
@@ -90,7 +91,7 @@ class BxPaymentDetails extends BxBaseModPaymentDetails
         if(empty($mixedContent))
             return ($sMsg = $this->_sLangsPrefix . 'msg_no_results') && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : MsgBox(_t($sMsg));
 
-        return $this->_bIsApi ? [$mixedContent] : $mixedContent;
+        return $this->_bIsApi ? $mixedContent : $mixedContent;
     }
 
     public function getForm($iProfileId, $sPaymentProvider)

+ 8 - 7
modules/boonex/payment/classes/BxPaymentFormDetails.php

@@ -139,19 +139,20 @@ class BxPaymentFormDetails extends BxTemplFormView
                     break;
 
                 case 'value':
-                       $sName = str_replace($aInput['provider_option_prefix'], '', $aInput['name']);
-                       if(!in_array($sName, array('return_data_url', 'notify_url')))
-                            break;
-
-                       $sMethod = 'get' . bx_gen_method_name($sName);
+                       $sMethod = 'get' . bx_gen_method_name(str_replace($aInput['provider_option_prefix'], '', $aInput['name']));
                        if(method_exists($oProvider, $sMethod))
                             $this->aInputs[$aInput['name']]['value'] = $oProvider->$sMethod($this->_iProfileId);
                        break;
 
                 case 'custom':
                     $sMethod = 'get' . bx_gen_method_name(str_replace($aInput['provider_option_prefix'], '', $aInput['name']));
-                    if(method_exists($oProvider, $sMethod))
-                         $this->aInputs[$aInput['name']]['content'] = $oProvider->$sMethod($this->_iProfileId);
+                    if(method_exists($oProvider, $sMethod)) {
+                        $mixedContent = $oProvider->$sMethod($this->_iProfileId);
+                        if(is_array($mixedContent))
+                            $this->aInputs[$aInput['name']] = array_merge($this->aInputs[$aInput['name']], $mixedContent);
+                        else
+                            $this->aInputs[$aInput['name']]['content'] = $mixedContent;
+                    }
                     break;
             }
 

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

@@ -326,10 +326,10 @@ INSERT INTO `bx_payment_providers`(`name`, `caption`, `description`, `option_pre
 SET @iProviderId = LAST_INSERT_ID();
 
 INSERT INTO `bx_payment_providers_options`(`provider_id`, `name`, `type`, `caption`, `description`, `extra`, `check_type`, `check_params`, `check_error`, `order`) VALUES
-(@iProviderId, 'strp_cnnt_mode', 'custom', '_bx_payment_strp_mode_cpt', '', '', '', '', '', 1),
+(@iProviderId, 'strp_cnnt_mode', 'value', '_bx_payment_strp_mode_cpt', '', '', '', '', '', 1),
 (@iProviderId, 'strp_cnnt_connect', 'custom', '_bx_payment_strp_cnnt_connect_cpt', '', '', '', '', '', 2),
-(@iProviderId, 'strp_cnnt_live_account_id', 'custom', '_bx_payment_strp_cnnt_live_account_id_cpt', '', '', '', '', '', 3),
-(@iProviderId, 'strp_cnnt_test_account_id', 'custom', '_bx_payment_strp_cnnt_test_account_id_cpt', '', '', '', '', '', 4);
+(@iProviderId, 'strp_cnnt_live_account_id', 'value', '_bx_payment_strp_cnnt_live_account_id_cpt', '', '', '', '', '', 3),
+(@iProviderId, 'strp_cnnt_test_account_id', 'value', '_bx_payment_strp_cnnt_test_account_id_cpt', '', '', '', '', '', 4);
 
 -- Apple In-App payment provider
 INSERT INTO `bx_payment_providers`(`name`, `caption`, `description`, `option_prefix`, `for_visitor`, `for_owner_only`, `for_single`, `for_recurring`, `active`, `order`, `class_name`) VALUES

+ 29 - 1
modules/boonex/stripe_connect/classes/BxStripeConnectConfig.php

@@ -18,9 +18,12 @@ class BxStripeConnectConfig extends BxBaseModGeneralConfig
     protected $_sApiPublicKey;
     protected $_sApiSecretKey;
     protected $_sAccountType;
-    
+
     protected $_sPayMode;
 
+    protected $_sRefreshLink;
+    protected $_sReturnLink;
+
     public function __construct($aModule)
     {
         parent::__construct($aModule);
@@ -111,6 +114,9 @@ class BxStripeConnectConfig extends BxBaseModGeneralConfig
     	$this->_sApiPublicKey = $this->_oDb->getParam($this->CNF['PARAM_API_PUBLIC_' . ($this->_sMode == BX_STRIPE_CONNECT_MODE_LIVE ? 'LIVE' : 'TEST')]);
     	$this->_sApiSecretKey = $this->_oDb->getParam($this->CNF['PARAM_API_SECRET_' . ($this->_sMode == BX_STRIPE_CONNECT_MODE_LIVE ? 'LIVE' : 'TEST')]);
         $this->_sPayMode = getParam($this->CNF['PARAM_PMODE']);
+
+        $this->_sRefreshLink = $this->_getLink();
+        $this->_sReturnLink = $this->_sRefreshLink;
     }
 
     public function getMode()
@@ -168,6 +174,28 @@ class BxStripeConnectConfig extends BxBaseModGeneralConfig
         return $iResult;
     }
 
+    public function getRefreshLink()
+    {
+        return $this->_sRefreshLink;
+    }
+
+    public function getReturnLink()
+    {
+        return $this->_sReturnLink;
+    }
+
+    protected function _getLink()
+    {
+        if($this->_bIsApi && ($sRootUrl = getParam('sys_api_url_root_email')) !== '') {
+            if(substr(BX_DOL_URL_ROOT, -1) == '/' && substr($sRootUrl, -1) != '/')
+                $sRootUrl .= '/';
+        }
+        else
+            $sRootUrl = BX_DOL_URL_ROOT;
+
+        return $sRootUrl . BxDolPermalinks::getInstance()->permalink('page.php?i=payment-details');
+    }
+
     public function getHtmlIds($sKey = '')
     {
         if(empty($sKey))

+ 9 - 4
modules/boonex/stripe_connect/classes/BxStripeConnectModule.php

@@ -33,6 +33,9 @@ class BxStripeConnectModule extends BxBaseModGeneralModule
     {
         return array_merge(parent::serviceGetSafeServices(), [
             'AccountSessionCreate' => '',
+            'AccountCreate' => '',
+            'AccountContinue' => '',
+            'AccountDelete' => ''
         ]);
     }
 
@@ -60,8 +63,9 @@ class BxStripeConnectModule extends BxBaseModGeneralModule
             $sAccIdField => $oAccount->id
         ]);
 
-        $sLink = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=payment-details');
-        $oAccountLink = $oApi->createAccountLinks($oAccount->id, $sLink, $sLink);
+        $sRefreshLink = $this->_oConfig->getRefreshLink();
+        $sReturnLink = $this->_oConfig->getReturnLink();
+        $oAccountLink = $oApi->createAccountLinks($oAccount->id, $sRefreshLink, $sReturnLink);
         if(!$oAccountLink)
             return ['code' => 1, 'message' => $sError];
 
@@ -87,8 +91,9 @@ class BxStripeConnectModule extends BxBaseModGeneralModule
         if((int)$aAccount[$sAccDetailsField] != 0)
             return ['code' => 0];
 
-        $sLink = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=payment-details');
-        $oAccountLink = BxStripeConnectApi::getInstance()->createAccountLinks($aAccount[$sAccIdField], $sLink, $sLink);
+        $sRefreshLink = $this->_oConfig->getRefreshLink();
+        $sReturnLink = $this->_oConfig->getReturnLink();
+        $oAccountLink = BxStripeConnectApi::getInstance()->createAccountLinks($aAccount[$sAccIdField], $sRefreshLink, $sReturnLink);
         if(!$oAccountLink)
             return ['code' => 1, 'message' => $sError];
 

+ 26 - 0
modules/boonex/stripe_connect/classes/BxStripeConnectTemplate.php

@@ -30,6 +30,7 @@ class BxStripeConnectTemplate extends BxBaseModGeneralTemplate
         $sAccIdField = $CNF['FIELD_' . $sModeUc . '_ACCOUNT_ID'];
         $sAccDetailsField = $CNF['FIELD_' . $sModeUc . '_DETAILS'];
  
+        $aApiButtons = [];
         $bShowContinue = false;
         $sActionMethod = $sActionTitle = '';
         if(($aAccount = $this->_oDb->getAccount(['sample' => 'profile_id', 'profile_id' => $iVendorId])) && is_array($aAccount) && $aAccount[$sAccIdField] != '') {
@@ -44,12 +45,37 @@ class BxStripeConnectTemplate extends BxBaseModGeneralTemplate
 
             $sActionMethod = 'accountDelete';
             $sActionTitle = '_bx_stripe_connect_btn_account_delete';
+
+            if($this->_bIsApi) {
+                if($bShowContinue)
+                    $aApiButtons[] = [
+                        'title' => _t('_bx_stripe_connect_btn_account_continue'),
+                        'callback' => '/api.php?r=' . $this->MODULE . '/account_continue&params[0]=' . $iVendorId
+                    ];
+
+                $aApiButtons[] = [
+                    'title' => _t($sActionTitle),
+                    'callback' => '/api.php?r=' . $this->MODULE . '/account_delete&params[0]=' . $iVendorId
+                ];
+            }
         }
         else {
             $sActionMethod = 'accountCreate';
             $sActionTitle = '_bx_stripe_connect_btn_account_create';
+
+            if($this->_bIsApi)
+                $aApiButtons[] = [
+                    'title' => _t($sActionTitle),
+                    'callback' => '/api.php?r=' . $this->MODULE . '/account_create&params[0]=' . $iVendorId
+                ];
         }
 
+        if($this->_bIsApi)
+            return [
+                'type' => 'stripe_connect',
+                'content' =>  $aApiButtons
+            ];
+
         $this->addJs(['main.js']);
         return $this->parseHtmlByName('connect_code.html', [
             'js_object' => $sJsObject,