浏览过的商品

shopex部分付款/部分支付问题

发布日期:2017-01-06

  function payed($data, &$message){

        if(empty($data['order_id'])){

            $message .= '支付单:订单号{'.$info['payment_id'].'}没有对应订单号';

            return false;

        }

        $aOrder = $this->getFieldById($data['order_id'], array('total_amount','final_amount','payed','pay_status','ship_status','status','member_id','is_tax','ship_email','ship_mobile','cur_rate'));

        $aOrder['order_id'] = $data['order_id'];

        if($aOrder['pay_status'] == '0' || $aOrder['pay_status'] == '3' || ($aOrder['pay_status'] == '2' && !$data['pay_assure'])){    //如何是未支付或者部分支付或者支付中

            if($data['pay_type'] =='deposit' && ($aOrder['pay_status'] == '0' || $aOrder['pay_status'] == '3')){  //预存款付款

                $message .= '预存款支付:订单号{'.$data['order_id'].'}';

                $oAdvance = $this->system->loadModel("member/advance");

                if(!$oAdvance->deduct($data['member_id'], $data['money'], $message, $message, $data['payment_id'], $data['order_id'] ,$data['paymethod'] , '预存款支付')){

                    return false;

                }

            }

        }

        $aOrder['ship_email'] = $aOrder['ship_email'];

        $aOrder['ship_mobile'] = $aOrder['ship_mobile'];

 

        //if(bc_math('bcsub', $aOrder['final_amount'], $aOrder['payed']) <= $data['money']*$aOrder['cur_rate']){

        //上述算法会导致部分付款。2017年01月06日13:33:25=by-sk

        $oCur = &$this->system->loadModel('system/cur');

 

         if(($aOrder['final_amount']- $aOrder['payed']) <= $oCur->formatNumber($data['money']*$aOrder['cur_rate'],false)){

    //if ( $aOrder['final_amount'] - $aOrder['payed'] <= $data['money'] ){

 

            /**

            *    @branch:全额付款

            */

            $aOrder['pay_status']= ($data['pay_assure'] ? '2':'1');    //如果是担保交易则2,否则已支付1

            $aOrder['payed'] = $aOrder['final_amount'];

        }else{  //部分付款

            $left=($aOrder['final_amount']- $aOrder['payed']);

            $needpay=$oCur->formatNumber($data['money']*$aOrder['cur_rate']);

            file_put_contents(HOME_DIR.'/testbufen.txt', "left:".$left."\r\n neepay:".$needpay."\r\n",FILE_APPEND);

            $aOrder['pay_status'] = '3';

            if($data['pay_progress'] !='PAY_PROGRESS'){

                  $aOrder['payed'] = $aOrder['payed'] + $data['money'];

            }

 

/*            if($aData['pay_status'] == 1){

                $lastMoney = $nonPay - $payMoney;

                $this->addLog(__('更改订单金额:减少').$lastMoney);

                $aUpdate['pay_status'] = 1;

                $aUpdate['discount'] += $lastMoney;

            }else{

                $aUpdate['pay_status'] = 3;

            }*/

        }

        $aOrder['payment_id'] = $data['payment_id'];

        $aOrder['acttime'] = time();

        $aOrder['last_change_time'] = time();

        if(!$this->toEdit($data['order_id'], $aOrder)){

            $message .= __('更新订单失败');

            return false;

        }

 

        $this->addLog('订单'.$aOrder['order_id'].'付款'.($data['pay_assure'] ? '(担保交易)':'').$data['money'], $this->op_id?$this->op_id:null, $this->op_name?$this->op_name:null , '付款');

        if($aOrder['status'] != 'active'){  //死单被支付的情况

            return true;

        }

 

        if($aOrder['pay_status']=='1' || $aOrder['pay_status']=='2'){

            if($this->freez_time()=='pay'){

                $missProduct=array();

                $objCart = &$this->system->loadModel('trading/cart');

                $objGift = &$this->system->loadModel('trading/gift');

                $rs = $this->db->select('SELECT product_id,nums,name  FROM sdb_order_items  WHERE order_id = '.$aOrder['order_id'].' ');

                $rsG= $this->db->select('SELECT gift_id,nums  FROM sdb_gift_items   WHERE order_id = '.$aOrder['order_id'].' ');

 

                foreach($rs as $k=>$p){

                    if($p['nums']>=0){

                     $this->db->exec("UPDATE sdb_products SET freez = freez + ".intval($p['nums'])." WHERE product_id = ".intval($p['product_id']));

                    }

                     $this->db->exec("UPDATE sdb_products SET freez = ".intval($p['nums'])." WHERE product_id = ".intval($p['product_id'])." AND freez IS NULL");

                }

                 foreach($rsG as $key=>$val){

                     $objGift->freezStock($val['gift_id'],$val['nums']);

                }

            }

            if($this->system->getConf('system.auto_delivery')){ //检测付款前的订单状态,如果是刚付款立即发货

                $this->delivery($aOrder, false);

            }

        }

 

        if ($aOrder['pay_status'] == '1'){

            $aPara = $aOrder;

            $aOrder['money'] = $data['money'];

            $aOrder['pay_account'] = $data['pay_account'];

 

            if($data['pay_progress']!='PAY_PROGRESS'){

                 $this->toCoupon($aOrder);  //给优惠券

                 $this->toPoint($aOrder);  //给积分

                 $this->toExperience($aOrder);

            }

 

            $status = &$this->system->loadModel('system/status');

            if($data['order_id'] && ($aOrder['pay_status'] == '1' || $aOrder['pay_status'] == '2')){

                if($aOrder['ship_status'] == '1'){

                    $status->add('ORDER_SUCC');

                    $status->add('REVENUE', $aOrder['final_amount']);

                }else{

                    $status->count_order_to_dly();

                }

            }

            $status->count_order_to_pay();

 

 

 

            $s = $this->fireEvent('payed', $aOrder,$aOrder['member_id']);

        }

 

 

      if($aOrder['pay_status'] == '3'){

            $aPara = $aOrder;

            $aOrder['money'] = $data['money'];

            $aOrder['pay_account'] = $data['pay_account'];

            $s = $this->fireEvent('payed',$aOrder,$aOrder['member_id']);

      }

 

        return $aOrder['pay_status'];

    }