소스 검색

Merge branch 'master' of github.com:unaio/una

Alex Trofimov 10 년 전
부모
커밋
a411eaa8e4

+ 25 - 0
modules/base/payment/classes/BxBaseModPaymentPage.php

@@ -0,0 +1,25 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ *
+ * @defgroup    BasePayment Base classes for Payment like modules
+ * @ingroup     TridentModules
+ *
+ * @{
+ */
+
+class BxBaseModPaymentPage extends BxTemplPage
+{
+	protected $MODULE;
+	protected $_oModule;
+
+	function __construct($aObject, $oTemplate = false)
+    {
+        parent::__construct($aObject, $oTemplate);
+
+        $this->_oModule = BxDolModule::getInstance($this->MODULE);
+    }
+}
+
+/** @} */

+ 5 - 0
modules/base/payment/classes/BxBaseModPaymentProvider.php

@@ -101,6 +101,11 @@ class BxBaseModPaymentProvider extends BxDol
         return $this->_oModule->_oDb->getOptions((int)$aPending['seller_id'], $this->_iId);
     }
 
+    protected function getOptionsByVendor($iVendorId)
+    {
+        return $this->_oModule->_oDb->getOptions((int)$iVendorId, $this->_iId);
+    }
+
     /**
 	 *
 	 * Writes $contents to a log file specified in the bp_options file or, if missing,

+ 0 - 6
modules/boonex/payment/classes/BxPaymentCart.php

@@ -32,8 +32,6 @@ class BxPaymentCart extends BxBaseModPaymentCart
         if(empty($iUserId))
             return MsgBox(_t($CNF['T']['ERR_REQUIRED_LOGIN']));
 
-        $this->_oModule->setSiteSubmenu('menu_cart_submenu', 'cart');
-
         return array(
         	'content' => $this->_oModule->_oTemplate->displayBlockCarts($iUserId)
         );
@@ -55,8 +53,6 @@ class BxPaymentCart extends BxBaseModPaymentCart
     	if(empty($iSellerId))
     		return MsgBox(_t($CNF['T']['ERR_UNKNOWN_VENDOR']));
 
-        $this->_oModule->setSiteSubmenu('menu_cart_submenu', 'cart');
-
 		$aSeller = $this->_oModule->getProfileInfo();
         return array(
         	'title' => _t($CNF['T']['BLOCK_TITLE_CART'], $aSeller['name']),
@@ -74,8 +70,6 @@ class BxPaymentCart extends BxBaseModPaymentCart
         if(empty($iUserId))
             return MsgBox(_t($CNF['T']['ERR_REQUIRED_LOGIN']));
 
-        $this->_oModule->setSiteSubmenu('menu_cart_submenu', 'cart-history');
-
         return array(
         	'content' => $this->_oModule->_oTemplate->displayBlockHistory($iUserId, $iSellerId),
 		);

+ 1 - 1
modules/boonex/payment/classes/BxPaymentConfig.php

@@ -27,7 +27,7 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
         	'URL_HISTORY' => 'page.php?i=payment-history',
         	'URL_ORDERS' => 'page.php?i=payment-orders',
         	'URL_DETAILS' => 'page.php?i=payment-details',
-        	'URL_RETURN' => 'page.php?i=payment-cart',
+        	'URL_RETURN' => 'page.php?i=payment-cart-thank-you',
         	'URL_RETURN_DATA' => $sBaseUrl . 'finalize_checkout/',
         	'URL_NOTIFY' => $sBaseUrl . 'notify/',
 

+ 5 - 1
modules/boonex/payment/classes/BxPaymentPageCart.php

@@ -9,11 +9,15 @@
  * @{
  */
 
-class BxPaymentPageCart extends BxTemplPage
+class BxPaymentPageCart extends BxBaseModPaymentPage
 {
     public function __construct($aObject, $oTemplate = false)
     {
+        $this->MODULE = 'bx_payment';
+
         parent::__construct($aObject, $oTemplate);
+        
+        $this->_oModule->setSiteSubmenu('menu_cart_submenu', 'cart');
     }
 }
 

+ 5 - 1
modules/boonex/payment/classes/BxPaymentPageHistory.php

