wechat4u icon indicating copy to clipboard operation
wechat4u copied to clipboard

uploadMedia 好像不起作用,是不是微信协议变了

Open match08 opened this issue 8 years ago • 8 comments

uploadMedia 好像不起作用,是不是微信协议变了

match08 avatar Mar 31 '17 11:03 match08

还能用吧,你看看run-core.js里的例子,都能行的

spacelan avatar Apr 01 '17 03:04 spacelan

谢谢你的回复,例子里面的我测试了不可以了,发送不了图片报错。我看了微信的网页版协议是有变化,我修改了协议部分现在可以了。

match08 avatar Apr 01 '17 03:04 match08

是么,那你在浏览器上登录微信之后,是在哪个域下? wx还是wx2还是其他的?

spacelan avatar Apr 01 '17 03:04 spacelan

在wx, 然后使用了MULTI发送

match08 avatar Apr 01 '17 03:04 match08

我也是在wx.qq.com下,可是我这里还没有出现问题

能把你改过的改吗贴出来看看么

spacelan avatar Apr 01 '17 03:04 spacelan

//上传媒体文件 uploadMedia(fullfilename, rename, toUserName){

let mediatype;
let type = mime.lookup(fullfilename);
let size = fs.statSync(fullfilename).size;
let filename = rename?rename:path.basename(fullfilename);

let mediaId = this.mediaSend++
//let clientMsgId = +new Date() + '0' + Math.random().toString().substring(2, 5)
let clientMsgId = getClientMsgId()

let uploadMediaRequest = JSON.stringify({
    BaseRequest:  this.getBaseRequest(),
    ClientMediaId: clientMsgId,
    TotalLen: size,
    StartPos: 0,
    DataLen: size,
    MediaType: 4,
    FromUserName: this.user.UserName,
    ToUserName: toUserName || this.user.UserName
})

let ext = filename.match(/.*\.(.*)/)
  if (ext) {
    ext = ext[1].toLowerCase()
  } else {
    ext = ''
  }

  switch (ext) {
    case 'bmp':
    case 'jpeg':
    case 'jpg':
    case 'png':
      mediatype = 'pic'
      break
    case 'mp4':
      mediatype = 'video'
      break
    default:
      mediatype = 'doc'
  }


let form = [];
form.push({
    name: 'id',
    value: 'WU_FILE_' + mediaId
});
form.push({
    name: 'name',
    value: filename
});
form.push({
    name: 'type',
    value: type
});
form.push({
    name: 'lastModifieDate',
    value: new Date().toGMTString()
});
form.push({
    name: 'size',
    value: size
});
form.push({
    name: 'mediatype',
    value: mediatype
}); //'doc'
form.push({
    name: 'uploadmediarequest',
    value: uploadMediaRequest
});
form.push({
    name: 'webwx_data_ticket',
    value: this.PROP.webwxDataTicket
});
form.push({
    name: 'pass_ticket',
    value: encodeURI(this.PROP.passTicket)
});
form.push({
    name: 'filename',
    filename: fullfilename
});

let params = {
    f: 'json'
}
let headers = {
  'Connection':'keep-alive',
  'Accept':'*/*',
  'Accept-Encoding':'gzip, deflate, br',
  'Accept-Language':'zh-CN,zh;q=0.8',
  'Host':'file.wx.qq.com',
  'Origin':'https://wx.qq.com',
  'Referer':'https://wx.qq.com/',
  'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36'
};
return this.requestAdapter.R({
    url: this.CONF.API_webwxuploadmedia,
    method: 'MULTI',
    headers:headers,
    params: params,
    data: form
}).then(function(res) {
    var mediaId = res.data.MediaId
    if (!mediaId) {
        throw new Error('MediaId获取失败')
    }

    return {
      name: filename,
      size: size,
      ext: ext,
      mediatype: mediatype,
      mediaId: mediaId
    }
}).catch(function(err) {
    debug(err)
    throw new Error('上传图片失败')
})

}

match08 avatar Apr 01 '17 03:04 match08

requestAdapter.R 这个方法使用了 poorequest 这个插件的MULTI发送

match08 avatar Apr 01 '17 03:04 match08

请问解决了吗? 我这边貌似uploadMedia不起作用了, 没有任何返回,也不报错

lsl233 avatar Apr 11 '17 07:04 lsl233