Bladeren bron

Integration with Payment module.

AntonLV 6 jaren geleden
bovenliggende
commit
ecffa34237

+ 127 - 0
modules/boonex/payment/classes/BxPaymentProviderCredits.php

@@ -0,0 +1,127 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Payment Payment
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Credits payment provider can be used when 
+ * Credits module is installed and active.
+ */
+
+class BxPaymentProviderCredits extends BxBaseModPaymentProvider implements iBxBaseModPaymentProvider
+{
+    protected $_sModuleCredits;
+
+    function __construct($aConfig)
+    {
+    	$this->MODULE = 'bx_payment';
+
+        parent::__construct($aConfig);
+
+        $this->_sModuleCredits = 'bx_credits';
+    }
+
+    public function initializeCheckout($iPendingId, $aCartInfo, $bRecurring = false, $iRecurringDays = 0)
+    {
+        if(!BxDolModuleQuery::getInstance()->isEnabledByName($this->_sModuleCredits)) {
+            $this->_oModule->_oTemplate->displayPageCodeError('_bx_payment_cdt_err_not_available');
+            exit;
+        }
+
+        $iSellerId = (int)$aCartInfo['vendor_id'];
+        $sCheckoutUrl = BxDolService::call($this->_sModuleCredits, 'get_checkout_url');
+        $sReturnDataUrl = $this->getReturnDataUrl($iSellerId);
+        
+
+        $aFormData = array(
+            'currency_code' => $aCartInfo['vendor_currency_code'],
+            'currency_sign' => $aCartInfo['vendor_currency_sign'],
+            'seller' => $iSellerId,
+            'amount' => (float)$aCartInfo['items_price'],
+            'items_count' => count($aCartInfo['items']),
+            'custom' => $this->_constructCustomData($aCartInfo['vendor_id'], $iPendingId),
+            'return_data_url' => $sReturnDataUrl,
+        );
+
+        $iIndex = 0;
+        foreach($aCartInfo['items'] as $aItem) {
+            $aFormData['item_title_' . $iIndex] = bx_process_output($aItem['title']);
+            $aFormData['item_quantity_' . $iIndex] = $aItem['quantity'];
+
+            $iIndex += 1;
+        }
+
+        $this->_oModule->_oTemplate->displayPageCodeRedirect($sCheckoutUrl, $aFormData);
+        exit;
+    }
+
+    public function finalizeCheckout(&$aData)
+    {
+        $aResult = $this->_finalizeCheckout($aData);
+        if((int)$aResult['code'] != BX_PAYMENT_RESULT_SUCCESS) {
+            $this->log('Finalize Checkout: Failed');
+            $this->log($aData);
+            $this->log($aResult);
+        }
+
+        if(!empty($aResult['pending_id']))
+            $this->_oModule->_oDb->updateOrderPending($aResult['pending_id'], array(
+                'order' => isset($aData['o']) ? $aData['o'] : '',
+                'error_code' => $aResult['code'],
+                'error_msg' => _t($aResult['message'])
+            ));
+
+        return $aResult;
+    }
+
+    protected function _finalizeCheckout(&$aData)
+    {
+        list($iSellerId, $iPendingId) = $this->_deconstructCustomData($aData['c']);
+
+        if(empty($this->_aOptions) && !empty($iPendingId))
+            $this->_aOptions = $this->getOptionsByPending((int)$iPendingId);
+
+        $aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
+        if(empty($aPending) || !is_array($aPending))
+            return array('code' => 1, 'message' => $this->_sLangsPrefix . 'err_not_found_pending');
+
+        if(!empty($aPending['order']) || !empty($aPending['error_code']) || !empty($aPending['error_msg']) || (int)$aPending['processed'] != 0)
+            return array('code' => 2, 'message' => $this->_sLangsPrefix . 'err_already_processed');
+
+        if(empty($this->_aOptions) || !BxDolModuleQuery::getInstance()->isEnabledByName($this->_sModuleCredits))
+            return array('code' => 3, 'message' => $this->_sLangsPrefix . 'err_incorrect_provider', 'pending_id' => $iPendingId);
+
+        $sOrder = $aData['o'];
+        if(!BxDolService::call($this->_sModuleCredits, 'validate_checkout', array((int)$aPending['seller_id'], (int)$aPending['client_id'], (float)$aPending['amount'], $sOrder)))
+            return array('code' => 4, 'message' => $this->_sLangsPrefix . 'cdt_err_wrong_transaction', 'pending_id' => $iPendingId);
+
+        $oClient = BxDolProfile::getInstance($aPending['client_id']);
+        return array(
+            'code' => BX_PAYMENT_RESULT_SUCCESS, 
+            'message' => $this->_sLangsPrefix . 'cdt_msg_processed',
+            'pending_id' => $iPendingId,
+            'client_name' => $oClient->getDisplayName(),
+            'client_email' => $oClient->getAccountObject()->getEmail(),
+            'paid' => true
+        );
+    }
+
+    protected function _constructCustomData()
+    {
+        $aParams = func_get_args();
+        return urlencode(base64_encode(implode('|', $aParams)));
+    }
+
+    protected function _deconstructCustomData($data)
+    {
+        return explode('|', base64_decode(urldecode($data)));
+    }
+}
+
+/** @} */

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

@@ -275,6 +275,17 @@
         <string name="_bx_payment_txt_unsubscribe_yes"><![CDATA[Cancel automatically]]></string>
         <string name="_bx_payment_txt_unsubscribe_no"><![CDATA[Do not cancel]]></string>
 
+        <!-- Credits payment provider -->
+	<string name="_bx_payment_cdt_cpt"><![CDATA[Credits]]></string>
+	<string name="_bx_payment_cdt_dsc"><![CDATA[Credits payment provider]]></string>
+	<string name="_bx_payment_cdt_active_cpt"><![CDATA[Active]]></string>
+	<string name="_bx_payment_cdt_active_dsc"><![CDATA[Activate(Deactivate) provider]]></string>
+        <string name="_bx_payment_cdt_msg_processed"><![CDATA[Payment was successfully processed.]]></string>
+        <string name="_bx_payment_cdt_err_not_available"><![CDATA[Checkout with Credits isn't available now.]]></string>
+        <string name="_bx_payment_cdt_err_wrong_transaction"><![CDATA[Transaction verification failed.]]></string>
+        <string name="_bx_payment_txt_name_credits"><![CDATA[Credits]]></string>
+	<string name="_bx_payment_txt_cart_credits"><![CDATA[Credits]]></string>
+
 	<!-- PayPal payment provider -->
 	<string name="_bx_payment_pp_cpt"><![CDATA[PayPal]]></string>
 	<string name="_bx_payment_pp_dsc"><![CDATA[PayPal payment provider]]></string>

+ 9 - 0
modules/boonex/payment/install/sql/install.sql

@@ -112,6 +112,15 @@ CREATE TABLE IF NOT EXISTS `bx_payment_modules` (
 );
 
 
+-- Credits payment provider
+INSERT INTO `bx_payment_providers`(`name`, `caption`, `description`, `option_prefix`, `for_visitor`, `for_single`, `for_recurring`, `active`, `order`, `class_name`) VALUES
+('credits', '_bx_payment_cdt_cpt', '_bx_payment_cdt_dsc', 'cdt_', 0, 1, 0, 1, 0, 'BxPaymentProviderCredits');
+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, 'cdt_active', 'checkbox', '_bx_payment_cdt_active_cpt', '_bx_payment_cdt_active_dsc', '', '', '', '', 1);
+
+
 -- PayPal payment provider
 INSERT INTO `bx_payment_providers`(`name`, `caption`, `description`, `option_prefix`, `for_visitor`, `for_single`, `for_recurring`, `active`, `order`, `class_name`) VALUES
 ('paypal', '_bx_payment_pp_cpt', '_bx_payment_pp_dsc', 'pp_', 1, 1, 0, 1, 1, 'BxPaymentProviderPayPal');