2016-03-01 96 views
1

我正嘗試創建一個Sub品牌(使用自寫的SOAP客戶端)。在SoftLayer API(返回#500的API)上創建子品牌帳戶

在WSDL SoftLayer_Brand#創建對象要求的參數templateObject這是一個tns:SoftLayer_Brand

檢查的XSD文件這個複雜的類型我得到的文件類型,我通過以下哈希要求

longName: "Company Long Name", 
name: "Company Name", 
keyName: "KEY_NAME", 
account: { 
    address1: "123 5th Street", 
    city: "City", 
    companyName: "Company Name", 
    country: "US", 
    email: "[email protected]", 
    firstName: "First", 
    lastName: "Last", 
    officePhone: '1234-1234', 
    postalCode: "11011", 
    state: "NY" 
} 

我的客戶是使用下面的XML

<?xml version="1.0" encoding="UTF-8"?> 
    <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://api.service.softlayer.com/soap/v3/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <env:Header> 
    <authenticate> 
     <username>SL00000</username> 
     <apiKey>apikeyhash</apiKey> 
    </authenticate> 
    </env:Header> 
    <env:Body> 
    <tns:createObject> 
     <templateObject> 
     <longName>Company Long Name</longName> 
     <name>Company Name</name> 
     <keyName>KEY_NAME</keyName> 
     <account> 
      <address1>123 5th Street</address1> 
      <city>City</city> 
      <companyName>Company Name - Master Account</companyName> 
      <country>US</country> 
      <email>[email protected]</email> 
      <firstName>First</firstName> 
      <lastName>Last</lastName> 
      <officePhone>1234-1234</officePhone> 
      <postalCode>11011</postalCode> 
      <state>NY</state> 
     </account> 
     </templateObject> 
    </tns:createObject> 
    </env:Body> 
</env:Envelope> 

我創建子品牌之前發送請求,但它不是工作了,請你指出我是否缺少任何參數。

在霧SOFTLAYER我們創造這樣https://github.com/fog/fog-softlayer/blob/master/examples/account.md#create-a-connection-to-softlayer-account-service(免責聲明:我霧SOFTLAYER維護者之一)

試圖與參數顯示在此(舊)依據https://gist.github.com/underscorephil/377bd50e71ac02377008並沒有工作過。

只想知道是否有更改或任何驗證正在應用於參數。

謝謝

回答

1

好的,我想我已經明白了。

1:您正在使用api的v3版本,雖然此USUALLY不是問題,但您需要在此處使用v3.1。

2:在你的頭,你包括的xmlns的SL SOAP定義:TNS = 「」,所以你需要使用的xsi:type = 「TNS:SoftLayer_Brand」 或者你可以使用的xmlns:V3 =」 http://api.service.softlayer.com/soap/v3。1 /」和XSI:類型= 「V3:SoftLayer_Brand」

此調用工作

curl -d @createBrand.soap.xml https://api.softlayer.com/soap/v3.1/SoftLayer_Brand

createBrand.soap.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://api.service.softlayer.com/soap/v3.1/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <env:Header> 
    <authenticate> 
     <username>SL1234</username> 
<apiKey>kkeeyy</apiKey> 
</authenticate> 
    </env:Header> 
    <env:Body> 
<createObject > 
    <templateObject xsi:type="tns:SoftLayer_Brand"> 
    <longName>Company Long Name</longName> 
    <name>Company Name</name> 
    <keyName>KEY_NAME</keyName> 
    <account> 
     <address1>123 5th Street</address1> 
     <city>City</city> 
     <companyName>Company Name - Master Account</companyName> 
     <country>US</country> 
     <email>[email protected]</email> 
     <firstName>First</firstName> 
     <lastName>Last</lastName> 
     <officePhone>1234-1234</officePhone> 
     <postalCode>11011</postalCode> 
     <state>NY</state> 
    </account> 
    </templateObject> 
    </createObject> 
    </env:Body> 
</env:Envelope> 
+0

似乎SoftLayer WSDL是rpc/encoded(據我研究),而我用來支持SOAP操作的庫只支持文檔/文字,我增加了對rpc/encoded的支持,現在事情運行良好。謝謝! –

0

有些屬性是在createObject補充說:

  • acknowledgementRequiredFlag和
  • 策略ID

其中:

acknowledgementRequiredFlag已啓用並添加新策略,則當用戶登錄到門戶時將顯示此策略(用戶需要查看支持策略)。否則,可以禁用此選項(用戶不需要查看支持策略)。

policyId有兩種政策類型: 」SoftLayer Indirect Support Policy」 with id = 101SoftLayer Standard Support Policy with id=1(我沒有找到與這些選項有關的信息)。

下面是一個SOAP例如:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v3="http://api.service.softlayer.com/soap/v3/"> 
    <soapenv:Header> 
     <SoftLayer_BrandObjectMask xsi:type="v3:SoftLayer_BrandObjectMask"> 
     <mask xsi:type="v3:SoftLayer_Brand"/> 
     </SoftLayer_BrandObjectMask> 
     <authenticate xsi:type="v3:authenticate"> 
     <username xsi:type="xsd:string">?</username> 
     <apiKey xsi:type="xsd:string">?</apiKey> 
     </authenticate> 
    </soapenv:Header> 
    <soapenv:Body> 
     <v3:createObject soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
     <templateObject xsi:type="v3:SoftLayer_Brand"> 
     <keyName xsi:type="xsd:string">KEY_NAME</keyName> 
     <longName xsi:type="xsd:string">Company Long Name</longName> 
     <name xsi:type="xsd:string">Company Name</name> 
     <account xsi:type="ns1:SoftLayer_Account"> 
      <address1 xsi:type="xsd:string">123 5th Street</address1> 
      <city xsi:type="xsd:string">Dallas</city> 
      <companyName xsi:type="xsd:string">test Company Name</companyName> 
      <country xsi:type="xsd:string">US</country> 
      <email xsi:type="xsd:string">[email protected]</email> 
      <firstName xsi:type="xsd:string">FirstName</firstName> 
      <lastName xsi:type="xsd:string">LastName</lastName> 
      <officePhone xsi:type="xsd:string">591789611111</officePhone> 
      <postalCode xsi:type="xsd:string">32124</postalCode> 
      <state xsi:type="xsd:string">NY</state> 
     </account> 
     <supportPolicyAssignment xsi:type="ns1:SoftLayer_Policy_Brand"> 
      <acknowledgementRequiredFlag xsi:type="xsd:int">1</acknowledgementRequiredFlag> 
      <policyId xsi:type="xsd:int">101</policyId> 
     </supportPolicyAssignment> 
     </templateObject> 
     </v3:createObject> 
    </soapenv:Body> 
</soapenv:Envelope> 

我希望它幫你。

+0

喜mcruz,遺憾的是它沒有工作,發送完全你的XML(與我的數據)API返回錯誤的請求。任何進一步的建議嗎?謝謝 –

+0

在我的請求我剛添加'xsi:type =「v3:SoftLayer_Brand」'鍵入模板對象並收到一個錯誤的請求 –

+0

它看起來很奇怪,我再次執行SOA P要求,它運作良好。目前我正在使用SOAP UI,客戶請求和我發送的請求之間的唯一區別在於,列出的所有屬性都有「xsi:type」(即我的情況: FirstName,客戶案例:第一個)。請再次嘗試客戶端的請求,只添加「supportPolicyAssignment」(帶有「acknowledgementRequiredFlag」和「policyId」)的部分,避免使用「xsi:type」。 – mcruz