现在很多网站为了获取用户都开始这样使用扫码关注微信公众号才能获取下载码
比如我们下载这个模板,
微信里回复了关键字,不回复验证码的原因,是因为我们网站前段时间把php版本升级了7.3
检查了下 微信接口代码
因为php7.0版本很多都设置了register_globals禁止,不能用$GLOBALS["HTTP_RAW_POST_DATA"];
需要改成$postStr = file_get_contents("php://input");
这样就可以接受到信息了
PHP对接微信公众号源码 帝国CMS对接微信公众号PHP接口文件[任意CMS均可]
勿喷,不会PHP代码,但是大概看懂了一些。我在之前论坛里有人提供的接口原基础上做了修改。完成了对帝国CMS基础对接功能,
目前已知的问题是,关键字不能回复,本来应该是先判断关键字,再查库的。 这里代码是先查库再判断了,但我技术太烂,尝试修改的时候一直出现报错,所以PHP大神来完善下吧。
本代码已经是成品,复制源代码,新建php文件粘贴进去,替换你的数据库链接信息,与需要查询的表名,上传至你的网站空间,然后微信公众号后台登录,Url填写该php地址,token默认是weixin. 然后就OK了。
<?phpdefine("TOKEN", "weixin");//自己定义的token 就是个通信的私钥$wechatObj = new wechatCallbackapiTest();//$wechatObj->valid(); //验证 初次对接时不能注释掉 否则不能通过$wechatObj->responseMsg();class wechatCallbackapiTest{ public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $event = $postObj->Event; $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>"; switch($postObj->MsgType) { case 'event': if($event == 'subscribe') { //关注后的回复 $contentStr = "谢谢关注[寻片]公众号!本公众号提供各种资源搜索。输入电影名,我将回复你电影观看或下载地址。例:【速度与激情】"; $msgType = 'text'; $textTpl = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $textTpl; } break; case 'text': if(preg_match('/[/x{4e00}-/x{9fa5}]+/u',$keyword)) { $newsTplHeader = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles>"; $newsTplItem = "<item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item>"; $newsTplFooter="</Articles> </xml>"; $con = mysql_connect("xxxxx数据库地址:5506","你的数据库","你的数据库密码"); mysql_query("SET NAMES UTF8"); mysql_query("set character_set_client=utf8"); mysql_query("set character_set_results=utf8"); mysql_select_db("你的数据库表名", $con); $sql = "SELECT * FROM `phome_ecms_news` WHERE `title` like '%".$keyword."%' LIMIT 0 , 1"; $result = mysql_query($sql); $itemCount = 0; if(mysql_num_rows($result)>0){ while($row = mysql_fetch_assoc($result)) { $title = "".$row['title'].""; $des =""; $url ="http://51zhuangbi.cn".$row['titleurl']; $picUrl1 ="http://51zhuangbi.cn".$row['titlepic'].""; $contentStr .= sprintf($newsTplItem, $title, $des, $picUrl1, $url); ++$itemCount; } $newsTplHeader = sprintf($newsTplHeader, $fromUsername, $toUsername, $time, $itemCount); $resultStr = $newsTplHeader. $contentStr. $newsTplFooter; echo $resultStr; } else { $newsTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </Articles> </xml>"; //没有查找到的时候的回复 $title = '未找到结果,请确认有无错别字,或尝试精简搜索字(如您回复的是【速度与激情10】,请尝试【速度与激情】),此外,依次点击两次右上角,选择推荐给朋友,此后,你将可享受神秘特权哦!'; $des1 =""; $picUrl1 ="http://51zhuangbi.cn/d/weizhaodao.jpg"; $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } mysql_close($con); } else { $newsTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </Articles> </xml>"; if($keyword=="help") { $title = '输入你要找的电影名,或点击进入寻片网主页'; $des1 =""; //图片地址 $picUrl1 ="http://51zhuangbi.cn/help.jpg"; //跳转链接 $url="http://51zhuangbi.cn"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="菜单") { $title = '点击进入主页,右边 点击 菜单图标 “三” 选择你想看的栏目'; $des1 =""; //图片地址 $picUrl1 ="http://51zhuangbi.cn/help.jpg"; //跳转链接 $url="http://51zhuangbi.cn"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="联系客服") { $title = '联系客服'; $des1 =""; //图片地址 $picUrl1 ="http://51zhuangbi.cn/d/help.jpg"; //跳转链接 $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="自助更新") { $title = '自助更新入口'; $des1 =""; //图片地址 $picUrl1 ="http://51zhuangbi.cn/d/help.jpg"; //跳转链接 $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } if($keyword=="留言") { $title = '看片留言:点击进入'; $des1 =""; //图片地址 $picUrl1 ="http://51zhuangbi.cn/d/help.jpg"; //跳转链接 $url="http://51zhuangbi.cn/misc/message/"; $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ; echo $resultStr; } $contentStr = "/r/n 输入电影名如:速度与激情7 如果没有具体想看的,请点击进入主页:51zhuangbi.cn"; $msgType = 'text'; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } break; default: break; } }else { echo "你好!欢迎进微信公众号"; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token =TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } }}?>
具体的大家可以多搜索一下,网上也不少卖这个功能的。
新闻热点
疑难解答