123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- namespace app\common\service;
- use app\common\model\ActivityApply;
- use app\common\model\ActivityApplyItem;
- use app\common\model\BillApply;
- use app\common\model\GoodsOrder;
- use app\common\model\GoodsOrderRefund;
- use app\common\model\LevelOrder;
- use app\common\model\User;
- use app\common\model\UserLevelRank;
- use app\common\model\UserMessage;
- use app\common\model\UserMoneyInfo;
- use app\common\model\UserWallet;
- use EasyWeChat\Factory;
- use library\tools\Data;
- use think\Db;
- use think\Exception;
- /**
- * 订单回调逻辑
- * Class OrderCallback
- */
- class OrderCallback
- {
- // 商城商品订单支付逻辑
- public static function goodsOrderCallBack($order_info,$pay_type)
- {
- $ret_val = true;$msg='';
- Db::startTrans();
- try{
- // 更改订单状态
- GoodsOrder::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']])->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') ;
- $res= 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']]);
- //var_dump(['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)],$res);
- // 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')]);
- $item_list = ActivityApplyItem::where('apply_id',$order_info['id'])->select()->toArray();
- $qrCode = new \Endroid\QrCode\QrCode();
- foreach ($item_list as $iv) {
- if($iv['sh_status'] == 1) {
- // 生成核销码
- $qr_content = $order_info['act_id'].'-'.$order_info['id'].'-'.$iv['id'];
- $qrCode->setText($qr_content);
- $qrCode->setSize(200);
- $dir = dirname(realpath(dirname($_SERVER['SCRIPT_FILENAME']))) . '/public/code';
- $filename = $dir.'/'.$iv['id'].'.png';
- $qrCode->writeFile($filename);
- $url='http://'.$_SERVER['SERVER_NAME']."/code/".$iv['id'].'.png';
- ActivityApplyItem::where('id',$iv['id'])->update(['status'=>1,'qr_code'=>$url,'qr_content'=>$qr_content]);
- $act_title = \app\common\model\Activity::where('id',$iv['act_id'])->value('title');
- $content = '您已成功报名"'.$act_title.'"';
- UserMessage::sendUserMessage($iv['user_id'],'activity',1,0,0,$iv['id'],$content,$iv['id']);
- UserSynth::ticketSend($iv['id']);
- }else{
- ActivityApplyItem::where('id',$iv['id'])->update(['status'=>1]);
- }
- }
- // 活动订单发票记录修改
- BillApply::where(['order_type'=>3,'order_id'=>$order_info['id']])->update(['order_pay'=>1]);
- // UserMessage::sendUserMessage($order_info['user_id'],'activity',1,0,0,$order_info['id'],'',$order_info['id']);
- Db::commit();
- }catch (\Exception $e){
- $ret_val = false;
- $msg = $e->getMessage();
- Db::rollback();
- }
- return ['ret_val'=>$ret_val,'msg'=>$msg];
- }
- }
|