order = $order; } /** * 支付成功入口 */ public function success() { try { DB::beginTransaction(); $this->setOrderSuccess(); $this->handlePayProcess(); DB::commit(); $this->addQueue(); return true; } catch (Exception $e) { DB::rollback(); Log::error('pay.success: ' . $e->getMessage() . ' ' . $e->getTraceAsString()); } } /** * 设置order成功 */ protected function setOrderSuccess() { $this->order->pay_type = $this->getChargeTimes(); $this->order->status = 'PAID'; $this->order->pay_end_at = date('Y-m-d H:i:s'); $this->order->save(); } /** * 获取用户第几次充值 * @param $uid * @return int */ private function getChargeTimes() { $count = Order::where('uid', $this->order->uid)->where('status', 'PAID')->count('id'); return $count + 1; } private function getReportType(int $channel_id) { return Redis::hGet('channel:setting:' . $channel_id, 'tiktok_report_type') ?? QappTikTokUserCharge::CURRENT_DAY_REGISTER; } protected function addQueue() { UserTaskService::addUserTaskQueue($this->order->uid, BaseTask::charge, UserTaskService::judge_trigger); $bid = ReadRecordService::getSimpleFirstReadRecord($this->order->uid); $book_id = book_hash_encode($bid); $book = BookConfig::where('bid', $bid)->select('book_name')->first(); $book_name = $book ? $book->book_name : ''; // 取用户注册的派单id,派单信息 $user = User::getUser($this->order->uid); $sendOrderId = getProp($user, 'send_order_id'); $quickSendOrder = QappSendOrder::getSendOrderById($sendOrderId); $reportType = getProp($quickSendOrder, 'report_type'); $reportRate = (int)getProp($quickSendOrder, 'report_rate', 100); // 队列处理回传业务 $tikTokChargeRequest = new QappTikTokUserChargeRequest(); $tikTokChargeRequest->uid = $this->order->uid; $tikTokChargeRequest->amount = $this->order->price; $tikTokChargeRequest->order_no = $this->order->trade_no; $tikTokChargeRequest->pay_time = $this->order->created_at; $tikTokChargeRequest->book_id = $book_id; $tikTokChargeRequest->book_name = $book_name; $tikTokChargeRequest->send_order_id = $sendOrderId; // 需要跟派单设置的回传类型一致才上报 myLog('qapp_user_charge')->info('addQueue', compact('tikTokChargeRequest')); $job = new NewQappTikTokUserCharge($tikTokChargeRequest); $callback_type = getProp($quickSendOrder, 'callback_type'); if ($callback_type == 'cycle_report') { $cycjob = new CycleCallBack($this->order->trade_no); dispatch($cycjob->onConnection('redis_queue')->onQueue('{qapp_tiktok_cycle_user_charge_queue}')); }else{ dispatch($job->onConnection('redis_queue')->onQueue('{qapp_tiktok_user_charge_queue}')); } // 同步数据 $this->order->distribution_channel_id = getProp($quickSendOrder, 'distribution_channel_id'); try { ReportService::reportRecharge($this->order); }catch (Exception $exception){ Log::error('pay.success-addQueue-err: 同步数据异常' . $exception->getMessage() . ' ' . $exception->getTraceAsString()); } } }