Pulse for Booking.com Partners 图标

Pulse 数据 API:结算、预订与房态端点

Booking.com Hotels & Vacation Rentals · 企业办公

Pulse for Booking.com Partners 是 Booking.com Hotels & Vacation Rentals(Booking Holdings 旗下住宿业务)给在 Booking.com 上挂牌的酒店、民宿与度假屋房东用的物业端应用。合作伙伴用与 admin.booking.com 相同的 extranet 账号登录后,首页是抵达、离店与在住的日看板;从那里可以打开房态日历调整可售房量与入住人数价格,按客人姓名或预订号搜索订单,进入客人消息收件箱(含数小时内过期的 Request to Book),查看结算与支付流水,阅读客人点评,并拉取昨日预订与售罄房型的日报。它面向全球前台与收益人员——需要在不开桌面 extranet 的情况下开关房、回复客人、看清即将到账金额——在供给侧对应着 Expedia Partner Central 与 Airbnb 房东端在其他 OTA 上的角色。

合作伙伴的一笔结算窗口会返回 uuid、dateFrom/dateUntil、amountFormatted 以及 hasPayoutIssued、hasPayoutPending 等标记,元数据里还有 nextWithdrawalDate;点开后补上 totalPayoutAmount、totalCommission、totalCityTax、totalWithheldTaxes 和逐笔 reservationAmount。日看板把入住拆成 arrivals、departures、stayOvers、cancelled 与 noShows,每条带 guestName 和 stayPeriod;详情卡再给出 totalPrice、commissionAmount、totalEarnings、paymentStatus 与 payoutMethod。

房态是按日的 roomsToSell、availableRooms、netBooked 以及 hotelCurrencyCode 下的入住人数价格。客人会话挂着 reservationId、checkinDate 和 isReplyNeeded;Request to Book 行加上 rtbRequestStatus、totalPartnerPrice 与 hoursToExpire。PMS 与财务把这些结算对到物业账本,收益经理把关闭日期与价格推进渠道管理器,前台工具则展示抵达名单与未回复会话。openData Studio 把这一合作伙伴数据面做成可调用的开放数据。

应用截图

  • Pulse for Booking.com Partners 应用截图 1
  • Pulse for Booking.com Partners 应用截图 2
  • Pulse for Booking.com Partners 应用截图 3
  • Pulse for Booking.com Partners 应用截图 4
  • Pulse for Booking.com Partners 应用截图 5
  • Pulse for Booking.com Partners 应用截图 6
  • Pulse for Booking.com Partners 应用截图 7
  • Pulse for Booking.com Partners 应用截图 8

API 端点一览

以下端点与请求/响应示例均依据应用界面推导重构,为示意说明,并非实际抓包。

  • OAuth2 令牌签发

    POST /v1/pulse/auth/token opendata

    用 Accounts Portal 授权码换取合作伙伴 access_token 与 refresh_token,之后每次 GraphQL 与 XY 调用都以 Authorization: Bearer 携带。

    认证方式: OAuth2 授权码交换;客户端提交 grant_type、code 与 redirect_uri。

    • access_token
    • refresh_token
    • expires_in
    POST /v1/pulse/auth/token HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code&code=spl_xxxx&redirect_uri=com.booking.pulse://oauth2callback
    {
      "access_token": "eyJhbGciOiJSUzI1NiIs...",
      "refresh_token": "rt_7f3a...",
      "expires_in": 3600
    }
  • 合作伙伴账号资料

    GET /v1/pulse/auth/partner osint

    令牌签发后读取已登录合作伙伴的 loginName 与 partnerAuthName——Pulse 首页账号切换器上显示的身份。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • loginName
    • partnerAuthName
    GET /v1/pulse/auth/partner HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    {
      "loginName": "[email protected]",
      "partnerAuthName": "Seaside Inn Extranet"
    }
  • 按年结算历史

    POST /v1/pulse/finance/payouts openfinance

    按年分页合作伙伴结算窗口,含已下发/待处理/冻结标记、格式化与原始金额,以及财务页上的 nextWithdrawalDate。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • uuid
    • dateFrom
    • dateUntil
    • amountFormatted
    • amount
    • currency
    • hasPayoutIssued
    • hasPayoutPending
    • hasPspRefusal
    • hasBankDetailError
    • hasPayoutsOnHold
    • nextWithdrawalDate
    • operatingYears
    POST /v1/pulse/finance/payouts HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PayoutHistory",
      "query": "query PayoutHistory($input: PayoutsInYear!, $includeRawAmount: Boolean!) { payoutHistory(input: $input) { payoutHistoryMonths { payouts { uuid dateFrom dateUntil amount { amountFormatted amount currency } payoutFlags { hasPayoutIssued hasPayoutPending } } } payoutMetadata { nextWithdrawalDate operatingYears } } }",
      "variables": {"input": {"year": 2026}, "includeRawAmount": true}
    }
    {
      "data": {
        "payoutHistory": {
          "payoutHistoryMonths": [{
            "month": 9,
            "year": 2026,
            "payouts": [{
              "uuid": "po_9c21e4",
              "dateFrom": "2026-09-01",
              "dateUntil": "2026-09-15",
              "hasFailed": false,
              "amount": {"amountFormatted": "EUR 4,812.40", "amount": 4812.4, "currency": "EUR"},
              "payoutFlags": {"hasPayoutIssued": true, "hasPayoutPending": false, "hasPspRefusal": false, "hasBankDetailError": false, "hasPayoutsOnHold": false}
            }]
          }],
          "payoutMetadata": {"nextWithdrawalDate": "2026-10-03", "operatingYears": [2024, 2025, 2026]}
        }
      }
    }
  • 单笔结算明细

    POST /v1/pulse/finance/payouts/{payoutId} openfinance

    按 uuid 打开一笔结算,拆出佣金、城市税、增值税、预扣税以及结算详情页上逐笔 reservationAmount。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • totalPayoutAmount
    • totalCommission
    • totalCityTax
    • totalWithheldTaxes
    • totalVat
    • totalCostOfPayments
    • totalResAmountWithoutCommission
    • isNetting
    • bookerName
    • reservationAmount
    • checkinDate
    • checkoutDate
    POST /v1/pulse/finance/payouts/{payoutId} HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PayoutDetails",
      "variables": {"payoutInput": {"uuid": "po_9c21e4"}, "includeReservationDetails": true}
    }
    {
      "data": {
        "payout": {
          "isNetting": false,
          "summaryInfo": {
            "totalPayoutAmount": {"amountFormatted": "EUR 4,812.40"},
            "totalCommission": {"amountFormatted": "EUR 721.86"},
            "totalCityTax": {"amountFormatted": "EUR 96.00"},
            "totalWithheldTaxes": {"amountFormatted": "EUR 0.00"},
            "totalVat": {"amountFormatted": "EUR 144.37"},
            "totalCostOfPayments": {"amountFormatted": "EUR 38.50"},
            "totalResAmountWithoutCommission": {"amountFormatted": "EUR 5,534.26"}
          },
          "reservations": [{
            "id": "3819201456",
            "bookerName": "M. Rossi",
            "checkinDate": "2026-09-04",
            "checkoutDate": "2026-09-07",
            "reservationAmount": {"amountFormatted": "EUR 612.00"}
          }]
        }
      }
    }
  • 房态日历读取

    POST /v1/pulse/inventory/calendar opendata

    加载 Pulse 房态日历:按日的 roomsToSell、netBooked、关闭标记,以及 hotelCurrencyCode 下的入住人数价格。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • hotelCurrencyCode
    • roomsToSell
    • availableRooms
    • netBooked
    • closed
    • occupancy
    • minStayThrough
    • minAdvanceRes
    POST /v1/pulse/inventory/calendar HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PulseAvailabilityFetch",
      "variables": {"request": {"propertyId": 1234567, "dateFrom": "2026-10-01", "dateTo": "2026-10-31"}}
    }
    {
      "data": {
        "pulseAvailabilityFetch": {
          "hotelInfo": {
            "id": 1234567,
            "currencyCode": {"hotelCurrencyCode": "EUR"},
            "rooms": [{"id": 42, "name": "Double Deluxe", "editability": {"closed": true, "roomsToSell": true}}]
          },
          "dates": [{
            "date": "2026-10-12",
            "roomInfo": [{"roomId": 42, "netBooked": 2, "closed": false, "roomsToSell": 3, "availableRooms": 1, "status": "open"}],
            "rateInfo": [{"rateId": 9, "closed": false, "prices": [{"occupancy": 2, "value": 148.0}], "minStayThrough": 1}]
          }]
        }
      }
    }
  • 房态日历更新

    POST /v1/pulse/inventory/calendar/update opendata

    把关闭标记、可售房量与入住人数价格写回日历;返回逐字段 success 以及 errors / warnings。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • success
    • dates
    • roomId
    • rateId
    • occupancy
    • fieldName
    • fieldValue
    • errors
    • warnings
    POST /v1/pulse/inventory/calendar/update HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PulseAvailabilityUpdate",
      "variables": {"input": {"propertyId": 1234567, "updates": [{"roomId": 42, "date": "2026-10-12", "roomsToSell": 0, "closed": true}]}}
    }
    {
      "data": {
        "pulseAvailabilityUpdate": {
          "result": [{
            "success": true,
            "dates": ["2026-10-12"],
            "roomId": 42,
            "rateId": null,
            "occupancy": null,
            "fieldName": "roomsToSell",
            "fieldValue": "0",
            "errors": [],
            "warnings": []
          }]
        }
      }
    }
  • 预订搜索

    POST /v1/pulse/stays/search opendata

    按客人或预订号在日期窗口内搜索预订,返回搜索页上的 reservationStatus、checkin 与 bookerCountryCode。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • reservationId
    • reservationStatus
    • checkin
    • guestNames
    • bookerCountryCode
    POST /v1/pulse/stays/search HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "ReservationsSearch",
      "variables": {"searchTerm": "Rossi", "dateFrom": "2026-10-01", "dateTo": "2026-10-31", "lang": "en"}
    }
    {
      "data": {
        "reservations": {
          "reservations": [{
            "reservationId": "3819201456",
            "reservationStatus": "ok",
            "checkin": "2026-10-12",
            "guestInfo": {"guestNames": "M. Rossi", "bookerCountryCode": "IT"}
          }]
        }
      }
    }
  • 客人收件箱会话

    POST /v1/pulse/inbox/threads osint

    列出客人消息会话,含入住日期、reservationId,以及驱动 Pulse 收件箱角标的 isReplyNeeded。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • guestName
    • hotelName
    • reservationId
    • checkinDate
    • checkoutDate
    • isCancelled
    • isReplyNeeded
    • content
    • hasAttachments
    POST /v1/pulse/inbox/threads HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "ListConversations",
      "variables": {"input": {"propertyId": 1234567, "first": 20}}
    }
    {
      "data": {
        "chatConversation": {
          "listConversations": {
            "conversations": [{
              "attributes": {
                "__typename": "ChatAccommodationDetails",
                "guestName": "M. Rossi",
                "hotelName": "Seaside Inn",
                "reservationId": "3819201456",
                "checkinDate": "2026-10-12",
                "checkoutDate": "2026-10-15",
                "isCancelled": false
              },
              "flags": {"isReplyNeeded": true},
              "lastMessage": {"content": "What time is breakfast?", "created": "2026-10-02T08:14:00Z", "flags": {"hasAttachments": false}}
            }],
            "pagination": {"hasAfter": true}
          }
        }
      }
    }
  • Request to Book 待处理列表

    POST /v1/pulse/booking-requests opendata

    列出待处理 Request to Book 行,含合作伙伴价、入住人数、hoursToExpire 与客人核验状态,便于在手机上接受或拒绝。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • requestId
    • rtbRequestStatus
    • checkIn
    • checkOut
    • hoursToExpire
    • lengthOfStay
    • nbAdults
    • childrenAges
    • totalGuest
    • totalPartnerPrice
    • isVerified
    POST /v1/pulse/booking-requests HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "RtbRequestListPage",
      "variables": {"rtbRequestListInput": {"propertyId": 1234567}, "rtbBannerRequestInput": {"context": "LIST"}}
    }
    {
      "data": {
        "rtbRequests": {
          "rtbRequestListPage": {
            "rtbRequestList": [{
              "requestId": "rtb_4412",
              "rtbRequestStatus": "PENDING",
              "checkIn": "2026-11-02",
              "checkOut": "2026-11-05",
              "hoursToExpire": 18,
              "lengthOfStay": 3,
              "nbAdults": 2,
              "childrenAges": [4],
              "totalGuest": 3,
              "totalPartnerPrice": {"amount": 420.0, "currency": "EUR"},
              "guestVerificationStatus": {"isVerified": true}
            }],
            "pageInfo": {"hasNextPage": false}
          }
        }
      }
    }
  • 预订详情

    POST /v1/pulse/stays/{reservationId} openfinance

    按预订号 bn 拉取预订详情卡:客人身份、Genius 标记、totalPrice、commissionAmount、totalEarnings 以及 paymentStatus / payoutMethod。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • id
    • hotelId
    • guestName
    • bookerName
    • bookerCc1
    • isGuestVerified
    • isGeniusBooker
    • nNights
    • totalPrice
    • commissionAmount
    • commissionableAmount
    • totalEarnings
    • paymentStatus
    • payoutMethod
    • isCancelled
    • isNoShow
    POST /v1/pulse/stays/{reservationId} HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_booking_detail.4",
        "payload": {"bn": "3819201456", "removeBookerTitle": 1, "sendSmpCancellationPolicy": 1}
      }
    }
    {
      "id": "3819201456",
      "hotelId": "1234567",
      "hotelName": "Seaside Inn",
      "guestName": "M. Rossi",
      "bookerName": "M. Rossi",
      "bookerCc1": "IT",
      "isGuestVerified": "1",
      "isGeniusBooker": 1,
      "nNights": "3",
      "nRooms": 1,
      "totalPrice": "EUR 612.00",
      "commissionAmount": "EUR 91.80",
      "commissionableAmount": "EUR 612.00",
      "totalEarnings": "EUR 520.20",
      "cancellationFee": "EUR 0.00",
      "payment": {"method": "Online", "paymentStatus": "paid", "payoutMethod": "Bank transfer"},
      "isCancelled": 0,
      "isNoShow": 0
    }
  • 当日抵达看板

    POST /v1/pulse/front-desk/dayboard opendata

    加载首页日看板:arrivals、departures、stayOvers、cancelled 与 noShows,每条含 guestName、stayPeriod 以及 Genius / 核验标记。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • arrivals
    • departures
    • stayOvers
    • cancelled
    • noShows
    • guestName
    • stayPeriod
    • stayDuration
    • occupancyDetails
    • isBookerGenius
    • isGuestVerified
    • groupHa
    POST /v1/pulse/front-desk/dayboard HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_dashboard.6",
        "payload": {"date": "2026-10-12"}
      }
    }
    {
      "groupHa": false,
      "dashboards": {
        "1234567": {
          "arrivals": [{
            "id": 3819201456,
            "guestName": "M. Rossi",
            "title": "Double Deluxe",
            "stayPeriod": "12–15 Oct",
            "stayDuration": "3 nights",
            "occupancyDetails": "2 adults",
            "isBookerGenius": true,
            "isGuestVerified": true
          }],
          "departures": [],
          "stayOvers": [],
          "cancelled": [],
          "noShows": []
        }
      }
    }
  • 日报卡片

    POST /v1/pulse/reports/daily-card opendata

    返回日报卡片:今日抵达/离店/在住、yesterdayGrossValue 与 yesterdayBookings、售罄房型以及昨日点评分数。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • hotelName
    • today
    • yesterday
    • arrivals
    • departures
    • stays
    • yesterdayGrossValue
    • yesterdayBookings
    • soldOutRooms
    • score
    • positive
    • negative
    POST /v1/pulse/reports/daily-card HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_daily_report_card.1",
        "payload": {"hotelId": "1234567", "date": "2026-10-12", "sendRateIntelReport": false}
      }
    }
    {
      "hotelName": "Seaside Inn",
      "today": "2026-10-12",
      "yesterday": "2026-10-11",
      "arrivals": 6,
      "departures": 4,
      "stays": 11,
      "yesterdayGrossValue": "EUR 1,940.00",
      "yesterdayBookings": "5",
      "soldOutRooms": [{"roomName": "Double Deluxe", "date": "2026-10-12"}],
      "yesterdayReviewDetails": [{
        "id": "rev_8821",
        "title": "Quiet room",
        "guestInfo": "Couple, Italy",
        "score": 9.2,
        "positive": "Great location",
        "negative": ""
      }]
    }
  • 支付流水列表

    POST /v1/pulse/finance/guest-payments openfinance

    分页该物业的客人支付流水,每行含 amountForPayout、nextPayoutDate、stripeId 与 bookingNumber。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • amountForPayout
    • nextPayoutDate
    • nextPageId
    • amount
    • timestamp
    • stripeId
    • bookingNumber
    • status
    • statusFormatted
    POST /v1/pulse/finance/guest-payments HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_get_transaction_list.1",
        "payload": {"hotelId": "1234567", "maxPageSize": 20, "nextPageId": null}
      }
    }
    {
      "amountForPayout": "EUR 1,204.00",
      "nextPayoutDate": "2026-10-03",
      "nextPageId": "pg_14",
      "transactions": [{
        "title": "Reservation 3819201456",
        "subtitle": "Online payment",
        "amount": "EUR 612.00",
        "timestamp": 1759420800,
        "stripeId": "ch_3Qabc",
        "bookingNumber": "3819201456",
        "status": "captured",
        "statusFormatted": "Paid"
      }]
    }
  • 客人点评列表

    POST /v1/pulse/reputation/reviews opendata

    列出该物业的客人点评,含 reviewAverageScore、Genius 标记、guestDetailsSummary 以及下一页 paginationClue。

    认证方式: POST /v1/pulse/auth/token 签发的 Bearer access_token。

    • paginationClue
    • id
    • reviewAverageScore
    • title
    • date
    • isNew
    • isGeniusUser
    • guestDetailsSummary
    POST /v1/pulse/reputation/reviews HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_get_hotel_reviews.1",
        "payload": {"hotelId": "1234567"}
      }
    }
    {
      "paginationClue": "after:rev_8821",
      "reviews": [{
        "id": "rev_8821",
        "reviewAverageScore": "9.2",
        "title": "Quiet room",
        "date": 1759334400,
        "isNew": true,
        "isGeniusUser": true,
        "guestDetailsSummary": "Couple · 3 nights · Italy",
        "reply": {"text": "Thank you for staying with us.", "date": 1759420800}
      }]
    }

数据类别

  • 结算
  • 预订
  • 房态
  • 客人消息
  • 点评
  • 支付流水

数据使用场景与案例

  • 结算对账到物业账本

    物业 PMS 或集团财务机器人拉取按年结算窗口(uuid、金额、币种、hasPayoutIssued)以及逐笔 reservationAmount / totalCommission,与银行入账和店内账单核对,在 nextWithdrawalDate 之前暴露缺失或冻结的结算。

  • 渠道管理器同步房态

    渠道管理器读取一段日期的 roomsToSell、netBooked、关闭标记和 hotelCurrencyCode 下的入住人数价格,并在关房或改 BAR 时写入 PulseAvailabilityUpdate,让 Booking.com 与店内 PMS 对齐而无需打开桌面 extranet。

  • 前台抵达与收件箱

    前台平板列出当日 arrivals / departures / stayOvers(含 guestName、stayPeriod),打开预订详情看 totalPrice 与 paymentStatus,并对 isReplyNeeded 为真的客人会话或 hoursToExpire 将尽的 Request to Book 行告警。

  • 点评分运营流

    口碑值班分页拉取 GuestReview(reviewAverageScore、isGeniusUser、guestDetailsSummary)以及日报里的 yesterdayReviewDetails,让新分数与售罄提醒和房态日历进同一运营频道。

常见问题

Pulse 为 Booking.com 合作伙伴暴露哪些结算数据?

财务页背后是按年结算窗口(uuid、dateFrom/dateUntil、amountFormatted、hasPayoutIssued、nextWithdrawalDate)和结算明细(totalPayoutAmount、totalCommission、totalCityTax、预扣税以及逐笔 reservationAmount)。另有支付流水分页客人交易,含 amountForPayout、stripeId 与 bookingNumber。

能读写房态和价格吗?

可以。房态日历按日返回 roomsToSell、availableRooms、netBooked、关闭标记以及 hotelCurrencyCode 下的入住人数价格;对应的更新把这些字段写回,并返回逐字段 success、errors 与 warnings。

Pulse 如何鉴权物业员工?

合作伙伴通过 Booking.com Accounts Portal 登录。OAuth2 授权码交换返回 access_token 与 refresh_token;随后的合作伙伴调用都带 Authorization: Bearer。用户资料调用返回 loginName 与 partnerAuthName。

收件箱和 Request to Book 界面背后有哪些客人数据?

收件箱返回 guestName、reservationId、checkinDate/checkoutDate 与 isReplyNeeded。Request to Book 列表再加上 requestId、rtbRequestStatus、totalPartnerPrice、入住人数与 hoursToExpire,方便员工在手机上接受或拒绝待处理请求。

相关主题

  • Pulse Booking.com API
  • Booking.com 合作伙伴结算
  • 酒店房态日历 API
  • Pulse 预订详情
  • Request to Book
  • Booking.com extranet
  • 酒店客人收件箱
  • Pulse for Booking.com Partners

需要集成这个 App 的数据 API?

我们可为任意指定 App 交付定制集成——源码交付 USD 500 起,或托管 API 按调用计费。告诉我们您需要的数据即可。

  • 每个项目均签 NDA 与 SOW
  • 3–7 天交付
  • 验收通过后才付款
  • 仅在授权范围内作业

获取报价