IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 微信公众号交互代码的一个问题 -> 正文阅读

[PHP知识库]微信公众号交互代码的一个问题

微信公众号交互代码的一个问题

往微信公众号发送关键词后可以调用自定义的接口进行处理,

wx微信设计了一套交互的协议,其中有一部分是传递的参数需要signature校验。wx微信本身提供了checkSignature函数。以前用过正常,但不知从什么时候起这部分代码总是返回false。

	private function checkSignature()
	{
		$signature = $_GET["signature"];
		$timestamp = $_GET["timestamp"];
		$nonce =$_GET["nonce"];
		$token =TOKEN;
		$tmpArr = array($token, $timestamp,$nonce);
		sort($tmpArr);
		$tmpStr = implode( $tmpArr);
		$tmpStr = sha1( $tmpStr);
		if($tmpStr == $signature){
			return true;
		}else{
			return false;
		}
	}

解决的方法有2个

1.简单粗暴,直接返回true,不进行校验,快速解决问题

2.找出原因解决它。

试了一下发现居然是sort这个函数,执行sort的结果和要求的不一致。

PHP?sort() 函数用来对数组元素进行升序排序,也就是从低到高排序,语法如下:

bool sort ( array &$arr [, int $sort_mode = SORT_REGULAR ] )

参数说明:

  • arr 是要排序的数组。
  • sort_mode 表示排序模式,是一个可选参数。sort_mode 可以使用如下的值:
    • SORT_REGULAR:正常比较元素,不改变元素的类型(默认值)。
    • SORT_NUMERIC:元素被作为数字来比较。
    • SORT_STRING:元素被作为字符串来比较。
    • SORT_LOCALE_STRING:根据当前的区域(locale)设置把元素当作字符串比较,可以用 setlocale() 来改变。
    • SORT_NATURAL:和 natsort() 类似,对每个元素以“自然的顺序”对字符串进行排序,是 PHP 5.4.0 中新增的一个参数。
    • SORT_FLAG_CASE:能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。


sort() 函数调用结束后, arr 数组元素会按照从低到高的顺序重新排列。

返回值:排序成功返回 TRUE,失败返回 FALSE。

可能和sort的对象的数据类型或者编码格式有关,最终通过指定排序的模式为Sort_STRING解决了问题。建议官方代码里也指明排序类型。

	private function checkSignature()
	{
		$signature = $_GET["signature"];
		$timestamp = $_GET["timestamp"];
		$nonce =$_GET["nonce"];
		$token =TOKEN;
		$tmpArr = array($token, $timestamp,$nonce);
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr);
		$tmpStr = sha1( $tmpStr);
		if($tmpStr == $signature){
			return true;
		}else{
			return false;
		}
	}

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:27:50  更:2021-12-16 17:27:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:06:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码