通过Powershell的SOAP语法



我正在尝试使用PVOrder方法通过Globalsign的API和Powershell订购SSL证书。 URL是 https://test-gcc.globalsign.com/kb/ws/v1/ManagedSSLService?wsdl 的,他们在这里有文档 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:UsersAdministratorDesktopscript_otherpvorder_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不同。 谷歌上的一些搜索导致我尝试将参数放在 xml 的末尾,但在我尝试之前,它看起来像下面,但响应根本没有改变。

...
<MSSLDomainID>test.com</MSSLDomainID>
</xs:complexType>

关于我应该在这里做什么的任何想法? 我在Powershell方面有相当多的经验,但没有一个使用SOAP,我读过的教程似乎都没有答案。

与其调用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,因此您必须创建该类型的对象并填写元素:

$C = new-object ("$proxyType.contactinfo")
$C.FirstName = 'thom'
$c.lastname = 'schumacher'
$c
FirstName LastName   Phone Email
--------- --------   ----- -----
thom      schumacher            

接下来,您需要遍历 $bmv 1pvOrderRequest 中的每个项目,并根据需要代理每种类型的新项目,然后将请求发送到 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

你不发布 WSDL。 这描述了 XML 应该是什么样子。

你真正需要的是一个XML应该是什么的例子,然后你可以把你的变量插入其中。 您获得的文档描述了订单的格式。实际上没有例子。 我做了一个快速搜索,但找不到满足你特定需求的。 从技术上讲,使用 WSDL,您应该能够构建它。

此 GlobalSign 文档显示了您发布的实际 XML 的一些示例,但不适用于您的特定 API。

更新:找到一个分析WSDL的服务,并为您提供可以使用的示例XML。 看看 https://www.wsdl-analyzer.com/

  1. 仅从 API 复制/粘贴 WSDL 到文本文件中
  2. 在此上传
  3. 点击操作>EVerder。
  4. 您可以使用的示例 XML。 这是您可以发布到代码中的内容。

相关内容

  • 没有找到相关文章

最新更新