You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用New-PartnerCustomerOrder设置新商业体验订单属性遇阻求助

无法通过Partner Center PowerShell设置订单行项的续订对齐日期(月末)

问题描述

我尝试使用Microsoft Partner Center PowerShell模块的New-PartnerCustomerOrder cmdlet创建新商业体验订单时,遇到以下问题:

  1. 直接设置PSOrderLineItem的TermDuration属性时,提示'TermDuration' is a ReadOnly property.;尝试设置CustomTermEndDate时,提示The property 'CustomTermEndDate' cannot be found on this object.
  2. 改用ProvisioningContext.Add('duration', '1Year')的方式可以设置期限和计费周期,但无法将续订对齐日期设置为月末。

初始代码(报错版本)

$lineItem = New-Object -TypeName Microsoft.Store.PartnerCenter.PowerShell.Models.Orders.PSOrderLineItem
$lineItem.LineItemNumber = 0
$lineItem.OfferId = ($Catalog | Where-Object {$_.OfferName -eq $Subscription.OfferName}).OfferId
$lineItem.Quantity = $Subscription.Quantity
$lineItem.TermDuration = "P1Y"
$lineItem.CustomTermEndDate = $Alignment

New-PartnerCustomerOrder -BillingCycle Monthly -CustomerId $clientId -LineItems @($lineItem)

更新后代码(能设期限但无法对齐日期)

$lineItem = New-Object -TypeName Microsoft.Store.PartnerCenter.PowerShell.Models.Orders.PSOrderLineItem
$lineItem.LineItemNumber = 0
$lineItem.OfferId = ($Catalog | Where-Object {$_.OfferName -eq $Subscription.OfferName}).OfferId
$lineItem.Quantity = $Subscription.Quantity
$lineItem.ProvisioningContext.Add('duration', '1Year')
$lineItem.FriendlyName = "$($Subscription.OfferName) - 1YM"

New-PartnerCustomerOrder -BillingCycle Monthly -CustomerId $clientId -LineItems @($lineItem)

解决方案

方法1:通过ProvisioningContext传递对齐日期参数

部分商用Offer支持在ProvisioningContext中添加termEndDate或renewalAlignmentDate参数(参数名因Offer类型而异),传递ISO 8601格式的UTC日期即可设置月末对齐:

# 计算目标月末日期(示例:当前月的下月月末,转为UTC格式)
$alignmentDate = (Get-Date -Day 1).AddMonths(2).AddDays(-1).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")

$lineItem = New-Object -TypeName Microsoft.Store.PartnerCenter.PowerShell.Models.Orders.PSOrderLineItem
$lineItem.LineItemNumber = 0
$lineItem.OfferId = ($Catalog | Where-Object {$_.OfferName -eq $Subscription.OfferName}).OfferId
$lineItem.Quantity = $Subscription.Quantity
$lineItem.ProvisioningContext.Add('duration', '1Year')
# 添加月末对齐日期,若此参数无效可尝试换为'renewalDate'或'renewalAlignmentDate'
$lineItem.ProvisioningContext.Add('termEndDate', $alignmentDate)
$lineItem.FriendlyName = "$($Subscription.OfferName) - 1YM"

New-PartnerCustomerOrder -BillingCycle Monthly -CustomerId $clientId -LineItems @($lineItem)

注意:参数名需对应具体Offer的支持项,可先在Partner Center UI中手动测试能否设置对齐日期,再匹配对应参数。

方法2:直接调用Partner Center REST API

如果PowerShell模块的封装不支持该属性,直接调用REST API是更可靠的方案:

  1. 获取认证令牌:
$token = Get-PartnerAccessToken -ResourceUrl "https://api.partnercenter.microsoft.com"
  1. 构造符合API要求的请求体:
$orderBody = @{
    billingCycle = "Monthly"
    lineItems = @(
        @{
            lineItemNumber = 0
            offerId = ($Catalog | Where-Object {$_.OfferName -eq $Subscription.OfferName}).OfferId
            quantity = $Subscription.Quantity
            termDuration = "P1Y"
            customTermEndDate = $alignmentDate # 这里直接使用之前计算的月末UTC日期
        }
    )
    referenceCustomerId = $clientId
} | ConvertTo-Json -Depth 5
  1. 发送POST请求:
$headers = @{
    "Authorization" = "Bearer $($token.AccessToken)"
    "Content-Type" = "application/json"
}
Invoke-RestMethod -Uri "https://api.partnercenter.microsoft.com/v1/customers/$clientId/orders" -Method Post -Headers $headers -Body $orderBody

关键注意事项

  • customTermEndDate仅对支持自定义期限的Offer有效,部分按月自动续订的订阅类型不支持该参数。
  • 日期必须为UTC格式的ISO 8601字符串,否则API会返回格式错误。

内容的提问来源于stack exchange,提问作者Russ.Size

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:55:29