private function decodeReqInfo($req_info){
$key = md5(Config::get("weixin_mch_key"));
$data = base64_decode($req_info);
$re = openssl_decrypt($data,'AES-256-ECB',$key,OPENSSL_NO_PADDING);
if($re == false)
throw new SystemInternalError('info decryption failed!');
$len = strlen($re);
$pad = ord($re[$len - 1]);
if ($pad < 1 || $pad > 32)
$pad = 0;
$xml = substr($re, 0, $len - $pad);
return $this->xmlToArray($xml);
}
public function xmlToArray($string)
{
$xml = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA);
$array = json_decode(json_encode($xml), TRUE);
return $array;
}
public function arrayToXml($data, $root = true){
$str="";
if($root)$str .= "<xml>";
foreach($data as $key => $val){
if(is_array($val)){
$child = $this->arrayToXml($val, false);
$str .= "<$key>$child</$key>";
}else{
$str.= "<$key><![CDATA[$val]]></$key>";
}
}
if($root)$str .= "</xml>";
return $str;
}