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`;
在后台订单状态哪里新建状态,已收定金

转载于:https://www.cnblogs.com/mayi168/p/6498045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值