微信公众号开发之文本消息自动回复php代码
2018-09-21 16:38
本文实例为大家分享了php微信文本消息自动回复 别代码,供大家参考,具体内容如下
1.PHP示例代码下载
下载地址1:
下载地址2:(开始开发-》接入指南-》PHP示例代码下载)
2.wx_sample.php初始代码
<?php /** * wechat php test */ //define your token define(TOKEN, weixin); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET[echostr]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS[HTTP_RAW_POST_DATA]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, SimpleXMLElement, LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = <xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>; if(!empty( $keyword )) { $msgType = text; $contentStr = Welcome to wechat world!; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo Input something...; } }else { echo ; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined(TOKEN)) { throw new Exception(TOKEN is not defined!); } $signature = $_GET[signature]; $timestamp = $_GET[timestamp]; $nonce = $_GET[nonce]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
3.调用回复信息方法
在wx_sample.php文件中注释掉$wechatObj->valid();,在其下增加一句“$wechatObj->responseMsg();”。
<?php /** * wechat php test */ //define your token define(TOKEN, weixin); $wechatObj = new wechatCallbackapiTest(); //$wechatObj->valid();//接口验证 $wechatObj->responseMsg();//调用回复消息方法 class wechatCallbackapiTest { public function valid() { $echoStr = $_GET[echostr]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS[HTTP_RAW_POST_DATA]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, SimpleXMLElement, LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = <xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>; if(!empty( $keyword )) { $msgType = text; $contentStr = Welcome to wechat world!; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo Input something...; } }else { echo ; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined(TOKEN)) { throw new Exception(TOKEN is not defined!); } $signature = $_GET[signature]; $timestamp = $_GET[timestamp]; $nonce = $_GET[nonce]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
4.关键词自动回复和关注回复
$keyword保存着用户微信端发来的文本信息。
官方开发者文档:(消息管理-》接收消息-接收事件推送-》1.关注/取消关注事件)
关注事件与一般的文本消息有两处不同,一是MsgType值是event,二是增加了Event值是subscribe。由于官方文档(最初的wx_sample.php)没有提取这个参数,需要我们自己提取。在程序中增加两个变量$msgType和$event。
<?php /** * wechat php test */ //define your token define(TOKEN, weixin); $wechatObj = new wechatCallbackapiTest(); //$wechatObj->valid();//接口验证 $wechatObj->responseMsg();//调用回复消息方法 class wechatCallbackapiTest { public function valid() { $echoStr = $_GET[echostr]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS[HTTP_RAW_POST_DATA]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, SimpleXMLElement, LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $msgType = $postObj->MsgType;//消息类型 $event = $postObj->Event;//时间类型,subscribe(订阅)、unsubscribe(取消订阅) $textTpl = <xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>; switch($msgType){ case event: if($event==subscribe){ $contentStr = Hi,欢迎关注海仙日用百货!.\n.回复数字1,了解店铺地址..\n.回复数字2,了解商品种类.; } break; case text: switch($keyword){ case 1: $contentStr = 店铺地址:.\n.杭州市江干艮山西路233号新东升市场地下室第一排.; break; case 2: $contentStr = 商品种类:.\n.杯子、碗、棉签、水桶、垃圾桶、洗碗巾(刷)、拖把、扫把、 .衣架、粘钩、牙签、垃圾袋、保鲜袋(膜)、剪刀、水果刀、饭盒等.; break; default: $contentStr = 对不起,你的内容我会稍后回复; } break; } $msgType = text; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else { echo ; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined(TOKEN)) { throw new Exception(TOKEN is not defined!); } $signature = $_GET[signature]; $timestamp = $_GET[timestamp]; $nonce = $_GET[nonce]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
文章标题:微信公众号开发之文本消息自动回复php代码
文章链接:http://soscw.com/index.php/essay/16523.html