SOAP POST requests



我必须使用Go集成SOAP API,

代码我尝试没有结构https://gist.github.com/zaynkorai/b612c527f85c43c18fa878ef2a0e4b0e

请求数据看起来像这样,
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hps="http://Hps.Exchange.PosGateway">
<soapenv:Header/>
<soapenv:Body>
<hps:PosRequest>
<hps:Ver1.0>
<hps:Header>
<hps:LicenseId>${#Project#LicenseID-Retail}</hps:LicenseId>
<hps:SiteId>${#Project#SiteID-Retail}</hps:SiteId>
<hps:DeviceId>${#Project#DeviceID-Retail}</hps:DeviceId>
<hps:UserName>${#Project#UserName-Retail}</hps:UserName>
<hps:Password>${#Project#Password}</hps:Password>
<hps:SiteTrace>${#Project#SiteTrace}</hps:SiteTrace>
<hps:DeveloperID>${#Project#DeveloperID}</hps:DeveloperID>
<hps:VersionNbr>${#Project#VersionNbr}</hps:VersionNbr>
<hps:ClerkID>${#Project#ClerkID}</hps:ClerkID>
</hps:Header>
<hps:Transaction>
<hps:CreditSale>
<hps:Block1>
<hps:CardData>
<hps:TrackData method="swipe">${#Project#VISA_EMV_TRACK2}</hps:TrackData>
</hps:CardData>
<hps:Amt>25.00</hps:Amt>
<hps:AllowDup>Y</hps:AllowDup>
<hps:TagData>
<hps:TagValues source="chip">${#Project#VISA_EMV_TAGS_ONLINE}</hps:TagValues>
</hps:TagData>
</hps:Block1>
</hps:CreditSale>
</hps:Transaction>
</hps:Ver1.0>
</hps:PosRequest>
</soapenv:Body>
</soapenv:Envelope>

为API创建Go结构体定义是一个常见的问题。SOAP WSDL构件定义了API,因此可以构建一个转换工具来将SOAP WSDL转换为Go结构。

有一些现有的工具可以从SOAP WSDL文件自动生成Go结构,因此您不必像现在这样手工创建它们。下面提供了一些现有工具的信息。如果现有工具不能满足您的需求,代码生成仍然是用于大规模创建结构的方法,但是您可能需要考虑增强现有工具或构建自己的工具。

当处理复杂的api时,你只需要执行一小部分操作,一个更小的Go定义可能会更有效地实现。您可以只定义需要的api和属性,也可以不创建任何结构体,并根据需要对XML进行一般解析。

github.com/hooklift/gowsdl

这是一个更流行的CLI工具,有881个GitHub星星和以下语法。还支持Go模块。

Usage: gowsdl [options] myservice.wsdl
-o string
File where the generated code will be saved (default "myservice.go")
-p string
Package under which code will be generated (default "myservice")
-i    Skips TLS Verification
-v    Shows gowsdl version

Project repo: https://github.com/hooklift/gowsdl

github.com/fiorix/wsdl2go

这是一个备用的CLI工具,有402个GitHub星号和以下语法。它还没有更新到Go Modules,并且使用dep进行依赖管理。

Usage: wsdl2go < file.wsdl > hello.go

Project repo: https://github.com/fiorix/wsdl2go

github.com/droyo/go-xml

这个工具有224个GitHub星星和使用Go模块。

作者写道:

这段代码仍然非常粗糙,但是我已经成功地使用它从Apache Axis应用程序中为一些非常复杂的XML模式生成类型声明。

Project repo: https://github.com/droyo/go-xml

最新更新