Rumah  >  Artikel  >  php教程  >  微信类

微信类

WBOY
WBOYasal
2016-06-07 11:42:221135semak imbas

总是想写点儿对大家有用的东西,微信这个东西最近火的很,到处都是公众账号,微营销等等。这段时间专门研究了一些关于微信公众平台的东西,也做过一些小的项目,所以分享一些关于微信公众平台的东西
<?php <br /> <br> class Wechat{<br> <br>     //签名<br>     private $token = '';<br> <br>     //消息类型<br>     private $msgtype;<br> <br>     //消息内容<br>     private $msgobj;<br> <br>     //事件类型<br>     private $eventtype;<br> <br>     //事件key值<br>     private $eventkey;<br> <br>     #{服务号才可得到<br>     //AppId<br>     private $appid = "";<br>     //AppSecret<br>     private $secret = "";<br>     #}<br>     <br>     private $_isvalid = false;<br>     <br>     public function __construct($token,$isvalid = false){<br>         $this->token = $token;<br>         $this->_isvalid = $isvalid;<br>     }<br>     <br>     /**<br>      *    执行程序入口<br>      */<br>     public function index(){<br>         if($this->_isvalid){<br>             $this->valid();<br>         }<br>         $this->getMsg();<br>         $this->responseMsg();<br>     }<br> <br>     /**<br>      *  初次校验<br>      */<br>     private function valid(){<br>         $echoStr = $_GET["echostr"];<br> <br>         if($this->checkSignature()){<br>             echo $echoStr;<br>             exit();<br>         }<br>     }<br> <br>     /**<br>      *  创建自定义菜单<br>      */<br>     private function createMenu(){<br>         $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$this->getAccessToken();<br>         $menujson = '{<br>             "button":[<br>                 {<br>                     "type":"click",<br>                     "name":"NAME1",<br>                     "key":"V1001_NEW"<br>                 },<br>                 {<br>                     "type":"view",<br>                     "name":"NAME2",<br>                     "url":"http://www.zhangenrui.cn"<br>                 },<br>                 {<br>                     "type":"view",<br>                     "name":"NAME3",<br>                     "url":"http://www.zhangenrui.cn"<br>                 }<br>             ]<br>         }';<br> <br>         $ch = curl_init($url);<br> <br>         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");<br>         curl_setopt($ch, CURLOPT_POSTFIELDS,$menujson);<br>         curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br> <br>         $info = curl_exec($ch);<br> <br>         if (curl_errno($ch)) {<br>             echo 'Errno'.curl_error($ch);<br>         }<br> <br>         curl_close($ch);<br> <br>         var_dump($info);<br>     }<br> <br>     /**<br>      *  删除自定义菜单<br>      */<br>     private function deleteMenu(){<br>         $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$this->getAccessToken();<br> <br>         $ch = curl_init($url);<br> <br>         curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br> <br>         $info = curl_exec($ch);<br> <br>         if (curl_errno($ch)) {<br>             echo 'Errno'.curl_error($ch);<br>         }<br> <br>         curl_close($ch);<br> <br>         var_dump($info);<br> <br>     }<br> <br>     /**<br>      *  获取消息<br>      */<br>     private function getMsg(){<br>         //验证消息的真实性<br>         if(!$this->checkSignature()){<br>             exit();<br>         }<br> <br>         //接收消息<br>         $poststr = $GLOBALS["HTTP_RAW_POST_DATA"];<br>         if(!empty($poststr)){<br>             $this->msgobj = simplexml_load_string($poststr,'SimpleXMLElement',LIBXML_NOCDATA);<br>             $this->msgtype = strtolower($this->msgobj->MsgType);<br>         }<br>         else{<br>             $this->msgobj = null;<br>         }<br>     }<br> <br>     /**<br>      *  回复消息<br>      */<br>     private function responseMsg(){<br>         switch ($this->msgtype) {<br>             case 'text':<br>                 $data = $this->getData($this->msgobj->Content);<br>                 if(empty($data) || !is_array($data)){<br>                     $content = "ruiblog";<br>                     $this->textMsg($content);//查询不到记录返回提示信息<br>                 }<br>                 else{<br>                     $this->newsMsg($data);<br>                 }<br>                 break;<br>             case 'event':<br>                 $this->eventOpt();<br>                 break;<br>             default:<br>                 # code...<br>                 break;<br>         }<br>     }<br> <br>     /**<br>      *  回复文本消息<br>      */<br>     private function textMsg($content=''){<br>         $textxml = "<xml><tousername>msgobj->FromUserName}]]></tousername><fromusername>msgobj->ToUserName}]]></fromusername><createtime>".time()."</createtime><msgtype></msgtype><content></content></xml>";<br>         <br>         //做搜索处理<br>         if(empty($content)){<br>             $content = "查询功能正在开发中...";<br>         }<br>         $resultstr = sprintf($textxml,$content);<br>         echo $resultstr;<br>     }<br> <br>     /**<br>      *  回复图文消息<br>      */<br>     private function newsMsg($data){<br>         if(!is_array($data)){<br>             exit();<br>         }<br>         $newscount = (count($data) > 10)?10:count($data);<br>         $newsxml = "<xml><tousername>msgobj->FromUserName}]]></tousername><fromusername>msgobj->ToUserName}]]></fromusername><createtime>".time()."</createtime><msgtype></msgtype><articlecount>{$newscount}</articlecount><articles>%s</articles></xml>";<br>         $itemxml = "";<br>         foreach ($data as $key => $value) {<br>             $itemxml .= "<item>";<br>             $itemxml .= "<title></title> <description></description><picurl></picurl><url></url>";<br>             $itemxml .= "</item>";<br>         }<br>         $resultstr = sprintf($newsxml,$itemxml);<br>         echo $resultstr;<br>     }<br> <br>     /**<br>      *  事件处理<br>      */<br>     private function eventOpt(){<br>         $this->eventtype = strtolower($this->msgobj->Event);<br>         switch ($this->eventtype) {<br>             case 'subscribe':<br> <br>                 //做用户绑定处理<br> <br>                 $content = "ruiblog";<br>                 $this->textMsg($content);<br>                 break;<br>             case 'unsubscribe':<br>                 <br>                 //做用户取消绑定的处理<br> <br>                 break;<br>             case 'click':<br>                 $this->menuClick();<br>                 break;<br>             default:<br>                 # code...<br>                 break;<br>         }<br>     }<br> <br>     /**<br>      *  自定义菜单事件处理<br>      */<br>     private function menuClick(){<br>         $this->eventkey = $this->msgobj->EventKey;<br>         switch ($this->eventkey) {<br>             case 'V1001_NEW':<br>                 $data = $this->getData();<br>                 $this->newsMsg($data);<br>                 break;<br>             default:<br>                 # code...<br>                 break;<br>         }<br>     }<br> <br>     /**<br>      *    获取本地数据<br>      */<br>     private function getData($key='ruiblog'){<br>         $data = $key;<br>         //写你自己相关的程序<br>         return $data;<br>     }<br>     <br>     /**<br>      *  校验签名<br>      */<br>     private function checkSignature(){<br>         $signature = $_GET["signature"];<br>         $timestamp = $_GET["timestamp"];<br>         $nonce = $_GET["nonce"];    <br>                 <br>         $token = $this->token;<br>         $tmpArr = array($token, $timestamp, $nonce);<br>         sort($tmpArr);<br>         $tmpStr = implode( $tmpArr );<br>         $tmpStr = sha1( $tmpStr );<br>         <br>         return ($tmpStr == $signature)?true:false;<br>     }<br> <br>     /**<br>      *  获取access token<br>      */<br>     private function getAccessToken(){<br>         $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appid&secret=$this->secret";<br>         $atjson=file_get_contents($url);<br>         $result=json_decode($atjson,true);//json解析成数组<br>         if(!isset($result['access_token'])){<br>             exit( '获取access_token失败!' );<br>         }<br>         return $result["access_token"];<br>     }<br> }<br> <br> ?>详细点这里:http://www.appryan.com/2015/05/17/php-wechart/

附件 Wechat.class.zip ( 2.3 KB 下载:429 次 )

AD:真正免费,域名+虚机+企业邮箱=0元

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn