QuickBooks Web连接器将QuickBooks found an error when parsing the provided XML text stream.
消息发送到我的receiveResponseXML方法,即使我的xml在qb中检出* XML验证器。我在下面的QBTalker类中包含了authenticate和sendRequestXML方法(其他所需的方法也在类中; QB Web Connector在发送hresult值0x80040400
和消息值QuickBooks found an error when parsing the provided XML text stream.
到receiveResponseXML之前与clientVersion进行通信,验证,sendRequestXML) :QuickBooks Web连接器:“QuickBooks在解析提供的XML文本流时发现错误”,但qb * XML Validator说xml有效
class QBTalker(ServiceBase):
qbxml_version = ''
request_seq_no = 0
ticket_id = ''
@srpc(String, String, _returns=Iterable(String))
def authenticate(user, pswd):
#ticket_id = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(50))
QBTalker.ticket_id = 'COMPANY NAME IN QUICKBOOKS'
for each in [QBTalker.ticket_id, '', '', '']:
yield each
@srpc(String, String, String, String, UnsignedInteger, UnsignedInteger, _returns=String)
def sendRequestXML(id, strHCPResponse, strCompanyFileName, qbXMLCountry, qbXMLMajorVers, qbXMLMinorVers):
'''if id != QBTalker.ticket_id:
return -1
else:
'''
qbxml_version = str(qbXMLMajorVers) + '.' + str(qbXMLMinorVers)
QBTalker.request_seq_no += 1
xml = '''<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="13.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<CustomerQueryRq requestID="2">
<FullName>COMPANY NAME IN QUICKBOOKS</FullName>
</CustomerQueryRq>
</QBXMLMsgsRq>
</QBXML>
'''
QBTalker.request_seq_no = 99
root = lxml.etree.fromstring(xml)
return lxml.etree.tostring(root)
@srpc(String, String, String, String, _returns=Integer8)
def receiveResponseXML(ticket, response, hresult, message):
response = response
hresult = hresult
message = message
return 100
@srpc(String, String, String, _returns=String)
def connectionError(ticket, hresult, message):
print("QuickBooks Web Connector says a connection error has occurred.")
print("hresult is " + hresult)
print("message is " + message)
@srpc(String, _returns=String)
def getLastError(ticket):
print("QuickBooks Web Connector is asking for the last error on ticket id " + ticket if ticket else "None")
return ticket
@srpc(String, _returns=String)
def closeConnection(ticket):
print("QuickBooks Web Connector is closing the connection for ticket id " + ticket if ticket else "None")
return ticket
if __name__=='__main__':
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)
app = Application([QBTalker], tns='http://developer.intuit.com/',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11(encoding='UTF-8', xml_declaration=True),
)
wsgi_app = WsgiApplication(app)
server = make_server('localhost', 7789, wsgi_app)
server.serve_forever()
UPDATE: 好吧,我得到了“QuickBooks的解析提供的XML文本流时发现了一个错误”错误通过添加以下import语句
from spyne.model.primitive import AnyXml
,改变装饰走开线我上面的高清sendRequestXML线从
@srpc(String, String, String, String, UnsignedInteger, UnsignedInteger, _returns=String)
到
@srpc(String, String, String, String, UnsignedInteger, UnsignedInteger, _returns=AnyXml)
我想这可能MIME类型从text/html的为text/xml改变,但我不知道。我也改变
def authenticate(user, pswd):
到
def authenticate(strUserName, strPassword):
和
def sendRequestXML(id, strHCPResponse, strCompanyFileName, qbXMLCountry, qbXMLMajorVers, qbXMLMinorVers):
到
def sendRequestXML(ticket, strHCPResponse, strCompanyFileName, qbXMLCountry, qbXMLMajorVers, qbXMLMinorVers):
我现在明白的函数参数的名称是特定的。
但是,我仍然没有得到任何从我的查询返回。任何人都可以指出我应该改变什么?我在上面代码中的QUICKBOOKS中的公司名称的!CUST iif文件中使用的名称字段的值相同。预先感谢您的帮助。