首页  >  文章  >  微信小程序  >  微信公众平台消息接口开发从Hello2BizUser文本到subscribe事件

微信公众平台消息接口开发从Hello2BizUser文本到subscribe事件

高洛峰
高洛峰原创
2017-03-04 14:49:561885浏览

一、Hello2BizUser旧事件的处理

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

代码样例如下:

if ($keyword == "Hello2BizUser"){
    $contentStr = "PHP中文网";
    $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”的订阅事件下的处理。

 

二、完整代码

746d1c365ce1b149275c8e015d81db55responseMsg();

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 = "b2a0af5a8fd26276da50279a1c63a57a
ea5d8177d19f22584533e5c37c389942d3242fa0f72a59f12bbb2807edba61b76671a89dce89e879d9e9c6d81d03862b
c5123754d1f4829fae4905e8abb602f9d3242fa0f72a59f12bbb2807edba61b742a4b8d57eb0afadcf16b7a02c69caaf
246311df1688542638dc52b54a1a4c87%se660f1169ff44ea75c5a982fcb1cde61
42815c2206ae835d7fd68cb4ae21e4dffa796850a1cf5d7bc01ca8cd7f8b83de698463fc03844fbe5a9caafaa1ebd0b1
ea63b4477034504a08070acf4e0b68b2d3242fa0f72a59f12bbb2807edba61b7aa91fa7c40b1cd973268e154dae1a50e
c16e87311aa318186a2141a5b8ce5511%dfecc2d83bf66fbc799a88f710e0cd251
21118965b89073f60271ef4a3b5d3c58";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }
}

?>

 更多微信公众平台消息接口开发从Hello2BizUser文本到subscribe事件 相关文章请关注PHP中文网!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn