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方法只是第一次验证服务器调用,验证完后即可删掉。

 

www.phpzy.comtrue/php/8825.htmlTechArticle微信公众号开发总结 最近公司用到了微信公众平台,所以研究了一下微信公众号的开发技术,总体来说比较简单,结合现有的平台核技术,实现起来非常方便。 首先先来了解一下微信...

相关文章

相关频道:

PHP之友评论

今天推荐