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); if ($quickSendOrder) { // 队列处理回传业务 $tikTokChargeRequest = new QappTikTokUserChargeRequest(); $tikTokChargeRequest->uid = $this->order->uid; $tikTokChargeRequest->amount = $this->order->price; $tikTokChargeRequest->pay_time = $this->order->created_at; $tikTokChargeRequest->type = $this->getReportType($this->order->distribution_channel_id); $tikTokChargeRequest->book_id = $book_id; $tikTokChargeRequest->book_name = $book_name; $tikTokChargeRequest->send_order_id = $sendOrderId; $tikTokChargeRequest->report_type = getProp($quickSendOrder, 'report_type'); $tikTokChargeRequest->report_rate = (int)getProp($quickSendOrder, 'report_rate'); $tikTokChargeRequest->molecule = (int)getProp($quickSendOrder, 'report_rate'); // 回传队列 $job = new QappTikTokUserCharge($tikTokChargeRequest); dispatch($job->onConnection('rabbitmq')->onQueue('qapp_tiktok_user_charge_queue')); } } }