用于访问Xero记帐工具的其余API的PythonAPI。
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)
记帐工具。它允许公众进入,私有和合作伙伴应用程序。
申请。请按以下步骤操作:
\public applications
public applications使用一个三步OAuth过程。
您将获得
**消费者密钥**和**消费者机密**。这两个字符串都是。
若要访问Xero API,必须首先创建以下凭据:
``python
>;>Xero.auth import publicceredentials
>;>credentials=publicceredentials(<;consumer\>;,<;consumer\&secret>;)
>;打印credentials.url
'http://my.xero.com/…'
```
他们将被要求登录他们的Xero帐户,然后显示一个请求来验证您访问用户帐户的请求。当允许访问时,
它们将被定向到一个页面,该页面将为它们提供一个6位数的验证号。
将此验证号放入一个字符串中,并对credentials
对象调用"verify()":
``python
>;>credentials.verify(<;verifier string>;)
```
这将验证您的凭据,并检索访问令牌。然后,您可以使用凭据实例化Xero API的实例:
``python
>;>;来自Xero import Xero
>;>;Xero=Xero(凭据)
```
通过回调验证的公共应用程序也可以使用回调uri验证。如果使用这种
方法,则不会向用户提供验证号。相反,
当他们授权oauth请求时,他们的浏览器将被重定向到预先配置的回调uri,它将把验证令牌直接传递到您的应用程序中。您必须提供一个域作为Xero应用程序注册的一部分;然后,在创建凭据时,在该域下提供一个URL作为第三个参数
::
``python
>;>;credentials=publiccidentials(<;consumer\u key>;,<;consumer\secret>;,<;callback_uri>;)
>;>>打印凭据。当用户授权访问其Xero帐户时,url
'http://my.xero.com/…'
````
,"回调url"
将使用三个get参数调用:
*`oauth_token`:此请求所属的oauth_token
*`oauth_verifier`:验证器字符串
*`org`:允许访问的组织的标识符。
验证凭据,如手册中的
过程。
这意味着您需要能够在提供验证时还原credentials
对象。
credentials对象的"state"属性包含重建凭据实例所需的所有详细信息:
``python
>;saved_state=凭证。state
>;>print saved_state
{'consumer_key':'…','consumer_secret':'…',…}
>;>new_credentials=ppubliccredentials(**saved廑state)
```
您还需要生成一个已签名的rsa
证书,并在向xero注册
应用程序时提交该证书。有关详细信息,请参阅[Xero Developer文档](https://developer.xero.com/)。
当您[向Xero注册您的私有应用程序](https://developer.xero.com/documentation/auth and limits/private applications/)时,您将获得一个
**使用者密钥**。您还将获得一个**消费者机密**-这可以忽略。
使用私有凭据比使用公共凭据简单得多,
因为没有验证步骤--验证是使用rsa
签名的api请求来管理的::
`` python
>;>Xero从Xero导入Xero
>;>auth导入私有凭据
>;>open(<;path to rsa key file>;)作为密钥文件:
…rsa_key=keyfile.read()
>;>credentials=privatecdentials(<;consumer_key>;,rsa_key)
>;>xero=xero(凭据)
```
[按照以下步骤](https://developer.xero.com/documentation/api-guides/create-public private-key/)生成一个公钥/私钥对来签名您的请求。在https://app.xero.com上创建Xero私有应用程序时,您将上载公钥。您将使用私钥(也称为rsa密钥)生成oauth签名。
rsa密钥是一个多行字符串,看起来像:
----开始rsa私钥-----miicxgibaakbgqdwjmxjqlgm76szkk2ehsdpv0gxtrhzh/winbgfa5jhv/ex4
….
mtxgqjkqsopucw7hwgnrquwkybaj3a+ytcfjvwa9keqhdq==
----结束rsa私钥-----
如果选择将键值存储为常量,请记住两件事:
***在任何情况下都不要**将此文件签入公共存储库。这是你的身份,任何可以访问此文件的人都可以伪装成您。
*确保在字符串的"开始私钥"部分之前没有前导空格。
公共应用程序使用的OAuth,但带有RSA签名的请求。合作伙伴OAuth令牌仍有30分钟的到期时间,但可以随时替换为新令牌。
当您[向Xero注册合作伙伴应用程序](https://developer.xero.com/documentation/auth and limits/partner applications/)时,您将拥有一个**使用者密钥**,**消费者机密**和**RSA密钥**。所有这三个元素都是必需的。
`` python
>><;credentials.refresh()
```
**重要**:``credentials.state``在令牌交换后更改。请确保保持
新状态。
目前,没有包装层来帮助创建真正的对象,它只是返回XeroAPI提供的格式精确的字典。这将变为1.0之前更有用的api
xero api对象公开了一个用于检索和更新对象的简单api。Thon
检索所有联系人对象
>;>xero.contacts.all()
[{…联系人信息…},{…联系人信息…},{…联系人信息…},…]
xero.contacts.get(u'b2b5333a-2546-4975-891f-d71a8a640d23')
{…联系人信息…}
所有名为"john smith"的联系人
>;>xero.contacts.filter(name='john smith')
[{…联系人信息…},{…联系人信息…},{…联系人信息…}]
xero.contacts.filter(name_u startswith='john')
[{…contact info…},{…contact info…},{…contact info…}]
/>检索以"smith"结尾的所有联系人
>;>>xero.contacts.filter(name_ends with='smith')
[…contact info…},{…contact info…},{…联系人信息…}]
{…联系人信息…}
xero.contacts.put({…contact info…})
c=xero.contacts.get(u'b2b5333a-2546-4975-891f-d71a8a640d23')
>;>;c['name']="john smith"
>;>;xero.contacts.save(c)
例如,检索联系人的发票:
``python
>;>xero.invoices.filter(contact廑contactid='83AD77D8-48A7-4F77-9146-E6933B7FB63B')
`````
API不支持的筛选器也可以使用如下"原始"模式构造:
``python
>;>;>xero.invoices.filter(raw='amountdue>;0')
````
如果查询可能返回100个以上的结果,则应使用"page"参数::
``python
page=1)
```
通过设置accept头
``python
content_type='application/pdf')
响应['content-disposition']='附件;filename="invoice.pdf"'
返回响应
```
xero.contacts.获取附件(c['contactid'])
[{…附件信息…},{…附件信息…}
pdf,f,"application/pdf")
>;>f.close()
>;>xero.contacts.put_attachment_data(c['contactid'],'form.pdf',data,"application/pdf")
xero.contacts.get廑u attachment(c['contactid','form.pdf',f)
>;>f.close()
>;>data=xero.contacts.get廑u attachment廑u data(c['contactid','form.pdf')
````
对于以下api对象存在相同的api模式:
*accounts
*attachments
*银行交易
*银行转账
*品牌名称
*联系人组
*联系人
*贷方票据
*货币
*员工
*费用报销
*发票
*项目
*日记账
*手工日记账
*组织
*超额付款
*付款
**预付款
*采购订单
*收据
*重复发票
*报表
*税率
*跟踪类别
*用户
你可以这样做:
````
xero.payrollapi.payruns.all()
````
>在payrollapi中,你可以访问:
*employees
*leaveapplications
*payritems
*payrollcalendars
*payruns
*payrip
*时间表
hood
在xero api周围使用包装器是一个非常好的特性,但是,了解幕后究竟发生了什么也很有趣。
xero.contacts.filter(name="john")
where=name%3d%3d%22john%22
非编码:<;Xero_API_URL>;/联系人?其中=name=="john"
```
几个参数用编码的"&;"字符分隔:
```python
\r检索名为"john"、姓为"doe"的所有联系人
>;>;xero.contacts.filter(firstname="john",lastname="doe")
其中=姓氏%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"
````
=1.0
mock不包含在形式依赖项中,因为它们对于pyxero的正常操作是不需要的。它只用于测试目的。
问题](https://github.com/freakboy3742/pyxero/issue s)。
在报告问题时,如果您能提供
再现说明,那将非常有帮助——可以使用
的调用序列和/或测试数据来再现问题。
拉取请求。如果您希望快速合并拉取请求,请确保为要添加/修复的行为包含
回归测试,或者对不可能进行回归测试的原因提供
pyxero是一个python api,用于访问[xero]提供的rest api(https://developer.xero.com)
记帐工具。它允许公众进入,私有和合作伙伴应用程序。
申请。请按以下步骤操作:
\public applications
public applications使用一个三步OAuth过程。
您将获得
**消费者密钥**和**消费者机密**。这两个字符串都是。
若要访问Xero API,必须首先创建以下凭据:
``python
>;>Xero.auth import publicceredentials
>;>credentials=publicceredentials(<;consumer\>;,<;consumer\&secret>;)
>;打印credentials.url
'http://my.xero.com/…'
```
他们将被要求登录他们的Xero帐户,然后显示一个请求来验证您访问用户帐户的请求。当允许访问时,
它们将被定向到一个页面,该页面将为它们提供一个6位数的验证号。
将此验证号放入一个字符串中,并对credentials
对象调用"verify()":
``python
>;>credentials.verify(<;verifier string>;)
```
这将验证您的凭据,并检索访问令牌。然后,您可以使用凭据实例化Xero API的实例:
``python
>;>;来自Xero import Xero
>;>;Xero=Xero(凭据)
```
通过回调验证的公共应用程序也可以使用回调uri验证。如果使用这种
方法,则不会向用户提供验证号。相反,
当他们授权oauth请求时,他们的浏览器将被重定向到预先配置的回调uri,它将把验证令牌直接传递到您的应用程序中。您必须提供一个域作为Xero应用程序注册的一部分;然后,在创建凭据时,在该域下提供一个URL作为第三个参数
::
``python
>;>;credentials=publiccidentials(<;consumer\u key>;,<;consumer\secret>;,<;callback_uri>;)
>;>>打印凭据。当用户授权访问其Xero帐户时,url
'http://my.xero.com/…'
````
,"回调url"
将使用三个get参数调用:
*`oauth_token`:此请求所属的oauth_token
*`oauth_verifier`:验证器字符串
*`org`:允许访问的组织的标识符。
验证凭据,如手册中的
过程。
这意味着您需要能够在提供验证时还原credentials
对象。
credentials对象的"state"属性包含重建凭据实例所需的所有详细信息:
``python
>;saved_state=凭证。state
>;>print saved_state
{'consumer_key':'…','consumer_secret':'…',…}
>;>new_credentials=ppubliccredentials(**saved廑state)
```
您还需要生成一个已签名的rsa
证书,并在向xero注册
应用程序时提交该证书。有关详细信息,请参阅[Xero Developer文档](https://developer.xero.com/)。
当您[向Xero注册您的私有应用程序](https://developer.xero.com/documentation/auth and limits/private applications/)时,您将获得一个
**使用者密钥**。您还将获得一个**消费者机密**-这可以忽略。
使用私有凭据比使用公共凭据简单得多,
因为没有验证步骤--验证是使用rsa
签名的api请求来管理的::
`` python
>;>Xero从Xero导入Xero
>;>auth导入私有凭据
>;>open(<;path to rsa key file>;)作为密钥文件:
…rsa_key=keyfile.read()
>;>credentials=privatecdentials(<;consumer_key>;,rsa_key)
>;>xero=xero(凭据)
```
[按照以下步骤](https://developer.xero.com/documentation/api-guides/create-public private-key/)生成一个公钥/私钥对来签名您的请求。在https://app.xero.com上创建Xero私有应用程序时,您将上载公钥。您将使用私钥(也称为rsa密钥)生成oauth签名。
rsa密钥是一个多行字符串,看起来像:
----开始rsa私钥-----miicxgibaakbgqdwjmxjqlgm76szkk2ehsdpv0gxtrhzh/winbgfa5jhv/ex4
….
mtxgqjkqsopucw7hwgnrquwkybaj3a+ytcfjvwa9keqhdq==
----结束rsa私钥-----
如果选择将键值存储为常量,请记住两件事:
***在任何情况下都不要**将此文件签入公共存储库。这是你的身份,任何可以访问此文件的人都可以伪装成您。
*确保在字符串的"开始私钥"部分之前没有前导空格。
公共应用程序使用的OAuth,但带有RSA签名的请求。合作伙伴OAuth令牌仍有30分钟的到期时间,但可以随时替换为新令牌。
当您[向Xero注册合作伙伴应用程序](https://developer.xero.com/documentation/auth and limits/partner applications/)时,您将拥有一个**使用者密钥**,**消费者机密**和**RSA密钥**。所有这三个元素都是必需的。
`` python
>><;credentials.refresh()
```
**重要**:``credentials.state``在令牌交换后更改。请确保保持
新状态。
目前,没有包装层来帮助创建真正的对象,它只是返回XeroAPI提供的格式精确的字典。这将变为1.0之前更有用的api
xero api对象公开了一个用于检索和更新对象的简单api。Thon
检索所有联系人对象
>;>xero.contacts.all()
[{…联系人信息…},{…联系人信息…},{…联系人信息…},…]
xero.contacts.get(u'b2b5333a-2546-4975-891f-d71a8a640d23')
{…联系人信息…}
所有名为"john smith"的联系人
>;>xero.contacts.filter(name='john smith')
[{…联系人信息…},{…联系人信息…},{…联系人信息…}]
xero.contacts.filter(name_u startswith='john')
[{…contact info…},{…contact info…},{…contact info…}]
/>检索以"smith"结尾的所有联系人
>;>>xero.contacts.filter(name_ends with='smith')
[…contact info…},{…contact info…},{…联系人信息…}]
{…联系人信息…}
xero.contacts.put({…contact info…})
c=xero.contacts.get(u'b2b5333a-2546-4975-891f-d71a8a640d23')
>;>;c['name']="john smith"
>;>;xero.contacts.save(c)
例如,检索联系人的发票:
``python
>;>xero.invoices.filter(contact廑contactid='83AD77D8-48A7-4F77-9146-E6933B7FB63B')
`````
API不支持的筛选器也可以使用如下"原始"模式构造:
``python
>;>;>xero.invoices.filter(raw='amountdue>;0')
````
如果查询可能返回100个以上的结果,则应使用"page"参数::
``python
page=1)
```
通过设置accept头
``python
content_type='application/pdf')
响应['content-disposition']='附件;filename="invoice.pdf"'
返回响应
```
xero.contacts.获取附件(c['contactid'])
[{…附件信息…},{…附件信息…}
pdf,f,"application/pdf")
>;>f.close()
>;>xero.contacts.put_attachment_data(c['contactid'],'form.pdf',data,"application/pdf")
xero.contacts.get廑u attachment(c['contactid','form.pdf',f)
>;>f.close()
>;>data=xero.contacts.get廑u attachment廑u data(c['contactid','form.pdf')
````
对于以下api对象存在相同的api模式:
*accounts
*attachments
*银行交易
*银行转账
*品牌名称
*联系人组
*联系人
*贷方票据
*货币
*员工
*费用报销
*发票
*项目
*日记账
*手工日记账
*组织
*超额付款
*付款
**预付款
*采购订单
*收据
*重复发票
*报表
*税率
*跟踪类别
*用户
你可以这样做:
````
xero.payrollapi.payruns.all()
````
>在payrollapi中,你可以访问:
*employees
*leaveapplications
*payritems
*payrollcalendars
*payruns
*payrip
*时间表
hood
在xero api周围使用包装器是一个非常好的特性,但是,了解幕后究竟发生了什么也很有趣。
xero.contacts.filter(name="john")
where=name%3d%3d%22john%22
非编码:<;Xero_API_URL>;/联系人?其中=name=="john"
```
几个参数用编码的"&;"字符分隔:
```python
\r检索名为"john"、姓为"doe"的所有联系人
>;>;xero.contacts.filter(firstname="john",lastname="doe")
其中=姓氏%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"
````
=1.0
mock不包含在形式依赖项中,因为它们对于pyxero的正常操作是不需要的。它只用于测试目的。
问题](https://github.com/freakboy3742/pyxero/issue s)。
在报告问题时,如果您能提供
再现说明,那将非常有帮助——可以使用
的调用序列和/或测试数据来再现问题。
拉取请求。如果您希望快速合并拉取请求,请确保为要添加/修复的行为包含
回归测试,或者对不可能进行回归测试的原因提供