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

第一步就是服务器接入,进入微信公众号,点击开发这模式,点击启用,准备域名填入(微信支持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的实现。

微信公众平台开发,API接入与推送事件(1)的更多相关文章

  1. Java微信公众平台开发(一)--接入微信公众平台

    转自:http://www.cuiyongzhi.com/post/38.html (一)接入流程解析 在我们的开发过程中无论如何最好的参考工具当然是我们的官方文档了:http://mp.weixin ...

  2. 【微信Java开发 --2】接入微信公众平台开发,配置自己的服务器,验证过程

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑好我们就开始:1.填写好我们的URL和Token[此处是已经通过验证的] ...

  3. 微信公众平台开发教程(一)_微信接入校验以及token获取

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础. 接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 ...

  4. 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发

    第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...

  5. 1.Node.js 接入微信公众平台开发

    一.写在前面的话   Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...

  6. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...

  7. PHP实现微信公众平台开发 全套视频资源下载

    好久没有在博客园更新东西了,今天给大家分享一份比较不错的视频学习资源吧. 主要是关于PHP实现微信公众平台开发,  不知道大家对于微信平台的开发有多少了解,那么今天就从基础开始吧,资源目录如下(PS ...

  8. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  9. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

随机推荐

  1. 检测dll是32/64位 ?

    检测dll是32/64位 ? void CCheck32Or64Dlg::OnButton2() { CString fileName = ""; CFileDialog *fil ...

  2. Python实现常用的数据结构

    Python中的数据结构   #巧用Python列表特性实现特定数据结构 #栈实现stack = []stack.push(x)stack.pop()stack[-1] #队列实现from colle ...

  3. 自用公共js文件

    // 加载配置文件var instance = axios.create({ baseURL: 'http://zy-shop.tincent.me/Wechat/', headers: { 'Con ...

  4. Stanford CS224N 第二课: word2vec详细介绍

    word2vec模型 word2vec 模型有两种: Continuous Skip-gram Model 和 Continuous Bag of Words Model (CBOW). 本文主要讲解 ...

  5. 端口被占用:android studio 虚拟机adb.exe已停止工作的处理

    浏览:2190 | 更新:2017-09-16 05:00 1 2 3 4 5 6 分步阅读 在搭建android studio开发环境后,开始编程调试程序时,不管运行虚拟机还是真机,都不停出现&qu ...

  6. 【CJOJ1603】【洛谷1220】关路灯

    题面 Description 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老常就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉 ...

  7. [BZOJ2761] [JLOI2011] 不重复数字 (set)

    Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 ...

  8. Spring Boot Security 基于角色的访问控制

    @Override protected void configure(HttpSecurity http) throws Exception { //如果配置为需要登录 if (needLogin) ...

  9. WEB前端中rem单位的应用(一)

    在最近的开发和之前的的使用中,我们一般面对需要适应多端的项目或者需要移动端多设备的适应,都可能会引入rem,em这样的单位. 如果你要着手一个以上类似的项目,我们也同样建议使用rem或者干脆引入框架, ...

  10. c#抽取pdf文档标题(2)

    public class IETitle { public static List<WordInfo> WordsInfo = new List<WordInfo>(); pr ...