微信公众平台开发(1)验证TOKEN源码

微信公众平台开发(1)验证TOKEN源码一

说明:使用的是官方的源代码进行验证,所使用的服务器为新浪SAE。在官方源代码中只需更改:define(“TOKEN”, “weixin”);的值为自己的TOKEN值即可

源码:

 
   valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //随机字符串,该值只在第一次验证的时候有值, if ($this->checkSignature()) { echo $echoStr; exit(); } } public function responseMsg() { // get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; // extract post data if (! empty($postStr)) { /* * libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, * the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = " 
    
    
      %s 
     
    
      %s 
     
    
      %s 
     
    
      %s 
     
    
      %s 
     
    
      0 
     
   "; if (! empty($keyword)) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } else { echo "Input something..."; } } else { echo ""; exit(); } } private function checkSignature() { // you must define TOKEN by yourself if (! defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"];//微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 $timestamp = $_GET["timestamp"];//时间戳 $nonce = $_GET["nonce"];//随机数 $token = TOKEN; $tmpArr = array( $token, $timestamp, $nonce );//将以上三个变量放到数组中 // use SORT_STRING rule sort($tmpArr, SORT_STRING);//针对数组进行排序 $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if ($tmpStr == $signature) { return true; } else { return false; } } } ?>






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212232.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午8:31
下一篇 2026年3月18日 下午8:31


相关推荐

  • SQL中的聚合函数使用总结

    SQL中的聚合函数使用总结一般在书写sql的是时候很多时候会误将聚合函数放到where后面作为条件查询,事实证明这样是无法执行的,执行会报【此处不允许使用聚合函数】异常。为什么会报异常呢?其原因很简单:having放在groupby的后面 groupby后面只能放非聚合函数的列 where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使…

    2022年6月21日
    35
  • 渗透测试工具之:BurpSuite「建议收藏」

    渗透测试工具之:BurpSuite「建议收藏」BurpSuiteBurpSuite能高效率地与多个工具一起工作,例如:一个中心站点地图是用于汇总收集到的目标应用程序信息,并通过确定的范围来指导单个程序工作。在一个工具处理HTTP请求和响应时,它可以选择调用其他任意的Burp工具。例如:代理记录的请求可被Intruder用来构造一个自定义的自动攻击的准则,也可被Repeater用来手动攻击,也可被Scanner用来分析漏洞,或者被Spider(网络爬虫)用来自动搜索内容。应用程序可以是“被动地”运行,而不是产生大量的自动请求。Burp

    2022年5月28日
    31
  • 1天涨了1个百度,马化腾深夜预告,腾讯养虾全家桶来了

    1天涨了1个百度,马化腾深夜预告,腾讯养虾全家桶来了

    2026年3月13日
    2
  • JS 暂时性死区[通俗易懂]

    JS 暂时性死区[通俗易懂]JS暂时性死区ES6暂时性死区引用ES6暂时性死区只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。vartmp=123;if(true){tmp=’abc’;//ReferenceErrorlettmp;}上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后…

    2022年6月30日
    32
  • 关于 Head First SQL 中文版

    关于 Head First SQL 中文版

    2021年12月1日
    42
  • 运维堡垒机是什么?有什么作用?

    运维堡垒机是什么?有什么作用?安全考虑 运维人员通常都会通过堡垒机 进行服务器的日常维护工作 运维堡垒机对运维维护人员的安全操作起着重要的审计和控制作用 在出现重大服务器操作事故时 能够快速有效的定位原因和责任人 运维堡垒机是什么 运维堡垒机是种具备强大防御功能和安全审计功能的服务器 基于跳板机理念 作为内外网络的个安全审计监测点 以达到把所有网站安全问题集中到某台服务器上解决

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号