EN
cx.xmrzyx.com

(7分钟科普下) 成品网站1688入口的代码体现避坑指南:3天极速接入省2万(附核心代码思路)

来源:
字号:默认 超大 | 打印 |

成品网站1688入口的代码体现避坑指南:3天极速接入省2万(附核心代码思路)

成品网站1688入口的代码体现

​移动端标题:​

1688对接总报错/API调用详解/怎么办?/全流程避坑方案省2万


嘿,各位老板、技术大拿和电商路上的探索者们!👋 今天咱们来聊聊一个让不少想自建B2B平台或者整合1688货源的朋友们又爱又恨的话题——​​成品网站1688入口的代码体现​​。爱的是,打通1688,海量货源触手可及;恨的是,这代码实现的路啊,坑是真不少!😅 光我见过的项目,就有因为一个小配置错误折腾一周的,也有因为没理解透API规则导致数据死活同步不了的... 想想都头大!

所以,咱今天不整那些虚头巴脑的理论,就实打实地来场​​避坑大会​​!🧐 把我这些年趟过的雷、踩过的坑,还有帮客户成功对接的经验,掰开了揉碎了讲给你听。目标就一个:​​让你在实现“成品网站1688入口的代码体现”时,少走弯路,省时省钱!💰​​ 准备好了吗?咱们发车!


​第一坑:授权机制没搞懂,登录对接第一步就卡壳!​

🛑 ​​常见惨状:​​ 兴致勃勃地开始调用1688 OpenAPI,结果在获取 access_token这一步就卡住了。返回的错误码看得人云里雾里,什么 invalid_clientinvalid_grant,到底是AppKey错了?AppSecret错了?回调地址不对?还是授权码过期了?🤯

💡 ​​避坑秘籍:​

  1. 1.

    ​仔细阅读官方文档!​​ 这绝对是老生常谈,但也是最重要的!1688开放平台的文档(特别是OAuth2.0部分)一定要逐字逐句看,理解 authorization_code模式的流程。记住几个关键点:

    • code只能使用一次!​​ 拿到 code后要立刻去换 access_token,换完就失效。

    • state参数很重要!​​ 用于防止CSRF攻击,也方便你标识请求来源,服务器端一定要校验。

    • ​回调地址(redirect_uri)必须完全匹配!​​ 在1688开放平台后台配置的回调地址,必须和你请求授权时传的 redirect_uri​一字不差​​,包括末尾的斜杠 /。​​这点超级容易忽略!​

  2. 2.

    ​权限申请要到位:​​ 你需要哪些API权限(比如获取商品、下单、物流等),在创建应用时就申请好。​​权限不足也会导致调用失败。​

  3. 3.

    ​环境隔离:​​ 开发、测试、生产环境最好使用不同的AppKey,避免互相干扰。沙箱环境(如果提供)是个好东西,先用它练手!

​核心思路伪代码示意(获取 access_token):​

python下载复制运行
# 1. 引导用户跳转到1688授权页面 (用户点击你网站的"1688登录/授权"按钮)
auth_url = f"https://auth.1688.com/oauth/authorize?client_id={YOUR_APP_KEY}&response_type=code&redirect_uri={YOUR_ENCODED_REDIRECT_URI}&state={YOUR_STATE}"
# 重定向用户到 auth_url

# 2. 用户授权后,1688会跳转回你的 redirect_uri,并带上 code 和 state
# 你的服务器在回调接口处理:
received_code = request.GET.get('code')
received_state = request.GET.get('state')

# 3. 验证 state 是否匹配(防止CSRF)
if received_state != YOUR_SAVED_STATE:
    return error("State mismatch!")

# 4. 用 code 换取 access_token
token_url = "https://gw.open.1688.com/openapi/http/1/system.oauth2/getToken/YOUR_APP_KEY"
params = {
    'grant_type': 'authorization_code',
    'need_refresh_token': 'true', # 如果需要刷新token
    'client_id': YOUR_APP_KEY,
    'client_secret': YOUR_APP_SECRET,
    'redirect_uri': YOUR_REDIRECT_URI,
    'code': received_code
}
response = requests.post(token_url, data=params)
token_data = response.json()
# 保存 token_data['access_token'], token_data['refresh_token'] (如果申请了), token_data['expires_in'] (过期时间)

​⚠️ 重点加粗:回调地址 YOUR_REDIRECT_URI必须和开放平台后台配置的完全一致!包括协议(http/https)、域名、端口(如果有)、路径!​


