请教二次开发超级model接口调用post发送数据方式,新建任务为例

回贴
回帖数 15
阅读数 14917
发表时间 2019-10-30 10:00:05
🙉
赵找找 楼主

按照说明文档构造URL为:

http://127.0.0.1/zentao/api.php?m=api&f=getModel&module=task&methodName=create&params=projectID=2&code=zabbix&time=1572400076&token=af258bfdd13a2db2b2de4a5d868df506

使用postman发送post参数

结果显示status:fail。请问是何原因,url构造或者post参数有问题否?


10个回复
🙉
赵找找 沙发

1、url的格式对吗?是以api中的格式为准,还是编辑器中的格式?

2、参数是传输普通参数,还是json?(两种都试了,报一样的错)

3、json格式需要加data:{ }否?

2019-10-30 14:04:23 赵找找 回帖
石洋洋 板凳

1、调用格式以 api调用文档中的介绍格式为准,后台-二次开发-api 页面展示的是有哪些函数及函数的参数有哪些;

  • api调用方法二:

这个对应的文档为:http://devel.easycorp.cn/book/extension/api-intro-43.html

两种方法使用其中一个即可,推荐第一种。

2、失败:

  • 找一下禅道的php日志,看看有什么记录:zentao(pro/ep/pms)/config/my.php中debug的值改成true  重新操作一下 看日志文件 zentao(pms/ep/pro)/tmp/log/php开头的今天的文件有什么报错。注:不要找sql开头的文件。
  • 如果是创建编辑,检查一下必填项是否都填写了。
3、函数的参数直接按照上面的调用网址拼装,post的数据可以参考浏览器post数据的格式进行拼装,。
2019-10-30 17:58:03 石洋洋 回帖
🙉
赵找找 #3

Undefined property: stdClass::$type in module\task\model.php on line 52 when visiting /zentao/api.php?m=api&f=getModel&module=task&methodName=create&params=projectID=2&

code=zabbix&time=1572491195&token=6b384b29bac0a86c4be623a761d5d818


Invalid argument supplied for foreach() in module\task\model.php on line 54 when visiting /zentao/api.php?m=api&f=getModel&module=task&methodName=create&params=projectID=2&

code=zabbix&time=1572491195&token=6b384b29bac0a86c4be623a761d5d818


2019-10-31 11:08:23 赵找找 最后编辑 2019-10-31 11:08:23 赵找找 回帖
🙉
赵找找 #4

这是post文件的形式

用wireshark抓包,提交数据类型是multipart/form-data,数据以 boundary 开始, 紧接着换行,接着内容描述信息, 接着换2行, 接着是数据; 然后以 --boundary-- 结尾, 最后换行

MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "----WebKitFormBoundarySYQ54UExTqY1Q1Ca"

    [Type: multipart/form-data]
    First boundary: ------WebKitFormBoundarySYQ54UExTqY1Q1Ca\r\n
    Encapsulated multipart part: 
        Content-Disposition: form-data; name="project"\r\n\r\n
        Data (1 byte)
    Boundary: \r\n------WebKitFormBoundarySYQ54UExTqY1Q1Ca\r\n
    Encapsulated multipart part: 
        Content-Disposition: form-data; name="type"\r\n\r\n
        Data (5 bytes)
    Boundary: \r\n------WebKitFormBoundarySYQ54UExTqY1Q1Ca\r\n
    Encapsulated multipart part: 
        Content-Disposition: form-data; name="module"\r\n\r\n
        Data (2 bytes)

。。。。

。。。。

    Last boundary: \r\n------WebKitFormBoundarySYQ54UExTqY1Q1Ca--\r\n

2019-10-31 13:16:05 赵找找 回帖
🙉
赵找找 #5

试了下相同的url,待办(todo)和需求(story)相应的model超级接口都是可以的,就是任务(task)这个不行,log提示就是3楼的信息,提示type属性未定义。是不是接口这块有问题。

相同的form-data 使用第二种url /zentao/task-create-1-1-3.json?zentaosid=0FCA9334BA6B529961C367C600168C67&t=json。就可以成功


直接在后台-二次开发-编辑器-任务里调用create api就会的到3楼的报错信息

2019-10-31 16:57:20 赵找找 最后编辑 2019-10-31 16:57:20 赵找找 回帖
石洋洋 #6
type是任务的类型,这个字段是必填项,可以在禅道的task/model.php 中用a($type);跟踪打印一下 type的值是否存在,再任务类型中是否能找到 devel这个值。
2019-10-31 17:41:36 石洋洋 回帖
🙉
赵找找 #7

用var_dump($task);跟踪了下,应该是post数据没有解析进来。使用postman,发送选择form-data,设置Content-Type=multipart/form-data。用wireshark抓包工具看,除了封装是数字码,不是webkitformboundarys外没别的区别(和4楼的禅道web发送的数据包对比)

MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "--------------------------647570923192721642361879"
    [Type: multipart/form-data]
    First boundary: ----------------------------647570923192721642361879\r\n
    Encapsulated multipart part: 
        Content-Disposition: form-data; name="type"\r\n\r\n
        Data (5 bytes)
            Data: 646576656c
            [Length: 5]
    Boundary: \r\n----------------------------647570923192721642361879\r\n
    Encapsulated multipart part: 
        Content-Disposition: form-data; name="project"\r\n\r\n
        Data (1 byte)
            Data: 32
            [Length: 1]
    Boundary: \r\n----------------------------647570923192721642361879\r\n
    Encapsulated multipart part: 
        Content-Disposition: form-data; name="module"\r\n\r\n
        Data (2 bytes)
            Data: 3130
            [Length: 2]
    Boundary: \r\n----------------------------647570923192721642361879\r\n
   

不知道是哪里配置的问题导致post没有把值传进去呢?

2019-11-01 16:34:08 赵找找 最后编辑 2019-11-01 16:34:08 赵找找 回帖
禅道-Bee #8
如果是11.6.4版本的,可以将:zentao/framework/base/router.class.php 598-600行注释下,然后试试呢?
2019-11-01 17:42:22 禅道-李锡碧 回帖
🙉
赵找找 #9

注释掉后type不报错了,看打印type可以取到了,现在报task/model.php里这句的错:

语句:foreach($this->post->assignedTo as $assignedTo)

错误:Invalid argument supplied for foreach()

看文档这个assignedTo不是必填项,但在post中填了也一样报

搜了一下写assignedTo[]就可以了,地址贴不出来,文章名字叫《在禅道项目管理软件v9.8.3的一个API调用bug的排错中使用到的一些工具和分析方法》。


2019-11-05 14:54:40 赵找找 最后编辑 2019-11-05 14:54:40 赵找找 回帖
禅道-Bee #10
assignedTo,传值的时候是个数组。可以再禅道页面先提交数据,f12 调试工具,看下提交的数据格式的。
2019-11-05 14:51:55 禅道-李锡碧 回帖
联系人
刘璐/高级客户经理
电话(微信)
18562550650
QQ号码
2845263372
联系邮箱
liulu@chandao.com
返回顶部
刘璐
高级客户经理
18562550650
2845263372
统一服务热线 4006-8899-23
我要提问提问有任何问题,您都可以在这里提问。 问题反馈反馈点击这里,让我们聆听您的建议与反馈。