企业微信接收用户输入消息内容并响应
前面一节说明了企业微信设置API接收,服务器回调配置的一些说明。这一节我们接着后面的内容来讲下在企业微信中,如何通过应用,接收用户消息。
业务逻辑:企业微信向回调地址以POST方式回调用户的数据,同时用GET方式带上3个参数,GET的三个参数分别是msg_signature、timestamp、nonce(参考企业微信开发文档)这里要注意的是,回调测试中GET还会传入一个echostr值,但是真正接收数据时是没有的。具体步骤如下:
①读取POST数据,并且返回加密后的XML格式文本。
②解密XML数据
③将解密的XML数据返回成对象
④根据需求处理消息,如将消息存入数据库等等。在下面演示中,是暂且存放在log日志中。
下面用代码来演示:
<?phprequire_once "Getmessage_Wechat.class.php";define(EncodingAesKey,"应用程序回调配置的EncodingAesKey");define(Token,"应用程序回调配置的Token");define(CorpId,"企业微信id号");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);//返回发送消息的企业id$RX_UserName=trim($postObj->FromUserName);//返回发送消息时间戳$RX_CreateTime=trim($postObj->CreateTime);//如果是消息类型返回消息内容$RX_Content=trim($postObj->Content);//如果是图片类型保存 picurl$RX_PicUrl=trim($postObj->PicUrl);switch ($RX_TYPE){case "text": //文本消息$result = $RX_Content;break;case "image": //图片URL$result = $RX_PicUrl;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'])) {$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"); }}?>
代码写完后,我们来实际演示一下:
在手机或者电脑上写入:“你好”并发送一张图片,看看我们的log日志中能不能获取到相应的内容!
我们打开日志可以看到如下内容:
可以看到,“你好”已经获取到啦,“图片url”也已经获取到了。注:这里面的图片企业微信只能存放3天,3天过后会自动清除
上述是小编对于企业微信的接收用户输入消息内容总结出的一些经验,内容可能不是很完整,还望网友们指出。