nodejs调用微信接口返回47001错误

2024-03-01 12:58

本文主要是介绍nodejs调用微信接口返回47001错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在公司开发的时候,做了一个评论区,在评论区中需要对用户发表的评论内容做一定的过滤。经商量决定还是使用微信的msgSecCheck接口来过滤吧。

在进行接口调用的时候,我自己使用接口测试工具的时候,是可以正常获取结果的。但是在使用http.request进行接口数据传输的时候,一直返回的就是47001错误。在网上评论大概有以下几种原因。

  • 传送的json错误。在json的错误这里。错误有两个:
      一个是json字符串中不能包含单引号:这个方式,我试了下,并没有什么用。而使用接口测试工具的时候,把json字符串中的双引号改成单引号的时候,反而报错。所以这种方式,pass。
      还一个就是json字符串中不能包含换行符。可是我的这个字符串,根本就没有换行符。所以pass。
      最后一个就是我的json字符串,不规范。可是我都将我传输的json字符串,使用json校验工具检查了,并没有问题,所以这种可能依旧pass。
  • json中字符编码的问题。话说也很奇怪。我在校验字母和英文的时候,是没有问题的,但是在校验中文的时候,就会报错。本来以为是编码的问题,在进行测试的时候,并没有发现是乱码等问题。所以pass。
  • http.request中header设置问题。在一开始的时候,我就觉得应该是这个问题,可是网上的百度资料,除了copy的还是copy的重复的。在微信开发者中心进行搜索的时候,微信官网发现header和我本地并没有问题啊。无奈只是纠结。
      经过了上述的测试和分析,问题已经出来了,就是http.request中的header设置问题。无奈我只能求救老大。老大,过来把我的header一改,整个校验就跑起来了,果然,经验真不是能吹出来的。至于这个问题,我需要再查看下http的具体详解。至于为什么,等我忙完这件事,再出一个详细的教程。不说废话了,上代码再说问题。
return getTokenByDB(wxGameClient).then(config =>{if(!config) throw new Error('get token by db failed!')return new Promise((resolve, reject) => {let pushContent =  JSON.stringify({"content":paramsStr });let options = {hostname: 'api.weixin.qq.com',port : 443,path: '/wxa/msg_sec_check',method: 'POST',headers:{'Content-Type': 'text/html; charset=utf-8',//'Content-Type': 'application/json; charset=utf-8','Content-Length': Buffer.byteLength(pushContent)//'Content-Length': pushContent.length}};options.path = options.path + '?' + querystring.stringify({access_token:config[0].data.access_token});let req = https.request(options, (res) => {let data = '';res.on('data', (d) => {data += d;});res.on("end", function () {try{data = JSON.parse(data);}catch(e){return reject({code : 50000, errmsg : e, message : data});}if(data.errcode === 87014) return reject('有敏感信息!');else if(data.errcode === 0)  return resolve(data);else reject({code : 50000,message : data})});});req.write(pushContent);//写入传递的数据req.on('error', e => {let err = new Error(e)err.code = 500reject(err)});req.end();})})

再上面的代码中,再header配置中,注释掉的是我原来的设置,新改的设置,是成功的,其实对比一下,就是这么点问题。浪费了我一上午的时间。看来是时候,好好弄弄http请求详解了。

这篇关于nodejs调用微信接口返回47001错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/762522

相关文章

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp