跳转到主要内容

围绕MYOB的AccountRight API的Python API。

项目描述

PyMYOB

PyPI version versions Downloads Test Lint

围绕MYOB商业API(以前称为AccountRight Live和New Essentials)的Python API。

开始前

在MYOB注册API密钥。您可以在此处找到详细的说明。

开始

安装

pip install pymyob

创建一个PartnerCredentials实例,并像在MYOB中设置的那样提供密钥、密钥和重定向URI

from myob.credentials import PartnerCredentials

cred = PartnerCredentials(
    consumer_key=<Key>,
    consumer_secret=<Secret>,
    callback_uri=<Redirect Uri>,
)

在某个地方缓存cred.state。您将使用此信息来稍后重建PartnerCredentials实例。此对象包括一个datetime对象,因此如果您的缓存无法序列化datetime对象,您需要找到一种替代方案,例如使用pickle并将其保存到二进制数据库列。

将用户重定向到 cred.url。在那里,他们需要登录到 MYOB 并授权与您的应用程序建立合作伙伴关系1。一旦完成,他们将被重定向到您提供的重定向 URI。

在您被重定向到的 URL 上,重新构建 PartnerCredentials,然后从请求中提取验证器,并使用它来验证凭据。

from myob.credentials import PartnerCredentials

def myob_authorisation_complete_view(request):
    verifier = request.GET.get('code', None)
    if verifier:
        state = <cached_state_from_earlier>
        if state:
            cred = PartnerCredentials(**state)
            cred.verify(verifier)
            if cred.verified:
                messages.success(request, 'OAuth verification successful.')
            else:
                messages.error(request, 'OAuth verification failed: verifier invalid.')
        else:
            messages.error(request, 'OAuth verification failed: nothing to verify.')
    else:
        messages.error(request, 'OAuth verification failed: no verifier received.')

再次保存 cred.state,但这次您希望它在持久存储中。所以把它放在您的数据库的某个地方。

与 MYOB 建立合作伙伴关系后,您现在可以创建一个 Myob 实例,提供已验证的凭据。

from myob import Myob
from myob.credentials import PartnerCredentials

cred = PartnerCredentials(**<persistently_saved_state_from_verified_credentials>)
myob = Myob(cred)

您几乎完成了!MYOB 有一个叫做公司文件的东西。尽管您现在已经授权了用户,但您还需要收集一组额外的凭据才能进入公司文件。

companyfiles = myob.companyfiles.all()

# Each company file has the following attrs:
comp.id  # Company Id
comp.name  # Company Name
comp.data  # Remaining data as a raw dict.

提示:companyfiles 对象指定了所有支持的管理器(即端点)。

为您的用户渲染一个下拉框,让他们选择他们希望使用哪个公司文件。通常只有他们账户中的一个,但最好检查一下。如果需要额外的公司文件身份验证(例如,当公司文件账户未通过 SSO 绑定到 my.myob 账户时),提示他们输入该公司文件的用户名和密码,并按照以下方式保存:

cred.authenticate_companyfile(<company_id>, <username>, <password>)

将新的 cred.state 保存回您的持久存储。

现在您可以访问内容了!

from myob import Myob
from myob.credentials import PartnerCredentials

cred = PartnerCredentials(**<persistently_saved_state_from_verified_credentials>)
myob = Myob(cred)

# Obtain list of company files. Here you will also find their IDs, which you'll need to retrieve a given company file later.
company_files = myob.companyfiles.all()

# Obtain a specific company file. Use `call=False` to just prep it for calling other endpoints without actually making a call yet at this stage.
comp = myob.companyfiles.get(<company_id>, call=False)

# Obtain a list of customers (two ways to go about this).
customers = comp.contacts.all(Type='Customer')
customers = comp.contacts.customer()

# Obtain a list of sale invoices (two ways to go about this).
invoices = comp.invoices.all(InvoiceType='Item', orderby='Number desc')
invoices = comp.invoices.item(orderby='Number desc')

# Create an invoice.
comp.invoices.post_item(data=data)

# Obtain a specific invoice.
invoice = comp.invoices.get_item(uid=<invoice_uid>)

# Download PDF for a specific invoice.
invoice_pdf = comp.invoices.get_item(uid=<invoice_uid>, headers={'Accept': 'application/pdf'})

# Obtain a list of tax codes.
taxcodes = comp.general_ledger.taxcode()

# Obtain a list of inventory items.
inventory = comp.inventory.item()

# Use endswith, startswith, or substringof filters
search_text = 'Acme'
customers = comp.contacts.customer(raw_filter=f"substringof('{search_text}', CompanyName)")

如果您不知道要找什么,大多数对象(例如,上面的 myobcompcomp.invoices)的 repr 将提供有关可用的管理器/方法的信息。每个方法对应于对 MYOB 的一次 API 调用。

请注意,这里尚未涵盖所有端点;我们只是根据需要添加它们。如果您想添加特定的端点,请随意将其放入 endpoints.py 文件中,并提交一个 PR。所有贡献都受欢迎,并将及时审查。 :)

1: 您的用户可以在 https://secure.myob.com/ 查看他们的合作伙伴授权。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

此版本没有可用的源分发文件。请参阅 生成分发存档的教程

构建分发

pymyob-1.2.24-py3-none-any.whl (12.9 kB 查看哈希值)

上传时间 Python 3

由以下支持