• magento信用金额支付插件开发


    1、添加产品属性: 

    catalog->Attributes->Manage Attributes
    进去栏目添加一个code:is_reserve lable:customized products的产品属性

    2、添加用户属性:

    #添加Custom Type 属性
    $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
    $AttrCode = 'type';
    $settings = array (
         'position' => 1,
         'label' => 'Custom Type',
         'is_required'=> 0,
         'input'         => 'select',
         'type'          => 'int',
         'sort_order' => '999',
         'model' => 'eav/entity_attribute_source_customertype'
    ); 
    $setup->addAttribute('1', $AttrCode, $settings);
    #上传Eav/Model/Entity/Attribute/Source/customertype.php文件选择公司和个人的选择器

    form_code = adminhtml_customer #管理属性
    attribute_id = 556 #属性表的id

    #添加Custom Type 属性
    $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
    $AttrCode = 'credit_limit';
    $settings = array (
         'position' => 1,
         'label' => 'Credit Limit',
         'is_required'=> 0,
         'input'         => 'text',
         'type'          => 'int',
         'sort_order' => '999',
    ); 
    $setup->addAttribute('1', $AttrCode, $settings);
    #添加完之后再数据库中找这个attribute_id
    form_code = adminhtml_customer #管理属性
    attribute_id = 557 #属性表的id
    #月结支付的显示阈值
    #添加Credit Limit Threshold 属性
    $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
    $AttrCode = 'credit_threshold';
    $settings = array (
         'position' => 1,
         'label' => 'Credit Limit Threshold',
         'is_required'=> 0,
         'input'         => 'text',
         'type'          => 'int',
         'sort_order' => '999',
    ); 
    $setup->addAttribute('1', $AttrCode, $settings);
    #添加完之后再数据库中找这个attribute_id
    
    #单笔订单金额收取百分百比 #添加预付金百分比 属性 $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $AttrCode = 'custom_payment'; $settings = array ( 'position' => 1, 'label' => 'Percentage of Deposit', 'is_required'=> 0, 'input' => 'text', 'type' => 'int', 'sort_order' => '999', ); $setup->addAttribute('1', $AttrCode, $settings); #添加完之后再数据库中找这个attribute_id #添加Max Credit Limit 属性 $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $AttrCode = 'max_credit_payment'; $settings = array ( 'position' => 1, 'label' => 'Max Credit Limit per Order', 'is_required'=> 0, 'input' => 'text', 'type' => 'int', 'sort_order' => '999', ); $setup->addAttribute('1', $AttrCode, $settings); #添加完之后再数据库中找这个attribute_id #添加Use Credit Limit属性 $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $AttrCode = 'use_credit_limit'; $settings = array ( 'position' => 1, 'label' => 'Use Credit Limit', 'is_required'=> 0, 'input' => 'text', 'type' => 'int', 'sort_order' => '999', ); $setup->addAttribute('1', $AttrCode, $settings); #添加完之后再数据库中找这个attribute_id
    #添加cumulative_credit用户属性。
    $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
    $AttrCode = 'cumulative_credit';
    $settings = array (
        'position' => 1,
        'label' => 'Cumulative credit',
        'is_required'=> 0,
        'input'         => 'text',
        'type'          => 'varchar',
        'sort_order' => '999',
    ); 
    $setup->addAttribute('1', $AttrCode, $settings); 
     
    可用信用额度

    $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
    $AttrCode = 'remain_credit';
    $settings = array (
      'position' => 1,
      'label' => 'Available Credit Line',
      'is_required'=> 0,
      'input' => 'text',
      'type' => 'varchar',
      'sort_order' => '999',
    );
    $setup->addAttribute('1', $AttrCode, $settings);

    3、添加支付插件

    #Payment/etc/system.xml
    <!--自定义支付方式-->
                    <creditlimit translate="label">
                        <label>Credit Limit</label>
                        <frontend_type>text</frontend_type>
                        <sort_order>30</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                        <fields>
                            <active translate="label">
                                <label>Enabled</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_yesno</source_model>
                                <sort_order>1</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </active>
                            <order_status translate="label">
                                <label>New Order Status</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_order_status_new</source_model>
                                <sort_order>20</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </order_status>
    
                            <sort_order translate="label">
                                <label>Sort Order</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>100</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                                <frontend_class>validate-number</frontend_class>
                            </sort_order>
                            <title translate="label">
                                <label>Title</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>10</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>1</show_in_store>
                            </title>
                            <allowspecific translate="label">
                                <label>Payment from Applicable Countries</label>
                                <frontend_type>allowspecific</frontend_type>
                                <sort_order>50</sort_order>
                                <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </allowspecific>
                            <specificcountry translate="label">
                                <label>Payment from Specific Countries</label>
                                <frontend_type>multiselect</frontend_type>
                                <sort_order>51</sort_order>
                                <source_model>adminhtml/system_config_source_country</source_model>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                                <can_be_empty>1</can_be_empty>
                            </specificcountry>
                            
                            <!-- <payable_to translate="label">
                                <label>Make Check Payable to</label>
                                <sort_order>61</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>1</show_in_store>
                            </payable_to> -->
                            <!-- <mailing_address translate="label">
                                <label>Send Check to</label>
                                <frontend_type>textarea</frontend_type>
                                <sort_order>62</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>1</show_in_store>
                            </mailing_address> -->
                            <min_order_total translate="label">
                                <label>Minimum Order Total</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>98</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </min_order_total>
                            <max_order_total translate="label">
                                <label>Maximum Order Total</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>99</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </max_order_total>
                            <model>
                            </model>
                        </fields>
                    </creditlimit>
    
    #Payment/etc/config.xml
      <creditlimit>
           <active>1</active>
           <model>payment/method_creditlimit</model>
           <order_status>pending</order_status>
           <title>Credit Limit</title>
           <allowspecific>0</allowspecific>
           <group>offline</group>
    </creditlimit>
    #payment/method_creditlimit ->Mage/Payment/Model/Method/creditlimit.php
    配置完之后再后台支付哪里可以看到,启用支付插件System > Configuration > Payment Methods

    5、修改前端支付方法文件

    #app/design/frontend/default/theme592/template/checkout/onepage/payment/methods.phtml
    
    /*处理是否允许用户类型支付*/
    if($_code == "creditlimit"){
                $Type = $this->getCustomer()->getType();
                /*用户是个人,支付只支持公司*/
                if(intval($Type) != 1){
                    continue;
                }
                /*如果是企业用户*/
                $maxOrderTotalCL= $this->getCustomer()->getCreditThreshold();
                $grandTotal = $this->getQuote()->getBaseGrandTotal();
                if(intval($maxOrderTotalCL) > $grandTotal){ //如果订单总数小于允许最大值时
                    continue;
                }
                /*获取当前可用信用额度*/
                $CreditLimit = (float)$this->getCustomer()->getCreditLimit();  //该用户的信用额度
                $useCreditLimit = (float)$this->getCustomer()->getUseCreditLimit();//已经使用了信用额度
                $CreditLimitPercent = (float)$this->getCustomer()->getCustomPayment();//已经使用了信用额度
                $usedCreditLimit = (float)($CreditLimit-$useCreditLimit);//可用额度
                $usedCreditLimit = $usedCreditLimit<0?0:$usedCreditLimit;
                $tipceCreditLimit[$_code] = $this->__('当前可用信用额度 <b style="color:#f00;">HK$%s</b>',sprintf('%.2f',$usedCreditLimit));
                /*信用额度不足的情况*/
                if($grandTotal > $CreditLimit){
                    if($CreditLimitPercent==0) $CreditLimitPercent = 50;
                    $MethodFormHtml[$_code] = $this->__('因定单金额过大,下单后我们将先收取该订单金额的%s',$CreditLimitPercent."%"); 
                }elseif($usedCreditLimit<$grandTotal){
                    $MethodFormHtml[$_code] = $this->__('当前可用信用额度不足,下单后请等待客服人员联系.'); 
                }
    }
    

    6、后台添加订单状态

    System > Order Status

    在app/code/core/Mage/order.php文件中的351行下面添加两个状态

    const STATE_PENDING_REPAYMENT = 'pending_repayment';
    const STATE_PENDING_DEPOSIT = 'pending_deposit';

    7、处理订单

    #在code/core/Mage/Checkout/controllers/OnepageController.php文件的successAction方法中添加代码
    
    /*订单*/
     $order = Mage::getSingleton('sales/order')->loadByIncrementId($IncrementId);
            $paymentMethod = $order->getPayment()->getMethod();
            if($paymentMethod == 'creditlimit'){
                Mage::dispatchEvent('payment_model_method_creditlimit_pay', array('order' => $order));
    }
    #payment_model_method_creditlimit_pay触发器在code/core/Mage/Checkout/etc/config.xml文件中添加事件
    <payment_model_method_creditlimit_pay><!-- 事件的名字 -->  
          <observers>  
              <update_creadit_limit><!-- 任何唯一的标示符 -->  
              <type>singleton</type>
              <class>Mage_Payment_Model_Method_Creditlimit</class><!-- 我们自己的类(class) -->  
              <method>UpdateCustomerCreditLimit</method><!-- 方法名 -->
              </update_creadit_limit>  
           </observers>  
     </payment_model_method_creditlimit_pay>   
    #类和方法在code/core/Mage/Payment/Model/Method/Creditlimit.php文件中
    #/js/mage/adminhtml/tools.js文件中添加了一个方法后台处理订单状态使用
    #/design/adminhtml/default/default/template/qquoteadv/sales/order/view/info.phtml文件中添加订单状态处理按钮


    创建订单字断段
    ALTER TABLE `sales_flat_order` ADD `deposit` VARCHAR(10) NOT NULL DEFAULT '0' COMMENT '预订金' AFTER `c2q_internal_quote_id`;
    在后台订单状态哪里新建状态,已收定金

  • 相关阅读:
    配置Express中间件
    C#字符串中特殊字符的转义
    JSON.NET 简单的使用
    ASP.NET 解决URL中文乱码的解决
    ASP.NET MVC 笔记
    VS中一些不常用的快捷键
    Visual Studio 中突出显示的引用
    Silverlight从客户端上传文件到服务器
    silverlight打开和保存文件
    sliverlight资源文件的URI调用
  • 原文地址:https://www.cnblogs.com/mayi168/p/6498045.html
Copyright © 2020-2023  润新知