首页 > 作文

基于PHP的微信公众号的开发流程详解

更新时间:2023-04-08 21:16:45 阅读: 评论:0

微信公众号开发分傻瓜模式和开发者模式两种,前者不要考虑调用某些接口,只要根据后台提示傻瓜式操作即可,适用于非专业开发人员。

开发模式当然就是懂程序开发的人员使用的。

下面简单说一下微信公众号开发的简易流程,新手看看会有帮助,高手请一笑而过。

1、配置服务器:

  a、首先在本机建立如下结构的文件夹(这里是我自己的习惯,仅供参考)

mmpn:总目录mro message public number 微信公众号

backup:备份目录,主要用于备份php文件,每次修改时将原稿备份到里面去。

images:存放图片

includes:包含文件,包括mysql配置,smarty模板包含文件等等

menu:存放公众号菜单信息,txt文档即可

gr****zx.php:开发文件,即公众号关联的程序文件,也就是配置的url对应的文件

最后的是需求等等的文件

主程序文件:gr****zx.php

<?php  define("token", "aabbc_lzpt");  //获取微信发送数据  $poststr = $globals["http_raw_post_data"];  //返回回复数据  if (!empty($poststr))  {    //解析数据    $postobj = simplexml_load_string(爱情哲理$poststr, 'simplexmlelement', libxml_nocdata);    //发送消息方id    $fromurname = $postobj->fromurname;    //接送消息方id    $tourname = $postobj->tourname;    //消息类型    $form_msgtype = $postobj->msgtype;    //事件消息    if($form_msgtype=="event")    {      //获取事件类型      $form_event = $postobj->event;      //订阅事件      if($form_event=="subscribe")      {        //回复欢迎图文信息        /*        $resultstr = "<xml>                <tourname><![cdata[".$fromurname."]]></tourname>                <fromurname><![cdata[".$tourname."]]></fromurname>                <createtime>".time()."</createtime>                <msgtype><![cdata[news]]></msgtype>                <articlecount>2</articlecount>                <articles>                  <item>                    <title><![cdata[ 欢迎关注***微信服务平台,****]]></title>                    <description><![cdata[这是简短描述文字]]></description>                    <picurl><![cdata[/d/file/titlepic/picurl>.jpg                    <url><![cdata[http://www.baidu.com]]></url> </item>                  <item>                    <title><![cdata[最新动态]]></title>                    <description><![cdata[]]></description>                    <picurl><![cdata[/d/file/titlepic/picurl>.jpg                    <url><![cdata[http://www.baidu.com]]></url> </item>                </articles>                </xml> ";        */        //回复欢迎文字信息        $reply="您好,欢迎关注******微信公众平台";        $resultstr="<xml>                <tourname><![cdata[".$fromurname."]]></tourname>                <fromurname><![cdata[".$tourname."]]></fromurname>                <createtime>".time()."</createtime>                <msgtype><![cdata[text]]></msgtype>                <content><![cdata[".$reply."]]></content>              </xml>";      }      el if($form畜牧兽医学校_event=="click")      {        $form_event_key = $postobj->eventkey;        if($form_event_key=="v3002_contact")        {          /*           $resultstr = "<xml>                <tourname><![cdata[".$fromurname."]]></tourname>                <fromurname><![cdata[".$tourname."]]></fromurname>                <createtime>".time()."</createtime>                <msgtype><![cdata[news]]></msgtype>                <articlecount>1</articlecount>                <articles>                  <item>                    <title><![cdata[如何成为本站会员]]></title>                    <description><![cdata[本栏目介绍详细的加入流程!]]></description>                    <picurl><![cdata[/d/file/titlepic/picurl>.jpg                    <url><![cdata[http://www.baidu.com]]></url>                  </item>                </articles>                </xml> ";          */          $reply="我们的地址:黄河东路222号\n我们的热线:0510-88888888";          $resultstr="<xml>                <tourname><![cdata[".$fromurname."]]></tourname>                <fromurname><![cdata[".$tourname."]]></fromurname>                <createtime>".time()."</createtime>          斯诺克上海大师赛      <msgtype><![cdata[text]]></msgtype>                <content><![cdata[".$reply."]]></content>              </xml>";        }      }    }    el if($form_msgtype=="location"){      $lng1=$postobj->location_x;      $lat1=$postobj->location_y;      $from_location_label=$postobj->label;      $reply="地理位置:";      $reply.="纬度".$lat1."\t经度".$lng1."位置".$from_location_label;      $resultstr = "<xml>              <tourname><![cdata[".$fromurname."]]></tourname>              <fromurname><![cdata[".$tourname."]]></fromurname>              <createtime>".time()."</createtime>              <msgtype><![cdata[text]]></msgtype>              <content><![cdata[".$reply."]]></content>              </xml> ";    }    echo $resultstr;    exit;  }  el  {    echo "";    exit;  }?>

临时文件:wx_sample.php

