python写webapi_用python写的k3cloud的webapi接口类

本文介绍了一个Python类,用于实现与K3Cloud的WebAPI接口交互,包括登录、查询、保存/修改/暂存以及提交/审核/反审核/删除等操作。通过示例代码展示了如何进行API调用并处理响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# coding = utf-8

# By TangRuCheng 2020-12-02

import requests

import json

"""定义API类"""

class K3CloudWebAPI():

def __init__(self,

serverip,

acctId,

username,

password,

lcid=2052):

self.serverip = serverip

self.acctId = acctId

self.username = username

self.password = password

self.lcid = lcid

# 构建登录请求参数

login_url = f'http://{self.serverip}/k3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc'

login_data = {

"acctId": self.acctId,

"username": self.username,

"password": self.password,

"lcid": self.lcid

}

# 登录k3cloud,并返回cookies;登录超时设置为5分钟

login_response = requests.post(login_url, data=login_data, timeout=300*1000)

login_text = json.loads(login_response.text)

self.cookies = login_response.cookies

# 判断登录状态

if login_text['IsSuccessByAPI'] is True:

self.login_result = '登录成功'

else:

self.login_result = '登录失败'

"""定义查询"""

def query(self,

FormId,

FieldKeys,    # 查询字段集合

FilterString='',  # 过滤条件

OrderString='',   # 排序字段

StartRow=0,

Limit=0):

# 构建查询请求的参数

query_url = f'http://{self.serverip}/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc'

data = json.dumps({

"FormId": FormId,

"FieldKeys": FieldKeys,

"FilterString": FilterString,

"OrderString": OrderString,

"StartRow": StartRow,

"Limit": Limit

})  # 编码json对象

post_data = {'data': data}

# 查询数据,并返回查询结果

query_response = requests.post(url=query_url, data=post_data, cookies=self.cookies)

response_text = json.loads(query_response.text)

field_keys_list = FieldKeys.split(',')    # 将查询的字段拆分成列表

# 将查询的字段和单据数据打包成字典

bills = list()

for field_keys_data in response_text:

bill = {field_keys_list[i]: field_keys_data[i] for i in range(len(field_keys_list))}    # 字典推导式

bills.append(bill)    # 将所有的单据数据放在一个列表里

return bills

"""定义保存/修改/暂存"""

def save(self,

formid,

bill_head,     # 单据头数据

body_name='',  # 单据体名称

body_data=[{}],    # 单据体明细

NeedReturnFields=[],   # 需返回结果的字段集合

IsDeleteEntry=False,   # 默认不删除已存在的分录

InterationFlags='',

IsAutoSubmitAndAudit=True,    # 默认自动提交、审核单据

is_Draft=False     # 是否暂存

):

# 默认是保存接口地址,如果is_Draft为True则为暂存接口地址

operate = 'Save'

if is_Draft == True:

operate = 'Draft'

save_url = f'http://{self.serverip}/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.{operate}.common.kdsvc'    # 默认是保存接口地址,Draft是暂存

# 构建表单数据

Model = bill_head   # 先赋值给Model

Model.update({body_name: body_data})

data = json.dumps({

'NeedReturnFields': NeedReturnFields,

'IsDeleteEntry': IsDeleteEntry,

'InterationFlags': InterationFlags,

'IsAutoSubmitAndAudit': IsAutoSubmitAndAudit,

'Model': Model

})  # 编码json对象

post_data = {

formid: formid,

data: data

}   # 构建请求data参数

# 保存数据,接受返回信息

save_response = requests.post(url=save_url, data=post_data, cookies=self.cookies)

save_result = json.loads(save_response.text)

save_status = save_result['Result']['ResponseStatus']

# 判断保存结果

if save_status['IsSuccess'] is True:

if save_result['Result']['NeedReturnData'] == [{}]:

return '保存成功'

else:

return save_result['Result']['NeedReturnData']

else:

return save_status['Errors']

"""定义提交/审核/反审核/删除"""

def operate(self,

formid,

Numbers,    # 单据编码,列表类型

operate_type):

operate_dict = {

'提交': 'Submit',

'审核': 'Audit',

'反审核': 'UnAudit',

'删除': 'Delete'

}

operate_url = f'http://{self.serverip}/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.{operate_dict[operate_type]}.common.kdsvc'  # 操作类型对应的服务地址

data = json.dumps({Numbers: Numbers})

post_data = {

formid: formid,

data: data

}

operate_response = requests.post(url=operate_url, data=post_data, cookies=self.cookies)

operate_result = json.loads(operate_response.text)

operate_status = operate_result['Result']['ResponseStatus']

# 判断结果

if operate_status['IsSuccess'] is True:

return f'{operate_type}操作成功'

else:

return operate_result['Result']['Errors']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值