围绕 MYOB 的 AccountRight API 的 Python API。
项目描述
PyMYOB
围绕MYOB 的 AccountRight 和 Essentials APIs的 Python API 。
预入门
向 MYOB 注册 API 密钥。您将在此处找到详细说明。
入门
安装:
pip install pymyob
创建一个PartnerCredentials实例并提供您在 MYOB 中设置的 Key、Secret 和 Redirect Uri:
from myob.credentials import PartnerCredentials
cred = PartnerCredentials(
consumer_key=<Key>,
consumer_secret=<Secret>,
callback_uri=<Redirect Uri>,
)
缓存cred.state某处。稍后您将使用它来重建PartnerCredentials实例。将用户重定向到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.
为您的用户呈现一个下拉列表,让他们选择他们希望使用的公司文件。通常只会有一个反对他们的帐户,但最好检查一下。如果需要对公司文件进行额外的身份验证(即,当公司文件帐户未通过 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上面)的 reprs 将产生关于哪些管理器/方法可用的信息。每个方法对应一个对 MYOB 的 API 调用。compcomp.invoices
请注意,此处尚未涵盖所有端点;我们只是根据需要添加它们。如果您想添加特定的端点,请随意将其放入 endpoints.py 文件并打开 PR。欢迎所有贡献,并将及时进行审查。:)
1 :您的用户可以在https://secure.myob.com/查看他们的合作伙伴授权。↩