文件路徑:
shop/controllers/Buyer/Service/ReturnCtl.php
方法:
addReturn()
參數:
order_id:“退款/退貨”的訂單號
goods_id:“退款/退貨”的訂單商品id
return_message:“退款/退貨”說明
return_reason_id:“退款/退貨”原因id
nums:“退款/退貨”商品數量
# 1.根據goods_id查找訂單信息,將查找出的訂單id與傳遞參數訂單id進行比較。兩者不一致,報錯。
if($goods['order_id'] !== $order_id)
{
$flag2 = false;
}
# 2.判斷訂單狀態,只有已付款訂單才可進去“退款/退貨”
if ($order['order_status'] < Order_StateModel::ORDER_PAYED)
{
$flag2 = false;
}
# 3.確定return_type的值,判斷此次的“退款/退貨”究竟是退款,還是退貨。
if ($order['order_is_virtual'])
{
$field['return_type'] = Order_ReturnModel::RETURN_TYPE_VIRTUAL;
}
else
{
switch ($order['order_status'])
{
case Order_StateModel::ORDER_PAYED:$field['return_type'] = Order_ReturnModel::RETURN_TYPE_ORDER ; //退款
break;
case Order_StateModel::ORDER_FINISH:$field['return_type'] = Order_ReturnModel::RETURN_TYPE_GOODS ; //退貨
break;
}
}
# 4.如果是貨到付款,確認收貨(付款)后才能退款
if($order['payment_id'] == PaymentChannlModel::PAY_CONFIRM){
if($order['order_status'] < Order_StateModel::ORDER_RECEIVED)
{
$flag2 = false;
}
}
# 5.根據訂單狀態,確定return_goods_return值。
退款(貨到付款只支持退貨,不支持退款)
if($goods['order_goods_status'] == Order_StateModel::ORDER_PAYED && $order['payment_id'] !== PaymentChannlModel::PAY_CONFIRM)
{
//白條支付不支持退款和退貨
if(strstr($order['payment_name'],'白條支付')){
$flag2 = false;
}
$field['return_goods_return'] = 0; //是否需要退貨 0-不需要 1-需要
$return = $this->orderReturnModel->getByWhere(array(
'order_goods_id' => $goods_id,
'return_type' => Order_ReturnModel::RETURN_TYPE_ORDER,
'return_state:!=' => Order_ReturnModel::RETURN_SELLER_UNPASS
));
}
退貨
if ($goods['order_goods_status'] == Order_StateModel::ORDER_FINISH)
{
if(strstr($order['payment_name'],'白條支付')){
$flag2 = false;
}
$field['return_goods_return'] = 1; //需要退貨
//查詢是否存在該訂單商品的退貨申請信息,且該申請未被賣家拒絕,以此判斷是否重新提交退貨申請
//只有以前沒有提交過該商品的退貨申請,且未被賣家拒絕的情況下,才可以提交退貨申請
$return = $this->orderReturnModel->getByWhere(array(
'order_goods_id' => $goods_id,
'return_type' => Order_ReturnModel::RETURN_TYPE_GOODS,
'return_state:!=' => Order_ReturnModel::RETURN_SELLER_UNPASS
));
}
# 6.計算生成“退款/退貨”訂單所需要的各種金額
//判斷這件“退款/退貨”商品是否還有可退數量(退款,退貨都會退還商品數量)
$this_goods_return = $this->orderReturnModel->getByWhere(array(
'order_goods_id' => $goods_id,
'return_state:!=' => Order_ReturnModel::RETURN_SELLER_UNPASS
));
$this_goods_return_num :“退款/退貨”商品總的已退還件數
$this_goods_return_cash :“退款/退貨”商品總的已退金額(包含正在審核中的金額)
//查找該筆訂單已經進行過或正進行中的的退款,退貨
$order_return = $this->orderReturnModel->getByWhere(array(
'order_number' => $order['order_id'],
'return_state:!=' => Order_ReturnModel::RETURN_SELLER_UNPASS
));
//訂單已經退款退貨的金額(包括與同意的退款和正在審核中的退款)
$order_return_cash = array_sum(array_column($order_return, 'return_cash'));
//訂單已經退還的商品數量
$order_return_num = array_sum(array_column($order_return, 'order_goods_num'));
//訂單還可退還的金額 = 訂單實付金額 - 訂單已退金額
//如果沒有發貨,可以退運費
if (Order_StateModel::ORDER_PAYED == $order['order_status'])
{
$order_can_return_cash = $order['order_payment_amount'] - $order_return_cash;
}
else
{
$order_can_return_cash = $order['order_payment_amount'] - $order_return_cash - $order['order_shipping_fee'];
}
/*
* $data['order']['order_refund_amount'] 與 $order_return_cash 的區別
* $data['order']['order_refund_amount']:表示商家已經同意的退款金額
* $order_return_cash:表示買家已經申請的退款,除被商家拒絕的退款外,正在審核的退款也包含在內
*/
//訂單已退還的金額
$return_limit = $order['order_refund_amount'];
//訂單可退金額
$cash_limit = $order_can_return_cash;
//訂單可退商品數量
$goods_can_return_nums = $order_all_goods_num - $order_return_num;
//該件商品可退的總金額
$return_goods_cash = $goods['order_goods_amount'] - $this_goods_return_cash;
//該件商品還可退還商品數量
$return_goods_nums = $goods['order_goods_num'] - $this_goods_return_num;
//實際該件商品可退還的金額(有時可能包含運費)
//該件商品全部“退款/退貨” //return_goods_nums
if($goods_can_return_nums == $nums && Order_StateModel::ORDER_PAYED == $order['order_status'])
{
//加上運費(未發貨)
$return_cash = $return_goods_cash + $order['order_shipping_fee'];
}
else
{
$return_cash = floor($nums * $goods['order_goods_payment_amount'] * 100) / 100;
}
//如果訂單為已付款狀態,并且所有商品都退款,則將運費退還
if(Order_StateModel::ORDER_PAYED == $order['order_status'] && $nums == $goods_can_return_nums)
{
$return_cash = $cash_limit;
}
/*退款退貨走同樣的流程。區別是:退款時可能會退還運費,退貨不可能退還運費。*/
# 7.訂單商品表中插入訂單商品的“退款/退貨”狀態
if($field['return_goods_return'] == 0)
{
//退款
$goods_field['goods_return_status'] = Order_GoodsModel::REFUND_IN;
$edit_flag = $this->orderGoodsModel->editGoods($goods_id, $goods_field);
check_rs($edit_flag, $rs_row);
}
else
{
//退貨
$goods_field['goods_refund_status'] = Order_GoodsModel::REFUND_IN;
$edit_flag = $this->orderGoodsModel->editGoods($goods_id, $goods_field);
check_rs($edit_flag, $rs_row);
}
- IM api調試接口
- 群主踢人
- 群成員退群
- 用戶創建群
- 群主修改群信息
- 群主轉換
- 群成員拉好友入群
- 翻譯
- 客戶端獲取手機驗證碼
- SHOP
- 團隊限購
- 常用
- 銀聯支付
- 多語言
- API配置都對,但接口還是報錯,解決方法
- 商品評分
- 圖片延時加載
- 買家申請“退款/退貨”
- 商家處理“退款/退貨”申請
- 平臺“退款/退貨”審核
- 添加發票
- 提交訂單
- 確認訂單
- 運費和售賣區域查詢
- 購物車商品刪除
- 領取代金券
- APP打包H5通用功能
- 首頁掃一掃
- 分享事件監聽
- 支付事件監聽
- SHOP_ADMIN
- 導出xls
- 彈出窗口
- 計劃任務
- SOHP_WAP
- 首頁聊天消息
- Ucenter
- 彈出窗口
- 微博登錄
- 獲取會員地址
- 商城配置數據庫權限
- 商城后臺供應商SQL
- 去分銷
- paycenter_ucenter_shop通信說明
- AES
- 紅包
- goods_common
- 紅包退回
- 微信小程序
- 手機驗證碼API
- APP充值
- 攝像頭cronjob
- WEBPOS自動加載權限
- 商城子帳號
- 云版升級注意事項
- 集群服務