用于访问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)。
在报告问题时,如果您能够提供
再现指令,那将非常有帮助,即可以使用
来表示生成问题。
可以通过请求请求提交新功能或错误修复。如果您希望快速合并拉取请求,请确保为要添加/修复的行为包含
回归测试,或者对不可能进行回归测试的原因提供
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)。
在报告问题时,如果您能够提供
再现指令,那将非常有帮助,即可以使用
来表示生成问题。
可以通过请求请求提交新功能或错误修复。如果您希望快速合并拉取请求,请确保为要添加/修复的行为包含
回归测试,或者对不可能进行回归测试的原因提供