收藏
回答

后端使用nodejs,API接口:security.imgSecCheck如何才能正确调用?

测试了几十遍,一直传不上数据,一直返回{ errcode: 41005, errmsg: 'media data missing hint: [NM04491543]' },在此跪求大佬解决。

我的代码如下,写的不好望大佬指教,最好解释一下。

const fs = require('fs');

const request = require('request');

request({

            url: `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${access_token}`,
            method: 'POST',
            json: true,
            form: {
                media: fs.readFileSync(file.path), // 其中file.path是图片路径,fs.readFileSync(file.path)返回的是一个Buffer
            },
        },
            (err, response, body) => {
                console.log(body);
            })


回答关注问题邀请回答
收藏

5 个回答

  • 李🐶嗨
    李🐶嗨
    04-12

    https://developers.weixin.qq.com/community/develop/doc/00000ef32dc64883d9d93f31f56800 这个链接解决了问题

    04-12
    有用
    回复
  • 初影不在
    初影不在
    02-11

    重大消息!!重大消息!!

    时隔两个月,当我重新开展这个项目的时候,终于花了4个小时,综合各路消息解决了。

    废话不多说,直接上代码

    const fs = require('fs');
    const request = require('request');
    
    request({
                url: `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${access_token}`,
                method: "POST",
    //查了很多资料,虽然搞不懂原理,但必须这样写!!
                formData: {
                    buffer: {
                        value: fs.readFileSync(temp_file.path),
    // 其中temp_file.path是图片路径,fs.readFileSync(temp_file.path)返回的是一个Buffer    
                        options: {
                            filename: temp_file.name, // 文件名,随便填,但必须要有
                            contentType: temp_file.type, // 文件类型,比如'image/jpeg'
                        }
                    },
                },
            },
                (error, response, body) => {
                 console.log(body) 
                      })
    
    02-11
    有用
    回复 4
    • 叶凌风
      叶凌风
      03-29
      本来是后端做的,安全的,你这样
      03-29
      回复
    • 李🐶嗨
      李🐶嗨
      04-12
      用axios在node端调用新增素材接口也是坑爹,media data missing hint,试下你的
      04-12
      回复
    • 李🐶嗨
      李🐶嗨
      04-12
      request包,github repo上说2月份就废弃了么
      04-12
      回复
    • 玩偶^O^
      玩偶^O^
      08-05
      怎么解决的!
      08-05
      回复
  • 10号
    10号
    2019-12-03

    请问解决没有

    2019-12-03
    有用
    回复 1
  • 老张
    老张
    2019-12-01

    改用云调用吧。

    2019-12-01
    有用
    回复 3
    • 初影不在
      初影不在
      02-11
      解决了
      02-11
      回复
    • 初影不在
      初影不在
      02-11
      云调用不行,我用的是阿里云,云调用必须用腾讯云
      02-11
      回复
    • 老张
      老张
      02-11回复初影不在
      云调用可以。不需要服务器。
      02-11
      回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-12-01

    网上找的,试试看

    var request = require('request');

    var FormData = require('form-data');


    var form = new FormData();

    form.append("media", fs.readFileSync(file.path));


    form.getLength(function(err, length){

      if (err) {

       return requestCallback(err);

      }

      var r = request.post("https://api.weixin.qq.com/wxa/img_sec_check?access_token=${access_token}", requestCallback);

      r._form = form;     

      r.setHeader('content-length', length);

    });


    function requestCallback(err, res, body) {

      console.log(body);

    }


    2019-12-01
    有用
    回复 9
    • 初影不在
      初影不在
      2019-12-01
      首先感谢大佬回答,不过我刚试了一下,好像还是不行,而且我在网上找听说好像要用什么流之类的,结尾要追加‘\r\n’之类的,小弟是在是心累了
      2019-12-01
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-12-01回复初影不在
      fs.createReadStream(file.path)??
      2019-12-01
      回复
    • 初影不在
      初影不在
      2019-12-01回复o0o有脾气的酸奶
      还是不行,,,
      2019-12-01
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-12-01回复初影不在
      要不你nodejs端自己npm安装wx-server-sdk吧,试试
      const cloud = require('wx-server-sdk')
      然后调用
      cloud.openapi.security.imgSecCheck({
        media: {
          contentType: 'image/png',
          value: Buffer
        }
      })
      2019-12-01
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-12-01回复初影不在
      var formData = function (param) {
        var max = 9007199254740992;
        var dec = Math.random() * max;
        var hex = dec.toString(36);
        var boundary = '---------------------------' + BOUNDARYPREFIX + hex;
        var data = '--' + boundary + "\r\n";
        // form data
        var formdata = "content-disposition: form-data; name=\"access_token\"\r\n";
        formdata += "content-type: text/plain\r\n\r\n";
        formdata += param.access_token + "\r\n";
        formdata += '--' + boundary + "\r\n";
        var mimes = {
          '.png': 'image/png',
          '.gif': 'image/gif',
          '.jpg': 'image/jpeg',
          '.jpeg': 'image/jpeg'
        };
        var ext = path.extname(param.media);
        var mime = mimes[ext];
        // file data
        var filedata = '';
        filedata += "content-disposition: form-data; name=\"media\"; filename=\"" + param.media.split('/').pop() + "\"\r\n";
        filedata += "content-type: " + mime + "\r\n\r\n";
        filedata += fs.readFileSync(param.media) + "\r\n";
        filedata += '--' + boundary + "\r\n";
        data += formdata + filedata + "--\r\n\r\n";
        return { data, boundary };
      }
      return new Promise((rs, rj) => {
        var pdata = formData({ media: file.path, access_token: access_token })
        var body = '';
        const req = https.request({
          hostname: 'api.weixin.qq.com',
          port: 443,
          method: 'POST',
          path: '/wxa/img_sec_check?access_token=' + access_token,
          headers: {
            "content-type": "multipart/form-data; boundary=" + pdata.boundary,
            'Content-Length': Buffer.byteLength(pdata.data)
          }
        }, (res) => {
          res.on('data', function (d) {
            body += d;
          })
          res.on('end', function () {
            rs(JSON.parse(body))
          })
        });
        req.on('error', (e) => {
          rj(e);
        });
        req.write(pdata.data);
        req.end();
      })
      2019-12-01
      回复
    查看更多(4)
登录 后发表内容
问题标签