参考来源:PHP-企业微信二次开发-接收用户输入消息内容并响应相关业务逻辑_企业微信输入文字 返回结果-CSDN博客
<?php require_once "WXBizMsgCrypt.php"; define(EncodingAesKey,"***"); define(Token,"***"); define(CorpId,"***"); function getmessages(){ $sVerifyMsgSig = $_GET["msg_signature"]; $sVerifyTimeStamp = $_GET["timestamp"]; $sVerifyNonce = $_GET["nonce"]; //这里如果用$_POST是获取不到数据的,这里小编吃了好几次亏。 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//①读取POST数据,并且返回加密后的XML格式文本。注意此时的$postStr返回的是XML密文 $sMsg = "";//②解密XML数据 现在还是空 $wxcpt = new WXBizMsgCrypt(Token,EncodingAesKey,CorpId); $errCode = $wxcpt->DecryptMsg($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $postStr, $sMsg); //③$sMsg已有数据,解密XML数据 将解密的XML数据返回成对象 $postObj = simplexml_load_string($sMsg,'SimpleXMLElement', LIBXML_NOCDATA); //返回消息格式 消息格式有text image voice location 等具体可查看官方文档,这里就演示两个text和image。 $RX_TYPE = trim($postObj->MsgType); // 消息的类型,如果是事件则固定为event //反馈事件大类 $EVENT = trim($postObj->Event); //事件变化类型 $CHANGE_TYPE = trim($postObj->ChangeType); //返回发送消息的企业id // $RX_UserName=trim($postObj->FromUserName); // 此事件该值固定为sys,表示该消息由系统生成 //返回发送消息时间戳 $RX_CreateTime=trim($postObj->CreateTime); // 消息创建时间 (整型) //返回员工UserID $USER_ID = trim($postObj->UserID); //返回外部联系人userid $External_User_ID = trim($postObj->ExternalUserID); // //返回添加方式 // $STATE = trim($postObj->State); switch ($RX_TYPE) { case "event": //行为操作 $result = $RX_CreateTime."-".$CHANGE_TYPE."-".$USER_ID."-".$External_User_ID; break; // case "change_external_chat": //客户群操作 // $result = $CHANGE_TYPE; // break; // case "change_external_tag": // 客户标签 // $result = $CHANGE_TYPE // break; default: $result = "unknow msg type: ".$RX_TYPE; break; } //④根据需求处理消息,如将消息存入数据库等等。现在暂且存放在log日志中。 file_put_contents('log.txt',"“".$result."”\r\n", FILE_APPEND);//输出log //自动回复--------------------------------------- } $wechatObj = new WXBizMsgCrypt(Token,EncodingAesKey,CorpId); if (!isset($_GET['echostr'])) { // 开始接收事件 // echo "没有进入到回调配置!"; $getmessages=getmessages(); }else{ //接受验证数据 $sVerifyMsgSig = $_GET["msg_signature"]; $sVerifyTimeStamp = $_GET["timestamp"]; $sVerifyNonce = $_GET["nonce"]; $sVerifyEchoStr = $_GET["echostr"]; $sEchoStr = ""; $errCode = $wechatObj ->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr); //回调验证判断 if ($errCode == 0) { echo $sEchoStr; } else { print("ERR: " . $errCode . "\n\n"); } } ?>