SOAP POST 请求 [关闭]
Posted
技术标签:
【中文标题】SOAP POST 请求 [关闭]【英文标题】:SOAP POST requests [closed] 【发布时间】:2021-10-04 02:08:24 【问题描述】:我必须使用 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>
【问题讨论】:
请在每个帖子中提出一个问题。 对于每一个:你尝试过什么?包括您的代码。你遇到了什么问题? 将帖子编辑为 1 个问题。也添加了代码,但我想使用结构来实现它。我也尝试过使用https://github.com/tiaguinho/gosoap
。
【参考方案1】:
为 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
项目回购:https://github.com/hooklift/gowsdl
github.com/fiorix/wsdl2go
这是一个备用 CLI 工具,有 402 个 GitHub 星和以下语法。它还没有更新到 Go Modules 并且使用 dep
进行依赖管理。
Usage: wsdl2go < file.wsdl > hello.go
项目回购:https://github.com/fiorix/wsdl2go
github.com/droyo/go-xml
这个工具有 224 颗 GitHub 星并使用 Go 模块。
作者写道:
这段代码的边缘仍然非常粗糙,但我已经成功地使用它从 Apache Axis 应用程序中为一些非常复杂的 XML 模式生成类型声明。
项目回购:https://github.com/droyo/go-xml
【讨论】:
谢谢,但这些工具并没有太大帮助,只是提供了基本的结构。 如果您不想手动创建大量结构,代码生成是一种使用方法。由于这些不能满足您的需求,因此比手动创建更有效的方法是 (a) 更新现有工具或 (b) 构建您自己的工具。我的团队在 REST API 方面都做到了:为现有的代码生成工具做出贡献,并从头开始构建我们自己的。以上是关于SOAP POST 请求 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
java使用POST发送soap报文请求webservice返回500错误解析