Xml 通过Powershell实现SOAP的语法

Xml 通过Powershell实现SOAP的语法,xml,web-services,powershell,soap,wsdl,Xml,Web Services,Powershell,Soap,Wsdl,我正在尝试使用PVOrder方法,通过带有Powershell的Globalsign API订购SSL证书。URL是,他们在这里有文档 我使用的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

我正在尝试使用PVOrder方法,通过带有Powershell的Globalsign API订购SSL证书。URL是,他们在这里有文档

我使用的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的末尾,但我尝试将参数放在xml的前面,所以看起来像下面,但响应根本没有改变

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

对我应该在这里做什么有什么想法吗?我对Powershell有相当丰富的经验,但是没有一个是关于SOAP的,而且我读过的教程似乎都没有答案。

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

您真正需要的是一个XML应该是什么的示例&然后您可以将变量插入其中。您得到的文档描述了订单的格式。实际上没有一个例子。我做了一个快速搜索,但找不到一个适合您的具体需要。从技术上讲,使用WSDL您应该能够构造它

这显示了一些您发布的实际XML示例,但不适用于您的特定API

更新:找到了一个分析WSDL的服务,并为您提供了可以使用的示例XML。看看

  • 仅在文本文件中复制/粘贴
  • 上传
  • 单击操作->EVOrder
  • 您可以使用的示例XML。这是您可以发布到代码中的内容

  • 使用内置在Powershell中的名为的实用程序,而不是调用web请求。完成后,您将能够看到webservice公开的方法和属性

    $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 
    
    $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
    
    使用此代理,我可以通过以下方式从中获取类型:

     $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服务

    $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 
    
    $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应该是什么样子。你的帖子看起来像WSDL。它应该是XML。例如。。。。test.com…为什么不使用新的WebServiceProxy cmdlet创建WebServicesProxy?此cmdlet是为处理基于SOAP的API而构建的。Powershell有一个用于处理WSDL(新WebServicesProxy)的内置cmdlet。感谢您的说明和网站链接,这正是我所需要的。在创建代理时,不要忘记-NameSpace参数,这样您就可以以正常方式访问WSDL端点公开的类。我同意这一点。。我通常使用-namespace和-class,这样我就可以确切地知道我叫它们什么了。。。我确实使用了新的webserviceproxy和gm来查找方法列表,这是我知道PVOrder是我需要的方法的一部分,但这并没有回答我最初的问题,即如何理解XML,除非新的webserviceproxy有办法做到这一点。@bluegrey:到底有什么办法可以找到呢?新的WebServiceProxy将基于WDSL中的XML为您创建所有必需的.NET类:基本上,您不需要从XML中获取任何信息。