程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 微信公眾號開發總結

微信公眾號開發總結

編輯:關於PHP編程

最近公司用到了微信公眾平台,所以研究了一下微信公眾號的開發技術,總體來說比較簡單,結合現有的平台核技術,實現起來非常方便。

首先先來了解一下微信公眾平台。

“微信,是一個生活方式” ,這是微信的自我評價,是不是覺得如果那天不在朋友圈裡分享一下自己的最新狀態, 
並且收到幾個贊和評價的話,會覺得空虛寂寞呢?它實實在在的改變了我們的生活方式。

“ 微信,也是一個生意方式 ”,在微信成為我們日常必備之app的同時,它同樣具備巨大的的商業 
或許不應該稱為潛力,因為有很多人已經獲利,名人們在微信上開設公眾賬戶來吸金,商家來做推廣, 
服務行業借此拓展渠道,甚至微信已經支持支付了, 還有越來越的自媒體在微信平台湧現出來。 
這篇文章就是介紹如何快速的成為公眾平台開發者,由於個人只能申請訂閱號,因此本文是以訂閱號為例。
關於訂閱號和服務號的區別,請參見 微信公眾平台服務號、訂閱號的相關說明

從微信用戶角度簡單來說:

訂閱號 主要用於信息輻射,典型的如各家 新聞媒體 。 
服務號 主要由於自助服務,典型的如 招商銀行 。

申請公眾平台賬戶

  • 到 微信公眾平台填寫注冊信息
  • 按照提示激活郵箱

  • 上傳個人照片,需要有清晰的身份證照片

  • 選擇公眾賬戶的類型,對於個人賬戶只能選擇 訂閱號

  • 最後你會看到自己賬戶的所有信息,請上傳賬號的頭像,否則無法完成開發者的申請

  • 等待審核通過,這個過程大約需要2~3天,當你收到如下通知,那麼恭喜你,你已經成功的申請到了微信公眾賬戶了

關於微信公眾帳號注冊的步驟就不再多說了,可以找到大量的圖文教程。

帳號注冊成功之後,需要驗證自己的服務器,如果你沒有自己的服務器,那可以用新浪SAE或者百度BAE,本文采用的是新浪SAE平台來搭建服務器。

注冊過程略,使用新浪SAE創建應用,可以選擇應用開發框架,選項中有比較熱門的開發框架,選擇微信公眾平台phpSDK,點擊後跳轉到介紹頁面,點擊安裝框架,系統會生成一個搭建好的微信公眾平台應用,為了方便開發,我們可以使用svn來管理此應用代碼,關於svn搭建可參見sae代碼部署手冊。

使用新浪SAE是比較方便的,如果我們有自己的服務器,可以把代碼clone到自己的服務器上,下面來看一下代碼

