在Yii2框架里面如何更好地使用微信加解密库

这几天在使用Yii2框架开发企业号,在微信加解密库时遇到了一些坑。熟悉Yii2的同学应该都知道Yii2加载类的机制是采用命名空间(namespace)的方式。而微信的库使用的是最原始的php include文件的方式去加载类的,所以使用起来就有许多问题。

想在Yii2里面使用,就必须改造下微信的加解密库。需要调整的要点有一下三个方面:

第一个方面是需要把微信加密库里面的类拆分到同一命名空间,互相调用可以采用use 命名空间的路径加上类的名称。这样的话类的使用基本上就可以。

第二个方面是命名空间当中类的初始化,我发现在实际的工作中,也就是微信加解密库里面使用的跟类同名的构造函数并不起作用,因此需要改造一下。通过查看php manual发现php5有专门的魔术方法进行初始化操作。这是php manual里面的原话:

void__construct([mixed$args[,$...]] )

PHP 5 允行开发者在一个类中定义一个方法作为构造函数。
具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

因此需要根据规则修改下微信加解密库里面类的构造函数,修改之后类应该就可以正常进行初始化了。

第三个方面是微信加解密库里面采用的解析xml参数的方法不是很好用,因此我采用php5之后有的simplexml进行xml的解析。微信库里面的xmlparse.php里面原始的代码是下面这样子的:

$xml = new DOMDocument();
$xml->loadXML($xmltext);
$array_e = $xml->getElementsByTagName('Encrypt');
$array_a = $xml->getElementsByTagName('ToUserName');
$encrypt = $array_e->item(0)->nodeValue;
$tousername = $array_a->item(0)->nodeValue

对应下来,采用simplexml进行解析的代码是这样的:

$xml = simplexml_load_string($xmltext);
$encrypt = $xml->Encrypt->__toString();
$tousername = $xml->ToUserName->__toString();

可以明显发现采用php里面的smplexml相关的函数去解析xml是相当方便和清晰的,上面代码中的__toString()的作用是返回xml节点的文本内容。详细的内容可以去查看php手册[http://php.net/manual/zh/book.simplexml.php]

使用php这么久,感觉php里面的函数用着真的很方便。

你可能感兴趣的:(在Yii2框架里面如何更好地使用微信加解密库)