Explorar o código

Merge branch 'goods' of 121.43.114.153:/home/git/repositories/shopnc into goods

stanley-king %!s(int64=9) %!d(string=hai) anos
pai
achega
de7a48934d

+ 33 - 22
data/logic/payment.logic.php

@@ -9,10 +9,10 @@ defined('InShopNC') or exit('Access Invalid!');
 class paymentLogic
 {
     /**
-     * 尝试使用预存款
+     * 尝试使用预存款, 可以扣除运费
      * @param int $pay_sn
      * @param int $member_id
-     * @return array
+     * @return int
      */
     public function payPredeposit($pay_sn,$member_info = null)
     {
@@ -25,7 +25,7 @@ class paymentLogic
         }
         $order_pay_info = $model_order->getOrderPayInfo($condition);
         if (empty($order_pay_info)) {
-            return false;
+            return -1;
         }
 
         $condition = array();
@@ -35,7 +35,8 @@ class paymentLogic
         // 获取余额数据
         $obj_member = Model('member');
         $pd_amount = $obj_member->getPdAmount($member_info['member_id']);
-        if (empty($order_list)) return false;
+        if (empty($order_list)) return -1;
+        if (floatval($pd_amount) <= 0) return -1;
 
         $model_order = Model('order');
         $model_pd = Model('predeposit');
@@ -49,19 +50,18 @@ class paymentLogic
                 // 使用全部预存款(红包逻辑)
                 $data_order = array();
                 $change_type = '';
-                if (floatval($pd_amount) > floatval($order_info['order_amount'])) {
-                    // 余额大于订单金额的情况
-                    $order_info['pd_amount'] = floatval($order_info['order_amount']);
+                // 计算运费+订单总额
+                $total_amount = floatval($order_info['order_amount']) + floatval($order_info['shipping_fee']);
+                if (floatval($pd_amount) > floatval($total_amount))  {
+                    $order_info['pd_amount'] = floatval($total_amount); // 余额大于订单金额的情况
                     $pd_amount = floatval($pd_amount) - floatval($order_info['pd_amount']);
-                    //$data_order["order_state"] = ORDER_STATE_PAY;
-                    //$data_order["order_amount"] = 0;
                     $change_type = 'order_pay';
-                } else if (floatval($pd_amount) > 0) {    // 余额小于等于订单金额的情况, $pd_amount不能等于0
+                } else {    // 余额小于等于订单金额的情况, $pd_amount不能等于0
                     $order_info['pd_amount'] = floatval($pd_amount);
-                    $data_order["order_amount"] = floatval($order_info['order_amount']) - floatval($order_info['pd_amount']);
                     $pd_amount = 0;
                     $change_type = 'order_freeze';
                 }
+
                 $data_pd = array();
                 $data_pd['member_id'] = $member_id;
                 $data_pd['member_name'] = $member_info['member_name'];
@@ -82,24 +82,21 @@ class paymentLogic
                 }
 
                 DB::commit();
-
-                if (ORDER_STATE_PAY == $data_order["order_state"]) {
-                    // 推送到oms
-                }
+                return 0;
             }
         } catch (Exception $e) {
             DB::rollback();
         }
-
     }
 
     /**
-     * 取得实物订单所需支付金额等信息
+     * 取得实物订单所需支付金额等信息, 移动支付时, 在使用红包时需要计算运费
      * @param int $pay_sn
      * @param int $member_id
+     * @param boolean $mobile_flag
      * @return array
      */
-    public function getRealOrderInfo($pay_sn, $member_id = null)
+    public function getRealOrderInfo($pay_sn, $member_id = null, $mobile_flag = false)
     {
         //验证订单信息
         $model_order = Model('order');
@@ -124,7 +121,13 @@ class paymentLogic
         $pay_amount = 0;
         if (!empty($order_list)) {
             foreach ($order_list as $order_info) {
-                $pay_amount += ncPriceFormat(floatval($order_info['order_amount']) - floatval($order_info['pd_amount']));
+                if (false == $mobile_flag) {
+                    $pay_amount += ncPriceFormat(floatval($order_info['order_amount']) - floatval($order_info['pd_amount']));
+                } else {
+                    // 移动平台需要计算运费
+                    $total_amount = floatval($order_info['order_amount']) + floatval($order_info['shipping_fee']);
+                    $pay_amount += ncPriceFormat(floatval($total_amount) - floatval($order_info['pd_amount']));
+                }
             }
         }
 
@@ -135,12 +138,13 @@ class paymentLogic
     }
 
     /**
-     * 取得虚拟订单所需支付金额等信息
+     * 取得虚拟订单所需支付金额等信息, 移动支付时, 在使用红包时需要计算运费
      * @param int $order_sn
      * @param int $member_id
+     * @param boolean $mobile_flag
      * @return array
      */
