首页 文章

来自报价的SoftLayer订单失败,错误,价格ID 876不存在

提问于
浏览
0

我们正尝试通过API从门户网站中创建的现有报价中订购Sydney1 DC中的BareMetal服务器 . 我们在python中使用此方法提取我们的quote容器:

container = client['Billing_Order_Quote'].getRecalculatedOrderContainer(id=quote_id)

我们不对容器中的价格ID进行任何更改 . 当我们尝试验证订单或下订单时:

result = client['Product_Order'].verifyOrder(container)

它失败并出现以下错误:

Failed to order due to error: SoftLayerAPIError(SoftLayer_Exception_Public): Price # 876 does not exist.

这是显示ID 876的容器的JSON提取:

"currentPriceFlag": "",
  "hourlyRecurringFee": "0",
  "id": 876,
  "item": {
    "activePresaleEvents": [],
    "attributes": [],
    "availabilityAttributes": [],
    "bundle": [],
    "description": "Non-RAID",
    "id": 487,
    "itemCategory": {
      "categoryCode": "disk_controller",
      "id": 11,
      "name": "Disk Controller",
      "quantityLimit": 0,
      "questions": []
    },
    "itemTaxCategoryId": 166,
    "keyName": "DISK_CONTROLLER_NONRAID",
    "softwareDescriptionId": "",
    "thirdPartyPolicyAssignments": [],
    "upgradeItemId": ""
  },

尝试过使用不同硬件的不同引号 . 如果我们通过门户网站使用相同的报价进行订购,那么只有API在 Non-Raid 时遇到了一些问题?同样的脚本也在一周前工作,那么对Product_Order API进行了哪些更改?报价也是在我们开始收到错误的同一天创建的新报价 .

1 回答

  • 0

    我所知道的控制门户使用这些方法作为报价:

    http://sldn.softlayer.com/reference/services/SoftLayer_Billing_Order_Quote/verifyOrder http://sldn.softlayer.com/reference/services/SoftLayer_Billing_Order_Quote/placeOrder

    因此,请尝试使用这些方法修改代码,例如

    result = client['Billing_Order_Quote'].verifyOrder(container,id=quoteId)
    

    注意:将quoteId替换为引用的Id

    如果问题仍然可以重现,请告诉我 .

    好吧,我能够重现这个问题,我有一个问题 . 你是怎么创造报价的?你是否使用同一帐户来创建报价?由于某些原因导致您的帐户使用无效价格,因此报价出现问题 . 当您调用以下方法时,请检查是否列出了价格876:

    result = client['SoftLayer_Product_Package'].getItemPrices(id=packageID)
    Note: replace the packageID with the package that your quote is using, it seems is 253
    

    如果您看不到列出的价格876,那就是问题,它与错误的报价创建有关 .

    您可以更改有效价格的价格,以避免错误,例如

    """
    Order from account's quote.
    This script creates an order from a account's quote presented
    in the SoftLayer Customer Portal's (https://control.softlayer.com/account/quotes)
    
    Important manual pages:
    http://sldn.softlayer.com/reference/services/SoftLayer_Account/getQuotes
    http://sldn.softlayer.com/reference/services/SoftLayer_Billing_Order_Quote/getRecalculatedOrderContainer
    http://sldn.softlayer.com/reference/services/SoftLayer_Billing_Order_Quote/placeOrder
    @License: http://sldn.softlayer.com/article/License
    @Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
    """
    # So we can talk to the SoftLayer API:
    import SoftLayer
    
    # For nice debug output:
    import pprint
    """
    Your SoftLayer API username and key.
    Generate an API key at the SoftLayer Customer Portal
    """
    API_USERNAME = 'set me'
    API_KEY = 'set me'
    
    client = SoftLayer.Client(username=API_USERNAME, api_key=API_KEY)
    
    """
    Set the id of the quote from which you want to create the order,
    use SoftLayer_Account::getQuotes method to get a list of quotes from account
    """
    quoteId = 2135231
    # Get the order data by using SoftLayer_Billing_Order_Quote::getRecalculatedOrderContainer method
    orderTemplates = client['SoftLayer_Billing_Order_Quote'].getRecalculatedOrderContainer(id=quoteId)
    # Changing the wrong price for a valid one
    prices = []
    for price in orderTemplates["prices"]:
        if price["id"] != 876:
            prices.append(price)
    
    prices.append({"id": 141949})
    orderTemplates["prices"] = prices
    
    try:
        """
        Verify the order container is right. If this returns an error
        then fix your order container and re-submit. Once ready then place
        your order with the placeOrder() method.
        """
        receipt = client['SoftLayer_Billing_Order_Quote'].verifyOrder(orderTemplates, id=quoteId)
        pprint.pprint(receipt)
    except SoftLayer.SoftLayerAPIError as e:
        print("error faultCode=%s, faultString=%s"
              % (e.faultCode, e.faultString))
        exit(1)
    

    不知何故,控制门户必须在执行订单之前更改无效价格,这就是它在门户网站中工作的原因,因为正如我之前告诉您的那样,两者都使用相同的API方法进行订购 .

    问候

相关问题