围绕myob的accountright api的python api。
pymyob的Python项目详细描述
子宫肌瘤
一个围绕MYOB's AccountRight Live API的python api。
此项目仅支持Python3。
开始前
向myob注册api密钥。你会找到详细的说明here。
开始
安装:
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
实例。
将用户重定向到cred.url
。在那里,他们需要登录myob并授权与您的应用程序合作。一旦这样做,它们将被重定向到您提供的重定向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.
呈现一个下拉列表供用户选择要使用的公司文件。通常情况下,他们的账户上只会有一个,但最好核对一下。选择后,提示他们输入该公司文件的用户名和密码保存如下:
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()
如果你不知道你在找什么,大多数对象的代表(例如上面的myob
,comp
,comp.invoices
)都会给出可用的管理器/方法的信息。
每个方法对应一个对MYOB的API调用
注意,这里还没有涵盖所有端点;我们只是根据需要添加它们。如果你想添加一个特定的端点,请随意将其放入endpoint s.py文件并打开一个pr。所有的贡献都是受欢迎的,并将被迅速审查。:)
1:您的用户可以在https://secure.myob.com/查看他们的合作伙伴授权↩