频道栏目
首页 > 程序开发 > Web开发 > PHP教程 > PHP开放平台 > 微信开发 > 正文
微信公众平台消息接口开发(26)从Hello2BizUser文本到subscribe事件
2016-01-06 17:36:41      个评论      
收藏   我要投稿

微信公众平台由于接口升级,将产生以下变更。新用户订阅,将由之前推送一条“Hello2BizUser”文本,变化为推送一条“subscribe”的事件。最近碰到好几个朋友询问新用户订阅事件后代码要怎么改,现在将详细过程讲解如下:


一、Hello2BizUser旧事件的处理

在老的关注事件中,用户关注微信公众平台账号后,系统会帮用户发送一条Hello2BizUser的文本给公众账号,公众账号后台开发模式下通过判断Hello2BizUser这个词来实现发送欢迎词。

代码样例如下:

if ($keyword == "Hello2BizUser"){ $contentStr = "欢迎关注方倍工作室,这其实是老的欢迎词,你收不到了"; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr;
}

做出基础接口上的修改,影响会是所有人。一般不会轻易做这样的改动。

为什么微信要修改这一事件了,这个方法的弊端在于,如果用户没有判断这一事件,那么就不会有欢迎词,本来这也没什么关系,不出现欢迎词也不影响什么。但很多人的程序代码里面,所有流程直接就是判断关键词。比如我们曾看到过一家医院的微信账号,用户发送挂号的号码,就显示前面有多少人排列,但后台程序没有做区分,把Hello2BizUser也当成挂号单发送过去,返回没有找到Hello2BizUser这一挂号,不知道前面有多少人,搞得用户莫名奇妙。还有就是用户如果主动发送一个Hello2BizUser过去,那么得到的也是和欢迎词一样的内容,虽然很少有用户会去发这个东西。

另一方面,将用户关注做成事件,更有利于统计功能的实现。利用这个事件,我们就更能容易的判断出关注人数和退订人数,而原来的Hello2BizUser文本推送判断是有可能不准确的,因为用户可以手工发送,形成虚假关注统计。


二、“subscribe”订阅事件判断

subscribe是一种新的事件,我们先需要做事件类型做判断,我们在官方样例中增加对这一事件的判断,修改如下:

复制代码

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE)
{ case "text": $resultStr = $this->receiveText($postObj); break; case "event": $resultStr = $this->receiveEvent($postObj); break; default: $resultStr = "unknow msg type: ".$RX_TYPE; break;
}

复制代码

然后在事件接收处理函数中再判断订阅事件 :

复制代码

private function receiveEvent($object)
{ $contentStr = ""; switch ($object->Event)
    { case "subscribe": $contentStr = "您好,欢迎关注方倍工作室。新感觉,新体验!"; break;
    } $resultStr = $this->transmitText($object, $contentStr); return $resultStr;
}

复制代码

这样就完成了“subscribe”的订阅事件下的处理。


二、完整代码

复制代码

responseMsg(); class wechatCallbackapiTest
{ public function responseMsg()
    { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE)
            { case "text": $resultStr = $this->receiveText($postObj); break; case "event": $resultStr = $this->receiveEvent($postObj); break; default: $resultStr = "unknow msg type: ".$RX_TYPE; break;
            } echo $resultStr;
        }else { echo ""; exit;
        }
    } private function receiveText($object)
    { $funcFlag = 0; $keyword = trim($object->Content); $resultStr = ""; $cityArray = array(); $contentStr = ""; $needArray = false; $illegal = false; $saytome = false; if ($keyword == "Hello2BizUser"){ $contentStr = "欢迎关注方倍工作室,这其实是老的欢迎词,你关注时收不到了"; $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr;
        }else {
        
        }
    } private function receiveEvent($object)
    { $contentStr = ""; switch ($object->Event)
        { case "subscribe": $contentStr = "您好,欢迎关注方倍工作室。新感觉,新体验!"; break;
        } $resultStr = $this->transmitText($object, $contentStr); return $resultStr;
    } private function transmitText($object, $content, $flag = 0)
    { $textTpl = "


%s


%d
"; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag); return $resultStr;
    }
} ?>

复制代码

点击复制链接 与好友分享!回本站首页
上一篇:微信公众平台消息接口开发(25)URL关注链接
下一篇:微信公众平台消息接口开发(28)周公解梦
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训

版权所有: 红黑联盟--致力于做实用的IT技术学习网站