​第二坑:API调用姿势不对,数据死活拿不到!​

🛑 ​​常见惨状:​​ 千辛万苦拿到了 access_token,兴冲冲地去调商品列表API (alibaba.product.list.get),结果返回各种错误:isv.invalid-parameteisv.api-not-existisp.remote-service-error,或者干脆返回空数据。明明参数都传了呀?🤔

💡 ​​避坑秘籍:​

  1. 1.

    ​API地址别搞错:​​ 1688的API地址有网关地址(如 https://gw.open.1688.com/openapi/)和具体的API路径。​​确保你调用的完整URL是正确的。​​ 不同版本的API路径可能不同。

  2. 2.

    ​签名(Signature)是重中之重!​​ 大部分1688 API调用都需要对请求参数进行签名。签名算法(通常是HMAC-SHA1)和步骤必须严格按照文档来。​​参数排序、拼接、编码一个都不能错!​​ 这是最容易出错的地方。建议:

    • 使用官方提供的SDK(如果语言支持且维护良好)。

    • 仔细研究签名示例,自己写的话务必反复测试。

    • 在线签名工具辅助调试(注意信息安全)。

  3. 3.

    ​参数格式要对:​​ 看清楚文档要求参数是放在URL Query里,还是POST Body里(可能是form-data或x-www-form-urlencoded)。​​参数名大小写、是否必填、数据类型(字符串、数字、数组)都要严格匹配。​

  4. 4.

    access_token传哪里?​​ 通常是作为请求头 Authorization: Bearer YOUR_ACCESS_TOKEN或者放在URL参数 ?access_token=YOUR_ACCESS_TOKEN。看具体API要求。

  5. 5.

    ​频率限制(Throttling):​​ 1688 API有调用频率限制。​​新应用配额较低,频繁调用很容易被限流。​​ 做好错误重试机制(带退避策略),并考虑缓存数据减少不必要的调用。

  6. 6.

    ​理解返回结构:​​ 成功和失败的返回结构不同。​​一定要判断 result.success或类似字段是否为true,再去解析数据部分。​​ 错误信息通常在 error_codeerror_message里。

​核心思路伪代码示意(调用商品列表API - 假设需要签名):​

python下载复制运行
# 假设已获得有效 access_token
access_token = "YOUR_ACCESS_TOKEN"

# API 地址和参数
api_url = "https://gw.open.1688.com/openapi/param2/1/com.alibaba.product/alibaba.product.listGet/YOUR_APP_KEY"
params = {
    'pageNo': 1,
    'pageSize': 20,
    'categoryID': '您要的商品类目ID',
    # ... 其他参数
}

# !!! 关键:生成签名 (这里简化示意,实际需按文档步骤:排序、拼接、URL编码、HMAC-SHA1)
# 通常步骤:将所有参数(包括系统参数如app_key, timestamp, sign_method等)按key排序 -> 拼接成字符串 -> URL编码 -> 用AppSecret计算HMAC-SHA1 -> Base64编码 -> URL编码得到sign
# 伪代码:
sorted_params = sort(params.keys())
sign_string = ""
for key in sorted_params:
    sign_string += key + params[key] # 实际拼接规则更复杂,注意文档要求
sign_string = urlencode(sign_string) # 注意编码规则
signature = hmac_sha1(YOUR_APP_SECRET, sign_string).base64().urlencode()

# 将签名 signature 加入请求参数
params['sign'] = signature
# 加入其他系统参数,如 access_token, timestamp 等
params['access_token'] = access_token
params['_aop_timestamp'] = int(time.time() * 1000) # 毫秒时间戳

# 发送请求 (GET示例,参数在URL)
full_url = api_url + "?" + urllib.parse.urlencode(params)
response = requests.get(full_url)
data = response.json()

# 检查是否成功!
if not data.get('success'):
    error_code = data.get('error_code')
    error_msg = data.get('error_message')
    print(f"API调用失败!错误码: {error_code}, 错误信息: {error_msg}")
    # 根据错误码处理(如重试、刷新token、检查参数等)
else:
    product_list = data['result']['products'] # 根据实际返回结构解析
    # 处理商品数据...

​⚠️ 重点加粗:签名(Signature)生成是调用成功的关键,务必严格遵循官方文档步骤!参数顺序、编码规则一个都不能错!初次对接建议花80%时间在签名调试上。​


​第三坑:数据同步像蜗牛,用户体验直掉线!​

🛑 ​​常见惨状:​​ 网站上的1688商品信息更新不及时,价格变了、库存没了、商品下架了,用户在你的网站下单后才发现,体验极差!或者,同步大量商品时脚本跑得慢如蜗牛,还容易超时中断。🐌

💡 ​​避坑秘籍:​

  1. 1.

    ​增量同步是王道:​​ 不要每次都全量拉取所有商品!利用好API提供的增量更新机制(如 alibaba.product.increment.get)。​​记录你上次同步的时间戳,只拉取这个时间点之后有变动的商品。​​ 这能极大减少数据量和API调用次数。

  2. 2.

    ​善用消息服务(Message Service):​​ 1688提供了商品变更消息(如商品下架、价格变更、库存变更)。​​订阅这些消息,实时推送到你的服务器。​​ 这样一旦1688商品有变,你就能立刻知道并更新自己的数据库,保证信息实时性。这比定时轮询高效得多!

  3. 3.

    ​异步处理 & 队列:​​ 对于需要同步大量数据的任务(比如初次全量同步),​​务必做成异步任务,放入队列(如Redis, RabbitMQ, Kafka)中慢慢消费。​​ 避免阻塞Web请求或脚本超时。做好任务状态监控和失败重试。

    成品网站1688入口的代码体现
  4. 4.

    ​合理设置同步频率:​​ 对于无法订阅消息的次要数据,设置合理的轮询频率。太频繁会被限流,太慢则数据不准。根据业务需求和数据重要性找到平衡点。

  5. 5.

    ​本地缓存策略:​​ 对商品详情页等访问频繁的数据,在本地做好缓存(Redis, Memcached)。​​设置合理的过期时间(TTL),并在收到1688变更消息时主动清除或更新缓存。​

  6. 6.

    ​数据清洗与转换:​​ 1688返回的数据格式可能和你的网站数据库设计不一致。​​做好数据的清洗、转换和映射工作。​​ 特别注意单位(重量、体积)、图片URL、规格属性等。

​核心思路伪代码示意(增量同步 + 消息处理):​

python下载复制运行
# 方案一:定时增量同步 (作为兜底)
def sync_incremental_products():
    last_sync_time = get_last_sync_time_from_db() # 从数据库获取上次同步时间
    current_time = int(time.time() * 1000)
    params = {
        'modifyStartTime': last_sync_time,
        'modifyEndTime': current_time,
        # ... 其他参数
    }
    # 调用 alibaba.product.increment.get API (带签名等)
    changed_products = call_api(params)
    for product in changed_products:
        update_local_database(product)
    save_last_sync_time_to_db(current_time) # 更新同步时间

# 方案二:实时消息处理 (更优)
# 1. 在1688后台订阅商品变更消息(如ProductChanged)
# 2. 1688会在商品变更时推送消息到你配置的服务器URL
@message_handler('/1688/webhook/product-changed')
def handle_product_changed_message(request):
    message = parse_message(request.body) # 解析消息体
    if message.validate_signature(YOUR_APP_SECRET): # 验证消息签名防伪造
        product_id = message.product_id
        change_type = message.change_type # 下架、价格改、库存改等
        # 根据 change_type 决定如何处理
        if change_type == 'offShelf':
            mark_product_offline_locally(product_id)
        elif change_type == 'priceChange' or change_type == 'stockChange':
            # 立即或稍后(放入队列)去调用商品详情API获取最新数据
            job_queue.enqueue(fetch_and_update_product, product_id)
        # ... 处理其他变更类型
        return success_response()
    else:
        return error_response("Invalid signature")

def fetch_and_update_product(product_id):
    # 调用 alibaba.product.get API 获取该商品最新详情
    product_detail = call_product_detail_api(product_id)
    update_local_database(product_detail)
    clear_cache_for_product(product_id) # 清除本地缓存

​⚠️ 重点加粗:强烈推荐使用消息服务(Message Service)实现实时同步!这是保证数据时效性的最佳实践。增量同步作为补充或兜底方案。​


​第四坑:前端展示水土不服,用户看了直摇头!​

🛑 ​​常见惨状:​​ 后台数据同步得挺好,但一到网站前台展示就出问题:图片加载慢甚至裂图、规格参数显示错乱、价格单位不统一、商品描述样式乱七八糟... 用户看得一头雾水,转化率上不去。😫

💡 ​​避坑秘籍:​

  1. 1.

    ​图片处理与加速:​​ 1688返回的图片URL通常是原始大图。​​直接在前端加载可能非常慢!​

    • ​使用CDN加速:​​ 将图片URL替换为你自己CDN的地址(前提是1688允许,或你有权处理这些图片)。或者,利用支持外部源加速的CDN服务。

    • ​图片压缩与格式转换:​​ 在CDN层面或后端拉取图片后进行压缩(如转WebP)、缩略图生成。​​务必注意版权和1688的图片使用规则!​

    • ​懒加载(Lazy Load):​​ 对商品列表页的图片实施懒加载,提升首屏速度。

  2. 2.

    ​数据清洗与格式化:​​ 对从1688获取的数据进行深度清洗和格式化:

    • ​价格与单位:​​ 统一货币符号(¥)、处理小数位数、统一重量/体积单位(如都转成kg或g)。

    • ​规格属性:​​ 1688的规格属性结构可能很复杂(嵌套、多值)。设计好前端组件(如表格、折叠面板)来清晰展示。​​去除无意义的属性或空值。​

    • ​商品描述(Description):​​ 1688的描述通常是HTML片段,可能包含大量内联样式、无关链接或广告。​​进行HTML净化(Sanitize),移除不安全标签和冗余样式。​​ 可以提取纯文本或重新组织排版,使其符合你网站的风格。注意保留必要的图片和表格。

  3. 3.

    ​UI/UX设计适配:​​ 不要直接把1688的商品详情页样式照搬过来!​​根据你网站的整体风格和用户群体,重新设计商品展示的UI和交互。​​ 确保信息层级清晰、重点突出(价格、库存、购买按钮)、符合用户习惯。

  4. 4.

    ​库存状态实时显示:​​ 库存信息至关重要且变化快。​​确保前端显示的库存是实时或准实时的(通过前面提到的消息同步或短间隔轮询)。​​ 库存不足或为0时要有明显提示。

  5. 5.

    ​错误处理与降级:​​ 当某个商品信息获取失败或部分数据缺失时,前端要有友好的错误提示或降级展示方案(如显示占位图、提示“信息获取中”),而不是直接白屏或显示错误代码。

​核心思路伪代码示意(前端展示 - Vue示例):​

vue复制
<template>
  <div class="product-detail">
    
    <img v-lazy="getOptimizedImage(mainImageUrl)" :alt="productTitle" />

    <h1>{{ productTitle }}h1>

    
    <p class="price">¥{{ formatPrice(productPrice) }}p>

    
    <p :class="['stock', { 'low-stock': stockCount <= 10, 'out-of-stock': stockCount === 0 }]">
      库存:{{ stockCount > 0 ? stockCount + '件' : '已售罄' }}
      <span v-if="stockCount <= 10 && stockCount > 0">(库存紧张)span>
    p>

    
    <spec-table :specs="cleanedSpecs">spec-table>

    
    <div class="description" v-html="sanitizedDescription">div>
  div>
template>

<script>
import { sanitizeHtml } from '@/utils/sanitizer'; // 引入HTML净化工具

export default {
  props: ['productData'], // 从后端传入的商品数据
  computed: {
    mainImageUrl() {
      return this.productData.imageUrls?.[0] || 'placeholder.jpg';
    },
    productTitle() {
      return this.productData.subject || '未知商品';
    },
    productPrice() {
      return this.productData.price?.value || 0;
    },
    stockCount() {
      return this.productData.stock?.quantity || 0;
    },
    cleanedSpecs() {
      // 清洗和转换规格属性数据,移除空值,转换单位等
      const rawSpecs = this.productData.specs || [];
      return rawSpecs.filter(spec => spec.value && spec.value.trim() !== '')
                    .map(spec => ({ ...spec, value: convertUnit(spec.value) }));
    },
    sanitizedDescription() {
      // 净化商品描述HTML
      return sanitizeHtml(this.productData.description || '');
    }
  },
  methods: {
    getOptimizedImage(url) {
      // 替换为CDN地址 + 图片处理参数 (例如:转WebP, 缩放到800px宽)
      if (!url) return 'placeholder.jpg';
      return `https://your-cdn.com/${encodeURIComponent(url)}?imageView2/1/w/800/format/webp`;
      // 注意:确保此操作符合1688图片使用规则和CDN服务商要求
    },
    formatPrice(price) {
      // 格式化价格,保留两位小数
      return Number(price).toFixed(2);
    }
  }
}
script>

​⚠️ 重点加粗:前端展示的核心在于数据清洗、格式化和用户体验适配。图片优化和描述净化是提升加载速度和页面整洁度的关键步骤。​


​第五坑:下单流程暗礁多,用户付款后傻眼!​

🛑 ​​常见惨状:​​ 用户在你的网站选好1688商品,填了地址,愉快地付了款。结果你这边调用1688下单API (alibaba.trade.createOrderV3) 失败!原因可能是:收货地址不在卖家配送范围、商品库存不足(同步延迟)、商品已下架、订单金额校验失败... 用户付了钱却拿不到货,客诉立马就来了!💥

💡 ​​避坑秘籍:​

  1. 1.

    ​预校验!预校验!预校验!​​ 重要的事情说三遍!在下单前(用户提交订单页或付款前),​​务必调用1688的订单预校验接口 (alibaba.trade.validateOrder)。​​ 这个接口能提前告诉你地址是否支持配送、商品是否有效、库存是否足够、价格是否有变动、是否满足卖家设置的起订量/混批条件等关键信息。​​把问题扼杀在用户付款之前!​

  2. 2.

    ​实时库存扣减(谨慎使用):​​ 如果你的业务模式允许(如自营、对库存要求极高),可以考虑在用户下单时实时调用1688库存扣减接口(如有提供)。但这会显著增加系统复杂度和API调用量,且需处理扣减失败的回滚逻辑。​​大部分场景下,依赖消息同步和预校验,并在订单创建失败后及时退款/通知用户,是更稳妥的做法。​

  3. 3.

    ​处理价格变动:​​ 用户从浏览到下单可能有时间差,1688价格可能变动。​​在预校验或正式下单时,务必比较用户下单价格和1688实时价格。​​ 如果变动超出可接受范围(如你设置的阈值),需要提示用户并让其确认新价格。

  4. 4.

    ​清晰的错误处理与用户沟通:​​ 万一在正式调用创建订单API时失败(尽管做了预校验,网络、超时等问题仍可能发生),​​要有完善的错误捕获机制。​​ 立即通知用户下单失败,明确告知原因(如“供应商库存不足,请稍后再试”或“网络异常,请重新下单”),并​​迅速启动退款流程(如果已付款)​​。保持沟通透明。

  5. 5.

    ​订单状态同步:​​ 订单创建成功后,1688订单状态的变更(发货、物流更新、完成、关闭)也需要同步回你的系统。同样,​​订阅1688的订单状态变更消息是最佳选择。​​ 让你的用户能在你的网站跟踪订单物流。

​核心思路伪代码示意(下单流程):​

成品网站1688入口的代码体现
python下载复制运行
def create_order(user_order_data):
    # 0. 用户提交订单(到你的服务器)
    # 1. 预校验订单 (强烈推荐在用户付款前做!)
    precheck_params = {
        'address': user_order_data['address'], # 用户选择的收货地址
        'items': [] # 用户购买的商品列表
    }
    for item in user_order_data['items']:
        precheck_params['items'].append({
            'product_id': item['1688_product_id'],
            'sku_id': item['1688_sku_id'],
            'quantity': item['quantity']
        })
    precheck_result = call_api('alibaba.trade.validateOrder', precheck_params)

    if not precheck_result['success']:
        # 预校验失败!提取错误信息
        error_msg = precheck_result['error_message']
        # 根据错误类型处理:
        if '库存不足' in error_msg:
            return error_response("部分商品库存不足,请返回购物车调整")
        elif '配送范围' in error_msg:
            return error_response("您的地址不在供应商配送范围内")
        elif '价格变动' in error_msg:
            new_price_info = precheck_result['new_prices'] # 假设返回新价格
            return error_response(f"价格已更新,请确认新价格:{new_price_info}")
        # ... 处理其他错误

    # 2. (可选) 实时扣减库存 (风险高,需谨慎)
    # 3. 用户付款 (你的支付网关)
    # 4. 正式调用1688创建订单API
    create_order_params = {
        'flow': 'general', # 流程类型
        'address': user_order_data['address'],
        'items': precheck_params['items'], # 使用预校验通过的商品项
        'totalAmount': user_order_data['total_amount'], # 最好再和预校验结果里的金额核对下
        # ... 其他必要参数 (发票、备注等)
    }
    create_result = call_api('alibaba.trade.createOrderV3', create_order_params)

    if create_result['success']:
        # 创建成功!保存1688返回的订单号
        alibaba_order_id = create_result['result']['orderId']
        save_order_to_db(user_order_data, alibaba_order_id)
        # 后续处理:订阅该订单状态变更消息
        subscribe_order_status(alibaba_order_id)
        return success_response("下单成功!")
    else:
        # 创建失败!记录详细错误日志
        log_error(create_result)
        # 立即发起退款 (调用支付网关退款接口)
        initiate_refund(user_order_data['payment_id'])
        # 通知用户
        notify_user_order_failed(user_order_data['user_id'], "创建供应商订单失败,已为您退款")
        return error_response("订单创建失败,已退款,请稍后重试或联系客服")

​⚠️ 重点加粗:下单前的预校验 (alibaba.trade.validateOrder) 是避免用户付款后下单失败的黄金法则!务必集成到你的下单流程中!​


​独家见解:效率与成本的平衡艺术​

搞定了这些坑,是不是觉得“成品网站1688入口的代码体现”也没那么可怕了?😄 不过啊,根据我手头几十个项目的复盘数据,这里还有一点独家心得想分享:

  • ​“省2万”怎么来的?​​ 这不是瞎说。一个中型项目,如果前期没做好避坑,光是踩在签名错误、回调地址、预校验缺失这几个大坑上,就可能浪费开发人员1-2周时间(按2人周算,人力成本轻松过万)。再加上可能产生的用户投诉、订单失败退款、甚至商誉损失,​​提前做好避坑,省下2万真不算夸张。​

  • ​“3天极速接入”可能吗?​​ 对于有经验的开发者,在完全理解文档、准备好环境、并且目标明确(比如先实现核心的商品展示和下单)的前提下,​​3天搭出一个基础可用的Demo框架是可行的。​​ 但要做到生产环境稳定运行,还需要大量的测试、监控、容错处理,这个时间要预留充分。别为了赶时间埋下更多坑!

  • ​技术选型影响效率:​​ 选择成熟稳定的技术栈(如Python的Requests库 + Celery异步任务,或Java的Spring Boot + WebClient)能减少底层问题。​​如果团队对某语言不熟,硬上反而会增加踩坑几率。​

  • ​监控报警不能少:​​ 上线后,API调用成功率、错误类型、消息订阅状态、同步任务延迟等关键指标一定要监控起来。设置报警阈值(如错误率>5%),​​问题早发现早处理。​

说到底,对接1688是个细致活,拼的就是对细节的把控和对流程的理解。把这篇避坑指南收藏好,遇到问题时翻出来对照检查,能帮你节省大量时间和金钱!💪

📸 王浩峰记者 刘海龙 摄
🥵 片多多视频免费观看电视剧软件切尔西正在美国备战世俱杯,马雷斯卡首先表示:“我们目前心态很好。我们已经实现了自己的目标,尽管在这一年中有所改变,但我们还是提前一年重返欧冠,并夺得了欧协联冠军。不过,当你在切尔西踢球时,你必须努力赢得每一项赛事。”
成品网站1688入口的代码体现避坑指南:3天极速接入省2万(附核心代码思路)图片
👠 女的高潮过后第二次需要多久恢复上官正义告诉扬子晚报/紫牛新闻记者,他在详细了解了该砖厂的相关情况后,立即向当地警方报案。很快,当地民警很快赶到砖厂。
📸 肖奎记者 韩宏科 摄
🔞 国产少女免费观看电视剧字幕小沈阳让女儿去韩国出道,其实挺懂行。沈佳润喜欢唱跳,韩国唱跳市场成熟,从训练体系到舞台经验都更扎实。等在那边攒够作品和人气,再回国参加选秀综艺,粉丝基础和话题度都有了,比直接硬闯内娱顺多了。
🔞 成片ppt网站大片哈利伯顿在NBA总决赛第五场步行者109-120负于雷霆的比赛首节加重了小腿伤势,但他在次节缠上护具后回归赛场并打完剩余比赛。整场比赛,哈利伯顿状态不佳,全场6中0,仅靠罚球得到4分。
😘 17c官方网站众议院民主党领袖哈基姆·杰弗里斯也警告称,特朗普动武之前未能获得国会授权,“有可能使美国卷入一场灾难性的中东战争。”杰弗里斯说:“总统应对一切不利后果负责。”
扫一扫在手机打开当前页