参考来源:PHP-企业微信二次开发-接收用户输入消息内容并响应相关业务逻辑_企业微信输入文字 返回结果-CSDN博客
PHP
<?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");
}
}
?>