ClientResponseHandler(); } function ClientResponseHandler() { $this->key = ""; $this->parameters = array(); $this->debugInfo = ""; $this->content = ""; } /** * 获取密钥 */ function getKey() { return $this->key; } /** * 设置密钥 */ function setKey($key) { $this->key = $key; } // 设置原始内容 function setContent($content) { $this->content = $content; $xml = simplexml_load_string($this->content); $encode = $this->getXmlEncode($this->content); if ($xml && $xml->children()) { foreach ($xml->children() as $node) { // 有子节点 if ($node->children()) { $k = $node->getName(); $nodeXml = $node->asXML(); $v = substr($nodeXml, strlen($k) + 2, strlen($nodeXml) - 2 * strlen($k) - 5); } else { $k = $node->getName(); $v = (string)$node; } if ($encode != "" && $encode != "UTF-8") { $k = iconv("UTF-8", $encode, $k); $v = iconv("UTF-8", $encode, $v); } $this->setParameter($k, $v); } } } // 获取原始内容 function getContent() { return $this->content; } /** * 获取参数值 */ function getParameter($parameter) { return isset($this->parameters[$parameter]) ? $this->parameters[$parameter] : ''; } /** * 设置参数值 */ function setParameter($parameter, $parameterValue) { $this->parameters[$parameter] = $parameterValue; } /** * 获取所有请求的参数 * * @return array */ function getAllParameters() { return $this->parameters; } /** * 是否威富通签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。 * true:是 * false:否 */ function isTenpaySign() { $signPars = ""; ksort($this->parameters); foreach ($this->parameters as $k => $v) { if ("sign" != $k && "" != $v) { $signPars .= $k."=".$v."&"; } } $signPars .= "key=".$this->getKey(); $sign = strtolower(md5($signPars)); $tenpaySign = strtolower($this->getParameter("sign")); // debug信息 $this->_setDebugInfo($signPars." => sign:".$sign." tenpaySign:".$this->getParameter("sign")); return $sign == $tenpaySign; } /** * 获取debug信息 */ function getDebugInfo() { return $this->debugInfo; } // 获取xml编码 function getXmlEncode($xml) { $ret = preg_match("/]* encoding=\"(.*)\"[^>]* ?>/i", $xml, $arr); if ($ret) { return strtoupper($arr[1]); } else { return ""; } } /** * 设置debug信息 */ function _setDebugInfo($debugInfo) { $this->debugInfo = $debugInfo; } /** * 是否财付通签名 * * @param signParameterArray 签名的参数数组 * * @return boolean */ function _isTenpaySign($signParameterArray) { $signPars = ""; foreach ($signParameterArray as $k) { $v = $this->getParameter($k); if ("sign" != $k && "" != $v) { $signPars .= $k."=".$v."&"; } } $signPars .= "key=".$this->getKey(); $sign = strtolower(md5($signPars)); $tenpaySign = strtolower($this->getParameter("sign")); // debug信息 $this->_setDebugInfo($signPars." => sign:".$sign." tenpaySign:".$this->getParameter("sign")); return $sign == $tenpaySign; } } ?>