如何使用 XLedger 的 SOAP/WSDL 接口

使用 XLedger 的 SOAP/WSDL 接口,但在没有 WSDL 和 SOAP 经验的情况下,他感到无从下手。他需要一个完整的 SOAP 新手教程或一个示例代码来帮助他入门。他特别对 GetTimesheetEntriesData 方法和它提供的属性感兴趣,并希望将数据发送到运行在智能手机上的 Web 应用。

解决方案:

作者通过使用 suds 库成功地使用了 XLedger 的 WSDL 接口。以下是解决问题的关键步骤:

  1. 导入必要的库。 他导入了 httpliburllib2suds.transport.http 等库。

  2. 创建一个 HTTPSClientAuthHandler。 这个处理器用于处理 HTTPS 请求的认证。

  3. 创建一个 HTTPSClientCertTransport。 这个传输对象用于将 SOAP 请求发送到 XLedger 的服务器。

  4. 创建 SOAP 客户端。 他使用 suds.client.Client 创建了一个 SOAP 客户端,并指定了 WSDL 接口的 URL 和传输对象。

  5. 调用 GetTimesheetEntriesData 方法。 他调用了 GetTimesheetEntriesData 方法,并指定了必要的参数,包括用户名、密钥、应用程序名称、实体代码、日期范围、自由文本、筛选器和选项。

  6. 解析 SOAP 响应。 他解析了 SOAP 响应,并将数据转换为 JSON 格式。

代码示例:

import httplib
import urllib2 as u2
from suds.transport.http import HttpTransport


class HTTPSClientAuthHandler(u2.HTTPSHandler):
    def __init__(self, key, cert):
        u2.HTTPSHandler.__init__(self)
        self.key = key
        self.cert = cert

    def https_open(self, req):
        # Rather than pass in a reference to a connection class, we pass in
        # a reference to a function which, for all intents and purposes,
        # will behave as a constructor
        return self.do_open(self.getConnection, req)

    def getConnection(self, host, timeout=300):
        return httplib.HTTPSConnection(host, key_file=self.key, cert_file=self.cert)


class HTTPSClientCertTransport(HttpTransport):
    def __init__(self, key, cert, *args, **kwargs):
        HttpTransport.__init__(self, *args, **kwargs)
        self.key = key
        self.cert = cert

    def u2open(self, u2request):
        """
        Open a connection.

        @param u2request: A urllib2 request.
        @type u2request: urllib2.Request.
        @return: The opened file-like urllib2 object.
        @rtype: fp
        """
        url = u2.build_opener(HTTPSClientAuthHandler(self.key, self.cert))
        if self.u2ver() < 2.6:
            return url.open(u2request)
        else:
            return url.open(u2request, timeout=self.options.timeout)
.
.
.
def consume_soap():
    from suds.client import Client
    from datetime import date
    from calendar import monthrange

    transport = HTTPSClientCertTransport('auth/key_no_passphrase.pem', 'auth/cert.pem')
    client = Client(XLedgerInterface.WSDL_EXPORT_PATH, transport=transport)
    year = date.today().year
    month = date.today().month
    first_date = str(date(year, month, 1))
    last_date = str(date(year, month, monthrange(year, month)[1]))
    xml = client.service.GetTimesheetEntriesData(sUserName=XLedgerInterface.USER_ID,
                                                 sKey=XLedgerInterface.KEY,
                                                 sApplication=XLedgerInterface.APPLICATION_NAME,
                                                 iEntityCode=XLedgerInterface.ENTITY_CODE,
                                                 dDateFrom=first_date,
                                                 dDateTo=last_date,
                                                 sFreeText='',
                                                 sFilter='',
                                                 eOption="Open")
    return self._get_as_json(xml)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值