[转载] 使用API订购任何OVH服务器的方法与脚本

OVH - 如何使用 API 订购任何服务器?答案在这里! 首先,我要问你 这个过程是可以自动化的。我将编写相关的操作方法,教你如何进行。恳请你!不要滥用它!请保留订购限量版服务器的机会给其他人! OVH API 如何运作? 首先,OVH 提供了 API 库来访问 API。为此,他们还提供了一个 A

OVH - 如何使用 API 订购任何服务器?答案在这里!

首先,我要问你

这个过程是可以自动化的。我将编写相关的操作方法,教你如何进行。恳请你!不要滥用它!请保留订购限量版服务器的机会给其他人!

OVH API 如何运作?

首先,OVH 提供了 API 库来访问 API。为此,他们还提供了一个 API 控制台,你可以在上面进行尝试。目前,我们将查看 API 控制台。我们将下单一个较旧的服务器。开始吧!

实践操作

登录到 API

我将在 IE 区域为你演示步骤。如果需要,可以切换区域。

如果你还没有 OVHcloud 账户,请先在 OVHcloud 上创建一个账户,并登录 ovh.com/manager

访问 API 控制台并在 这里授权自己。

获取服务器信息

首先,在下单之前,我们有两个重要部分:服务器目录和可用性。

在目录中,OVH 存储了价格、带宽、HDD、SSD、RAM 选项、承诺期限信息等。

在可用性 API 中,你可以查看特定配置的可用性。例如,如果我们有一个服务器,提供 16 GB 和 32 GB RAM 选项,以及 2 TB HDD 和 450 GB NVMe,这实际上是四种不同的选项。因此,planCode 相同,而 FQN 用于识别所需的配置。
不够清楚?没问题,稍后会更清楚!

检查可用性

最好从可用性 API 开始,链接在 这里

不需要授权。如果你获取它,你会看到一个包含多个项的数组。fqn 用于识别单个配置,planCode 用于识别组。例如,KS-1 的 planCode 是 24sk10,FQN 指定了 RAM 和 SSD 选项。这里网络不重要,因为它是动态可配置的。

选择一个符合你需求的服务器。例如,我想购买 KS-1。

KS-1 的 planCode 是 24sk10,FQN 是 24sk10.ram-32g-ecc-2133.softraid-2x480ssd。

很好,记下它!

在目录中检查

现在,你需要在目录中搜索 planCode。不要搜索 FQN!FQN 用于识别配置。但在目录中,我们只能找到包含所有可用选项的 planCode。对于 KS-1,它是 32 GB RAM,以及 2x2 TB HDD 或 2x480 GB SSD。

前往 获取 ECO 目录

并获取它。

目录中的数据量非常大,所以我建议填写子公司并使用 cURL 命令。对于 IE:

curl -X GET "https://eu.api.ovh.com/v1/order/catalog/public/eco?ovhSubsidiary=IE"

如我所提到,数据量很大。所以我建议下载到一个 JSON 文件

curl -o catalog.json -X GET "https://eu.api.ovh.com/v1/order/catalog/public/eco?ovhSubsidiary=IE"

然后在 VsCode 或者记事本中打开它。要在记事本中阅读,建议使用 Perl 的 json_pp 命令将其格式化以便更易读。

cat catalog.json | json_pp > formatted.json
搜索我们需要的机器!

我们注意到我们要搜索的是带有 480 GB SSD、32 GB RAM 和 300 Mbps 公共网络的 KS-1。

首先,查找服务器。我们可以在 plans 数组中找到它。但更容易在文件中搜索这一行 "planCode" : "24sk10"

