微信公众号Token验证

微信 php 1118      收藏
微信公众号Token验证

配置服务器Token验证方法

<?php
        $signature = isset($_GET["signature"])?$_GET["signature"]:'';
	    $signature = isset($_GET["msg_signature"])?$_GET["msg_signature"]:$signature; //如果存在加密验证则用加密验证段
        $timestamp = isset($_GET["timestamp"])?$_GET["timestamp"]:'';
        $nonce = isset($_GET["nonce"])?$_GET["nonce"]:'';

		$token = 'token';
		$tmpArr = array($token, $timestamp, $nonce);
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );

        $echostr = isset($_GET["echostr"])?$_GET["echostr"]:'';

		// $data = $signature .' === '.$tmpStr;
		// file_put_contents('./log.txt', $data);  //打印相关数据到log.txt文件中,调试用

		if( $tmpStr == $signature ){
			die($echostr);
		}else{
			die('no access');
		}

微信官方文档Token验证说明

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:
参数	描述
signature	微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp	时间戳
nonce	随机数
echostr	随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。
若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序 
2)将三个参数字符串拼接成一个字符串进行sha1加密 
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
4) 原样返回echostr参数内容(微信服务器接收到开发者服务器返回的echostr之后则认为校验成功)