type = $data['type']; $this->trade_no = $data['trade_no']; $this->amount = $data['amount']; $this->send_name = $data['send_name']; $this->packet_type = $data['packet_type']; $this->openid = $data['openid']; $this->from_openid = $data['from_openid']; $this->id = $data['id']; $this->ip = $data['ip']; $this->source = $data['source']; } /** * Execute the job. * * @return void */ public function handle() { // 更新IP黑名单以及请求次数 $blackIp = BlackIp::where('ip', $this->ip)->first(); if(empty($blackIp)){ $receiveCount = RedPacketOrder::where('ip', $this->ip)->count(); if($receiveCount >= 5){ $blackIps = new BlackIp(); $blackIps->type = 1; $blackIps->ip = $this->ip; $blackIps->count = $receiveCount; $blackIps->save(); } }else{ BlackIp::where('ip', $this->ip)->increment('count'); } $total_amount = $this->amount * 100; $order = RedPacketOrder::find($this->id); //如果已经is_hooked就不再处理 if ($order && $order->is_hooked == 0 && $this->packet_type == 'normal') { $orderCount = RedPacketOrder::where('official_openid', $this->openid)->where('type', 'MP')->where('trigged', '0')->count(); $oldOrderCount = RedPacketOrder::where('official_openid', $this->openid)->where('type', 'MP')->where('trigged', '1')->count(); $order->trigged = '1'; if ($orderCount > 0 && $oldOrderCount == 0) { //订单处理上锁 $order_lock = Redis::get('rp_order_lock_'.$order->id); if($order_lock){ //已锁订单 return false; }else{ //锁定去处理 Redis::setex('rp_order_lock_'.$order->id,10,1); } $result = \WechatService::officialUserTransfer($this->trade_no, $this->openid, $total_amount, $this->send_name); if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){ $order->is_hooked = 1; $order->err_code = $result['result_code']; $order->return_msg = $order->send_name; } if($order->from_official_openid && $result && strlen($order->from_official_openid) == 28){ //推荐人发送红包 $app = \WechatService::officialApp(); $wechatUser = $app->user->get($this->openid); $result = !empty($wechatUser)&&isset($wechatUser['subscribe']); $is_subscribe = $result?$wechatUser['subscribe']:0; $nickname = isset($wechatUser['nickname']) ? $wechatUser['nickname'] : "已取消关注"; $name = mb_substr($nickname, 0, 10); $sendName = $name ? "福恋助脱单分享(".$name.")" : "福恋助脱单分享"; $trade_no = \CommonUtilsService::getTradeNO(); $array = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4]; $key = array_rand($array); $amount = $array[$key] / 10 + mt_rand(0, 9)/100; $shareOrder = new RedPacketOrder(); $shareOrder->user_id = Wechat::where('official_openid', $this->from_openid)->value('user_id') ?: 0; $shareOrder->type = 'SHAREMP'; $shareOrder->trigged = 1; $shareOrder->official_openid = $this->from_openid; $shareOrder->from_official_openid = $this->openid; $shareOrder->trade_no = $trade_no; $shareOrder->amount = $amount; $shareOrder->send_name = $sendName; $shareOrder->ip = $this->ip; $shareOrder->source = $this->source; $amount = $amount * 100; if($is_subscribe){ //如果关注了才发分享红包。 $shareResult = \WechatService::officialUserTransfer($trade_no, $this->from_openid, $amount, $sendName); if($shareResult['return_code'] == 'SUCCESS' && $shareResult['result_code'] == 'SUCCESS'){ $shareOrder->is_hooked = 1; $shareOrder->err_code = $shareResult['result_code']; $shareOrder->return_msg = $shareOrder->send_name; } }else{ $shareOrder->is_hooked = 2; $shareOrder->err_code = 'NOSUB'; } $shareOrder->save(); //领取红包超过40个,发送通知给管理员 $redCount = RedPacketOrder::where('official_openid', $order->from_official_openid)->where('type', 'SHAREMP')->count(); if($redCount > 39 && $redCount < 42){ $content = 'openid为'.$order->from_official_openid.'的用户获取分享红包超过40个'; \CronService::adminNotice($content); } } }else{ $order->err_code = 'REPEATED'; $order->return_msg = '已经领取过红包'; } $order->save(); } } }