用于访问Xero记帐工具的其余API的PythonAPI。

intellihr-pyxero的Python项目详细描述


皮耶罗[构建状态](https://travis-ci.org/freakboy3742/pyxero.svg?branch=master)(https://travis ci.org/freakboy3742/pyxero)


pyxero是一个python api,用于访问[xero]提供的rest api(https://developer.xero.com)
记帐工具。它允许访问公共、私有和合作伙伴应用程序。

注册你的申请。请按如下方式执行:

epository url https://test.pypi.org/legacy/dist/*`

\public applications


public applications使用一个3步OAuth过程。


当您[向Xero注册您的公共应用程序](https://developer.xero.com/documentation/auth and limits/public applications/)时,您将得到n a
**消费者密钥**和**消费者机密**。这两个字符串都是。

若要访问Xero API,必须首先创建以下凭据:

``python
>;>Xero.auth import publicceredentials
>;>credentials=publicceredentials(<;consumer\key>;,<;consumer\secret>;)
>;>print credentialals.url
'http://my.xero.com/…'
```


他们将被要求登录他们的Xero帐户,然后显示一个请求来验证您访问用户帐户的请求。当允许访问时,
它们将被定向到一个页面,该页面将为它们提供一个6位数的验证号。
将此验证号放入一个字符串中,并对credentials
对象::

```python
>>>>>凭据调用"verify()"。验证(<;verifier string>;)
```

这将验证您的凭据,并检索访问令牌。然后,您可以使用凭据实例化xero api的实例:

``python
>;>;来自xero import xero
>;>;xero=xero(凭据)
````

使用回调uri的日期。如果使用这种
方法,则不会向用户提供验证号。相反,
当他们授权oauth请求时,他们的浏览器将被重定向到预先配置的回调uri,它将把验证令牌直接传递到您的应用程序中。

要使用回调,您必须提供一个域作为xero应用程序的一部分n;然后,在创建凭据时,在该域下提供一个url作为第三个参数
::

``python
>;>credentials=publiccidentials(<;consumer\u key>;、<;consumer\u secret>;、<;callback\u uri>;)
>;>print credentials.url
'http://my.xero。com/…'
```

允许访问的组织。

然后可以使用验证器验证凭据,就像使用手册
过程一样。


验证步骤中通常会丢失credentials对象。这意味着您需要能够在提供验证后还原凭据对象。e credentials对象的"state"属性包含重建凭据实例所需的所有详细信息:

``python
>;>saved_state=credentials.state
>;>print saved_state
{'consumer_key':'…','consumer_secret'…',…}

>;>new_credentials=publiccdentials(**保存状态)
```

您还需要生成一个已签名的rsa
证书,并在向xero注册
应用程序时提交该证书。有关详细信息,请参阅[Xero Developer文档](https://developer.xero.com/)。


当您[向Xero注册您的私有应用程序](https://developer.xero.com/documentation/auth and limits/private applications/)时,您将获得一个
**使用者密钥**。您还将获得一个**消费者机密**-这可以被忽略。

导入PrivateCredentials
>;>open(<;path to rsa key file>;)作为密钥文件:
…rsa_key=keyfile.read()
>;>credentials=privatecdentials(<;consumer_key>;,rsa_key)
>;>xero=xero(credentials)
````

[遵循以下步骤](https://developer.xero.com/documentation/api-guides/create-public private-key/)生成公钥/私钥对以签名您的请求。在https://app.xero.com上创建Xero私有应用程序时,您将上载公钥。您将使用私钥(也称为rsa密钥)生成oauth签名。

rsa密钥是一个多行字符串,看起来像:

----开始rsa私钥-----miicxgibaakbgqdwjmxjqlgm76szkk2ehsdpv0gxtrhzh/winbgffa5jhv/ex4
….
mtxgqjksopucw7hwgnrquwkybaj3a+ytcfjvwa9keqhdq==
-----结束rsa私钥---

您可以通过将私钥文件的内容读入变量或将密钥值存储为常量来获取此字符串。如果选择将键值存储为常量,请记住两件事:

***在任何情况下都不要**将此文件签入公共存储库。这是您的身份,任何可以访问此文件的人都可以伪装成您。

*确保在字符串的`--begin private key--``部分之前没有前导空格。



但有RSA签名的请求。合作伙伴OAuth令牌仍有30分钟的到期时间,但可以随时替换为新令牌。

当您[向Xero注册合作伙伴应用程序](https://developer.xero.com/documentation/auth and limits/partner applications/)时,您将拥有**使用者密钥**、**使用者机密**和**RSA密钥**。所有这三个元素都是必需的。


`` python
>><;credentials.refresh()
```

**重要**:``credentials.state``在令牌交换后更改。请确保保持
新状态。



目前,那里不是帮助创建真实对象的包装层,它只返回Xero API提供的格式精确的字典。这将变为1.0之前更有用的api


xero api对象公开了一个用于检索和更新对象的简单api。
例如,要处理联系人::

``python
`retrieve all contact objects
>;>xero.contacts.all()
[{…联系人信息…},{…联系人信息…},{…联系人信息…},…]

e=datetime(2013,1,1))
[{…联系人信息…},{…联系人信息…},{…联系人信息…}]

检索名为"John Smith"
>;>>xero.contacts.filter(name="John Smith')
[{…联系人信息…},{…联系人信息…},{…联系人信息…}]

eve所有名字以"john"开头的联系人
>;>>xero.contacts.filter(name_u starts with='john')
[{…contact info…},{…contact info…},{…contact info…}]

检索所有名字以"smith"结尾的联系人
>;>>xero.contacts.filter(name_u endswith='smith')
[{…联系人信息…},{…联系人信息…},{…联系人信息…}]

{}检索名称以"john"开头、以"smith"结尾的所有联系人
>;>xero.contacts.filter(名称以"john"开头,名称以"smith"结尾)
[{…联系人信息…},{…联系人信息…},{…联系人信息…}



创建多个新对象
>;>>xero.contacts.put([{…contact info…},{…contact info…},{…contact info…}),{…contact info…}])

保存对现有对象的更新
>;>c=xero.contacts.get(u'b2b533A-2546-4975-891f-d71a8a640d23')
>;>c['name']="john smith"
>;>xero.contacts.save(c)

过滤器(contact_contactid='83AD77D8-48A7-4F77-9146-E6933B7FB63B')
````


API不支持的过滤器也可以使用如下"原始"模式来构造:
``python
>;>xero.invoices.filter(raw=-amountdue>;0')
````

大量的数据,xero api将需要越来越长的时间来响应,否则将返回一个错误。如果查询可能返回超过100个结果,则应使用"page"参数::

``python
RNED::

``python
/>#获取pdf
invoice=xero.invoices.get('af722e93-b64f-482d-9955-1b027fec896',\
headers={accept':'application/pdf'})
"attachment;filename="invoice.pdf"'
返回响应
```

>使用相关的Xero guid支持下载和上载附件对象:

``python
附件(c['contactID','form.pdf',f,'application/pdf')
>;>;f.close()

>;>;Xero.contacts.put附件数据(c['contactID','form.pdf',data,'application/pdf')

下载附件
>;>;f=open('form.pdf','wb')
>;>;Xero.con联系人。获取附件(c['contactID','form.pdf',f)
>;>f.close()

>;>data=xero.contacts。获取附件数据(c['contactID','form.pdf')
````

交易
*银行转账
*品牌名称
*联系人组
*联系人
*贷方票据
*货币
*员工
*费用报销
*发票
*项目
*日记账
*人工日记账
*组织
*超额付款
*付款
*预付款
*采购大通订单
*收据
*重复语音
*报告
*税率
*跟踪类别
*用户



你可以使用payrollapi:

*employees
*leaveapplications
*paytems
*payrollcarendars
*payruns
*payrip
*timesheets



d在引擎盖下究竟发生了什么事。


st:
HTML编码:<;Xero_API_URL>;/联系人?where=name%3d%3d%22john%22
非编码:<;Xero_API_URL>;/联系人?其中=name=="john"
```


几个参数用编码的"&;"字符分隔:

```python
GET请求是否已编码:
HTML:<;Xero_API_URL>;/联系人?其中=姓氏%3d%3d%22doe%22%26%26firstname%3d%22john%22
非编码:<;Xero API_URL>;/联系人?其中=lastname=="doe"&;first name=="john"

`````


下划线将自动转换为"dots":
``python
<;Xero_API_URL>;/联系人?where=first.name%3d%3d%22john%22%
非编码:<;Xero_API_URL>;/联系人?其中=first.name="john"
````

密度,因为正常操作Pyxero不需要
。它只用于测试目的。

问题](https://github.com/freakboy3742/pyxero/issues)。
在报告问题时,如果您能够提供
再现指令,那将非常有帮助,即可以使用
来表示生成问题。


可以通过请求请求提交新功能或错误修复。如果您希望快速合并拉取请求,请确保为要添加/修复的行为包含
回归测试,或者对不可能进行回归测试的原因提供




欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
异常如何在java中优雅地处理FileNotFoundexception   java线程卡在BlockingQueue上。无缘无故   类网格程序w/java   StrutsJava:动态应用Velocity脚本   java在运行时重写/禁用方面   java Apache POI无法正确读取Excel单元格中的秒数   具有不同用户权限的Java文件夹/文件创建   java我可以检查Firebase ValueEventListener onDataChanged是否已被调用吗?   尽管获得了用户权限,java Android开发文件权限仍被拒绝   java如何使用JPA映射map<EnumType,Double>?   java是否使用UI线程显示toast消息?   JAVAlang.IllegalArgumentException:不支持的元素:rss   java Android setRequestedOrientation活动和视图生命周期   安卓如何在Java中定义支票盒?   在Java中,对于大输入,字符串解析长期失败   使Java在XP中按计划任务运行读取env用户变量时出现问题   任务“:workflowsjava:NodeDriver”的梯度执行失败。main()   java如何检测是否只设置了部分属性?   在客户端web服务上使用JBossWS时,java无法找到/更改log4j的默认配置   java LibGDX写入文本文件并接收各种错误