博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信事件推送接口(原创总结)
阅读量:4948 次
发布时间:2019-06-11

本文共 2288 字,大约阅读时间需要 7 分钟。

微信中所有的推送事件都会发送到开发者填写的URL,MP中的,左侧最下面的开发-》基本配置-》服务器配置-》第一个就是,这个URL有要有处理所有事件推送的能力,当然不是每个都需要处理,只需要将需要的接受处理即可,其他的可直接忽略。

1.首先接收推送过来的数据包。

$postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : "";

2.判断数据包是不是空的,空的当然无需处理了,非空数据包转换为php对象。

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

然后根据研究各个事件推送过来的xml数据包,普通消息和事件消息等共用的有以下字段:

①ToUserName      开发者微信号

②FromUserName  发送方帐号(一个OpenID)

③CreateTime       消息创建时间(整型)

④MsgType           消息的类型

3.根据消息类型将事件分类。

普通消息包括(文本、语音、图片、视频、小视频、地理位置、链接),事件消息(event),除了普通消息,其他的全部是event。

MsgType           消息类型        这个来区分普通消息和事件消息,将事件推送分成了两大部分。

普通消息一般是转发给客服处理或者是做关键词匹配处理等。

4. 根据事件消息的事件名将事件分类,单个去处理。

每个事件消息的共用部分是Event,代表了事件类型。

事件名称(Event的值)

关注(subscribe)

取消关注(unsubscribe)

上报地理位置(LOCATION)

自定义菜单拉取消息(CLICK)

点击菜单跳转(VIEW)

扫描带参数二维码(SCAN)

扫码推事件(scancode_push)

扫描显示消息接受中(scancode_waitmsg)

弹出系统拍照发图(pic_sysphoto)

弹出拍照或者相册发图(pic_photo_or_album)

弹出微信相册发图器(pic_weixin)

弹出地理位置选择器(location_select)

模板消息送达情况提醒(TEMPLATESENDJOBFINISH)

群发消息后的通知(MASSSENDJOBFINISH)

微信小店订单支付后的通知(merchant_order)

资质认证成功(qualification_verify_success)

资质认证失败(qualification_verify_fail)

名称认证成功(naming_verify_success)

名称认证失败(naming_verify_fail)

年审通知(annual_renew)

认证过期失效通知(verify_expired)

对各个事件的处理基本都是大同小异的。

5. 扫描带参数二维码与关注。

这是唯一一个比较别扭的地方,当扫描带参数二维码的时候需要判断用户是否已经关注了公众账号,如果关注了,那么了Event为SCAN,如果未关注的话,则是跳转到了公众号的关注页面,如果点了关注,会触发subscribe类型的事件,同时会把扫描带参数二维码里面的信息带到xml数据包中,也就是现在的关注和普通的搜索或者按照名片的关注不一样了,多带了参数,处理的时候要注意。

$Event = $postObj->Event; if($Event == 'subscribe'){// 关注     if(isset($postObj->EventKey) || isset($postObj->Ticket)){         // 扫描带参数二维码,未关注推送         $EventKey = $postObj->EventKey; //事件KEY值,qrscene_为前缀,后面为二维码的参数值         $Ticket   = $postObj->Ticket;   //二维码的ticket     }else{         // 普通关注     }} // elseif中处理其他类型的事件
elseif($Event == 'SCAN'){        // 扫描带参数二维码,已关注推送        $EventKey = $postObj->EventKey;// 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id        $Ticket   = $postObj->Ticket;  //二维码的ticket}

 

6.模板消息推送事件中,需要再往下根据送达状态分类。

if($Event == 'TEMPLATESENDJOBFINISH'){    // 模板消息发送结果提醒    $status = $postObj->Status;    if($status == 'success'){        // 送达成功    }elseif($status == 'failed:user block'){        // 送达由于用户拒收    }elseif($status == 'failed: system failed'){        // 其他原因    }else{        echo "success";    } }

转载于:https://www.cnblogs.com/wyzs/p/5262168.html

你可能感兴趣的文章
【转】Android详细的对话框AlertDialog.Builder使用方法
查看>>
Unite Beijing 2015大型活动
查看>>
loading加载的代码
查看>>
PHP框架CI CodeIgniter 的log_message开启日志记录方法
查看>>
arraylist
查看>>
关于poi导出excel三种方式HSSFWorkbook,SXSSFWorkbook,csv的总结
查看>>
zoj 1649 Rescue (BFS)(转载)
查看>>
371. Sum of Two Integers java solutions
查看>>
2124: 等差子序列 - BZOJ
查看>>
3529: [Sdoi2014]数表 - BZOJ
查看>>
自我介绍
查看>>
字符串匹配算法综述
查看>>
Linux centosVMware shell 管道符和作业控制、shell变量、环境变量配置文件
查看>>
在程序被送入后台时,向 iOS 借点时间,来完成一个长期任务
查看>>
【设计模式】工厂模式
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
前端之路
查看>>
javascript 继承
查看>>
String类型转int类型方法
查看>>
关于渲染引擎设计,Scene Management的文章
查看>>