首先定義一個Wechat的基類

 <?      
 
        
    
              
       
              
       
               
       __construct(,  =         (->isValid() && ->validateSignature(         (['echostr'  
       ->debug =        ((&, 'errorHandler'       
 
        = () (['HTTP_RAW_POST_DATA'], 'SimpleXMLElement', 
       ->request = (,       
  
              
              (['echostr'  
               
       validateSignature(        = ['signature'        = ['timestamp'        = ['nonce' 
        = (, ,        ( 
        (()) ==   
               
       getRequest( =         ( ===           ->  
        = ( 
        ((->request[          ->request[  
          
              
       
              
           
              
             
              
           
              
       
              
       
              
       
              
       
              
                    
       
              
       
                
       responseText(,  = 0       ( TextResponse(->getRequest('fromusername'), ->getRequest('tousername'), ,   
                   
       responseMusic(, , , ,  = 0       ( MusicResponse(->getRequest('fromusername'), ->getRequest('tousername'), , , , ,   
               
       responseNews(,  = 0       ( NewsResponse(->getRequest('fromusername'), ->getRequest('tousername'), ,                 
       responseVoice(,  = 0       ( TextResponse(->getRequest('fromusername'), ->getRequest('tousername'), ,   
              
              (->getRequest('msgtype' 
          'event':
            (->getRequest('event' 
              'subscribe':
               ->                
              'unsubscribe':
               ->                              
              'LOCATION':
               ->                              
              'CLICK':
               ->                              
              'VIEW':
               ->                
             
          'text':
           ->            
          'image':
           ->            
          'location':
           ->            
          'link':
           ->            
          'voice':
           ->                      
         :
           ->            
   
                 
       errorHandler(, , ,         ( ! ->           
        =          
                    => 'Warning',
         
                     => 'Notice',
            
                 => 'User Error',
               => 'User Warning',
                => 'User Notice',
                     => 'Strict',
         E_RECOVERABLE_ERROR => 'Recoverable Error',
         E_DEPRECATED        => 'Deprecated',
         E_USER_DEPRECATED   => 'User Deprecated',
  
        = <<<  
 %s: % : % Line: %  
       ->responseText((,
         [],
         ,
         ,
         
   
  
        
     
                   
       __construct(, ,        ->toUserName =        ->fromUserName =        ->funcFlag =   
        
  
 
        
    TextResponse  
       
       = <<< <xml>
   <ToUserName><![CDATA[%s]]></ToUserName>
   <FromUserName><![CDATA[%s]]></FromUserName>
   <CreateTime>%s</CreateTime>
   <MsgType><![CDATA[text]]></MsgType>
   <Content><![CDATA[%s]]></Content>
   <FuncFlag>%s<FuncFlag>
 </xml>
  
       __construct(, , ,  = 0       parent::__construct(, ,        ->content =   
              (->template,
         ->toUserName,
         ->fromUserName,
         (),
         ->content,
         ->   
  
        
    MusicResponse  
                         
       = <<< <xml>
   <ToUserName><![CDATA[%s]]></ToUserName>
   <FromUserName><![CDATA[%s]]></FromUserName>
   <CreateTime>%s</CreateTime>
   <MsgType><![CDATA[music]]></MsgType>
   <Music>
     <Title><![CDATA[%s]]></Title>
     <Description><![CDATA[%s]]></Description>
     <MusicUrl><![CDATA[%s]]></MusicUrl>
     <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
   </Music>
   <FuncFlag>%s<FuncFlag>
 </xml>
  
       __construct(, , , , , ,        parent::__construct(, ,        ->title =        ->description =        ->musicUrl =        ->hqMusicUrl =   
              (->template,
         ->toUserName,
         ->fromUserName,
         (),
         ->title,
         ->description,
         ->musicUrl,
         ->hqMusicUrl,
         ->   
  
 
        
    NewsResponse  
       =  
       = <<< <xml>
   <ToUserName><![CDATA[%s]]></ToUserName>
   <FromUserName><![CDATA[%s]]></FromUserName>
   <CreateTime>%s</CreateTime>
   <MsgType><![CDATA[news]]></MsgType>
   <ArticleCount>%s</ArticleCount>
   <Articles>
     %   </Articles>
   <FuncFlag>%s<FuncFlag>
 </xml>'
  
     
           
  
 
     
     
         
       
         
   }

此基類我稍作了更改,包含了能實現的微信所有的接口,通過繼承 `Wechat` 類進行擴展,例如通過重寫 `onSubscribe()` 等方法響應關注等請求,下面是實現的示例代碼:

 <?      
 
   ('src/Wechat.php' 
        
    MyWechat  
              
             ->responseText('歡迎關注韓聰的微信號'  
              
             
  
              
       
       ->responseText('您的地理位置為:' . ->getRequest('Latitude') . ',' . ->getRequest('Longitude'        
              
              =->getRequest('EventKey'        (           'C001':
            ->responseText('我贏了'                       'C002':
            ->responseText('我最近很好o(∩_∩)o '                       'C003':
            ->responseText('謝謝(*^__^*) 嘻嘻'                   
              
             ->responseText('收到了文字消息:' . ->getRequest('content'  
              
              =           NewsResponseItem('標題一', '描述一', ->getRequest('picurl'), ->getRequest('picurl')),
          NewsResponseItem('標題二', '描述二', ->getRequest('picurl'), ->getRequest('picurl')),
  
       ->responseNews(  
              
                
 
       ->responseText('收到了位置消息:' . ->getRequest('location_x') . ',' . ->getRequest('location_y'  
              
             ->responseText('收到了鏈接:' . ->getRequest('url'        
               
             ->responseVoice('收到了語音:' . ->getRequest('recognition'  
              
             ->responseText('收到了未知類型消息:' . ->getRequest('msgtype'  
  
    =  MyWechat('hancong',    ->run();

以上代碼部分功能需要開通服務號並且申請認證,比如語音識別,地理信息,添加菜單的功能,申請認證需要300元/年,可以享受微信所有的接口功能。

 

注:如果驗證服務器URL,需要修改一句代碼

 =  MyWechat('hancong', 
->validateSignature('hancong');

驗證完後回復調用run方法,validateSignature方法只是第一次驗證服務器調用,驗證完後即可刪掉。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved