手机网站/WAP | app手机客户端 | 微商城,微信商城 | 微信分销/微信推广/微分销 |
优惠券 | 促销规则 | 积分现金 | 主动营销工具 | 团购/秒杀/抢购 |
搜索优化 | 库存管理及优化 | 商品展示优化 | 购买限制 | 价格/批发/代理/权限 | 商品分类页面优化 |
订单发货 | 订单打印 | 电子面单 | 物流查询快递查询 | 订单导入导出 | 功能增强 |
购物车优化 | 结算页优化 |
会员评论晒单 | 注册与登录优化 | 用户体验及流程优化 | 会员升级/购买会员服务/开通会员 |
第三方平台支付 | 银行直连支付 | 国外支付 |
行业网站 | 多用户商城 |
020 | 生活服务/卡密/会员卡 |
权限管理及优化 | 日志管理 |
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'];
}