<?php/** * wechat php test *///define your tokendefine("token", "aabbc_lzpt");$wechatobj = new wechatcallbackapitest();$wechatobj->valid();class wechatcallbackapitest{  public function valid()  {    $echostr = $_get["echostr"];    //valid signature , option    if($this->checksignature()){      echo $echostr;      exit;    }  }  public function responmsg()  {    //get post data, may be due to the different environments    $poststr = $globals["http_raw_post_data"];     //extract post data    if (!empty($poststr)){                 $postobj = simplexml_load_string($poststr, 'simplexmlelement', libxml_nocdata);        $fromurname = $postobj->fromurname;        $tourname = $postobj->tourname;        $keyword = trim($postobj->content);        $time = time();        $texttpl = "<xml>              <tourname><![cdata[%s]]></tourname>              <fromurname><![cdata[%s]]></fromurname>              <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, $fromurname, $tourname, $time, $msgtype, $contentstr);          echo $resultstr;        }el{          echo "input something...";        }    }el {      echo "";      exit;    }  }      private function checksignature()  {    $signature = $_get["signature"];    $timestamp = $_get["timestamp"];    $nonce = $_get["nonce"];              $token = token;    $tmparr = array($token, $timestamp, $nonce);    sort($tmparr, sort_string);    $tmpstr = implode( $tmparr );    $tmpstr = sha1( $tmpstr );        if( $tmpstr == $signature ){      return true;    }el{      return fal;    }  }}?>

注意看两个文件开头都有代码:define(“token”, “aabbc_lzpt”); 这是定义token,后面的值自己设置,但是自己要记住,在微信后台配置服务器要用到它。

b、现在开始操作,首先,将gr****zx.php文件中的内容(代码),临时清空,代替以临时文件中的内容(代码),保存。将mmpn项目传到服务器,这时,主程序文件url为“http://www.****.com/mmpn/fy_hzx/grape_fy_hzx.php”这样的形式,确保路径正确,打开微信公众号后台开发者中心,点击下图中“修改配置”,将刚才的url填入相应控件

token就是刚才提到要记住的token的值,要一致。第三个“消息加密密钥”可以随机生成,然后提交。

token正确和url正确以及文件代码无误的话,会提示成功,再点启用。

c、刚才主程序文件中的代码是临时的,只是为了开通注册验证token,成功以后,可以再次清除,恢复成原来的内容。(保存好再上传到服务器)

这样服务器配置工作就结束了。

2、介绍一下主程序文件中的代码

  $form_msgtype = $postobj->msgtype;

  $form_msgtype消息类型,分为“事件”、“位置”(粉丝发送位置)、“文字类型”、“图片类型”等,具体可查看后台接口文档

  $form_event = $postobj->event;

  $form_event 事件类型分为“订阅”(subscribe)(也就是点关注)、退订(unsubscribe)、“点击”(clic国家面积k)——点击菜单,但是只针对click类型的菜单,如果是url类型的菜单,则直接打开对应的url,无须在代码中处理。

  回复粉丝的内容形式一般为文字或图文两种,代码中都有。

3、菜单配置

  菜单配置要知道开发者id中的appid(这个可以直接看到)和appcret(这个有可能是被隐藏的,要通过公众号管理员验证通过申请查看才能显示完整,显示完整后要及时保存记录,这样下次就不用再找管理员了)。

  配置菜单前,首先要拿到access_token,它的有效期为2小时。如图点击获取access_token

然后在右下方点击“使用网页调试工具调试该接口”

输入appid和cret,点“检查问题”提交

拷贝获取到的access_token

重新选择自定义菜单:

将刚获取到的access_token 拷入

如果接口列表选择的是查询菜单,提交的结果是不存在,这就对了,因为我们还没有创建菜单呢

那么,我们就创建一个,将以下json格式代码拷入body中,提交

{    "button": [      {        "name": "首页",         "sub_button": [          {            "type": "view",             "name": "注册登录",             "url": "http://www.baidu.com",             "sub_button": [ ]          },           {            "type": "click",             "name": "娱乐一刻",             "key": "v1001_query",             "sub_button": [ ]          },           {            "type": "view",             "name": "查看官网",             "url": "http://www.baidu.com",             "sub_button": [ ]          }                  ]      },       {        "name": "主页",         "sub_button": [         {            "type": "view",             "name": "注册登录",             "url": "http://www.baidu.com",             "sub_button": [ ]          },           {            "type": "click",      广交会邀请函       "name": "娱乐一刻",             "key": "v1001_query",             "sub_button": [ ]          },           {            "type": "view",             "name": "查看官网",             "url": "http://www.baidu.com",             "sub_button": [ ]          }                  ]      },       {        "name": "关注我们",         "sub_button": [          {            "type": "view",             "name": "注册登录",             "url": "http://www.baidu.com",             "sub_button": [ ]          },           {            "type": "click",             "name": "娱乐一刻",             "key": "v1001_query",             "sub_button": [ ]          },           {            "type": "view",             "name": "查看官网",             "url": "http://www.baidu.com",             "sub_button": [ ]          }        ]      }    ]  }

提交,提示成功菜单即生成。

  菜单内容中,有两个类型 (type),一个是view,这个会直接打开相应url链接;一个是click,这个就会在刚才主程序文件中寻找对应key值运行相关的代码。

  格式不要弄错就行。

  如果要修改菜单,先删除,再创建;一般来说,菜单更改后,公众号须重新关注才能马上看到更改效果,否则要等24小时自动更新。

  到此这篇关于基于php的微信公众号的开发流程详解的文章就介绍到这了,更多相关php微信公众号的开发内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-08 21:16:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/16cf28438333fec0ff043b5b606626a7.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:基于PHP的微信公众号的开发流程详解.doc

本文 PDF 下载地址:基于PHP的微信公众号的开发流程详解.pdf

标签:文件   菜单   公众   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图