收藏
回答

云函数调用msgSecCheck接口报错

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 Bug 客户端 wxfdb9525560c4f6cb 2.7.1

-本地调试时报错:module.exports.ReadError: incorrect header check

云端上调试也是这个报错:{"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"incorrect header check"}


- 确认了我的access_token没有问题,依赖库全部装上,

同样的函数,换了别的接口,对接成功,换回'https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" 就依然不行

然后我就用postman测试https://api.weixin.qq.com/wxa/msg_sec_check?access_token=接口,对接成功,我复制了对接成功的POST地址放回云函数再次调试,依然报错,这是为啥?


开发工具版本是最新的 v1.02.1906062


-大佬们能给看看嘛,救救孩子


云函数的代码

// 云函数入口文件
const cloud = require('wx-server-sdk');
const got=require('got');
 
var appid ='appid';
var appsecret ='appsecret ';
cloud.init();
 
// 拼接 access_token 
let tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appid + '&secret=' + appsecret
// 内容检测接口
let checkUrl = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='
 
// 云函数入口函数
exports.main = async (event, context) => {
  let tokenResponse = await got(tokenUrl); 
  let token = JSON.parse(tokenResponse.body).access_token; 
  
  let checkResponse = await got(checkUrl + token, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      content: event.content
    })
  });
  return checkResponse.body;
}


最后一次编辑于  2019-06-13
回答关注问题邀请回答
收藏

3 个回答

  • 邓坤力
    邓坤力
    2019-06-13

    请用云调用的方式试试呢

    https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html#method-cloud

    2019-06-13
    有用 2
    回复 4
    • 2019-06-14

      已经采用这个方法解决了 真的非常简单,token都不用

      2019-06-14
      1
      回复
    • 2019-06-30

      什么意思啊,这个应该怎么用。大佬求告知

      2019-06-30
      回复
    • 四月天
      四月天
      2019-07-21回复
      请问楼主怎么解决的?
      2019-07-21
      回复
    • 2019-07-22回复四月天
      我在下面贴了代码 ,可以参考一下
      2019-07-22
      回复
  • 2019-07-22
    //云函数声明
    // 云函数入口文件
     
    const cloud = require('wx-server-sdk')
     
     
     
    cloud.init()
     
     
     
    // 云函数入口函数
     
    exports.main = async (event, context) => {
     
    try {
     
    const checkmsg = await cloud.openapi.security.msgSecCheck({
     
    content: event.content
     
    });
     
    return checkmsg;
     
    } catch (err) {
     
    throw err
     
    }
     
    }
     
     
    //在你需要用到的地方写一个函数调用云函数,也可以直接用
    //检测敏感词汇
      msgSecCheck:function(event){
        var str = event
        wx.cloud.callFunction({
          name:'checkMsg',
          data:{
            content:str
          }
        }).then(res=>{
          this.setData({
            checkCode: JSON.stringify(res.result.errCode)
          });
        }).catch(err=>{
          this.setData({
            checkCode: String(err.errCode)
          });
           
        });
      }

    我是新手,所以这种写法比较粗糙简陋,用来做个毕业设计就足够了

    2019-07-22
    有用 1
    回复 5
    • 四月天
      四月天
      2019-07-22
      感谢楼主,请问楼主用的是最新稳定版的开发工具吗?
      2019-07-22
      回复
    • 2019-07-23回复四月天
      我用的是开发版的
      2019-07-23
      回复
    • 蝈蝈
      蝈蝈
      2019-07-24
      然而我代码跟你差不多一模一样,确一直报错
      2019-07-24
      1
      回复
    • 2019-07-25回复蝈蝈
      有很多奇奇怪怪的坑,我也是踩一个,爬上来,又掉另一个里,周而复始
      2019-07-25
      1
      回复
    • 蝈蝈
      蝈蝈
      2019-07-25回复
      我贴下代码,大佬看下哪里有问题了
      2019-07-25
      回复
  • 蝈蝈
    蝈蝈
    2019-07-25

    云函数:

    // 云函数入口文件
    const cloud = require('wx-server-sdk')

    cloud.init()

    // 云函数入口函数
    exports.main = async (event, context) => {
    try {
    const res = await cloud.openapi.security.imgSecCheck({
    media: {
    contentType: 'image/png',
    value: event.img
               }
    })
    return res;
    } catch (err) {
    return err;
    }

    }


    本地函数:


    wx.chooseImage({count: 1}).then((res) => {
    if(!res.tempFilePaths[0]){
    return;
    }
    if (res.tempFiles[0] && res.tempFiles[0].size > 1024 * 1024) {
    wx.showToast({
    title: '图片不能大于1M',
    icon: 'none'
           })
    return;
    }
    wx.request({url:res.tempFilePaths[0],responseType: 'arraybuffer'}).then(
    buffer=>{
    wx.cloud.callFunction({
    name: 'checkImg',
    data: {
    img:buffer.data
                   }
    }).then(
    imgRes=>{
    console.log(JSON.stringify(imgRes))
    }
    )
    }
    )
    })


    2019-07-25
    有用
    回复 8
    • 2019-07-26
      看下报了什么错
      2019-07-26
      回复
    • 蝈蝈
      蝈蝈
      2019-07-26
      {"errMsg":"cloud.callFunction:ok","result":{"errCode":41005,"errMsg":"openapi.security.imgSecCheck:fail media data missing hint: [EYHqBa09712372]"},"requestID":"b6f24407-af53-11e9-9d28-525400681fe1"} 不过怎么改,都报这个错误,媒体资源找不到,云端服务器打log了,确实传过去buffer了
      2019-07-26
      回复
    • 蝈蝈
      蝈蝈
      2019-07-26回复
      嗯 我的是check图片的,文字的我弄好了
      2019-07-26
      回复
    • 2019-07-26回复蝈蝈
      我记得好像直接传url是不行的,得用formData格式传
      2019-07-26
      回复
    • 2019-07-26回复蝈蝈
      https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.imgSecCheck.html 看请求参数那
      2019-07-26
      回复
    查看更多(3)
登录 后发表内容