| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | <?php/** * @copyright   Copyright (c) 2017 https://www.sapixx.com All rights reserved. * @license     Licensed (http://www.apache.org/licenses/LICENSE-2.0). * @author      pillar<ltmn@qq.com> * 定时任务与命令目录 */namespace app\ais\controller;use think\Controller;use app\ais\model\MchId;use app\ais\model\MchIdQueen;use app\ais\model\MchIdUser;use app\ais\model\Coupon;use app\ais\model\CouponUser;use app\ais\widget\Inform;use app\common\facade\WechatPay;use think\helper\Time;class Command extends Controller {    /**     * 微信优惠券定时检测     */      public function coupon(){        //定时检测用户优惠券状态        $couponuser = CouponUser::where('user_size','<=',0)->whereOr('endtime','<=',Time::today()[0])->update(['is_end' => 1]);        //定时检测商家优惠券状态        $coupon     = Coupon::whereOr('endtime','<=',Time::today()[0])->update(['is_end' => 1]);        if($coupon || $couponuser){            return 'SUCCESS';        }else{            return 'FINISH';        }    }    /**     * 微信分账定时任务     */       public function queen(){        $queen = MchidQueen::where(['is_finish' => 0])->order('id asc')->find();        if(empty($queen)){            return 'ALL';        }        $transaction_id    = $queen->transaction_id;        $member_miniapp_id = $queen->member_miniapp_id;        //读取配置并判断商户模式        $setting = model('AisConfig')->getConfig($member_miniapp_id);        $sub_mchid = NULL;        if($setting->is_psp){            if($queen->store->mch_id){                $mchid = model('MchId')->getMch($queen->store['mch_id']);            }else{                $mchid = model('MchId')->getMch(0,$member_miniapp_id);            }            if(empty($mchid)){                return 'FAIL';            }            $sub_mchid = $mchid->mchid;        }        $doPay = WechatPay::doPay($member_miniapp_id,false,$sub_mchid);        //如果金额小于直接结束当前分账        if($queen->amount <= 0){            $params['transaction_id'] = $transaction_id;            $params['out_order_no']   = $queen->out_order_no;            $params['description']    = '分账已完成';            $markOrder = $doPay->profit_sharing->markOrderAsFinished($params);            if($markOrder['return_code'] == 'SUCCESS' && $markOrder['result_code'] == 'SUCCESS'){                $queen->is_finish = 2;                $queen->order_id  = $queen->out_order_no;                $queen->sms       = '成功';                $queen->save();            }            return 'FAIL';        }        //读取分账接收方        $where['member_miniapp_id'] = $member_miniapp_id;        $where['store_id']          = $queen->store->id;        if($queen->types == 1){            $where['mch_id'] = $queen->mch_id;        }else{            $where['uid'] = $queen->uid;        }        $queen_user = MchIdUser::where($where)->find();        $data      = [];        $receivers = [];        if(empty($queen_user)){            $data['member_miniapp_id']   = $queen->member_miniapp_id;            $data['store_id']            = $queen->store->id;            if($queen->types == 1){                $mch  = MchId::getMch($queen->mch_id);                $data['mch_id']                    = $queen->mch_id;                $data['openid']                    = $mch->mchid;                $data['receiver']['type']          = 'MERCHANT_ID';                $data['receiver']['account']       = (string)$mch->mchid;                $data['receiver']['name']          = $mch->store_name;                $data['receiver']['relation_type'] = 'STORE_OWNER';            }else{                $data['uid']                       = $queen->uid;                $data['openid']                    = $queen->user['miniapp_uid'];                $data['receiver']['type']          = $setting->is_psp ? 'PERSONAL_SUB_OPENID': 'PERSONAL_OPENID';                $data['receiver']['account']       = (string)$queen->user['miniapp_uid'];                $data['receiver']['relation_type'] = 'USER';            }            if($queen->types == 1 && $setting->is_psp){                if($mchid->mchid == $mch->mchid){                    $receivers = $data['receiver'];                    $data['receiver'] = json_encode($receivers);                    MchIdUser::insert($data);                    $data['receiver'] = [];                }            }            if(!empty($data['receiver'])){                $rel = $doPay->profit_sharing->addReceiver($data['receiver']);                if($rel['return_code'] == 'SUCCESS' && $rel['result_code'] == 'SUCCESS'){                    $data['receiver'] = $rel['receiver'];                    MchIdUser::insert($data);                    $receivers = json_decode($rel['receiver'],true);                }else{                    $queen->is_finish = 1;                    $queen->sms       = empty($rel['return_msg']) ? $rel['err_code_des'] : $rel['return_msg'];                    $queen->save();                    return 'FAIL';                }            }        }else{            $receivers = json_decode($queen_user->receiver,true);        }        if(empty($receivers)){            return 'FAIL';        }        //读取上次分账单号        $order_no = MchidQueen::where(['member_miniapp_id' => $member_miniapp_id,'transaction_id' => $transaction_id,'is_finish' => 2])->order('id desc')->find();        $out_order_no = empty($order_no) ? $queen->out_order_no : $order_no->order_id;  //分账订单号        //开始分账        $receivers['amount']      = $queen->amount;        $receivers['description'] = $queen->msg;        $order[] = $receivers;        $payrel = $doPay->profit_sharing->multiShare($transaction_id,$out_order_no,$order);        if($payrel['return_code'] == 'SUCCESS'){            if($payrel['result_code'] == 'SUCCESS'){                $out_order_no =  $payrel['order_id'];                $queen->is_finish = 2;                $queen->order_id  = $out_order_no;                $queen->sms       = '成功';            }else{                if($payrel['err_code'] == 'FREQUENCY_LIMITED' || $payrel['err_code'] == 'ORDER_NOT_READY'){                    $queen->is_finish = 0;                }else{                    $queen->is_finish = 1;                }                $queen->sms = $payrel['err_code_des'];            }        }else{            $queen->is_finish = 1;            $queen->sms     = $payrel['return_msg'];        }        $sms = $queen->sms;        $queen->update_time  =  time();        $queen->save();        //查询并结束分账        $is_end = MchidQueen::where(['member_miniapp_id' => $member_miniapp_id,'transaction_id' => $transaction_id,'is_finish' => 0])->count();        if($is_end <= 0){            $params['transaction_id'] = $transaction_id;            $params['out_order_no']   = $out_order_no;            $params['description']    = '分账已完成';            $doPay->profit_sharing->markOrderAsFinished($params);            return 'END';        }        return $sms;    }    /**     * 微信定时模板消息     */       public function inform(){        $rel = Inform::smsQueue();        return $rel ? 'SUCCESS' : 'FAIL';    }}
 |