通过 Powershell 的 SOAP 语法
Syntax for SOAP through Powershell
我正在尝试使用 PVOrder 方法通过 Globalsign 的 API 和 Powershell 订购 SSL 证书。 URL 是 https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl and they have documentation here https://downloads.globalsign.com/acton/attachment/2674/f-092e/1/-/-/-/-/globalsign-mssl-api-user-guide-v2.3.pdf
我使用的Powershell非常简单:
$URI = "https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl"
$result = (iwr $URI –infile "C:\Users\Administrator\Desktop\script_other\pvorder_soap.xml" –contentType "text/xml" –method POST)
XML 看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<xs:complexType name="PVOrder">
<xs:sequence>
<xs:element minOccurs="0" name="Request" type="tns:BmV1PvOrderRequest"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BmV1PvOrderRequest">
<xs:sequence>
<xs:element name="OrderRequestHeader" type="tns:OrderRequestHeader"/>
<xs:element name="OrderRequestParameter" type="tns:OrderRequestParameter"/>
<xs:element name="MSSLProfileID" type="xs:string"/>
<xs:element name="MSSLDomainID" type="xs:string"/>
...
</xs:complexType>
但是,我 运行 很难弄清楚应该在何处定义参数。我发现的大多数教程中的 XML 设计看起来与此处的 XML 不同。在 google 上进行的一些搜索让我尝试将参数放在 xml 的末尾,但在我尝试之前,所以它看起来像下面这样,但响应根本没有改变。
...
<MSSLDomainID>test.com</MSSLDomainID>
</xs:complexType>
关于我应该在这里做什么有什么想法吗?我对 Powershell 有相当多的经验,但是 none 对 SOAP 和 none 我读过的教程似乎对此有答案。
您不会post WSDL。这描述了 XML 应该是什么样子。
您真正需要的是 XML 应该是什么的示例,然后您只需将变量插入其中即可。您获得的文档描述了订单的格式。实际上没有例子。我进行了快速搜索,但找不到满足您特定需求的产品。从技术上讲,您应该能够使用 WSDL 构建它。
此 GlobalSign doco 展示了一些 XML 您 post 的实际示例,但不适用于您的特定 API。
更新: 找到了一个分析 WSDL 的服务,并为您提供了可以使用的示例 XML。看看https://www.wsdl-analyzer.com/
- Copy/paste 只是 WSDL from API 在一个文本文件中
- 上传here
- 点击操作->EVOrder
- 您可以使用的示例 XML。这就是您可以 POST 到您的代码中的内容。
不要调用 Web 请求,而是使用 Powershell 中内置的名为 New-WebServiceProxy 的实用程序。完成后,您将能够看到 Web 服务公开的方法和属性。
$Proxy = New-WebServiceProxy -Uri https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl
$Proxy | get-member
Name MemberType Definition
---- ---------- ----------
AddDomainToProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddDomainToProfileCompletedEventHandler AddDomainToProfileCompleted...
AddMSSLDomainCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLDomainCompletedEventHandler AddMSSLDomainCompleted(System.Ob...
AddMSSLProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLProfileCompletedEventHandler AddMSSLProfileCompleted(System....
ChangeSubjectAltNameCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.ChangeSubjectAltNameCompletedEventHandler ChangeSubjectAltNameCompl...
Disposed Event System.EventHandler
使用此代理,我可以通过以下方式从中获取类型:
$Proxy = New-WebServiceProxy -Uri https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl -namespace globalsign -Class managed
$proxyType = $proxy.gettype().Namespace
$bmv1pvOrderRequest = New-Object("$proxyType.BmV1PvOrderRequest")
PS:\> $bmv1pvOrderRequest
OrderRequestHeader :
OrderRequestParameter :
MSSLProfileID :
MSSLDomainID :
SubID :
PVSealInfo :
ContactInfo :
SANEntries :
Extensions :
我选择尝试填写 contactinfo,它的类型是 Contactinfo,因此您必须创建一个该类型的对象并填写元素:
$C = new-object ("$proxyType.contactinfo")
$C.FirstName = 'thom'
$c.lastname = 'schumacher'
$c
FirstName LastName Phone Email
--------- -------- ----- -----
thom schumacher
接下来,您需要检查 $bmv1pvOrderRequest 中的每一项,并根据需要在每种类型的新代理中进行代理,然后将请求发送到 Web 服务。
$o = new-object ("$proxyType.orderRequestHeader")
$o
AuthToken
---------
PS:\> $p = new-object ("$proxyType.orderRequestParameter")
PS:\> $p
ProductCode :
BaseOption :
OrderKind :
Licenses :
Options :
ValidityPeriod :
CSR :
RenewalTargetOrderID :
TargetCERT :
SpecialInstructions :
Coupon :
Campaign :
$bmv1pvOrderRequest.OrderRequestHeader = $o
$bmv1pvOrderRequest.OrderRequestParameter = $p
$bmv1pvOrderRequest.ContactInfo = $c
我正在尝试使用 PVOrder 方法通过 Globalsign 的 API 和 Powershell 订购 SSL 证书。 URL 是 https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl and they have documentation here https://downloads.globalsign.com/acton/attachment/2674/f-092e/1/-/-/-/-/globalsign-mssl-api-user-guide-v2.3.pdf
我使用的Powershell非常简单:
$URI = "https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl"
$result = (iwr $URI –infile "C:\Users\Administrator\Desktop\script_other\pvorder_soap.xml" –contentType "text/xml" –method POST)
XML 看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<xs:complexType name="PVOrder">
<xs:sequence>
<xs:element minOccurs="0" name="Request" type="tns:BmV1PvOrderRequest"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BmV1PvOrderRequest">
<xs:sequence>
<xs:element name="OrderRequestHeader" type="tns:OrderRequestHeader"/>
<xs:element name="OrderRequestParameter" type="tns:OrderRequestParameter"/>
<xs:element name="MSSLProfileID" type="xs:string"/>
<xs:element name="MSSLDomainID" type="xs:string"/>
...
</xs:complexType>
但是,我 运行 很难弄清楚应该在何处定义参数。我发现的大多数教程中的 XML 设计看起来与此处的 XML 不同。在 google 上进行的一些搜索让我尝试将参数放在 xml 的末尾,但在我尝试之前,所以它看起来像下面这样,但响应根本没有改变。
...
<MSSLDomainID>test.com</MSSLDomainID>
</xs:complexType>
关于我应该在这里做什么有什么想法吗?我对 Powershell 有相当多的经验,但是 none 对 SOAP 和 none 我读过的教程似乎对此有答案。
您不会post WSDL。这描述了 XML 应该是什么样子。
您真正需要的是 XML 应该是什么的示例,然后您只需将变量插入其中即可。您获得的文档描述了订单的格式。实际上没有例子。我进行了快速搜索,但找不到满足您特定需求的产品。从技术上讲,您应该能够使用 WSDL 构建它。
此 GlobalSign doco 展示了一些 XML 您 post 的实际示例,但不适用于您的特定 API。
更新: 找到了一个分析 WSDL 的服务,并为您提供了可以使用的示例 XML。看看https://www.wsdl-analyzer.com/
- Copy/paste 只是 WSDL from API 在一个文本文件中
- 上传here
- 点击操作->EVOrder
- 您可以使用的示例 XML。这就是您可以 POST 到您的代码中的内容。
不要调用 Web 请求,而是使用 Powershell 中内置的名为 New-WebServiceProxy 的实用程序。完成后,您将能够看到 Web 服务公开的方法和属性。
$Proxy = New-WebServiceProxy -Uri https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl
$Proxy | get-member
Name MemberType Definition
---- ---------- ----------
AddDomainToProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddDomainToProfileCompletedEventHandler AddDomainToProfileCompleted...
AddMSSLDomainCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLDomainCompletedEventHandler AddMSSLDomainCompleted(System.Ob...
AddMSSLProfileCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.AddMSSLProfileCompletedEventHandler AddMSSLProfileCompleted(System....
ChangeSubjectAltNameCompleted Event Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1b_ws_v1_ManagedSSLService_wsdl.ChangeSubjectAltNameCompletedEventHandler ChangeSubjectAltNameCompl...
Disposed Event System.EventHandler
使用此代理,我可以通过以下方式从中获取类型:
$Proxy = New-WebServiceProxy -Uri https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl -namespace globalsign -Class managed
$proxyType = $proxy.gettype().Namespace
$bmv1pvOrderRequest = New-Object("$proxyType.BmV1PvOrderRequest")
PS:\> $bmv1pvOrderRequest
OrderRequestHeader :
OrderRequestParameter :
MSSLProfileID :
MSSLDomainID :
SubID :
PVSealInfo :
ContactInfo :
SANEntries :
Extensions :
我选择尝试填写 contactinfo,它的类型是 Contactinfo,因此您必须创建一个该类型的对象并填写元素:
$C = new-object ("$proxyType.contactinfo")
$C.FirstName = 'thom'
$c.lastname = 'schumacher'
$c
FirstName LastName Phone Email
--------- -------- ----- -----
thom schumacher
接下来,您需要检查 $bmv1pvOrderRequest 中的每一项,并根据需要在每种类型的新代理中进行代理,然后将请求发送到 Web 服务。
$o = new-object ("$proxyType.orderRequestHeader")
$o
AuthToken
---------
PS:\> $p = new-object ("$proxyType.orderRequestParameter")
PS:\> $p
ProductCode :
BaseOption :
OrderKind :
Licenses :
Options :
ValidityPeriod :
CSR :
RenewalTargetOrderID :
TargetCERT :
SpecialInstructions :
Coupon :
Campaign :
$bmv1pvOrderRequest.OrderRequestHeader = $o
$bmv1pvOrderRequest.OrderRequestParameter = $p
$bmv1pvOrderRequest.ContactInfo = $c