企业微信自建应用api收发消息,发送的消息员工无法收到?
/**
* 验证消息
*
*/
public function sendMessageTest()
{
include(ROOT_PATH. 'vendor' . DS . 'weworkapi_php-master'. DS . 'callback'. DS . "WXBizMsgCrypt.php") ;
// 假设企业号在公众平台上设置的参数如下
$encodingAesKey = "J0KQdPFBqMUqg9a7VsOStPxgPCHNiQFkDExdlzgocbd";
$token = "kWzIUo0nPPN62tPHfWKpVcdORbmKE4f";
$corpId = "ww07ee28d63a4ce652";
$agentid = 1000002;
$sReqMsgSig = "457872467db8abb2ca554413ce82037b50ead437";
$sReqTimeStamp = "1676963539";
$sReqNonce = "1677569330";
// post请求的密文数据
$sReqData = "<xml><ToUserName><![CDATA[ww07ee28d63a4ce652]]></ToUserName><Encrypt><![CDATA[cwZU2H5qJeb65R/LQKCmWDIryDo1DwdUnvib/AJAiqVsemmUVcFxkP3mu2k0761gm2do5dHwe3sBCFhIjVF/oHuoyqnCoQW9oyWcIbmK9sLpQzp5fhfLmQ9nxb3rauTxroTwahuZ37nNp12ttiVwR7QajNzK5thkLLrezErVJgPpBiTRIESbXNIlWTDIwbk40szcwPn3v08DPAkvXLPqobRXo2Csrs7+b4cM1IQCLzTlFIJV6SqcfeikjfjNYp7Rcli1k/kiCclobgNvVOJZCyE3n2NzQffbSF3QVSMTSQjMGy8CLtvJPE5nzvcMhV4YnL4QhO87FNwDDbo2HVSpgqrks+Mvx+XlGEQgKakJ6mg9ElVlMeuQsGDfgo4oXw05EjlTq1IKCt8dPMc+9Sk96As6z3fcVcz1smrzLur5GSCkLvUFMhb9KnynVL+C6BUXyV8SvdM1AWwE7//Nd8M9Jw==]]></Encrypt><AgentID><![CDATA[1000002]]></AgentID></xml>";
$sMsg = ""; // 解析之后的明文
$wxcpt = new \WXBizMsgCrypt($token, $encodingAesKey, $corpId);
$errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg);
if ($errCode == 0) {
try {
$test = new \SimpleXMLElement($sMsg);
$sMsg = strval($test->Content);//解析出的明文内容
$FromUserName = strval($test->FromUserName);//发送消息的人
$CreateTime = strval($test->CreateTime);
$MsgId = strval($test->MsgId);
} catch (Exception $e) {
$Content = "错误!";
}
} else {
print("ERR: " . $errCode . "\n\n");
}
$sendText = $sMsg.'是什么';
// var_dump($sMsg);
// var_dump($FromUserName);
// var_dump($CreateTime);
// var_dump($MsgId);
// die;
/*
------------使用示例三:企业回复用户消息的加密---------------
企业被动回复用户的消息也需要进行加密,并且拼接成密文格式的xml串。
假设企业需要回复用户的明文如下:
为了将此段明文回复给用户,企业应:
1.自己生成时间时间戳(timestamp),随机数字串(nonce)以便生成消息体签名,也可以直接用从公众平台的post url上解析出的对应值。
2.将明文加密得到密文。
3.用密文,步骤1生成的timestamp,nonce和企业在公众平台设定的token生成消息体签名。
4.将密文,消息体签名,时间戳,随机数字串拼接成xml格式的字符串,发送给企业号。
以上2,3,4步可以用公众平台提供的库函数EncryptMsg来实现。
*/
// 需要发送的明文
$sRespData = "<xml>
<ToUserName><![CDATA[{$FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$corpId}]]></FromUserName>
<CreateTime>{$CreateTime}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{$sendText}]]></Content>
<MsgId>{$MsgId}</MsgId>
<AgentID>{$agentid}</AgentID>
</xml>";
$sEncryptMsg = ""; //xml格式的密文
$errCode = $wxcpt->EncryptMsg($sRespData, $sReqTimeStamp, $sReqNonce, $sEncryptMsg);
if ($errCode == 0) {
var_dump($sEncryptMsg);
print($sMsg."done \n");
// TODO:
// 加密成功,企业需要将加密之后的sEncryptMsg返回
// HttpUtils.SetResponce($sEncryptMsg); //回复加密之后的密文
} else {
print("ERR: " . $errCode . "\n\n");
// exit(-1);
}
}