PHP实现微信公众号验证Token的示例代码

  • 难度水平:初中级
  • 适用人群:对微信公众号开发有认知跟实践的童鞋
  • 阅读时间:8分钟

缘起

很久之前做过一次公众号的开发,当时就遇到了一个验证的小坑,但是由于时间紧任务急处理完了也就没在意,可谁知最近刚刚上马一个新的公众号项目又遇到了同样的小坑,痛定思痛决定奋笔疾书留下痕迹,省的以后再次忘记了。😁

开始验证

首先来一张胜过千言万语的图,说明我们要验证的目标:

然后开始扫坑。先扫个盲,微信验证的目的就是你来证明你的服务器地址的有效性,所以带着这个目的我们来看看下面这些问题:

  • URL地址怎么写
  • 纯PHP的代码怎么写
  • Laravel的代码怎么写
  • 常见的坑是什么

URL地址怎么写

这个地址可以是路由地址也可以是文件地址:

路由地址形式:
https://mydomain.com/wx,
https://mydomain.com/auth/wx,
https://mydomain.com/utility/wx

文件地址形式:
https://mydomain.com/mywechat...
https://mydomain.com/auth/myw...
https://mydomain.com/utility/...

敲黑板,划重点:
无论哪种形式都可以,重点是可以直接通过GET或者POST访问到

纯PHP的代码怎么写

通常来说纯代码就是非框架的php代码验证方式,废话少说,直接上酸菜:

/*这个是你自定义的令牌,图片里面Token的位置*/
define("TOKEN", "这个是你自定义的令牌");
/*初始化当前的类*/
$wechatObj = new wechatCallbackapiTest();
/*开始验证程序*/
$wechatObj->valid();
/**
 * Class WXApiVerify
 */
class WXApiVerify
{
  /**
   * 检测函数输出
   */
  public function valid()
  {
    $echoStr = $_GET['echostr'];
    if($this->checkSignature()){
      echo $echoStr; #坑点,看下面的常见坑介绍
      exit; #一定要停止php运行,避免产生不必要的字串符
    }
  }

  /**
   * 前面检测
   * @return bool
   */
  private function checkSignature()
  {
    #注意: 这里可以不用检验$_GET参数的有效性,因为微信一定会传相关的参数给你的服务器的,你直接开启验证模式即可。
    $signature = $_GET['signature'];
    $timestamp = $_GET['imestamp'];
    $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;
    }
  }
}
      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1784.html