orderData)) { $accessToken = config('services.tiktok.access_token'); // Or retrieved from DB session $shopCipher = config('services.tiktok.shop_cipher'); $response = $tikTokService->getOrderDetail($accessToken, $shopCipher, $this->tiktokOrderId); if (!isset($response['data']['orders'][0])) { return; // Order not found or API error } $this->orderData = $response['data']['orders'][0]; } $o = $this->orderData; $payment = $o['payment'] ?? []; $address = $o['recipient_address'] ?? []; // 2. Upsert Parent Order $order = TikTokOrder::updateOrCreate( ['tiktok_order_id' => $this->tiktokOrderId], [ 'shop_id' => $o['shop_id'] ?? null, 'status' => $o['status'] ?? 'UNKNOWN', 'fulfillment_type' => $o['fulfillment_type'] ?? null, // Financials 'currency' => $payment['currency'] ?? 'IDR', 'subtotal' => $payment['original_total_product_price'] ?? 0, 'seller_discount' => $payment['seller_discount'] ?? 0, 'platform_discount' => $payment['platform_discount'] ?? 0, 'shipping_fee' => $payment['shipping_fee'] ?? 0, 'total_amount' => $payment['total_amount'] ?? 0, 'payment_method_name' => $payment['payment_method_name'] ?? null, // Logistics 'tracking_number' => $o['tracking_number'] ?? null, 'shipping_provider_name' => $o['shipping_provider_name'] ?? null, // Recipient 'recipient_name' => $address['name'] ?? null, 'recipient_phone' => $address['phone_number'] ?? null, 'recipient_address' => $address['full_address'] ?? null, 'district' => $address['district'] ?? null, 'city' => $address['city'] ?? null, 'state' => $address['state'] ?? null, 'zipcode' => $address['zipcode'] ?? null, // Timestamps 'tiktok_create_time' => isset($o['create_time']) ? Carbon::createFromTimestamp($o['create_time']) : null, 'tiktok_update_time' => isset($o['update_time']) ? Carbon::createFromTimestamp($o['update_time']) : null, 'tiktok_paid_time' => isset($o['paid_time']) ? Carbon::createFromTimestamp($o['paid_time']) : null, 'raw_response' => json_encode($o), ] ); // 3. Sync Line Items (`item_list`) if (!empty($o['item_list'])) { $order->items()->delete(); foreach ($o['item_list'] as $item) { TikTokOrderItem::create([ 'tiktok_order_id' => $order->id, 'item_id' => $item['id'] ?? null, 'tiktok_product_id' => $item['product_id'] ?? '', 'tiktok_sku_id' => $item['sku_id'] ?? '', 'seller_sku' => $item['seller_sku'] ?? null, 'product_name' => $item['product_name'] ?? 'Unknown Item', 'sku_name' => $item['sku_name'] ?? null, 'quantity' => $item['quantity'] ?? 1, 'sku_original_price' => $item['sku_original_price'] ?? 0, 'sku_sale_price' => $item['sku_sale_price'] ?? 0, 'seller_discount' => $item['seller_discount'] ?? 0, ]); } } } }