UESTC-BBS / API-Docs

45 stars 15 forks source link

`forum/topicadmin`返回报错html页面 #10

Closed just4fun closed 8 years ago

just4fun commented 8 years ago

正在研究如何回复帖子,使用js的fetch方法如下:

fetch(url, {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(payload)
}).then(...)

payload结构如下:

{
  act: 'reply',
  body: {
    json: {
      fid: 25,
      tid: 1578957,
      isAnonymous: 0,
      isOnlyAuthor: 0,
      isQuote: 0,
      replyId: null,
      title: null,
      content: [
        {
          type: 0,
          infor: 'reply content...'
        }
      ]
    }
  }
}

但是response一直返回带有您当前的访问请求当中含有非法字符,已经被系统拒绝已经将此出错信息详细记录, 由此给您带来的访问不便我们深感歉意的错误页面。

按照文档最前面说的把Content-Type改成application/x-www-form-urlencoded;charset=UTF-8也是一样的效果;url或者headers里加上token跟secret也一样。

fangjue commented 8 years ago

需要 apphash 参数:https://github.com/UESTC-BBS/API-Docs/wiki/Mobcent-API#apphash

just4fun commented 8 years ago

@fangjue 感谢,刚试了一下,还是得到同样的错误。

我用js模拟了文档里php的那个方法:

// http://phpjs.org/functions/time/
function time() {
  return Math.floor(new Date().getTime() / 1000);
}

// https://github.com/UESTC-BBS/API-Docs/wiki/Mobcent-API#apphash
export function getAppHashValue() {
  let timeStr = time().toString();
  let encryptedTimeStr = md5(timeStr.substr(0, 5) + '.appbyme_key');
  return encryptedTimeStr.substr(8, 8);
}

然后添加了apphash/accessToken/accessSecret三个参数,还是报错。

ps: md5是node package的MD5。

fangjue commented 8 years ago

apphash 是多少?目前为 "e7e744b6"。

let encryptedTimeStr = md5(timeStr.substr(0, 5) + '.appbyme_key');

这一行不对,'appbyme_key' 多了一个点 .

just4fun commented 8 years ago

@fangjue 去掉点了,response像是正常了。

qq20151215-1 2x

但网站上找不到我回复的评论,像是没发出去。 有什么字段是必填吗?我的payload如一楼所示。

fangjue commented 8 years ago

POST 正文应该是 act=reply&json={...},而不是把 act 放在 JSON 里面。

just4fun commented 8 years ago

@fangjue 那doc感觉有点confuse啊。

我改成你说的这样了,最后得到抱歉,指定的主题不存在或已被删除或正在被审核,啊啊啊啊啊啊啊有点hold不住了。

fangjue commented 8 years ago

具体请求是怎样的?

just4fun commented 8 years ago
fetch('http://bbs.uestc.edu.cn/mobcent/app/web/index.php?r=forum/topicadmin&apphash=...&accessToken=...&accessSecret=...', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  body: `act=reply&json=${JSON.stringify(payload)}`
}).then(...)

body最后是act=reply&json={"fid":25,"tid":1579507,"isAnonymous":0,"isOnlyAuthor":0,"isQuote":0,"replyId":null,"title":null,"content":[{"type":0,"infor":"好可怕"}]}

payload如下:

{
  fid: 25,
  tid: 1579507,
  isAnonymous: 0,
  isOnlyAuthor: 0,
  isQuote: 0,
  replyId: null,
  title: null,
  content: [
    {
      type: 0,
      infor: '好可怕'
    }   
  ]
}
fangjue commented 8 years ago

payload 的格式应该是:

{
  body: {
    json: {
      ...
    }
  }
}
just4fun commented 8 years ago

抱歉,您的帖子小于 6 个字符的限制...content输入再长也返回这个...

fangjue commented 8 years ago

"content": "又是一个 JSON 字符串,格式见下面。",

content 的值此处还需要一次 JSON.stringify

just4fun commented 8 years ago

我去,终于成功了,感谢。 giphy 3

文档我可以编辑吗?有些地方第一次看确实有些不清楚。

fangjue commented 8 years ago

欢迎编辑。

callofdutyops commented 8 years ago

apphash那一块二确实有点confused啊....添加了java版本。