update(['status'=>1,'pay_state'=>1,'pay_at'=>date('Y-m-d H:i:s')]); Db::commit(); }catch (\Exception $e){ $ret_val = false; $msg = $e->getMessage(); Db::rollback(); } return ['ret_val'=>$ret_val,'msg'=>$msg]; } // 商城商品订单支付逻辑 public static function washOrderCallBack($order_info,$pay_type) { $ret_val = true;$msg=''; Db::startTrans(); try{ // 更改订单状态 WashOrder::where('id',$order_info['id'])->update(['status'=>1,'pay_state'=>1,'pay_at'=>date('Y-m-d H:i:s')]); Db::commit(); }catch (\Exception $e){ $ret_val = false; $msg = $e->getMessage(); Db::rollback(); } return ['ret_val'=>$ret_val,'msg'=>$msg]; } // 订单金额退款 public static function refundMoney($refund_info =[],$order_info=[],$order_id = 0) { $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: //4移动支付(微信) $app = Factory::payment(config('app.app_wx')); $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 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 true; $where = []; $where[] = ['order_id','=',$order_info['id']]; $where[] = ['type','in',[7,8,9]]; $money_list = UserMoneyInfo::where($where)->select()->toArray(); foreach ($money_list as $mv) { UserWallet::userMoneyChange($mv['user_id'],$mv['money'],'佣金订单退款追回',10); } GoodsOrder::where('id',$order_info['id'])->update(['rebate_refund'=>1]); return true; } //开通会员订单支付回调 public static function levelOrderCallBack($order_info,$pay_type) { $ret_val = true;$msg=''; Db::startTrans(); try{ // 更改订单状态 LevelOrder::where('id',$order_info['id'])->update(['status'=>1,'pay_state'=>1,'pay_at'=>date('Y-m-d H:i:s')]); // 是否已是会员 $check_level = UserLevelRank::where(['user_id'=>$order_info['user_id'],'level_id'=>$order_info['level_id']])->find(); // 续费或是新开会员 $start_time = $check_level && $check_level->end_time >time() ? $check_level->start_time :time(); $end_time = $check_level && $check_level->end_time >time() ? strtotime('+'.$order_info['month'].' month',$check_level->end_time) : strtotime('+'.$order_info['month'].' month') ; Data::save('UserLevelRank', ['user_id'=>$order_info['user_id'],'level_id'=>$order_info['level_id'],'start_time'=>$start_time,'end_time'=>$end_time,'end_date'=>date('Y-m-d H:i:s',$end_time), 'user_id',['user_id'=>$order_info['user_id']]]); // Data::save('UserLevelRank',['user_id'=>$order_info['user_id'],'level_id'=>$order_info['level_id'],'start_time'=>$start_time,'end_time'=>$end_time,'end_date'=>date('Y-m-d H:i:s',$end_time),'user_id',['user_id'=>$order_info['user_id'],'level_id'=>$order_info['level_id']]]); $max_level = UserLevelRank::where([['user_id','=',$order_info['user_id']],['end_time','>',time()]])->order('level_id desc')->select()->toArray(); if(!empty($max_level)) User::where(['id'=>$order_info['user_id']])->update(['level_id'=>intval($max_level[0]['level_id']),'level_exp'=>$max_level[0]['end_date']]); Db::commit(); }catch (\Exception $e){ $ret_val = false; $msg = $e->getMessage(); Db::rollback(); } return ['ret_val'=>$ret_val,'msg'=>$msg]; } // 活动报名 public static function activityOrderCallBack($order_info) { $ret_val = true;$msg=''; Db::startTrans(); try{ // 更改订单状态 ActivityApply::where('id',$order_info['id'])->update(['status'=>1,'pay_state'=>1,'pay_at'=>date('Y-m-d H:i:s')]); UserMessage::sendUserMessage($order_info['user_id'],'activity',1,0,0,$order_info['id']); Db::commit(); }catch (\Exception $e){ $ret_val = false; $msg = $e->getMessage(); Db::rollback(); } return ['ret_val'=>$ret_val,'msg'=>$msg]; } }