You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.7 KiB

2 months ago
<?php
namespace LaneWeChat\Core\Aes; // 定义命名空间,用于组织代码
2 months ago
class XMLParse // 定义XMLParse类
2 months ago
{
// 提取方法用于从XML文本中提取加密信息和接收方账号
2 months ago
public function extract($xmltext)
{
try {
$xml = new \DOMDocument(); // 创建DOMDocument对象
$xml->loadXML($xmltext); // 加载XML文本
// 使用DOMDocument对象的getElementsByTagName方法获取Encrypt和ToUserName标签
2 months ago
$array_e = $xml->getElementsByTagName('Encrypt');
$array_a = $xml->getElementsByTagName('ToUserName');
// 获取Encrypt标签的文本内容和ToUserName标签的文本内容
2 months ago
$encrypt = $array_e->item(0)->nodeValue;
$tousername = $array_a->item(0)->nodeValue;
// 返回提取结果包括状态码0表示成功加密信息和接收方账号
2 months ago
return array(0, $encrypt, $tousername);
} catch (\Exception $e) {
// 如果发生异常返回错误码和null值
2 months ago
return array(ErrorCode::$ParseXmlError, null, null);
}
}
// 生成方法用于生成XML格式的响应消息
2 months ago
public function generate($encrypt, $signature, $timestamp, $nonce)
{
// 定义XML格式的字符串模板使用CDATA区包含加密信息和其他参数
2 months ago
$format = "<xml>
<Encrypt><![CDATA[%s]]></Encrypt>
<MsgSignature><![CDATA[%s]]></MsgSignature>
<TimeStamp>%s</TimeStamp>
<Nonce><![CDATA[%s]]></Nonce>
</xml>";
// 使用sprintf函数格式化XML字符串模板插入加密信息和其他参数
2 months ago
return sprintf($format, $encrypt, $signature, $timestamp, $nonce);
}
}
?>