PHP微信API接口类
更新时间:2016年08月22日 17:10:17 作者:shyhero
很全面详细的PHP微信API接口类,帮助大家更好的进行php微信开发,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了PHP微信接口类,供大家参考,具体内容如下
<?php /** * wechat php test */ //define your token //定义TOKEN秘钥 define("TOKEN", "weixin"); //实例化微信对象 $wechatObj = new wechatCallbackapiTest(); //验证成功后注释valid方法 //$wechatObj->valid(); //开启自动回复功能 $wechatObj->responseMsg(); //定义类文件 class wechatCallbackapiTest { //实现valid验证方法:实现对接微信公众平台 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 //接受用户端发送过来的xml数据 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data //判断xml数据是否为空 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); //通过simplexml进行xml解析 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //接受微信的手机端 $fromUsername = $postObj->FromUserName; //微信公众平台 $toUsername = $postObj->ToUserName; //接受用户发送的关键词 $keyword = trim($postObj->Content); //1.接受用户消息类型 $msgType = $postObj -> MsgType; //时间戳 $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($msgType == 'text'){ if(!empty( $keyword )) { /*这是一个实例 //如果发送文本信息 $msgType = "text"; //回复内容 if($keyword == "李楠"){ $contentStr = "叫我干嘛"; }else{ $contentStr = "叫我干嘛"; } //格式化xml模板,参数与上面的模板是一一对应的.fromUsername和头Username是相反的,只写带%s的 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; */ if($keyword == "?" || $keyword == "?"){ $msgType = "text"; $contentStr = "1.特种服务号码\n2.通讯服务号码"; $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr); echo $resultStr; }elseif($keyword == 1){ $msgType = "text"; $contentStr = "1.匪警:110\n2.火警:119\n3.急救:120"; $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr); echo $resultStr; }elseif($keyword == 2){ $msgType = "text"; $contentStr = "1.中国移动:10086\n2.中国联通:10010"; $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr); echo $resultStr; } }else{ echo "不能不说话"; } } //////////////////////////////////////////////////////////////////////////////////// //接受图片信息 if($msgType == "image"){ //如果发送文本信息 $msgType = "text"; //回复内容 $contentStr = "你发送的是图片文件"; //格式化字符串 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; } //////////////////////////////////////////////////////////////////////////////////// if($msgType == "voice"){ //如果发送文本信息 $msgType = "text"; //回复内容 $contentStr = "你发送的是语音文件"; //格式化字符串 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; } //////////////////////////////////////////////////////////////////////////////////// if($msgType == "video"){ //如果发送文本信息 $msgType = "text"; //回复内容 $contentStr = "你发送的是视频文件"; //格式化字符串 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; } //////////////////////////////////////////////////////////////////////////////////// if($msgType == "shortvideo"){ //如果发送文本信息 $msgType = "text"; //回复内容 $contentStr = "你发送的是小视频文件"; //格式化字符串 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; } //////////////////////////////////////////////////////////////////////////////////// if($msgType == "location"){ //如果发送文本信息 $msgType = "text"; //回复内容 $contentStr = "你发送的是地理位置文件"; //格式化字符串 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; } //////////////////////////////////////////////////////////////////////////////////// if($msgType == "link"){ //如果发送文本信息 $msgType = "text"; //回复内容 $contentStr = "你发送的是连接文件"; //格式化字符串 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; } //////////////////////////////////////////////////////////////////////////////////// /* //判断用户发送关键词是否为空 if(!empty( $keyword )) { //如果发送文本信息 $msgType = "text"; //回复内容 $contentStr = "大家好,我是hero"; //格式化字符串 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //将xml信息返回给客户端 echo $resultStr; }else{ echo "Input something..."; } */ }else { echo ""; exit; } } private function checkSignature() { // you must define TOKEN by yourself //判断是否定义了TOKEN,如果没有就抛出一个异常 if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"];//接受微信加密签名 $timestamp = $_GET["timestamp"];//接受时间戳 $nonce = $_GET["nonce"];//接受随机数 $token = TOKEN;//把TOKEN常量赋值给$token //把相关参数组装成数组 $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule //排序 sort($tmpArr, SORT_STRING); //把排序后的数组转换成字符串 $tmpStr = implode( $tmpArr ); //通过哈希算法加密 $tmpStr = sha1( $tmpStr ); //与加密签名进行对比 if( $tmpStr == $signature ){ //相同返回true return true; }else{ //不同返回false return false; } } } ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
php使用strtotime和date函数判断日期是否有效代码分享
php使用strtotime和date函数进行检验判断日期是否有效代码分享,大家参考使用吧2013-12-12Laravel 5.4.36中session没有保存成功问题的解决
这篇文章主要给大家介绍了关于Laravel 5.4.36中session没有保存成功问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。2018-02-02Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
这篇文章主要介绍了Zend Framework教程之连接数据库并执行增删查的方法,结合实例形式详细分析了Zend Framework数据库的配置及执行增删改查等操作的相关实现方法,需要的朋友可以参考下2016-03-03CodeIgniter框架数据库事务处理的设计缺陷和解决方案
这篇文章主要介绍了CodeIgniter框架数据库事务处理的设计缺陷和解决方案,也可以说是一个小BUG,使用CodeIgniter事务的朋友会遇到这个问题,需要的朋友可以参考下2014-07-07
最新评论