分享一个完整的微信开发php代码
这篇文章主要为大家分享一个完整的微信开发php代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了微信开发php代码,供大家参考,具体内容如下<?php//封装成一个微信接口类class WeixinApi{private $appid;private $appsecret;//构造方法 初始化赋值public function construct($appid="",$appsecret=""){$this->appid = $appid;$this->appsecret = $appsecret;}//验证服务器地址有效性public function valid(){if($this->checkSignature()){$echostr = $_GET['echostr'];//随机的字符串return $echostr;}else{return "Error";}}//检查签名private function checkSignature(){//一、接收微信服务器GET方式提交过来的4个参数数据$signature = $_GET['signature'];//微信加密签名$timestamp = $_GET['timestamp'];//时间戳$nonce = $_GET['nonce'];//随机数//二、加密/校验过程// 1. 将token、timestamp、nonce三个参数进行字典序排序;// bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) 对数组排序$tmpArr = array(TOKEN,$timestamp,$nonce);//将上面三个参数放到一个数组里面sort($tmpArr,SORT_STRING);// 2. 将三个参数字符串拼接成一个字符串进行sha1加密;$tmpStr = implode($tmpArr); //将数组转化成字符串$signatureStr = sha1($tmpStr);// 3. 开发者获得加密后的字符串与signature对比。if($signatureStr == $signature){return true;}else{return false;}}//响应消息public function responseMsg(){//接收微信服务器发送POST请求到开发者服务器,携带的XML数据包$postData = $GLOBALS['HTTP_RAW_POST_DATA'];//处理xml数据包$xmlObj = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);if(!$xmlObj){echo "";exit;}//获取接收消息中的参数内容$toUserName = $xmlObj->ToUserName;//开发者微信号$fromUserName = $xmlObj->FromUserName;//发送方的微信号(openid)$msgType = $xmlObj->MsgType;//消息类型switch ($msgType) {//接收文本消息case 'text'://获取文本消息的关键字$keyword = $this->receiveText($xmlObj);//进行关键字回复switch($keyword){case "w001":case "W001":return $this->replyText($xmlObj,"Hi~你好");break;case "w002":case "W002":return $this->replyText($xmlObj,"Hi~尴尬了");break;case "笑话":$key = "dee9ebc68fd5a61f67286063932afe56";return $this->replyNews($xmlObj,$this->joke_text($key));break;default:$key = "dee9ebc68fd5a61f67286063932afe56";return $this->replyNews($xmlObj,$this->joke_text($key));break;}break;//接收图片消息case 'image':return $this->receiveImage($xmlObj);break;//接收事件推送case 'event':return $this->receiveEvent($xmlObj);break;}}//接收事件推送public function receiveEvent($obj){//接收事件类型$event = $obj->Event;switch ($event){//关注事件case 'subscribe'://下发欢迎消息$newsArr = array(array("Title"=>"做有价值的头条资讯!","Description"=>"把握价值头条资讯,日常更加有谈资呢!","PicUrl"=>"http://jober.applinzi.com/news/img/news.png","Url"=>"http://jober.applinzi.com/news/index.php"));//回复图文消息return $this->replyNews($obj,$newsArr);break;//取消关注事件case 'unsubscribe'://账号的解绑操作等等break;//自定义菜单推送CLICK事件case 'CLICK':$eventKey = $obj->EventKey;//获取事件KEY值,与自定义菜单接口中KEY值对应switch ($eventKey){case 'old':$weixinArr = $this->history("da675ebc6a0d72920dca3f676122a693");$weixinArr = array_slice($weixinArr, 0,5);$newsArr = array();foreach ($weixinArr as $item){$newsArr = array(array("Title" => $item['Description'],"Description" => $item['Title'],"PicUrl" => "http://1.jober.applinzi.com/news/img/2.jpg","Url" => "http://www.todayonhistory.com/"));}return $this->replyNews($obj,$newsArr);break;}break;}}//接收文本消息public function receiveText($obj){$content = trim($obj->Content);//文本消息的内容return $content;}//接收图片消息public function receiveImage($obj){$picUrl = $obj->PicUrl;//图片的链接$mediaId = $obj->MediaId;//图片消息媒体idreturn $this->replyImage($obj,$mediaId);}//回复图片消息public function replyImage($obj,$mediaId){$replyXml = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>";return sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$mediaId);}//回复文本消息public function replyText($obj,$content){$replyXml = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";return sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$content);}//回复图文消息public function replyNews($obj,$newsArr){//判断是否为数组类型if(!is_array($newsArr)){return;}// 判断数组是否为空数组if(!$newsArr){return;}$itemStr = "";//定义item模板$itemXml = "<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>";foreach($newsArr as $item){$itemStr .= sprintf($itemXml,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']);}$replyXml = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>".count($newsArr)."</ArticleCount><Articles>".$itemStr."</Articles></xml>";return sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time());}//封装https请求(GET和POST)protected function https_request($url,$data=null){//1、初始化curl$ch = curl_init();//2、设置传输选项curl_setopt($ch, CURLOPT_URL, $url);//请求的url地址curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//将请求的结果以文件流的形式返回if(!empty($data)){curl_setopt($ch,CURLOPT_POST,1);//请求POST方式curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//POST提交的内容}//3、执行请求并处理结果$outopt = curl_exec($ch);//把json数据转化成数组$outoptArr = json_decode($outopt,TRUE);//4、关闭curlcurl_close($ch);//如果返回的结果$outopt是json数据,则需要判断一下if(is_array($outoptArr)){return $outoptArr;}else{return $outopt;}}public function juhe_weixin($key,$type){$url ="http://v.juhe.cn/toutiao/index?type={$type}&key={$key}";$result = $this->https_request($url);if($result['error_code'] == 0){return $result['result']['data'];}else{return array();}}//聚合数据-获取最新趣图public function joke_text($key,$pagesize=10){$url = "http://japi.juhe.cn/joke/img/text.from?key={$key}&pagesize={$pagesize}";$jokeArr = $this->https_request($url);$resultArr = $jokeArr['result']['data'];// $content = $resultArr[0]['content'];// return $this->replyText($xmlObj,$content);$newsArr = array();//判断笑话接口是否获取数据if($jokeArr['error_code'] == 0){foreach($resultArr as $item){$newsArr[] = array("Title"=>$item['content'],"Description"=>$item['updatetime'],"PicUrl"=>$item['url'],"Url"=>$item['url']);}}return $newsArr;}//聚合数据-获取历史上的今天public function history($key){$m = idate('m');$d = idate('d');$day = "{$m}/{$d}";$url = "http://v.juhe.cn/todayOnhistory/queryEvent.php?key={$key}&date={$day}";$historyArr = $this->https_request($url);$resultArr = $historyArr['result'];// $content = $resultArr['title'];// return $this->replyText($xmlObj,$content);$newsArr = array();//判断接口是否获取数据if($jokeArr['error_code'] == 0){foreach($resultArr as $item){$newsArr[] = array("Title"=>$item['title'],"Description"=>$item['date'],"PicUrl"=>"","Url"=>"");}}return $newsArr;}public function fund($key){$url = "http://japi.juhe.cn/jingzhi/query.from?key={$key}";$fundArr = $this->https_request($url);$resultArr = $fundArr['result'];// $content = $resultArr['title'];// return $this->replyText($xmlObj,$content);$newsArr = array();//判断接口是否获取数据if($jokeArr['error_code'] == 0){foreach($resultArr as $item){$newsArr[] = array("Title"=>$item['day'],"Description"=>$item['title'],"PicUrl"=>"","Url"=>"http://www.baidu.com");}}return $newsArr;}/***获取基础支持里面的接口调用凭证access_token并缓存access_token*@return access_token string 接口凭证**/public function getAccessToken(){//获取memcache缓存的access_token$access_token = $this->_memcache_get("access_token");//如果缓存的access_token失效if(!$access_token){//如果失效调用获取接口凭证来获取access_token$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->appsecret}";$outoptArr = $this->https_request($url);if(!isset($outoptArr['errcode'])){//memcache缓存access_token$this->_memcache_set("access_token",$outoptArr['access_token'],7000);return $outoptArr['access_token'];}}return $access_token;}//初始化memcacheprivate function _memcache_init(){$mmc = new Memcache;$ret = $mmc -> connect();if ($ret == false){return;}return $mmc;}//设置memcacheprivate function _memcache_set($key,$value,$time=0){$mmc = $this->_memcache_init();$mmc -> set($key,$value,0,$time);}//获取memcahceprivate function _memcache_get($key){$mmc = $this->_memcache_init();return $mmc -> get($key);}//自定义菜单创建public function menu_create($data){$access_token = $this->getAccessToken();//自定义菜单创建接口地址$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$access_token}";return $this->https_request($url,$data);}//自定义菜单删除public function menu_delete(){$access_token = $this->getAccessToken();$url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token={$access_token}";return $this->https_request($url);}}?>以上就是分享一个完整的微信开发php代码的详细内容,更多请关注小潘博客其它相关文章!