zoukankan      html  css  js  c++  java
  • 微信开发入门

    问题描述:在做微信公众号开发的时候,第一次看见微信开发文档 简直就是一脸懵逼啊!都什么跟什么啊,请看下面详解:

    1.微信开发需要启用开启开发者模式(不懂的自行百度)

    2.填写服务器地址,token

    3.服务器配置:

      1 <?php
      2 
      3 class Test{
      4     private $token = '4512c35162db71cb7ecee5bc5cd65978';
      5     private $weixin_token = null;
      6     /**
      7      * @desc 验证微信接入
      8      * @author wzh
      9      * @qq646943067
     10      */
     11     private function valid(){
     12         $echoStr = $_GET["echostr"];
     13         if($this->checkSignature()){
     14             echo $echoStr;
     15             exit;
     16         }
     17     }
     18     /**
     19      * @desc 验证签名
     20      * @author wzh
     21      */
     22     private function checkSignature(){
     23         if (! $this -> token) {
     24             throw new Exception('TOKEN is not defined!');
     25         }
     26     
     27         $signature = $_GET["signature"];
     28         $timestamp = $_GET["timestamp"];
     29         $nonce = $_GET["nonce"];
     30         $token = $this -> token;
     31     
     32         $tmpArr = array($token, $timestamp, $nonce);
     33         // use SORT_STRING rule
     34         sort($tmpArr, SORT_STRING);
     35         $tmpStr = implode( $tmpArr );
     36         $tmpStr = sha1( $tmpStr );
     37         
     38         if( $tmpStr == $signature ){
     39             return true;
     40         }else{
     41             return false;
     42         }
     43     }
     44 
     45     /**
     46      * 处理xml数据
     47      *
     48      */
     49     private function transmitText($object, $content, $flag = 0)
     50     {
     51         $textTpl = "<xml>
     52         <ToUserName><![CDATA[%s]]></ToUserName>
     53         <FromUserName><![CDATA[%s]]></FromUserName>
     54         <CreateTime>%s</CreateTime>
     55         <MsgType><![CDATA[text]]></MsgType>
     56         <Content><![CDATA[%s]]></Content>
     57         <FuncFlag>%d</FuncFlag>
     58         </xml>";
     59         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
     60         return $resultStr;
     61     }
     62 
     63     //回复图文消息
     64     private function transmitNews($object, $newsArray)
     65     {
     66         if(!is_array($newsArray)){
     67             return;
     68         }
     69         $itemTpl = "<item>
     70         <Title><![CDATA[%s]]></Title>
     71         <Description><![CDATA[%s]]></Description>
     72         <PicUrl><![CDATA[%s]]></PicUrl>
     73         <Url><![CDATA[%s]]></Url>
     74         </item>";
     75         $item_str = "";
     76         foreach ($newsArray as $item){
     77             $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
     78         }
     79         $xmlTpl = "<xml>
     80         <ToUserName><![CDATA[%s]]></ToUserName>
     81         <FromUserName><![CDATA[%s]]></FromUserName>
     82         <CreateTime>%s</CreateTime>
     83         <MsgType><![CDATA[news]]></MsgType>
     84         <ArticleCount>%s</ArticleCount>
     85         <Articles>
     86         $item_str</Articles>
     87         </xml>";
     88 
     89         $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
     90         return $result;
     91     }
     92 
     93 
     94     //post请求
     95     public function http_request($url, $data){
     96         $curl = curl_init();
     97         curl_setopt($curl, CURLOPT_URL, $url);
     98         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
     99         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    100         if(!empty($data)){
    101             curl_setopt($curl, CURLOPT_POST, 1);
    102             curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    103 
    104         }
    105         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    106         $output = curl_exec($curl);
    107         curl_close($curl);
    108         return $output;
    109     }
    110 
    111 
    112     /**
    113       * @desc 微信接入
    114       * @author wzh
    115       * @qq 646943067
    116       */
    117     public function weixin(){
    118         $this -> valid(); //如果已经验证通过 则把该行注释
    119         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    120         $this -> responseMsg($postStr);
    121     }
    122     
    123     /**
    124      * 接收推送消息
    125      *
    126      */
    127     public function responseMsg($postStr){
    128         if (!empty($postStr)){
    129             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
    130             $RX_TYPE = trim($postObj->MsgType);
    131             switch ($RX_TYPE)
    132             {
    133                 case "text":
    134                     $resultStr = $this->receiveText($postObj);    /*文本消息*/
    135                     break;
    136                 case "image":
    137                     $resultStr = $this->receiveImage($postObj);    /*图片消息*/
    138                     break;
    139                 case "location":
    140                     $resultStr = $this->receiveLocation($postObj);/*地理位置消息*/
    141                     break;
    142                 case "voice":
    143                     $resultStr = $this->receiveVoice($postObj);/*音频消息*/
    144                     break;
    145                 case "video":
    146                     $resultStr = $this->receiveVideo($postObj);/*视频消息*/
    147                     break;
    148                 case "link":
    149                     $resultStr = $this->receiveLink($postObj);/*连接消息*/
    150                     break;
    151                 case "event":
    152                     $resultStr = $this->receiveEvent($postObj);/*事件消息*/
    153                     break;
    154                 default:
    155                     $resultStr = "unknow msg type: ".$RX_TYPE;/*未知类型消息*/
    156                     break;
    157             }
    158             echo $resultStr;
    159         }else {
    160             echo "";
    161             exit;
    162         }
    163     }
    164 
    165 
    166     /**
    167      * 文本消息
    168      */
    169     private function receiveText($object){    
    170         /*用户输入的内容*/
    171         $funcFlag = 0;
    172         $content = $contentStr = $object->Content ;    
    173         /* 在这里书写 你的项目逻辑 */
    174         $str = '';
    175         if($content == '联系方式'){
    176             $str = '646943067';
    177         }
    178         /* 通过逻辑后 得到的字符串 后处理成xml格式 发送给微信*/
    179         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
    180         return $resultStr;
    181     }
    182     /**
    183      * 图片消息
    184      *
    185      */
    186     private function receiveImage($object,$media_id){
    187         $textTpl = "
    188                     <xml>
    189                     <ToUserName><![CDATA[%s]]></ToUserName>
    190                     <FromUserName><![CDATA[%s]]></FromUserName>
    191                     <CreateTime>%s</CreateTime>
    192                     <MsgType><![CDATA[image]]></MsgType>
    193                     <Image>
    194                     <MediaId><![CDATA[%s]]></MediaId>
    195                     </Image>
    196                     </xml>";
    197         $time = time();
    198         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, $time, $media_id);
    199         
    200         return $resultStr;
    201     }    
    202 
    203     /**
    204      * 地理位置
    205      *
    206      */
    207     private function receiveLocation($object){
    208         $funcFlag = 0;
    209         $contentStr = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
    210         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
    211         return $resultStr;
    212     }
    213 
    214     /**
    215      * 语音消息
    216      *
    217      */
    218     private function receiveVoice($object){
    219         $funcFlag = 0;
    220         $contentStr = "你发送的是语音,媒体ID为:".$object->MediaId;
    221         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
    222         return $resultStr;
    223     }
    224     /**
    225      * 视频消息
    226      *
    227      */
    228     private function receiveVideo($object){
    229         $funcFlag = 0;
    230         $contentStr = "你发送的是视频,媒体ID为:".$object->MediaId;
    231         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
    232         return $resultStr;
    233     }
    234     /**
    235      * 连接地址
    236      *
    237      */
    238     private function receiveLink($object){
    239         $funcFlag = 0;
    240         $contentStr = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
    241         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
    242         return $resultStr;
    243     }
    244     /**
    245      * 事件消息
    246      *@modify by yangyanzhao 
    247      *@2016-03-19
    248      */
    249     private function receiveEvent($object)
    250     {
    251         $contentStr = "";
    252 
    253         switch ($object->Event)
    254         {
    255             case "subscribe":
    256                 
    257                 $id = (!empty($object->EventKey))?(str_replace("qrscene_","",$object->EventKey)):"";
    258                 $wxuid = $this -> addwxUser($id,$object -> FromUserName);
    259                 //file_put_contents('/alidata1/www/yatibang/abc.txt', var_export($object->EventKey,true),FILE_APPEND);
    260                 $id = (int) $id;
    261                 $wx_name = DB::result_first("select wx_name from app_wx_user where wxuid = $id ");
    262                 if($wx_name){
    263                     $contentStr = "嗨,伙伴~您通过【".$wx_name."】来到php深入浅出公众微信";
    264                 }else{
    265                     $contentStr = "嗨,伙伴~终于把你等来了,我们一起学习吧";
    266                 }
    267                 $this->pushMessage($wxuid);
    268                 
    269                 break;
    270             case "unsubscribe":
    271                 $contentStr = "取消关注";
    272                 break;
    273             case "SCAN":
    274                 //已关注的用户扫码
    275                 break;
    276             case "CLICK":
    277                 switch ($object->EventKey)
    278                 {
    279                     case "tel":
    280                         $contentStr = "12345678911";
    281                         break;
    282                     case "resolve":
    283                         $content = array();
    284                         $content[] = array(
    285                                 "Title"=>"web前端入门", 
    286                                 "Description"=>"", 
    287                                 "PicUrl"=>$this -> local . "/images/weixin/moreimage/1.png", 
    288                                 "Url" =>"http://www.baidu.com/",
    289                             );
    290                         $content[] = array(
    291                                 "Title"=>"php入门基础知识", 
    292                                 "Description"=>"",
    293                                 "PicUrl"=>$this -> local . "/images/weixin/moreimage/2.png",
    294                                 "Url" =>"http://php.net"
    295                             );
    296                         $content[] = array(
    297                                 "Title"=>"框架学习",
    298                                 "Description"=>"", 
    299                                 "PicUrl"=>$this -> local . "/images/weixin/moreimage/3.png", 
    300                                 "Url" =>"thinkphp.cn"
    301                             );
    302                         if (isset($content[0]['PicUrl'])){
    303                             $result = $this->transmitNews($object, $content);
    304                             return $result;
    305                         }
    306                         break;
    307                     
    308                     default:
    309                         $contentStr = "你点击了: ".$object->EventKey;
    310                         break;
    311                 }
    312                 break;
    313             default:
    314                 $contentStr = "receive a new event: ".$object->Event;
    315                 break;
    316         }
    317         $resultStr = $this->transmitText($object, $contentStr);
    318     
    319         return $resultStr;
    320     }
    321 
    322 }

    4.总结:以上代码逻辑转载 互联网,结合自身逻辑 书写代码

  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/ailingfei/p/6428246.html
Copyright © 2011-2022 走看看