采用嵌套 complexType 输入的 zeep 调用方法

问题描述

我在 python 中使用 zeep 来调用网络服务 (from this wsdl link)。 假设我想调用方法 cardP2PInfo

我的问题是:

为cardP2PInfo 方法构建输入complexType 对象(希望使用get_typeget_element)的正确方法是什么?当我尝试时,它增加了一层!

在为 cardP2PInfo 方法创建/填充输入结构时我做错了什么???

from zeep import Client

def test():
    client = Client('URL_TO_WSDL')
    
    CardP2PInfo = client.get_type('ns0:cardP2PInfo') 
    CardP2PInfoElement = client.get_element('ns0:cardP2PInfo') 
    UserCredentials = client.get_type('ns0:UserCredentials')
    
    cardP2PInfoElement = CardP2PInfoElement()
    
    userCredentials = UserCredentials(Login='user',Password='pass')
    
    cardP2PInfoElement.StPimsApiPartnerKey = 'XXXXXXXXX'
    cardP2PInfoElement.UserCredentials = userCredentials
    cardP2PInfoElement.P2pCardNumber = 'CARD_NUMBER'
    cardP2PInfoElement.Lang = 'EN'
    
    cardP2PInfo = CardP2PInfo([cardP2PInfoElement])
    
    result = client.service.cardP2PInfo(cardP2PInfo)
    
    return result

我的代码在 SOAP 下发送,正如您所看到的,它生成了 2 次嵌套的 cardP2PInfoRequest 标签。但是,发送 SOAP 请求时不能有内部 cardP2PInfoRequest 标签

<?xml version='1.0' encoding='utf-8'?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap-env:Body>
        <ns0:cardP2PInfo xmlns:ns0="http://st.apus.com/">
            <cardP2PInfoRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:cardP2PInfo">
                <cardP2PInfoRequest>
                    <StPimsApiPartnerKey>XXXXXXXXX</StPimsApiPartnerKey>
                    <UserCredentials>
                        <Login>user</Login>
                        <Password>pass</Password>
                    </UserCredentials>
                    <P2pCardNumber>CARD_NUMBER</P2pCardNumber>
                    <Lang>EN</Lang>
                </cardP2PInfoRequest>
            </cardP2PInfoRequest>
        </ns0:cardP2PInfo>
    </soap-env:Body>
</soap-env:Envelope>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)