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 请求 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

soap协议和普通的post请求有啥区别呢

用post来进行Soap请求

java使用POST发送soap报文请求webservice返回500错误解析

使用 org.apache.http 发送带有 SOAP 操作的 HTTP Post 请求

WebService Get/Post/Soap 方式请求

使用 Apache CXF 在 SOAP POST 请求中出错,但 curl 有效