在 SoftLayer API 上创建子品牌帐户(API 返回 #500)

Create sub brand account on SoftLayer API (API returning #500)

我正在尝试创建一个子品牌(使用自己编写的 SOAP 客户端)。

on wsdl SoftLayer_Brand#createObject 要求参数 templateObjecttns: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: "user@mail.com",
  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>user@mail.com</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>

我以前创建过子品牌,但是现在不能用了,如果缺少任何参数,请指点我。

我们以这种方式创建 fog-softlayer https://github.com/fog/fog-softlayer/blob/master/examples/account.md#create-a-connection-to-softlayer-account-service(免责声明:我是 fog softlayer 维护者之一)

尝试使用此(旧)要点中显示的参数 https://gist.github.com/underscorephil/377bd50e71ac02377008,但也没有用。

只是想知道是否有更改或对参数应用了任何验证。

谢谢

createObject 中添加了一些属性:

  • acknowledgementRequiredFlag 和
  • 政策编号

其中:

启用 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">user@testmail.com</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>

希望对你有所帮助

好的,我想我明白了。

1:您使用的是 api 的 v3 版本,虽然这通常不是问题,但您需要在此处使用 v3.1。

2:在您的 header 中,您使用 xmlns:tns="" 包含了 SL SOAP 定义,因此您需要使用 xsi:type="tns:SoftLayer_Brand" 或者你可以使用 xmlns:v3="http://api.service.softlayer.com/soap/v3.1/" 和 xsi:type="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>user@mail.com</email>
      <firstName>First</firstName>
      <lastName>Last</lastName>
      <officePhone>1234-1234</officePhone>
      <postalCode>11011</postalCode>
      <state>NY</state>
    </account>
  </templateObject>
    </createObject>
  </env:Body>
</env:Envelope>