zoukankan      html  css  js  c++  java
  • 微信公众平台开发,API接入与推送事件(1)

    博客好久没有更新了,今天说说微信开发。微信开发的好多初学者都会又这样的迷惑,微信开发到底是什么?其实微信开发本质我和我们的网站开发没有太大的区别。我们常说的微信开发也就是公众号开,微信公众号分为三个类型,订阅号、服务号、企业号。他们之间的具体区别我这里就不详细说了,要想做开发,就要先明白公众号,微信,用户三者之间的关系。用户通过微信这个应用链接到公众号,公众号通过微信拿到用户的信息,这是通信的基本原理!

    第一步就是服务器接入,进入微信公众号,点击开发这模式,点击启用,准备域名填入(微信支持80端口),填写token(token只能为英文);

    第二步进入服务器空间,建PHP文件,具体的代码实现:

    <?php

              //获取参数,API接入会传入参数timestamp,noce,signature,echostr四个参数

              $time        =  $_GET['timestamp'];

              $noce       =  $_GET['noce'];

              $signature =  $_GET['signature'];

              $echostr   =  $_GET['echostr'];

              $token      =  "weixin";(这里的token必须和你微信公众号填写的token一致);

              //将获取的参数按照字典序排序,并用sha1进行加密;

              $array      =  array($time,$noce,$token);

              sort($array);

              $weixin = implode(' ',$array);

              $weixin  = sha1($weixin);

              //将加密后的数据$weixin和$signature进行比较,参数echostr只有在第一次接入时才会有,第二就不会有了。

              if($weixin == $signature && $echostr){

                         echo $echostr;

                         exit;

              }

    这样就完成了整个API的接入。有木有很简单,哈哈!

    接下来就事件推送与被动回复,事件推送是多种多样的,这个在微信的开发文档上有详细的介绍,常见的事件推送有关注、取消关注、扫描二维码带参数事件、上报地理位置等。

    在做完接入以后,就需要进行代码操作了,用户所有的用微信发送的文章,图文,视频,音频,微信都会发送到接入的服务器,这里就需要我用逻辑代码了,上面写的微信接入是原生的,在实际的开发环境中是不会用的,实际的开发可能会用很多的框架,比如Thinkphp,laravel,YII,CI,或者二次开发框架微擎。在这里我建议用TP,TP在国内被很多的公司都在用,轻量级,开发便捷。

    接接下来的代码实现会基于TP框架进行实现,用过TP的同学都知道3.23之前的需要自己定义文件,比如定义index.php文件,代码如下

    <?php

              define("APP_NAME","App"); //定义项目名

              define("APP_PATH","./App/"); //定义路径

              require("./ThinkPHP/ThinkPHP.php"); //引入核心文件

    之后访问这个文件会生成一个控制器类IndexAction.class.php,具体原因我这里就不详细说了,不懂的同学可以去学习学习TP框架,具体的代码如下

    <?php

             class IndexAction extend Action{

                       //定义接入

                        public function index(){

                                  //获取参数,API接入会传入参数timestamp,noce,signature,echostr四个参数

                    $time        =  $_GET['timestamp'];

                    $noce       =  $_GET['noce'];

                    $signature =  $_GET['signature'];

                    $echostr   =  $_GET['echostr'];

                    $token      =  "weixin";(这里的token必须和你微信公众号填写的token一致);

                    //将获取的参数按照字典序排序,并用sha1进行加密;

                    $array      =  array($time,$noce,$token);

                    sort($array);

                    $weixin = implode(' ',$array);

                    $weixin  = sha1($weixin);

                    //将加密后的数据$weixin和$signature进行比较,参数echostr只有在第一次接入时才会有,第二就不会有了。

                    if($weixin == $signature && $echostr){

                               echo $echostr;

                               exit;

                    }else{

                                            $this->reposeMsg();

                                 }

                        }

                       //定义事件推送回复

                      public function reposeMsg(){

                                 //在做微信API接入的时候可能我们获取参数通过get,事件推送超全局数组GLOBALS进行数据接收

                                  $msg = $GLOBALS['HTTP_RAW_POST_DATA'];//这里也可以用一个三元运算符进行($msg = isset($GLOBALS['HTTP_RAW_POST_DATA'])?$GLOBALS['HTTP_RAW_POST_DATA']:' ')

                                 //获取到数据后需要进行处理,我们都知道微信的通信格式只有两种xml和json,所以需要将数据进行转化

                                 $msg  = simplexml_load_string($msg);//此函数可以将获取的xml格式转换为一个对象

                                 //以关注事件推送为例

                                 /*

                                     微信开发文档有具体的xml格式

                                       <xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[FromUser] ]></FromUserName><CreateTime>123456789</CreateTime><MsgType>< ![CDATA[event] ]></MsgType><Event>< ![CDATA[subscribe] ]></Event></xml>

                                */

                                //以上是标准的通信模板

                                   $toUser  =  $msg->ToUserName;

                                   $fromUser  = $msg->FromUserName;

                                   $msgTime  = $msg->CreateTime;

                                   $msgType = $msg->MsgType;

                                   $msgEvent = $msg->Event;

                              //分析获取的数据,如果是公众号关注,直接执行

                                   if($msgEvent == "subscribe"){

                                            /**

                                                 文本回复格式

                                                 <xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>

                                           **/

                                           $toUser = $msg->FromUserName;

                                           $fromUser = $msg->toUserName;

                                           $time = time();

                                           $msgType = "text";

                                           $content  =  "欢迎关注微信公众号徐二起";

                                            //设置模板

                                           $template = "   <xml> <ToUserName>< ![CDATA[%s] ]></ToUserName> <FromUserName>< ![CDATA[%s] ]></FromUserName> <CreateTime>%s</CreateTime> <MsgType>< ![CDATA[%s] ]></MsgType> <Content>< ![CDATA[%s] ]></Content> </xml>";

                                           //这里使用sprintf函数,进行字符串替换

                                           $info = sprintf($template,$toUser,$fromUser,$time,$msgType,$content);

                                           echo $info;

                                   }

                               

                      }

             }

    这个就完成了推送事件后的回复,这个方法的代码如上,今天就先说这么多,接下来会更新微信开发(2)微信文本,图文消息回复,acceess_token的调用以及微信SDK的实现。

             

  • 相关阅读:
    python自动生成小学四则运算题目
    软件工程第一章心得体会
    Python微信机器人
    利用python进行微信好友分析
    python操作数据库读书笔记
    初学爬虫之访问goole网页与爬取中国大学排名。
    python之预测体育竞技分析
    5、用python写一个自己的网页
    用turtle实现动态汉诺塔
    面向对象与正则表达式的学习(自动更正,和代数运算)
  • 原文地址:https://www.cnblogs.com/beili/p/8426157.html
Copyright © 2011-2022 走看看