在 SoftLayer API 上创建子品牌帐户(API 返回 #500)
Create sub brand account on SoftLayer API (API returning #500)
我正在尝试创建一个子品牌(使用自己编写的 SOAP 客户端)。
on wsdl SoftLayer_Brand#createObject 要求参数 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: "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 = 101
和 SoftLayer 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>
我正在尝试创建一个子品牌(使用自己编写的 SOAP 客户端)。
on wsdl SoftLayer_Brand#createObject 要求参数 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: "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 = 101
和 SoftLayer 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>