SoftLayer API を使用してユーザーごとの請求先情報を抽出する方法

SoftLayer カスタマー・ポータルでは、請求情報がユーザー・アカウント全体について表示されます。しかし、アカウント所有者がユーザー単位の請求情報を確認したい場合があります。ポータルでは可能ではありませんが、SoftLayer API を使用してユーザー単位の請求金額を抽出することができます。

そのためには、Account API サービスを使用します。呼び出すメソッドは、getNextInvoiceTopLevelBillingItems と呼ばれます。これにより、SoftLayerBillingItem オブジェクトの配列が返されます。相当に大きなオブジェクトであるため、オブジェクト・マスクを使用して、その中の必要なフィールドを定義します。ここでは、orderItem オブジェクト (SoftLayer_Billing_Order_Item 型) が必要です。Order->UserRecord->username の参照チェーンを調べると、ポータル・ユーザー・ログイン ID を特定できます。また、invoiceItem オブジェクト (SoftLayer_Billing_Invoice_Item 型) も必要です。このオブジェクトには、totalRecurringAmount プロパティーが入っています。下記に、オブジェクト・マスク (Ruby では値が入っていないハッシュ) を作成して getNextInvoiceTopLevelBillingItems を呼び出す Ruby コードのスニペットを示します。


require 'softlayer_api'
require 'pp'


user_id = "your user id"


api_key = "your API key"


object_mask = {"orderItem" => {"order" => {"userRecord" => {"username" => ""}}},
"invoiceItem" => {"totalRecurringAmount" => ""}}


billing = SoftLayer::Service.new("SoftLayer_Account",:username => user_id,
:api_key => api_key)


user_bill= billing.object_mask(object_mask).getNextInvoiceTopLevelBillingItems


pp user_bill

無論、請求アイテムの他のプロパティーが必要な場合は別のオブジェクト・マスクを使用できます。

上記のコードにより、アカウントの全ユーザーの SoftLayer_Billing_Item の配列が返されます。次に、この配列を必要に応じて処理できます。例えば、特定のユーザーとその金額に関するすべてのアイテムを表示できます。

for item in user_bill do
if item.key?("orderItem") &&
item["orderItem"]["order"]["userRecord"]["username"] == ""
pp("User " + "" + " has an invoice item of " +
item["invoiceItem"]["totalRecurringAmount"].to_s())
end
end

orderItem キー (if ステートメントの && の左側) の存在をテストすると、注文アイテムの存在を確認できます。経常的に発生する金額がない一部の請求アイテムには、注文アイテムが関連付けられていません。

SoftLayer_Billing_Item オブジェクトのほか、注文アイテムと請求書アイテムには、子オブジェクトが関連付けられています。オブジェクトの詳細が必要な場合には、子オブジェクトを確認できます。

その他のプログラミング言語を使用するユーザー向けに、下記に、Python で請求情報を取得するためのコードを示します。

client = SoftLayer.Client(username=user_name, api_key=user_key)
object_mask = """mask[id,orderItem[id,order[userRecordId,userRecord[username]]],
invoiceItem[id,totalRecurringAmount]]""";
user_bill = client['Account'].getNextInvoiceTopLevelBillingItems(mask=object_mask)

PHP:

require_once 'SoftLayer/SoapClient.class.php';

#...
$client = SoftLayer_SoapClient::getClient('SoftLayer_Account', null, $apiUsername, $apiKey);
$mask = "mask[id,orderItem[id,order[userRecordId,userRecord[username]]],invoiceItem[id,totalRecurringAmount]]";
$client->setObjectMask($mask);
$user_bill = $client->getNextInvoiceTopLevelBillingItems();
#...
?>

Python と PHP では、オブジェクト・マスクが適切に機能するために、それらのマスクの関連プロパティーの ID を追加する必要があります。