我们将在数组的末尾,因此向上滚动直到开始。如果我们在数组的末尾,搜索  "addonFamilies" : [ 的前一个出现。如果找到了,我们就在它的开头。所以看看!

            {
               "addons" : [
                  "softraid-2x480ssd-24sk10",
                  "softraid-2x2000sa-24sk10"
               ],
               "default" : "softraid-2x2000sa-24sk10",
               "exclusive" : true,
               "mandatory" : true,
               "name" : "storage"
            },
            {
               "addons" : [
                  "ram-32g-ecc-2133-24sk10"
               ],
               "default" : "ram-32g-ecc-2133-24sk10",
               "exclusive" : true,
               "mandatory" : true,
               "name" : "memory"
            }
            {
               "addons" : [
                  "bandwidth-300-24sk"
               ],
               "default" : "bandwidth-300-24sk",
               "exclusive" : true,
               "mandatory" : true,
               "name" : "bandwidth"
            }

我们在这里看到了什么?这里是所选配置的 addons。对于强制性的 addons(网络、磁盘、RAM),你需要只选择一个来完成订单,并记录下如这里所示的 planCodes。

softraid-2x480ssd-24sk10
ram-32g-ecc-2133-24sk10
bandwidth-300-24sk

Default 表示此值的默认选项。可能是如果你不在购物车中放置任何网络、磁盘或 RAM 时的默认设置,但要避免这种情况。请手动选择所有强制选项!

如果配置有更多的 RAM 选项(例如 KS-2,或者更多的网络选项,例如 SYS-1),你会看到更长的数组。JSON 中的数组用 [] 表示。

我们需要记下服务器的标签。

         "configurations" : [
            {
               "isCustom" : false,
               "isMandatory" : false,
               "name" : "dedicated_datacenter",
               "values" : [
                  "gra",
                  "sbg",
                  "rbx",
                  "bhs",
                  "waw",
                  "fra",
                  "lon"
               ]
            },
            {
               "isCustom" : false,
               "isMandatory" : true,
               "name" : "dedicated_os",
               "values" : [
                  "none_64.en"
               ]
            },
            {
               "isCustom" : false,
               "isMandatory" : true,
               "name" : "region",
               "values" : [
                  "europe",
                  "canada"
               ]
            }

你需要为每一项只选择一个。例如:

dedicated_os: none_64.en
region: europe
dedicated_datacenter: gra

记下正确的 DC 和区域。DC 选项是服务器可以出现的所有数据中心。而可用性 API 显示了实际的可用性。所以有可能在任何地方或所有地方都不可用。

我对 dedicated_os 了解不多,但它正确地表示平台(x86_64)。

此服务器的价格在 invoiceName 之后可以看到。你可以看到租赁时间、设置费等。

注意:将价格除以 100000000 以查看正确的数字。

查看 addons 详情

我们选择了 BW、RAM 和磁盘。此外,对于 Rise,我们还需要选择 vRack 选项。

因此,查看所选 addons 的价格非常重要。在 catalog.json 中查找所选磁盘的 addon。

         "invoiceName" : "2x 480Gb SSD Soft RAID",
         "planCode" : "softraid-2x480ssd-24sk10",

查找价格。RAM 和带宽也是如此。

执行订单流程

准备你的购物车

前往 Post cart

并创建你的订单购物车。最好将过期时间修改为一两个小时后,以获得足够的时间来填写你的购物车。

点击“尝试”按钮并查看响应。

{
  "cartId": "XXX",
  "description": "string",
  "expire": "2024-11-05T17:29:13+00:00",
  "readOnly": false,
  "items": []
}

记下你的 cartId。

将购物车绑定到你的账户

前往 assign,填写购物车 ID 并点击“尝试”按钮,将其绑定到你的账户。

将服务器添加到购物车

前往 POST eco
并添加服务器。

设置 cartId 和请求体。请求体如下:

{
  "duration": "P1M",
  "planCode": "24sk10",
  "pricingMode": "default",
  "quantity": 1
}

详细看看!

三个重要字段是 duration、planCode 和 qty。我认为 qty 不难理解,不过 planCode 是服务器的 planCode,租赁期限是我们想要订购的时长。目录中对此有选项,对于 ECO,没有更长期合同的扣减,因此简单使用 1 个月(P1M)。

点击“尝试”提交!

响应:

{
  "cartId": "",
  "configurations": [],
  "duration": "P1M",
  "itemId": 263---,
  "offerId": null,
  "options": [],
  "prices": [
    {
      "label": "TOTAL",
      "price": {
        "currencyCode": "EUR",
        "priceInUcents": 1699000000,
        "text": "€ 16.99",
        "value": 16.99
      }
    }
  ],
  "productId": "eco",
  "settings": {
    "planCode": "24sk10",
    "pricingMode": "default",
    "quantity": 1
  }
}

记下 ID,它将用于存储 addons!

将 addons 添加到服务器

访问 POST eco options

并填写 cartID 和请求体。对于请求体,你需要使用三个不同的 planCodes 分别执行三次。只需粘贴或编辑它,然后点击“尝试”按钮。

{
  "duration": "P1M",
  "itemId": 261---,
  "planCode": "ram-32g-ecc-2133-24sk10",
  "pricingMode": "default",
  "quantity": 1
}

{
  "duration": "P1M",
  "itemId": 261---,
  "planCode": "softraid-2x480ssd-24sk10",
  "pricingMode": "default",
  "quantity": 1
}

{
  "duration": "P1M",
  "itemId": 261---,
  "planCode": "bandwidth-300-24sk",
  "pricingMode": "default",
  "quantity": 1
}

你会收到不同的响应,显示附加价格和更多信息。

添加标签

要完成订单,你需要填写三个标签(前面提到过)。
前往 POST configuration
并填写 cartID 和 itemID(之前记下的)。

与前一步骤类似,执行三次。填写、尝试、填写、尝试,最后一次填写并尝试。

{
  "label": "dedicated_datacenter",
  "value": "gra"
}

{
  "label": "region",
  "value": "europe"
}

{
  "label": "dedicated_os",
  "value": "none_64.en"
}

你得到了三个 200 响应吗?很好,我们接近完成了!

验证订单

你可以在 这里 验证你的订单。

填写 cartId 并查看。

  "details": [
    {
      "cartItemID": 263---7,
      "description": "300Mbps unmetered public bandwidth rental - 1 month",
      "detailType": "DURATION",
      "domain": "*001.003",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 263---7,
      "description": "300Mbps unmetered public bandwidth",
      "detailType": "INSTALLATION",
      "domain": "*001.003",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 263---6,
      "description": "2x 2TB HDD Soft RAID rental - 1 month",
      "detailType": "DURATION",
      "domain": "*001.001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 263---5,
      "description": "32GB DDR4 ECC 2133MHz rental - 1 month",
      "detailType": "DURATION",
      "domain": "*001.002",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 263---1,
      "description": "KS-1 | Intel Xeon-D 1520 rental - datacenter bhs - ",
      "detailType": "INSTALLATION",
      "domain": "*001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 16.99",
        "value": 16.99
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 16.99",
        "value": 16.99
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 16.99",
        "value": 16.99
      }
    },
    {
      "cartItemID": 263---,
      "description": "KS-1 | Intel Xeon-D 1520 rental - datacenter bhs - 1 month",
      "detailType": "DURATION",
      "domain": "*001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 16.99",
        "value": 16.99
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 16.99",
        "value": 16.99
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 16.99",
        "value": 16.99
      }
    },
    {
      "cartItemID": 263039371,
      "description": "Intel Xeon-D 1520",
      "detailType": "INSTALLATION",
      "domain": "*001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    }
  ],
  "orderId": null,
  "prices": {
    "originalWithoutTax": {
      "currencyCode": "EUR",
      "text": "€ 33.98",
      "value": 33.98
    },
    "reduction": {
      "currencyCode": "EUR",
      "text": "€ 0.00",
      "value": 0
    },
    "tax": {
      "currencyCode": "EUR",
      "text": "€ 9.17",
      "value": 9.17
    },
    "withTax": {
      "currencyCode": "EUR",
      "text": "€ 43.15",
      "value": 43.15
    },
    "withoutTax": {
      "currencyCode": "EUR",
      "text": "€ 33.98",
      "value": 33.98
    }
  },
  "url": null
}

