微信公众号开发系列

来源:互联网 发布:搜片大师源码 编辑:程序博客网 时间:2024/05/18 07:18
花了两天时间看了微信公众号开发,大致了解了下。
网上关于开发公众号的资料挺多的,官网的api接口可以多看看

简单说下,微信公众号开发就两种模式,一个是傻瓜式开发,不涉及任何代码,另一种就是使用后台语言,搭建自己服务器,灵活写业务逻辑来处理用户对公众号的请求。
https://mp.weixin.qq.com/wiki
官方的开发者文档写的非常详细,不过初次接触可能会懵逼,特别像我这种常年不用微信的人,为了学微信公众号开发,还特意去使用微信。。。
按照文档说明,基本配置弄完之后,成功接入后台开发。


官方给的demo能展示给你最初的基本自动回复消息。

public function responseMsg()    {//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];      //extract post dataif (!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;        }    }



服务器和官方微信服务器每次通信都是通过封装好的xml文件进行交流
所以,在文档里面展示给我们的都是各种xml接口,你要做的就是在后台处理好业务逻辑
然后把参数通过xml文件传输给微信服务器,相应的你从用户那里获取的信息也都通过xml格式传递。


下面,我分享一个自己封装图灵机器人的接口

//robot.php<?phpfunction MyRobot($info) {$key = "";$apiUrl = "http://www.tuling123.com/openapi/api?key=".$key."&info=".$info;$result = file_get_contents($apiUrl);$result = json_decode($result,true);switch ($result['code']) {case '100000':return $result['text'];break;case '200000':$text = $result['text'] . ',<a href="' . $result['url'] . '">点击进入</a>';return $text;break;case '302000':$length = count($result['list']);for ($i=0; $i < $length; $i++) { $article[$i] = array('Title' => $result['list'][$i]['article'],'Description' => $result['list'][$i]['source'],'Icon' => $result['list'][$i]['icon'],'Url' => $result['list'][$i]['detailurl']);}return $article;break;case '308000':$length = count($result['list']) > 3?3:count($result['list']);for ($i=0; $i < $length; $i++) { $article[$i] = array('Name' => $result['list'][$i]['name'],'Info' => $result['list'][$i]['info'],'Icon' => $result['list'][$i]['icon'],'Url' => $result['list'][$i]['detailurl']);}return $article;break;default:return $result['text'];break;}}?>

<?php/**  index.php  * wechat php test  *///define your tokendefine("TOKEN", "yefeng");$access_token = "";$wechatObj = new wechat();$wechatObj->responseMsg();//$wechatObj->setMenu();class wechat{  /*  public function setMenu() {        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=BeIkRCHJpK8o0Af3UR1xKALpdeATwKAeo7xuS41yBWQUHpaRfrUStkaZhm7paTunXXVC62rpfNCOqJdlR3oJHRSHBHX4oejwrrjhwx_xs0AAidjYK8wtY76bB3k_xUbRYIAdAFAUEW";                $ch = curl_init($url) ;        curl_setopt($ch, CURLOPT_POST, 1);        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");        curl_setopt($ch, CURLOPT_POSTFIELDS,$data);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));        $result = curl_exec($ch) ;        curl_close($ch) ;        return $result;    }*/    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);                $this->getContentFromMsgType($postObj);                    }else {        echo "post提交为空~";        exit;        }    }    public function getContentFromMsgType($postObj) {        $fromUsername = $postObj->FromUserName;        $toUsername = $postObj->ToUserName;        $msgType = $postObj->MsgType;        $time = time();        switch ($msgType) {            case 'text':                $keyword = trim($postObj->Content);                include('./robot.php');                 $contentStr = MyRobot($keyword);                if(is_array($contentStr)) {                        $length = count($contentStr);                        for ($i=0; $i < $length; $i++) {                                                       $con = $contentStr[$i];                                                   foreach ($con as $key => $value) {                                                           if(!($value)) {                                }                                else {                                   $con_array = $con_array.$value."\n\n";                            }                           }                        }                        $contentStr = $con_array;                    }                                   $resultStr = $this->responseText($postObj,$contentStr);                echo $resultStr;                break;            case 'image':                $imageUrl = $postObj->PicUrl;                $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>";                                                                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $imageUrl);                echo $resultStr;                break;            case 'voice':                echo "voice";                break;            case 'shortvideo':                $resultStr = $this->responseText($postObj,"你发的是视频文件~");                                echo $resultStr;                break;            case 'location':                echo "location";                break;            case 'link':                echo "link";                break;            case 'event':                $this->getContentFromEvent($postObj);                break;            default:                $resultStr = $this->responseText($postObj,"我是图灵机器人,不信你可以发消息给我咯~~");                echo $resultStr;                break;        }            }    public function getContentFromEvent($postObj) {        $fromUsername = $postObj->FromUserName;        $toUsername = $postObj->ToUserName;        $creatTime = $postObj->CreateTime;        $event = $postObj->Event;        $time = time();        switch ($event) {            case 'subscribe':                echo $this->responseText($postObj,"欢迎关注~~我是图灵机器人,不信你发消息给我看看咯~~");                break;            case 'unsubscribe':                echo $this->responseText($postObj,"亲~你要离开我了,好舍不得啊~~");                break;            default:                echo $this->responseText($postObj,"信不信我揍你~~");                break;        }    }    public function responseText($postObj,$contentStr) {        $fromUsername = $postObj->FromUserName;        $toUsername = $postObj->ToUserName;        $creatTime = $postObj->CreateTime;        $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>";                                                         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, "text", $contentStr);        return $resultStr;    }    public function getImageId() {        $access_token = getAccessToken();        $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$access_token."&type=thumb";        $filepath = dirname(__FILE__)."/crazy.jpg";        $data = array('media' =>"@".filepath);        $cur = curl_init();        curl_setopt($cur,CURLOPT_URL,$url);        curl_setopt($cur,CURLOPT_RETURNTRANSFER,1);        curl_setopt($cur,CURLOPT_PORT,1);        curl_setopt($cur,CURLOPT_POSTFIELDS,$data);        $media_res = curl_exec($cur);        curl_close($cur);        $thumb_res = json_decode($media_res,true);        $thumb_media_id = $thumb_res['thumb_media_id'];        return $thumb_media_id;    }    public function getAccessToken() {        define("APPID","wx53736436e359345d");        define("APPSECRET","41ab99dbda8b8b4250919e9e23058ba1");        $access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;        $result = file_get_contents($access_token_url);        $result = json_encode($result,true);        $access_token = $result['access_token'];        return $access_token;    }}        


0 0