|
@@ -13,7 +13,10 @@ use app\common\model\User;
|
|
|
use app\common\model\UserMessage;
|
|
|
use app\common\model\UserMoneyInfo;
|
|
|
use app\common\model\UserWallet;
|
|
|
+use EasyWeChat\Factory;
|
|
|
use think\Db;
|
|
|
+use think\Exception;
|
|
|
+
|
|
|
/**
|
|
|
* 订单回调逻辑
|
|
|
* Class OrderCallback
|
|
@@ -179,33 +182,59 @@ class OrderCallback
|
|
|
}
|
|
|
|
|
|
// 订单金额退款
|
|
|
- public static function refundMoney($order_id)
|
|
|
+ public static function refundMoney($refund_info =[],$order_info=[],$order_id = 0)
|
|
|
{
|
|
|
- $order_info = GoodsOrder::where('id',$order_id)->find()->toArray();
|
|
|
- $refund_info = GoodsOrderRefund::where(['order_id'=>$order_id])->find()->toArray();
|
|
|
- if($order_info['refund_state'] != 2) return ['code'=>201,'订单退款审核状态有误'];
|
|
|
- if($refund_info['refund_money'] <= 0 || $refund_info['refund_money'] > $order_info['price_total'])return ['code'=>202,'订单退款金额有误'];
|
|
|
- switch ($order_info['pay_type']){
|
|
|
- case 1:
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- break;
|
|
|
+ $ret = ['code'=>200,'msg'=>'退款成功'];
|
|
|
+ if(empty($order_info)) $order_info = GoodsOrder::where('id',$order_id)->find()->toArray();
|
|
|
+ if(empty($refund_info)) $refund_info = GoodsOrderRefund::where(['order_id'=>$order_id])->find()->toArray();
|
|
|
+ if(!in_array($order_info['refund_state'],[2,3])) return ['code'=>201,'订单退款审核状态有误'];
|
|
|
+ if($refund_info['refund_money'] <= 0 || $refund_info['refund_money'] > $order_info['price_total'])return ['code'=>201,'订单退款金额有误'];
|
|
|
+ $refund_no = $refund_info['refund_no'] ? $refund_info['refund_no'] : get_order_sn();
|
|
|
+ Db::startTrans();
|
|
|
+ try {
|
|
|
+ switch ($order_info['pay_type']){
|
|
|
+ case 1:
|
|
|
+ $app = Factory::payment(config('app.wx_pay'));
|
|
|
+ $result = $app->refund->byOutTradeNumber($order_info['pay_no'], $refund_no, $order_info['price_total']*100, $refund_info['refund_money']*100, ['refund_desc' => '订单退款']);
|
|
|
+ if($result['return_code'] != 'SUCCESS') throw new Exception('退款异常');
|
|
|
+ if($result['result_code'] != 'SUCCESS') throw new Exception($result['err_code_des']);
|
|
|
+ // 修改退款记录状态
|
|
|
+ GoodsOrderRefund::where(['id'=>$refund_info['id']])->update(['refund_no'=>$refund_no,'status'=>3]);
|
|
|
+ // 修改订单状态
|
|
|
+ GoodsOrder::where('id',$refund_info['order_id'])->update(['status'=>8]);
|
|
|
+ // 积分退回
|
|
|
+ if($order_info['integral']) UserWallet::userIntegralChange($order_info['user_id'],$order_info['integral'],'订单退款退回',9,1,$order_info['id']);
|
|
|
+ // 余额退回
|
|
|
+ if($order_info['balance']) UserWallet::userMoneyChange($order_info['user_id'],$order_info['balance'],'订单退款退回',2, 1,$order_info['id']);
|
|
|
+ // 券暂不出来
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 订单相关返利追回
|
|
|
+ self::goodsOrderRefundBack($order_info , $order_id);
|
|
|
+ Db::commit();
|
|
|
+ }catch (\Exception $e){
|
|
|
+ $ret['code'] = 201;
|
|
|
+ $ret['msg'] = $e->getMessage();
|
|
|
+ Db::rollback();
|
|
|
}
|
|
|
+ return $ret;
|
|
|
|
|
|
}
|
|
|
// 商城订单退款(相关返利追回)
|
|
|
public static function goodsOrderRefundBack($order_info , $order_id)
|
|
|
{
|
|
|
if(empty($order_info)) $order_info = GoodsOrder::where('id',$order_id)->find()->toArray();
|
|
|
- if($order_info['rebate_refund'] == 1) return false;
|
|
|
+ if($order_info['rebate_refund'] == 1) return true;
|
|
|
$where = [];
|
|
|
$where[] = ['order_id','=',$order_info['id']];
|
|
|
$where[] = ['type','in',[7,8,9]];
|