完成订单

我们到了最后一步。
前往 POST order

{
  "autoPayWithPreferredPaymentMethod": false,
  "waiveRetractationPeriod": false
}

填写,如果你想自动支付或取消订单后的等待时间,然后点击“尝试”按钮。

对于这一部分,我没有响应,因为我没有购买 KS-1。
更新:我成功购买了 KS-LE-B,所以这是此 POST 请求的输出。正如你所见,与 GET checkout 版本几乎相同。在响应的前半部分有 ToS 和其他法律数据,我将其删除,因此这是响应中有趣的部分。

{
  "details": [
    {
      "cartItemID": 262---38,
      "description": "300Mbps unmetered public bandwidth rental - 1 month",
      "detailType": "DURATION",
      "domain": "*001.001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 262--38,
      "description": "300Mbps unmetered public bandwidth",
      "detailType": "INSTALLATION",
      "domain": "*001.001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 262--37,
      "description": "2x 450Gb SSD NVMe Soft RAID rental - 1 month",
      "detailType": "DURATION",
      "domain": "*001.002",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 262--39,
      "description": "32GB DDR4 ECC 2400MHz rental - 1 month",
      "detailType": "DURATION",
      "domain": "*001.003",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    },
    {
      "cartItemID": 262--36,
      "description": "KS-LE-B rental - datacenter gra - ",
      "detailType": "INSTALLATION",
      "domain": "*001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 9.99",
        "value": 9.99
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 9.99",
        "value": 9.99
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 9.99",
        "value": 9.99
      }
    },
    {
      "cartItemID": 262--36,
      "description": "KS-LE-B rental - datacenter gra - 1 month",
      "detailType": "DURATION",
      "domain": "*001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 9.99",
        "value": 9.99
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 9.99",
        "value": 9.99
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 9.99",
        "value": 9.99
      }
    },
    {
      "cartItemID": 262--36,
      "description": "Intel Xeon E3-1245v5",
      "detailType": "INSTALLATION",
      "domain": "*001",
      "originalTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "quantity": 1,
      "reductionTotalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "reductions": [],
      "totalPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      },
      "unitPrice": {
        "currencyCode": "EUR",
        "text": "€ 0.00",
        "value": 0
      }
    }
  ],
  "orderId": ---,
  "prices": {
    "originalWithoutTax": {
      "currencyCode": "EUR",
      "text": "€ 19.98",
      "value": 19.98
    },
    "reduction": {
      "currencyCode": "EUR",
      "text": "€ 0.00",
      "value": 0
    },
    "tax": {
      "currencyCode": "EUR",
      "text": "€ 5.39",
      "value": 5.39
    },
    "withTax": {
      "currencyCode": "EUR",
      "text": "€ 25.37",
      "value": 25.37
    },
    "withoutTax": {
      "currencyCode": "EUR",
      "text": "€ 19.98",
      "value": 19.98
    }
  },
  "url": "https://www.ovh.ie/cgi-bin/order/display-order.cgi?orderId="
}

你可以看到 HDD 和 BHS DC。原因是当我完成本教程时,这是目前唯一有库存的版本。

如果所需 DC 中没有库存,你会收到错误响应。

错误消息

有时你会收到来自 API 的错误消息。它总是有适当的错误代码(4xx),并在响应体中有请求类和响应文本。
当你使用任何包装器时(例如 python-ovh),你可以捕捉到这种类型的异常。错误消息会通知你,但有时可能不够正式。

附注

  • 我对使用本描述所产生的任何责任概不负责,你应自行承担使用此说明的风险!
  • 我尽力以我最好的知识来编写它,然而我知道我和我的教程总是可以改进的。欢迎你给我任何反馈或表示感谢!

祝你使用愉快!

哦,对了,在 LET 上,你可以找到我,用户名是 adns


译文结束

转载自:使用API订购任何OVH服务器的方法与脚本

LICENSED UNDER CC BY-NC-SA 4.0
Comment