{errcode“:-106,“errmsg“:“token check fail“} 微信公众号测试号接口配置报错Django版

news2024/11/24 13:36:28

准备写个公众号做消息提醒的工具,,于是去了微信公众平台,准备用测试号接口试试。代码写的没问题,服务器也是已经部署了的。基本上所有问题都排查了还是显示配置失败。最后发现是请求头的问题


先列举一下需要注意的问题,看看你做到了没有,没有就先解决这些

  • 必须使用https://或http://开头的地址(绑定域名)
  • 地址必须支持80端口和443端口(网上找个网站扫描一下)
  • Token要么是英文要么是数字,3位以上,随便搞个abcdefg都行
    请添加图片描述






    官网示例的代码也有点问题,直接返回的true,实际上要返回echostr的值
    然后这块就有坑了!!!

注意返回的必须是echostr的值,且返回的请求头必须和微信官方能接受的一样,他们收的是 text/html; charset=utf-8
一开始我是用的django的rest_framework框架,返回的Response的结果,虽然我设置了content_type但是这块有个坑,仍要注意的就是,Response类的默认行为是传递给它的数字自动序列为JSON格式,并且内容类型默认application/json。所以即使我设置了content_type="text/html; charset=utf-8。返回的结果仍然是JSON格式的。下面粘贴一下报错的Django代码
from rest_framework.response import Response
from rest_framework.views import APIView
import hashlib

class WeChatSignatureView(APIView):
    def get(self, request, *args, **kwargs):
        received_signature = request.query_params.get("signature")
        received_timestamp = request.query_params.get("timestamp")
        received_nonce = request.query_params.get("nonce")
        your_token = "your_token"  # 替换为你的token
        
        if self.check_signature(received_signature, received_timestamp, received_nonce, your_token):
            echostr = request.query_params.get("echostr")
            # 关键代码,虽然我指定了content_type但还是序列化了,没卵用
            return Response(echostr, content_type="text/html; charset=utf-8")
        else:
            return Response("Invalid signature", status=403, content_type="text/plain")

    def check_signature(self, signature, timestamp, nonce, token):
        tmp_arr = [token, timestamp, nonce]
        tmp_arr.sort()
        tmp_str = ''.join(tmp_arr)
        tmp_str = hashlib.sha1(tmp_str.encode()).hexdigest()
        
        return tmp_str == signature

如果你想返回 HTML 内容,并且需要设置正确的内容类型为 text/html; charset=utf-8,你应该手动创建一个 HttpResponse 对象,而不是使用 DRF 的 Response。以下是正确的示例:
from django.http import HttpResponse

    def get(self, request):
        received_signature = request.GET.get("signature")
        received_timestamp = request.GET.get("timestamp")
        received_nonce = request.GET.get("nonce")
        yue_token = 'yueyue'

        if self.check_signature(received_signature, received_timestamp, received_nonce, yue_token):
        # 返回时用Django的HttpResponse就不会序列化,指定这个content_type就能起到作用
            return HttpResponse(request.query_params.get("echostr"), content_type="text/html; charset=utf-8")
        else:
            return Response("Invalid signature", status=403)

    def check_signature(self, signature, timestamp, nonce, token):
        tmp_arr = [token, timestamp, nonce]
        tmp_arr.sort()
        tmp_str = ''.join(tmp_arr)
        tmp_str = hashlib.sha1(tmp_str.encode()).hexdigest()

        return tmp_str == signature

最后终于大功告成
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自媒体行业深度解析:挖掘收入潜力,洞察未来趋势

随着社交网络和移动互联网的快速发展,自媒体行业成为了越来越多人的职业选择。那么,自媒体行业到底怎么样?自媒体人的收入和前景如何?本文将为大家带来一些关于自媒体行业的介绍和分析。 一、自媒体的定义 自媒体是指个人或组织利…

【ES】笔记-箭头函数的实践于应用场景

箭头函数的实践于应用场景 需求-1 点击 div 2s后颜色变成[粉色]从数组中返回偶数的元素 需求-1 点击 div 2s后颜色变成[粉色] html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport…

论文解读《Adversarial training methods for semi-supervised text classification》

1 背景 1.1 对抗性实例&#xff08;Adversarial examples&#xff09; 通过对输入进行小扰动创建的实例&#xff0c;可显著增加机器学习模型所引起的损失对抗性实例的存在暴露了机器学习模型的脆弱性和局限性&#xff0c;也对安全敏感的应用场景带来了潜在的威胁&#xff1b;…

前端开发的工作职责精选【10篇】

前端开发的工作职责1 1、使用Divcss并结合Javascript负责产品的前端开发和页面制作; 2、熟悉W3C标准和各主流浏览器在前端开发中的差异&#xff0c;能熟练运用DIVCSS&#xff0c;提供针对不同浏览器的前端页面解决方案; 3、负责相关产品的需求以及前端程序的实现&#xff0c…

IDEA 配置 eslint

第一步 第二步 然后就去试一下啦&#xff0c;理论上到这一步就没问题了&#xff0c;有问题在留言吧。

超低延时直播技术的前世今生

作者&#xff1a;李晨光、匡建鑫、陈鉴平 卷首语&#xff1a; 据中国互联网络信息中心发布的《中国互联网络发展状况统计报告》显示&#xff0c;截止到 2022 年 6 月我国网络直播用户规模达到了 7.16 亿&#xff0c;占网民整体的 68.1% 。最主要原因是 2020 年度疫情期间导致居…

C++入门(小白篇2-标识符定义-关键词-变量类型)

前言 在上一节课中&#xff0c;我们学习到C软件的安装&#xff0c;也知道C运行的各种软件&#xff0c;以及运行第一个程序 今天我们来学习一下 1、C中标识符(变量)的命名规则 2、认识C中的关键词 3、认识C中的数据类型 每天学一点&#xff0c;不要太多不然脑子装不下&#xff0…

vscode终端背景颜色修改以及报错信息颜色修改

引言 刚从pycharm转到vscode上时&#xff0c;很不喜欢vscode终端信息一片白色&#xff0c;于是想尽办法去修改vscode终端风格 这里提供vscode终端背景颜色的修改和vscode终端报错提示信息颜色的修改方法 (1)vscode终端背景颜色优化 步骤一&#xff0c;ctrlshiftp打开设置搜索…

【python 深度学习】解决遇到的问题

目录 一、RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb 二、AttributeError: module ‘tensorflow’ has no attribute ‘flags’ 三、conda 更新 Please update conda by running 四、to search for alternate channels that…

项目启动会为什么很重要? 要确定哪些事宜?

项目启动会议及事项安排 1、领导致辞 2、项目目标 3、项目范围及关键交付物 4、项目里程碑 5、项目组织架构及人员工作安排 6、项目管理机制 7、联系人列表 8、Q&A 进主页获取更多资料

JVM—编译器、类加载的过程、双亲委派机制这些你还记得吗?

背景介绍 这两天在对JVM的知识进行回顾&#xff0c;顺便来分享分享&#xff0c;接下来也会有系列文章&#xff0c;欢迎大家一起讨论。 过程 为什么叫JVM&#xff1f; Java Virtual Machine&#xff0c;java虚拟机。可以理解成一个以字节码为机器指令的CPU 有哪些特点呢&#…

python性能分析,logging性能,print性能,文件写入性能对比

先说结论&#xff0c;没想到的是print性能比logging性能好&#xff0c;输出到控制台会极大降低程序性能&#xff0c;以下是我的性能对比结果&#xff1a; 运行情况是python后台运行并输出到日志&#xff0c;命令是 python3 test.py > /opt/testtime.log 2>&1 &

【css】添加待小三角的提示框

如需创建在工具提示的指定侧面显示的箭头&#xff0c;在工具提示后添加“空的”内容&#xff0c;并使用伪元素类 ::after 和 content 属性。箭头本身是使用边框创建的。这会使工具提示看起来像气泡。 代码&#xff1a; <style> .tooltip {position: relative;display: …

通过signtool进行数字签名和验证签名

&#xff08;一&#xff09;如何签名 SignTool.exe (Sign Tool) - .NET Framework | Microsoft Learn Using SignTool to Sign a File - Win32 apps | Microsoft Learn 签名命令行&#xff1a; signtool.exe sign /f xxx.pfx /t http://timestamp.digicert.com yyy.dll xx…

C++ 学习系列 1 -- 左值、右值与万能引用

1. 何为左值&#xff1f;何为右值&#xff1f; 简单的说&#xff0c;左值可以放在等号的左边&#xff0c;右值可以放在等号的右边。 左值可以取地址&#xff0c;右值不能取地址。 1.1 左值举例&#xff1a; 变量、函数或数据成员返回左值引用的表达式 如 x、x 1、cout <…

Keystone Automotive EDI 需求分析

Keystone Automotive 是一家知名的汽车零部件销售卖场&#xff0c;自创立以来&#xff0c;在汽车行业取得了卓越的成就。作为一家专业的汽车零部件供应商&#xff0c;Keystone Automotive 致力于为客户提供优质的产品和卓越的服务。公司的经营范围涵盖广泛&#xff0c;涉及多个…

ubuntu python虚拟环境venv搭配systemd服务实战

文章目录 参考文章目录结构步骤安装venv查看python版本创建虚拟环境激活虚拟环境运行我们程序看缺少哪些依赖库&#xff0c;依次安装它们接下来我们配置python程序启动脚本&#xff0c;脚本中启动python程序前需先激活虚拟环境配置.service文件然后执行部署脚本&#xff0c;成功…

unity vscode 代码关联 跳转 BUG

一早打开电脑发现代码关联失效了&#xff0c;目测可能跟昨天一些插件更新有关 结论 就这货&#xff0c;开了就没法提示代码关联&#xff0c;估计预览版全是BUG。 另一个坑 同期有个unity插件也是预览版&#xff0c;“非常好使”&#xff0c;当场去世。评论点开有好几个人说用…

cadence virtuoso worning

cadence virtuoso 添加工艺库报错如下&#xff1a; Warning: ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data. Library smic13mmrf_1233 contains file /home/IC/Tech/PDK_13mmrf_1P6M_30k/smic13mmrf_1233/prop.xx which is CDB data.…

Taro React组件使用(11) —— RuiNoticebar 公告栏

1. 需求分析 用于循环播放展示一组消息通知&#xff1b;通知消息渲染完成&#xff0c;获取消息的长度和盒子的长度&#xff1b;使用【taro react】---- 获取元素的位置和宽高等信息异步获取内容和盒子的宽高信息&#xff1b;通过 CSS3 的 animation 实现内容的移动&#xff1b…