-    public function getVrOrderInfo($order_sn, $member_id = null)
+    public function getVrOrderInfo($order_sn, $member_id = null, $mobile_flag = false)
     {
         //验证订单信息
         $model_order = Model('vr_order');
@@ -158,8 +162,15 @@ class paymentLogic
         $order_info['order_type'] = 'vr_order';
         $order_info['pay_sn'] = $order_sn;
 
+        $pay_amount = 0.0;
         //计算本次需要在线支付的订单总金额
-        $pay_amount = ncPriceFormat(floatval($order_info['order_amount']) - floatval($order_info['pd_amount']));
+        if (false == $mobile_flag) {
+            $pay_amount = ncPriceFormat(floatval($order_info['order_amount']) - floatval($order_info['pd_amount']));
+        } else {
+            // 移动平台需要计算运费
+            $total_amount = floatval($order_info['order_amount']) + floatval($order_info['shipping_fee']);
+            $pay_amount += ncPriceFormat(floatval($total_amount) - floatval($order_info['pd_amount']));
+        }
 
         $order_info['api_pay_amount'] = $pay_amount;
 

+ 1 - 1
data/model/member.model.php

@@ -768,7 +768,7 @@ class memberModel extends Model
         }
 
         // 预存款订单查询条件
-        $condition = 'lg_type in(\'order_pay\', \'order_freeze\', \'order_cancel\' ) and (lg_freeze_amount<>0.0 or lg_av_amount<0.0) and lg_member_id=\'' . $member_info['member_id'] . '\'';
+        $condition = 'lg_type in(\'order_pay\', \'order_freeze\', \'order_comb_pay\' ) and (lg_freeze_amount<>0.0 or lg_av_amount<0.0) and lg_member_id=\'' . $member_info['member_id'] . '\'';
         
         $model_pd = Model('predeposit');
         $tmp_log_list = array();

+ 3 - 3
mobile/control/app_pay.php

@@ -51,7 +51,7 @@ class app_payControl extends mbMemberControl
         }
 
         //重新计算所需支付金额
-        $result = $logic_payment->getRealOrderInfo($pay_sn, $this->member_info['member_id']);
+        $result = $logic_payment->getRealOrderInfo($pay_sn, $this->member_info['member_id'], true);
         if (intval($result['data']['api_pay_state']) != 0) {
             return joutput_error(errcode::ErrPayment, $result['msg']);
         }
@@ -215,14 +215,14 @@ class app_payControl extends mbMemberControl
         }
 
         if ($order_type == 'r') {
-            $result = $logic_payment->getRealOrderInfo($out_trade_no);
+            $result = $logic_payment->getRealOrderInfo($out_trade_no, null, true);
             if (intval($result['data']['api_pay_state'])) {
                 return array('state' => true);
             }
             $order_list = $result['data']['order_list'];
             $result = $logic_payment->updateRealOrder($out_trade_no, $payment, $order_list, $trade_no);
         } elseif ($order_type == 'v') {
-            $result = $logic_payment->getVrOrderInfo($out_trade_no);
+            $result = $logic_payment->getVrOrderInfo($out_trade_no, null, true);
             if ($result['data']['order_state'] != ORDER_STATE_NEW) {
                 return array('state' => true);
             }

+ 1 - 1
mobile/util/errcode.php

@@ -82,7 +82,7 @@ class errcode extends SplEnum
             case errcode::ErrMemberNotExist:
                 return '用户不存在.';
             case errcode::ErrInputParam:
-                return 'error input param';
+                return '输入参数错误';
             case errcode::ErrVerifyCode:
                 return 'error verify code';
             case errcode::ErrMemberExist: