Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26014
  • 博文数量: 4
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-14 19:22
个人简介

live a easy life.

文章分类

全部博文(4)

文章存档

2014年(4)

我的朋友

分类: PHP

2014-03-31 17:53:54

处理事件类型消息(MsgType是event)与处理文本类型消息类大同小异,不过是事件类型(event)比较多而已,包括订阅、取消订阅、菜单点击、扫描带参数二维码等等。
同样,首先我们先建立一个 handle_event.class.php 文件:

  1. <?php
  2. class handleMessage
  3. {
  4.     // todo here.
  5. }
同样有个 handle()公共方法:
  1.     /*
  2.      * 处理接收的事件消息;
  3.     * 订阅、扫描、自定义菜单的点击等
  4.     * 可以用文本方式或图文方式自动回复给订阅者;
  5.     */
  6.     public function handle($obj)
  7.     {
  8.         switch($obj->Event)
  9.         {
  10.             case 'subscribe': // 订阅事件,注意:此事件还包含未订阅者扫描推广二维码订阅事件;
  11.                 $re = $this->handleSubscribe($obj);
  12.                 return $re;
  13.                 break;
  14.             case 'unsubscribe': // 取消订阅
  15.                 return '';
  16.                 break;
  17.             case 'YIXINSCAN': // 扫描二维码事件;
  18.                 return '';
  19.                 break;
  20.             case 'CLICK': // 点击自定义菜单 EventKey 即你设置的菜单key
  21.                 return $this->handleClick($obj);
  22.                 break;
  23.             case 'LOCATION' : // 获取订阅者地理位置信息,需用户同意;
  24.                 return '';
  25.                 break;
  26.             default :
  27.                 return '';
  28.                 break;
  29.         }
  30.     }
在处理这些对应事件时,你可能也需要 echoText()、echoNews()方法,请参考第4节中的描述,本节就不做赘述。
订阅事件要单独拿出处理,是因为当 $obj->EventKey 和 $obj->Ticket 参数存在时,代表用户是通过扫描你的推广二维码(含场景值)而关注你的。
  1.     /*
  2.      * 处理订阅事件;
  3.      * 包括普通订阅和扫描推广二维码订阅
  4.      */
  5.     private function handleSubscribe($obj)
  6.     {
  7.         if($obj->EventKey)
  8.         {
  9.             // 该行为是扫描推广二维码订阅
  10.             // 可以将该用户的openid和二维码参数值一同保存到数据库;
  11.             $aryKey = explode('_', $obj->Eventkey); // 分解;
  12.             if(!empty($aryKey))
  13.             {
  14.                 if($aryKey[1])
  15.                 {
  16.                     // 处理推广码;
  17.                 }
  18.             }
  19.         }
  20.         else {
  21.             // 返回欢迎消息;
  22.             $re = "欢迎关注我们的公众账号\n查看功能帮助请输入\"?\"";
  23.             return $this->echoText($obj, $re);
  24.         }
  25.     }
当然还有处理自定义菜单的响应方法:
  1.     /*
  2.      * 处理自定义菜单点击事件;
  3.      * 根据你设置菜单Key来处理不同的点击事件
  4.      */
  5.     private function handleClick($obj)
  6.     {
  7.         switch($obj->EventKey)
  8.         {
  9.             case 'c_order':
  10.                 return $this->echoText($obj, '你点击了"我的订单"菜单');
  11.                 break;
  12.             case 'c_bind':
  13.                 return $this->echoText($obj, '你点击了"账号绑定"菜单');
  14.                 break;
  15.             default :
  16.                 return '';
  17.                 break;
  18.         }
  19.     }
至于用户扫描二维码、获取用户地理位置信息就可以据一反三了,我就不做范例了。
阅读(1090) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~