用于访问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)。
在报告问题时,如果您能提供
再现说明,那将非常有帮助——可以使用
的调用序列和/或测试数据来再现问题。

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



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

推荐PyPI第三方库


热门话题
Java类之间并发性不一致的HashMap   插件如何在JavaSwing中使用UIManager和Classloader从外部jar安装外观?   java JasperReports:找不到子报表   在项目中找不到java生成的Javadoc文件   java BigDecimal。multiply()和divide()方法返回十六进制数。为什么?   java统计出现次数并从字符串中删除重复项   调用运算符时发生java NullPointerException   Spring和Hibernate之间的java配置错误   JavaZK将用户重定向回上一页   Javasocket为传出连接指定特定的网络接口   如果拖动到某个区域外,java Make按钮操作将被取消   如何在Eclipse for selenium 3.141.59中添加Java文档链接   java从匹配条件的数组中获取所有索引   docker未连接到RemoteWebDriver的java Gitlab ci selenium测试   java重写run方法   utf 8如何使用java解码UTF8编码的字符串?   java如何从eclipse调试部署在tomcat上的web应用程序?   将字母字符与前面没有百分号的Java正则表达式匹配