微信大众,平台开辟(三) 订阅事务(subscribe)处理惩罚

    添加时间:2013-6-25 点击量:

    一、简介


    新用户存眷微信大众,平台,将产生一个订阅事务,即subscribe事务,默认代码中没有对这一事务进行响应答复处理惩罚。


    在新用户存眷大众,平台后,可能想知道该平台供给了哪些功能,以及如何应用该平台,通俗一点讲就是该平台的“应用申明书”。


    本文将具体讲述对subscribe事务的处理惩罚过程,答复响应信息提拔交互性。


    二、思路解析


    微信今朝供给了五种消息类型,分别为:



    • 文本消息(text);

    • 消息(image);

    • 地理地位消息(location);

    • 链接消息(link);

    • 事务推送(event);


    接管到消息后,起首须要对消息类型做出断定,然后再针对不合类型的消息做出处理惩罚。在事务推送中,事务类型又分为三种,subscribe(订阅)、unsubscribe(作废订阅)、CLICK(自定义菜单点击事务),还须要再加一次断定;断定为subscribe事务后,按照设定好的迎接消息,答复给用户。


    三、断定消息类型



    ¥postObj = simplexml_load_string¥postStr, SimpleXMLElement, LIBXML_NOCDATA);
    
    ¥RX_TYPE = trim¥postObj->MsgType);

    switch¥RX_TYPE
    {
    case text:
    ¥resultStr = ¥this->handleText(¥postObj);
    break;
    case event:
    ¥resultStr = ¥this->handleEvent(¥postObj);
    break;
    default:
    ¥resultStr = Unknow msg type: .¥RX_TYPE;
    break;
    }


    申明:


    ¥RX_TYPE = trim(¥postObj->MsgType);   获得消息类型;


    case text:
      ¥resultStr = ¥this->handleText(¥postObj);   应用handleText() 函数处理惩罚文本消息;


    case event:
      ¥resultStr = ¥this->handleEvent(¥postObj);   应用handleEvent() 函数处理惩罚事务推送;


    四、断定事务类型



    switch¥object->Event)
    
    {
    case subscribe:
    ¥contentStr = 感激您存眷【卓锦姑苏】.\n.微旌旗灯号:zhuojinsz.\n.杰出秀丽,名城姑苏,我们为您供给姑苏本地生活生计指南,姑苏相干信息查询,做好的姑苏微信平台。.\n.今朝平台功能如下:.\n.【1】 查天气,如输入:姑苏天气.\n.【2】 查公交,如输入:姑苏公交178.\n.【3】 翻译,如输入:翻译I love you.\n.【4】 姑苏信息查询,如输入:姑苏观前街.\n.更多内容,敬请等待...;
    break;
    default :
    ¥contentStr = Unknow Event: .¥object->Event;
    break;
    }


    申明:


    若是是subscribe事务,设定答复内容为“感激您存眷【卓锦姑苏】...”;


    五、完全代码



    <?php
    
    /
    wechat php test
    /

    //define your token
    define(TOKEN, zhuojin);
    ¥wechatObj = new wechatCallbackapiTest();
    ¥wechatObj->responseMsg();
    //¥wechatObj->valid();

    class wechatCallbackapiTest
    {
    /public function valid()
    {
    ¥echoStr = ¥_GET[echostr];

    //valid signature , option
    if(¥this->checkSignature()){
    echo ¥echoStr;
    exit;
    }
    }
    /

    public function responseMsg()
    {
    //get post data, May be due to the different environments
    ¥postStr = ¥GLOBALS[HTTP_RAW_POST_DATA];

    //extract 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->handleText(¥postObj);
    break;
    case event:
    ¥resultStr = ¥this->handleEvent(¥postObj);
    break;
    default:
    ¥resultStr = Unknow msg type: .¥RX_TYPE;
    break;
    }
    echo ¥resultStr;
    }
    else {
    echo ;
    exit;
    }
    }

    public function handleText(¥postObj
    {
    ¥Username = ¥postObj->FromUserName;
    ¥toUsername = ¥postObj->ToUserName;
    ¥keyword = trim¥postObj->Content);
    ¥time = time();
    ¥textTpl = <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[%s]]></MsgType>
    <Content><![CDATA[%s]]></Content>
    <FuncFlag>0</FuncFlag>
    </xml>
    ;
    if(!empty¥keyword ))
    {
    ¥msgType = text;
    ¥contentStr = Welcome to wechat world!;
    ¥resultStr = sprintf¥textTpl¥Username¥toUsername¥time¥msgType¥contentStr);
    echo ¥resultStr;
    }
    else{
    echo Input something...;
    }
    }

    public function handleEvent(¥object
    {
    ¥contentStr = ;
    switch¥object->Event)
    {
    case subscribe:
    ¥contentStr = 感激您存眷【卓锦姑苏】.\n.微旌旗灯号:zhuojinsz.\n.杰出秀丽,名城姑苏,我们为您供给姑苏本地生活生计指南,姑苏相干信息查询,做好的姑苏微信平台。.\n.今朝平台功能如下:.\n.【1】 查天气,如输入:姑苏天气.\n.【2】 查公交,如输入:姑苏公交178.\n.【3】 翻译,如输入:翻译I love you.\n.【4】 姑苏信息查询,如输入:姑苏观前街.\n.更多内容,敬请等待...;
    break;
    default :
    ¥contentStr = Unknow Event: .¥object->Event;
    break;
    }
    ¥resultStr = ¥this->responseText(¥object¥contentStr);
    return ¥resultStr;
    }

    public function responseText(¥object¥content¥flag=0
    {
    ¥textTpl = <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[%s]]></Content>
    <FuncFlag>%d</FuncFlag>
    </xml>
    ;
    ¥resultStr = sprintf¥textTpl¥object->FromUserName, ¥object->ToUserName, time(), ¥content¥flag);
    return ¥resultStr;
    }

    private function checkSignature()
    {
    ¥signature = ¥_GET[signature];
    ¥timestamp = ¥_GET[timestamp];
    ¥nonce = ¥_GET[nonce];

    ¥token = TOKEN;
    ¥tmpArr = array¥token¥timestamp¥nonce);
    sort¥tmpArr);
    ¥tmpStr = implode¥tmpArr );
    ¥tmpStr = sha1¥tmpStr );

    if¥tmpStr == ¥signature ){
    return true;
    }
    else{
    return false;
    }
    }
    }

    ?>


    六、存眷


    请存眷 卓锦姑苏 微信大众,帐号,卓锦姑苏 基于SAE 平台开辟,针对于主流的微信功能进行开辟测试。


    您可以存眷 卓锦姑苏 大众,帐号进行功能测试,以及获取新的应用开辟。


    1. 登录微信客户端,伴侣们 -> 添加伴侣 -> 搜号码 -> zhuojinsz,查找并存眷。


    2. 扫描二维码:



    卓锦姑苏 功能列表。






    David Camp



    • 技巧交换,请加QQ群:213260412

    • 营业合作,请接洽作者QQ:562866602


    Great People Share Knowledge...

    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: