以YII2做微信公众平台的开发,踩到的坑

token验证失败

在公众平台的基本配置设置了tokenurl,一直提示验证失败,在服务端打印输出微信传递的signature和自己服务端sha1加密的是对等的,但是始终都是token验证失败,刚开始一直以为是自身代码问题,但是就是找不到答案,后面意识到是不是框架问题,在输出的时候带了一些格式信息导致了微信不认账。意识到是框架问题之后才开始找到了思路,后面修改代码,解决了token验证问题。

示例:

public function valid()
{
    $echoStr = $_GET["echostr"];
    if($this->checkSignature()){
        ob_clean();//增加这句
        echo $echoStr;
        exit;
    }
}

接收不到微信post数据

顺便提下,部分人的原因可能是在获取微信数据的地方使用了这个变量HTTP_RAW_POST_DATA,这个变量在PHP7中已废弃,请使用file_get_contents('php://input')代替。

我刚开始是因为YII2 默认开启了csrf验证,微信过来的数据肯定是没有的所以一直接收不到数据,也无法找原因,能不能快速解决就看运气了,解决方法,屏蔽验证,在控制器中修改

public $enableCsrfValidation  = false;

改完之后,还是无法接收到数据,我最开始接收数据的方法

public function init()
{
	$this->api = new Wxapi();
	$this->xml = $this->api->requestMsg();
}

$this->xml一直都没有数据,后面在调试的过程中,不断的断点,最后发现在init()中可以获取到数据,代码调整如下

public function init()
{
	$this->api = new Wxapi();
	$this->xml = file_get_contents('php://input');
}

到此,微信通信问题基本解决了,后面就是业务逻辑问题。