围绕MYOB的AccountRight API的Python API。
项目描述
PyMYOB
围绕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)")
如果您不知道要找什么,大多数对象(例如,上面的 myob
、comp
、comp.invoices
)的 repr 将提供有关可用的管理器/方法的信息。每个方法对应于对 MYOB 的一次 API 调用。
请注意,这里尚未涵盖所有端点;我们只是根据需要添加它们。如果您想添加特定的端点,请随意将其放入 endpoints.py 文件中,并提交一个 PR。所有贡献都受欢迎,并将及时审查。 :)
1: 您的用户可以在 https://secure.myob.com/ 查看他们的合作伙伴授权。↩
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。
源分发
构建分发
pymyob-1.2.24-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5942b639270a9bc502283ecd931e11bc73c056119f081a6663996c1053d88c7b |
|
MD5 | 1ce4e1a5ebd8346e91efac9ddf45b581 |
|
BLAKE2b-256 | 0434573ac884301cb77c004fbf70a158b155621861de6a8162c798e3273c552f |