在koa中调用微信图片检测接口

需求: 写个接口给前端,前端传图片给你,然后你调用下微信的接口 https://api.weixin.qq.com/wxa/img_sec_check?access_token=ACCESS_TOKEN,将结果返回给前端。
第一眼看到,感觉就是很普通的一个简单的需求,直接用axios即可,代码类似如下:

const accessToken = await wxUtil.getMPAccessToken();
const url = `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${accessToken}`;
const form_data = new FormData();
form_data.append("media", fs.createReadStream(file.path));
const request_config = {
  method: "post",
  url,
  headers: {
      "Content-Type": "multipart/form-data"
  },
  data: form_data
};
const {data} = await axios(request_config);
ctx.body = data

然而发现微信接口返回的是

{"errcode":41005,"errmsg":"media data missing hint: [M5C_Wa05271538]"}

或者412错误。
此时如果用request库去请求,发现是正常的

let opt = {
    url,
    method: "POST",
    formData: {
        buffer: {
            value: fs.readFileSync(file.path),
            options: {
                filename: file.name,
                contentType: file.type,
            }
        },
    },
};
rp(opt,(err, res, body) => {console.log(body})

但用request有个问题:不能将它的请求结果返回给ctx.body。
所以改用request-promise库,最终代码如下:

const {  file, model: { wxModel } } = ctx.state;
const accessToken = await wxUtil.getMPAccessToken();
const url = `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${accessToken}`;

var options = {
    method: 'POST',
    uri:url,
    formData: {
        name: 'media',
        file: {
            value: fs.createReadStream(file.path),
            options: {
                filename: 'test.jpg',
                contentType: 'image/jpg'
            }
        }
    }
};

const result = await rp(options)
    .then(function (body) {
        return body;
    })
    .catch(function (err) {
        return err;
    });

fs.unlinkSync(file.path);

ctx.body = JSON.parse(result);

我在axios库中纠结了几个小时,期间尝试了各种方式,在此记录下。
这个帖子有很好的说明:
关于axios在node中post的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值