我正在尝试使用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/
- 仅从 API 复制/粘贴 WSDL 到文本文件中
- 在此上传
- 点击操作>EVerder。
- 您可以使用的示例 XML。 这是您可以发布到代码中的内容。