@@ -9,11 +9,15 @@
  * @{
  */
 
-class BxPaymentPageHistory extends BxTemplPage
+class BxPaymentPageHistory extends BxBaseModPaymentPage
 {
     public function __construct($aObject, $oTemplate = false)
     {
+        $this->MODULE = 'bx_payment';
+
         parent::__construct($aObject, $oTemplate);
+
+        $this->_oModule->setSiteSubmenu('menu_cart_submenu', 'cart-history');
     }
 }
 

+ 72 - 48
modules/boonex/payment/classes/BxPaymentProviderPayPal.php

@@ -42,9 +42,10 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
     public function initializeCheckout($iPendingId, $aCartInfo, $bRecurring = false, $iRecurringDays = 0)
     {
         $iMode = (int)$this->getOption('mode');
+        $sItemName = _t($this->_sLangsPrefix . 'txt_payment_to_for', $aCartInfo['vendor_name']);
         $sActionURL = $iMode == PP_MODE_LIVE ? 'https://www.paypal.com/cgi-bin/webscr' : 'https://www.sandbox.paypal.com/cgi-bin/webscr';
 
-        if($bRecurring)
+        if($bRecurring) {
             $aFormData = array(
                 'cmd' => '_xclick-subscriptions',
                 'a3' => sprintf("%.2f", (float)$aCartInfo['items_price']),
@@ -53,27 +54,38 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
                 'src' => '1', // repeat billings unles member cancels subscription
                 'sra' => '1' // reattempt on failure
             );
-        else
+
+            foreach($aCartInfo['items'] as $aItem)
+                $sItemName .= ' ' . $aItem['title'] . ',';
+		    $sItemName = trim($sItemName, ', ');
+        }
+        else {
             $aFormData = array(
                 'cmd' => '_cart',
                 'upload' => '1',
+                'item_name' => $sItemName,
                 'amount' => sprintf( "%.2f", (float)$aCartInfo['items_price'])
             );
 
+            foreach($aCartInfo['items'] as $iIndex => $aItem) {
+                $i = $iIndex + 1; 
+
+                $aFormData['item_name_' . $i] = bx_process_output($aItem['title']);
+			    $aFormData['quantity_' . $i] = $aItem['quantity'];
+			    $aFormData['amount_' . $i] = $this->_oModule->_oConfig->getPrice(BX_PAYMENT_TYPE_SINGLE, $aItem);
+            }
+        }
+
         $aFormData = array_merge($aFormData, array(
             'business' => $iMode == PP_MODE_LIVE ? $this->getOption('business') : $this->getOption('sandbox'),
             'currency_code' => $aCartInfo['vendor_currency_code'],
-            'item_name' => _t($this->_sLangsPrefix . 'txt_payment_to_for', $aCartInfo['vendor_name']),
-            'item_number' => $iPendingId,
             'no_note' => '1',
             'no_shipping' => '1',
-            'custom' => md5($aCartInfo['vendor_id'] . $iPendingId)
+            'custom' => $this->_constructCustomData($aCartInfo['vendor_id'], $iPendingId),
+        	'item_name' => $sItemName,
+            'item_number' => $iPendingId,
         ));
 
-        foreach($aCartInfo['items'] as $aItem)
-            $aFormData['item_name'] .= ' ' . $aItem['title'] . ',';
-		$aFormData['item_name'] = trim($aFormData['item_name'], ', ');
-
         switch($this->getOption('prc_type')) {
             case PP_PRC_TYPE_PDT:
             case PP_PRC_TYPE_DIRECT:
@@ -109,48 +121,41 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
     /**
      *
      * @param $aData - data from payment provider.
-     * @param $bSubscription - Is not needed. May be used in the future for subscriptions.
-     * @param $iPendingId - Is not needed. May be used in the future for subscriptions.
      * @return array with results.
      */
-    protected function _registerCheckout(&$aData, $bSubscription = false, $iPendingId = 0)
+    protected function _registerCheckout(&$aData)
     {
-        if(empty($this->_aOptions) && isset($aData['item_number']))
-            $this->_aOptions = $this->getOptionsByPending($aData['item_number']);
+        if(empty($this->_aOptions) && !empty($aData['item_number']))
+            $this->_aOptions = $this->getOptionsByPending((int)$aData['item_number']);
 
         if(empty($this->_aOptions))
-            return array('code' => 2, 'message' => $this->_sLangsPrefix . 'err_unknown_vendor');
+            return array('code' => 1, 'message' => $this->_sLangsPrefix . 'err_incorrect_provider');
 
         $iPrcType = (int)$this->getOption('prc_type');
-        if(($iPrcType == PP_PRC_TYPE_IPN || $iPrcType == PP_PRC_TYPE_DIRECT) && (!isset($aData['item_number']) || !isset($aData['txn_id'])))
-            return array('code' => 1, 'message' => $this->_sLangsPrefix . 'pp_err_no_data_given');
-        else if($iPrcType == PP_PRC_TYPE_PDT && !isset($aData['tx']))
-            return array('code' => 1, 'message' => $this->_sLangsPrefix . 'pp_err_no_data_given');
-
-        $aResult = $this->_validateCheckout($aData);
+        if((in_array($iPrcType, array(PP_PRC_TYPE_DIRECT, PP_PRC_TYPE_IPN)) && !isset($aData['txn_id'])) || ($iPrcType == PP_PRC_TYPE_PDT && !isset($aData['tx'])))
+            return array('code' => 2, 'message' => $this->_sLangsPrefix . 'pp_err_no_data_given');
 
-        if(!$bSubscription || empty($iPendingId))
-            $iPendingId = (int)$aData['item_number'];
+        $aPending = array();
+        $aResult = $this->_validateCheckout($aData, $aPending);
 
-        $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 array('code' => 3, 'message' => $this->_sLangsPrefix . 'err_already_processed');
+            return array('code' => 11, 'message' => $this->_sLangsPrefix . 'err_already_processed');
 
-        //--- Update pending transaction ---//
-        $this->_oModule->_oDb->updateOrderPending($iPendingId, array(
+        //--- Update pending transaction
+        $this->_oModule->_oDb->updateOrderPending($aPending['id'], array(
             'order' => $aData['txn_id'],
             'error_code' => $aResult['code'],
             'error_msg' => _t($aResult['message'])
         ));
 
-        $aResult['pending_id'] = $iPendingId;
+        $aResult['pending_id'] = $aPending['id'];
         $aResult['client_name'] = _t($this->_sLangsPrefix . 'txt_buyer_name_mask', bx_process_input($aData['first_name']), bx_process_input($aData['last_name'])); 
 		$aResult['client_email'] = bx_process_input($aData['payer_email']);
 		$aResult['paid'] = true;
         return $aResult;
     }
 
-    protected function _validateCheckout(&$aData)
+    protected function _validateCheckout(&$aData, &$aPending)
     {
         $iMode = (int)$this->getOption('mode');
         if($iMode == PP_MODE_LIVE) {
@@ -164,10 +169,10 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
         $iPrcType = $this->getOption('prc_type');
         if($iPrcType == PP_PRC_TYPE_DIRECT || $iPrcType == PP_PRC_TYPE_IPN) {
             if($aData['payment_status'] != 'Completed' )
-                return array('code' => 4, 'message' => $this->_sLangsPrefix . 'pp_err_not_completed');
+                return array('code' => 3, 'message' => $this->_sLangsPrefix . 'pp_err_not_completed');
 
             if($aData['business'] != $sBusiness)
-                return array('code' => 5, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_business');
+                return array('code' => 4, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_business');
 
             $sRequest = 'cmd=_notify-validate';
             foreach($aData as $sKey => $sValue) {
@@ -183,9 +188,9 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
 
             array_walk($aResponse['content'], create_function('&$arg', "\$arg = trim(\$arg);"));
             if(strcmp($aResponse['content'][0], "INVALID") === 0)
-                return array('code' => 7, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_transaction');
+                return array('code' => 6, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_transaction');
             else if(strcmp($aResponse['content'][0], "VERIFIED") !== 0)
-                return array('code' => 8, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_verification_status');
+                return array('code' => 7, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_verification_status');
         }
          else if($iPrcType == PP_PRC_TYPE_PDT) {
             $sRequest = "cmd=_notify-synch&tx=" . $aData['tx'] . "&at=" . $this->getOption('token');
@@ -195,33 +200,41 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
                return $aResponse;
 
             if(strcmp($aResponse['content'][0], "FAIL") === 0)
-                return array('code' => 7, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_transaction');
+                return array('code' => 6, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_transaction');
             else if(strcmp($aResponse['content'][0], "SUCCESS") !== 0)
-                return array('code' => 8, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_verification_status');
+                return array('code' => 7, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_verification_status');
 
             $aKeys = array();
-            foreach($aResponse['content'] as $sLine) {
-                list($sKey, $sValue) = explode("=", $sLine);
-                $aKeys[urldecode($sKey)] = urldecode($sValue);
-            }
+            foreach($aResponse['content'] as $sLine) 
+                if(strpos($sLine, '=') !== false) {
+                    list($sKey, $sValue) = explode('=', $sLine);
+                    $aKeys[urldecode($sKey)] = urldecode($sValue);
+                }
 
             $aData = array_merge($aData, $aKeys);
 
             if($aData['payment_status'] != 'Completed' )
-                return array('code' => 4, 'message' => $this->_sLangsPrefix . 'pp_err_not_completed');
+                return array('code' => 3, 'message' => $this->_sLangsPrefix . 'pp_err_not_completed');
 
             if($aData['business'] != $sBusiness)
-                return array('code' => 5, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_business');
+                return array('code' => 4, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_business');
         }
 
-        $aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $aData['item_number']));
-        $aVendor = $this->_oModule->getVendorInfo($aPending['seller_id']);
+        if(empty($aData['custom']))
+            return array('code' => 8, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_custom_data');
+
+        list($iVendorId, $iPendingId) = $this->_deconstructCustomData($aData['custom']);
+        if(empty($iVendorId) || empty($iPendingId))
+            return array('code' => 8, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_custom_data');
+
+        $aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
+        if((int)$iVendorId != (int)$aPending['seller_id'])
+            return array('code' => 9, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_vendor');
+
+        $aVendor = $this->_oModule->getVendorInfo($iVendorId);
         $fAmount = (float)$this->_getReceivedAmount($aVendor['currency_code'], $aData);
         if($fAmount != (float)$aPending['amount'])
-            return array('code' => 9, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_amount');
-
-        if($aData['custom'] != md5($aPending['seller_id'] . $aPending['id']))
-            return array('code' => 10, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_custom_data');
+            return array('code' => 10, 'message' => $this->_sLangsPrefix . 'pp_err_wrong_amount');
 
         return array('code' => BX_PAYMENT_RESULT_SUCCESS, 'message' => $this->_sLangsPrefix . 'pp_msg_verified');
     }
@@ -249,7 +262,7 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
             $this->log($sResponse);
 			curl_close($rConnect);
 
-			return array('code' => 6, 'message' => $this->_sLangsPrefix . 'err_cannot_validate');
+			return array('code' => 5, 'message' => $this->_sLangsPrefix . 'err_cannot_validate');
 		}
 
 		curl_close($rConnect);
@@ -270,6 +283,17 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
 
         return $fAmount;
     }
+
+	protected function _constructCustomData()
+	{
+		$aParams = func_get_args();
+		return urlencode(base64_encode(implode('|', $aParams)));
+	}
+
+	protected function _deconstructCustomData($data)
+	{
+		return explode('|', base64_decode(urldecode($data)));
+	}
 }
 
 /** @} */

+ 5 - 0
modules/boonex/payment/install/langs/en.xml

@@ -12,8 +12,12 @@
 	<string name="_bx_payment_page_title_carts"><![CDATA[Shopping Carts]]></string>
 	<string name="_bx_payment_page_title_sys_cart"><![CDATA[Shopping Cart]]></string>
 	<string name="_bx_payment_page_title_cart"><![CDATA[Shopping Cart]]></string>
+    <string name="_bx_payment_page_title_sys_cart_thank_you"><![CDATA[Thank you!]]></string>
+    <string name="_bx_payment_page_title_cart_thank_you"><![CDATA[Thank you!]]></string>
 	<string name="_bx_payment_page_block_title_carts"><![CDATA[Shopping Carts]]></string>
 	<string name="_bx_payment_page_block_title_cart"><![CDATA[{0}'s Shopping Cart]]></string>
+    <string name="_bx_payment_page_block_title_cart_thank_you"><![CDATA[Thank you!]]></string>
+    <string name="_bx_payment_page_block_content_cart_thank_you"><![CDATA[Thank you! Payment was successfully performed. The data will be processed shortly. Please wait.]]></string>
 
     <string name="_bx_payment_page_title_sys_sbs_list"><![CDATA[Subscriptions List]]></string>
     <string name="_bx_payment_page_title_sbs_list"><![CDATA[Subscriptions]]></string>
@@ -240,6 +244,7 @@
 	<string name="_bx_payment_pp_return_data_url_cpt"><![CDATA[Data return URL]]></string>
 	<string name="_bx_payment_pp_err_no_data_given"><![CDATA[No data given.]]></string>
 	<string name="_bx_payment_pp_err_not_completed"><![CDATA[Payment is not completed.]]></string>
+	<string name="_bx_payment_pp_err_wrong_vendor"><![CDATA[Wrong vendor.]]></string>
 	<string name="_bx_payment_pp_err_wrong_business"><![CDATA[Wrong receiver email.]]></string>
 	<string name="_bx_payment_pp_err_wrong_transaction"><![CDATA[Transaction verification failed.]]></string>
 	<string name="_bx_payment_pp_err_wrong_verification_status"><![CDATA[No verification status received.]]></string>

+ 5 - 1
modules/boonex/payment/install/sql/enable.sql

@@ -19,11 +19,15 @@ INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `c
 -- PAGES & BLOCKS
 INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES
 ('bx_payment_join', '_bx_payment_page_title_sys_join', '_bx_payment_page_title_join', @sName, 5, 2147483647, 1, 'payment-join', 'page.php?i=payment-join', '', '', '', 0, 1, 0, 'BxPaymentPageJoin', 'modules/boonex/payment/classes/BxPaymentPageJoin.php'),
+
 ('bx_payment_carts', '_bx_payment_page_title_sys_carts', '_bx_payment_page_title_carts', @sName, 5, 2147483647, 1, 'payment-carts', 'page.php?i=payment-carts', '', '', '', 0, 1, 0, 'BxPaymentPageCart', 'modules/boonex/payment/classes/BxPaymentPageCart.php'),
 ('bx_payment_cart', '_bx_payment_page_title_sys_cart', '_bx_payment_page_title_cart', @sName, 5, 2147483647, 1, 'payment-cart', 'page.php?i=payment-cart', '', '', '', 0, 1, 0, 'BxPaymentPageCart', 'modules/boonex/payment/classes/BxPaymentPageCart.php'),
+('bx_payment_cart_thank_you', '_bx_payment_page_title_sys_cart_thank_you', '_bx_payment_page_title_cart_thank_you', @sName, 5, 2147483647, 1, 'payment-cart-thank-you', 'page.php?i=payment-cart-thank-you', '', '', '', 0, 1, 0, 'BxPaymentPageCart', 'modules/boonex/payment/classes/BxPaymentPageCart.php'),
 ('bx_payment_history', '_bx_payment_page_title_sys_history', '_bx_payment_page_title_history', @sName, 5, 2147483647, 1, 'payment-history', 'page.php?i=payment-history', '', '', '', 0, 1, 0, 'BxPaymentPageHistory', 'modules/boonex/payment/classes/BxPaymentPageHistory.php'),
+
 ('bx_payment_sbs_list', '_bx_payment_page_title_sys_sbs_list', '_bx_payment_page_title_sbs_list', @sName, 5, 2147483647, 1, 'payment-sbs-list', 'page.php?i=payment-sbs-list', '', '', '', 0, 1, 0, 'BxPaymentPageSubscriptions', 'modules/boonex/payment/classes/BxPaymentPageSubscriptions.php'),
 ('bx_payment_sbs_history', '_bx_payment_page_title_sys_sbs_history', '_bx_payment_page_title_sbs_history', @sName, 5, 2147483647, 1, 'payment-sbs-history', 'page.php?i=payment-sbs-history', '', '', '', 0, 1, 0, 'BxPaymentPageSubscriptions', 'modules/boonex/payment/classes/BxPaymentPageSubscriptions.php'),
+
 ('bx_payment_orders', '_bx_payment_page_title_sys_orders', '_bx_payment_page_title_orders', @sName, 5, 2147483647, 1, 'payment-orders', 'page.php?i=payment-orders', '', '', '', 0, 1, 0, 'BxPaymentPageOrders', 'modules/boonex/payment/classes/BxPaymentPageOrders.php'),
 ('bx_payment_details', '_bx_payment_page_title_sys_details', '_bx_payment_page_title_details', @sName, 5, 2147483647, 1, 'payment-details', 'page.php?i=payment-details', '', '', '', 0, 1, 0, 'BxPaymentPageDetails', 'modules/boonex/payment/classes/BxPaymentPageDetails.php');
 
@@ -32,13 +36,13 @@ INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designb
 
 ('bx_payment_carts', 1, @sName, '_bx_payment_page_block_title_carts', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:10:"bx_payment";s:6:"method";s:15:"get_block_carts";s:6:"params";a:0:{}s:5:"class";s:4:"Cart";}', 0, 0, 1),
 ('bx_payment_cart', 1, @sName, '_bx_payment_page_block_title_cart', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:10:"bx_payment";s:6:"method";s:14:"get_block_cart";s:6:"params";a:0:{}s:5:"class";s:4:"Cart";}', 0, 0, 1),
+('bx_payment_cart_thank_you', 1, @sName, '_bx_payment_page_block_title_cart_thank_you', 11, 2147483647, 'lang', '_bx_payment_page_block_content_cart_thank_you', 0, 0, 1),
 ('bx_payment_history', 1, @sName, '_bx_payment_page_block_title_history', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:10:"bx_payment";s:6:"method";s:22:"get_block_cart_history";s:6:"params";a:0:{}s:5:"class";s:4:"Cart";}', 0, 0, 1),
 
 ('bx_payment_sbs_list', 1, @sName, '_bx_payment_page_block_title_sbs_list', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:10:"bx_payment";s:6:"method";s:14:"get_block_list";s:6:"params";a:0:{}s:5:"class";s:13:"Subscriptions";}', 0, 0, 1),
 ('bx_payment_sbs_history', 1, @sName, '_bx_payment_page_block_title_sbs_history', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:10:"bx_payment";s:6:"method";s:17:"get_block_history";s:6:"params";a:0:{}s:5:"class";s:13:"Subscriptions";}', 0, 0, 1),
 
 ('bx_payment_orders', 1, @sName, '_bx_payment_page_block_title_orders', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:10:"bx_payment";s:6:"method";s:16:"get_block_orders";s:6:"params";a:0:{}s:5:"class";s:6:"Orders";}', 0, 0, 1),
-
 ('bx_payment_details', 1, @sName, '_bx_payment_page_block_title_details', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:10:"bx_payment";s:6:"method";s:17:"get_block_details";s:6:"params";a:0:{}s:5:"class";s:7:"Details";}', 0, 0, 1);
 
 

+ 5 - 1
modules/boonex/russian/data/langs/bx_payment/ru.xml

@@ -12,8 +12,12 @@
 	<string name="_bx_payment_page_title_carts"><![CDATA[Корзины]]></string>
 	<string name="_bx_payment_page_title_sys_cart"><![CDATA[Корзина]]></string>
 	<string name="_bx_payment_page_title_cart"><![CDATA[Корзина]]></string>
+    <string name="_bx_payment_page_title_sys_cart_thank_you"><![CDATA[Спасибо!]]></string>
+    <string name="_bx_payment_page_title_cart_thank_you"><![CDATA[Спасибо!]]></string>
 	<string name="_bx_payment_page_block_title_carts"><![CDATA[Корзины]]></string>
 	<string name="_bx_payment_page_block_title_cart"><![CDATA[Корзина продавца {0}]]></string>
+    <string name="_bx_payment_page_block_title_cart_thank_you"><![CDATA[Спасибо!]]></string>
+    <string name="_bx_payment_page_block_content_cart_thank_you"><![CDATA[Спасибо! Оплата успешно завершена. Данные будут обработаны в ближайшее время. Пожалуйста, подождите.]]></string>
 
     <string name="_bx_payment_page_title_sys_sbs_list"><![CDATA[Лист подписок]]></string>
     <string name="_bx_payment_page_title_sbs_list"><![CDATA[Подписки]]></string>
@@ -237,8 +241,8 @@
 	<string name="_bx_payment_pp_sandbox_dsc"><![CDATA[E-mail вашего Sandbox аккаунта на PayPal]]></string>
 	<string name="_bx_payment_pp_return_data_url_cpt"><![CDATA[URL для возврата данных]]></string>
 	<string name="_bx_payment_pp_err_no_data_given"><![CDATA[Нет переданных данных.]]></string>
-	<string name="_bx_payment_pp_err_no_vendor_given"><![CDATA[Неизвестный продавец.]]></string>
 	<string name="_bx_payment_pp_err_not_completed"><![CDATA[Платеж не завершен.]]></string>
+	<string name="_bx_payment_pp_err_wrong_vendor"><![CDATA[Неправильные данные продавеца.]]></string>
 	<string name="_bx_payment_pp_err_wrong_business"><![CDATA[Неправильный E-mail получателя.]]></string>
 	<string name="_bx_payment_pp_err_wrong_transaction"><![CDATA[Не удалось верифицировать транзакцию.]]></string>
 	<string name="_bx_payment_pp_err_wrong_verification_status"><![CDATA[Не получен статус верификации.]]></string>