微信小程序 msg_sec_check 正确调用方式

服务端使用微信小程序的内容安全检查等接口时,尽管按文档 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html 的要求传了参数,但是还是会出错,而用 postman 等工具却正常,以下分享调试经验。

1. 正确调用方式

在服务端发起调用时,网址为:

https://api.weixin.qq.com/wxa/msg_sec_check?access_token={你的token}

设置请求头为:

  • Method: POST
  • Content-Type: application/json
  • Body: content 的 json 格式字符串

其中注意点有:

  1. access_token 需要放在url 的请求参数位置
  2. 请求头多了其他配置,例如 gzip: true,都有可能产生错误
  3. 需要设置 Content-Type 为 json 格式,否则自己手动将对象 { content: “检查词” } 转成合法的 json 格式

下面用 egg.js 框架的调用方式举例一下,其他框架也大同小异:

const url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token={你的token}';
const res = await this.ctx.curl(url, {
  method: 'POST',
  contentType: 'json',
  data: { content: "检查词" },
  dataType: 'json',    // 例如可以设置响应格式为json
                       // 其他无影响的请求头参数可以酌情增加,但例如 gzip 加入就会报错
})

2. 一些常见报错原因

  • 请求头设置出错,多了不必要的配置(这里是设置了 gzip 后报错)
Error: incorrect header check, POST https://api.weixin.qq.com/wxa/msg_sec_check?access_token=*** 200 (connected: true, keepalive socket: true, socketHandledRequests: 1, socketHandledResponses: 1)
headers: {"connection":"close","content-encoding":"deflate","content-type":"application/json; charset=UTF-8","content-length":"26"}
  • content 传递时没有指定 ContentType 为 application/json,导致传递传参错误
data format error hint: [odGiRa03874870]

你可能感兴趣的:(NodeJS)