诗词网微信版本更新日志

2013-08-17更新日志:
1、代码更新至2.0.1版:增加24小时内的用户关注、取消、文本、图片、位置、事件、语言数统计;
2、增加用户消息的发送时间、类型、内容数统计;记录回复消息的类型、增加后台删除数据功能。
3、修改微信Token,对应URL保持不变。
4、取消图文消息回复的图片链接(代码内及后台均不设置,统一图片存放路径),提高手机端加载速度,回复消息默认增加至10条。
5、增加收到语音消息后回复文本提示。
6、文本消息回复隐藏URL;微博浏览页面默认修改为手机触屏版。
7、延续、更新上一版本的自定义音乐回复代码(自行添加音乐回复格式及其他自定义关键字代码)

{To Be A Coder}【一小白关于弄代码的那些事】

写在前面:
近期因为要考试,每天几百题的量,看得吐血,打印出来废纸张,不环保,整天拿着纸跑来跑去的有点二,于是乎萌发把题库放微信公众账号上来复习,这样利己,还能利人。怎样实现,这便是接下来要说的事。

有了想法,下一步是整理思路、制定方案、然后执行。

【思路】:
只要发送任意题目序号,就可以获得该题目内容及答案。

【方案】:
[1]、用户关注

[2]、引导用户开始查询

[3]、获取用户发送的数据

[3.1]、若数据不为空,则匹配数据库。

[3.1.1]、如存在该题号,则文本回复相关内容。

[3.1.2]、若不存在该题号,则进行提醒。

[3.2]、若数据为空,则无需匹配数据库,直接进行提醒。

[4]、结束。

有了方案,下一步需要分析存在的难点是什么,以及寻求解决的方法:
1、用户关注如何进行引导?
2、如何获取用户发送的数据?
3、如何匹配数据库?
4、如何以文本的形式进行回复?
5、数据库如何建议及数据如何导入?

因为从未学过系统的编程知识,变量、条件判断….什么的都不懂,只能找代码一个人慢慢琢磨,删删改改以便达到自己的要求。在此特别要谢谢@青龙老贼、@ZTalk技术群、w3cschool以及除度娘以外的搜索引擎。

之前@青龙老贼 有一个企业通讯录的教程,我的方案中所存在的问题都有涉及,所以就直接拿他的代码来学习。

【执行】:
1、首先用户关注如何进行引导:
判断消息类型为订阅事件,便引出欢迎语及操作提示。
代码示例:

 

2、获取用户发送的数据:
判断用户消息为文本类型,则匹配数据库,如存在则进行文本回复。
难点在于如何匹配数据库?如何以文本返回数据库的内容。
代码如下:

第65行代码:if($show_value=check_user($form_Content)),设定了变量$show_value、函数check_user(进行数据库匹配)、变量$form_Content(实际为用户发送的数据)。

3、匹配数据库:
函数check_user的主要作用就是匹配数据库,此代码根据@青龙老贼 的代码进行修改成自己的数据库内容。
函数check_user的代码如下:

其中“bigshow”为数据库表名,“show_id“为表内字段,即题库序号。

4、以文本消息的形式回复数据库内容给用户:
@青龙老贼的企业通讯录代码里是以图文的形式进行回复,我参考文本回复的内容设置变量$show_value以及$contentStr,$show_value里面就包含了数据库内相关内容,再赋值给$contentStr,最后回复$contentStr的内容给用户,完成文本消息回复。

代码在第65-73行,其中show_id、show_type、show、show_mood、show_answer均为数据库表“bigshow”内字段。

5、数据库的建立及数据导入:
使用的是SAE,参照之前企业通讯录的内容,建立了一个表及所需字段:

因考虑到题目内容较多,所以字段类型除“show_id”为int外,其余均设置成text。(不知是否正确)

数据导入的问题,因为源数据为excel,且不熟悉数据库,我就只能用了个比较笨的方法,将excel内的题目组合成数据库语句,然后执行导入。

最终得到SQL语句:

INSERT INTO `app_feng`.`bigshow` (`show_id`, `show_type`, `show`, `show_mood`, `show_answer`) VALUES (‘1 ‘, ‘单选题’, ‘\n题目1 ‘, ‘\n选项A\n选项B\n选项C\n选项D ‘, ‘\n答案:B ‘);

最后执行导入。

虽然当初的想法已经实现,但最大的问题仍旧是数据库导入。几十几百的题目可以应付,但是上千的就有点费时间,希望有更好的解决办法。希望大家跟我交流下。
Coder势必要弄代码,但弄代码的未必是Coder,我便是后者。希望对像我一样的朋友有所帮助吧,再次谢谢@青龙老贼

 

从Hello2BizUser文本到subscribe事件

微信公众平台由于接口升级,将产生以下变更。新用户订阅,将由之前推送一条“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”的订阅事件下的处理。

 

二、完整代码

<?php
define("TOKEN", "方倍工作室");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->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 = "<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;
    }
}

?>
=======================
微信公众平台 微信公众平台开发模式 消息接口 企业微信公众平台 Hello2BizUser subscribe 订阅事件
作者:方倍工作室
原文:http://www.cnblogs.com/txw1958/archive/2013/04/01/weixin-if26-subscribe.html

翻墙利器,VPN推荐

#翻墙利器,VPN推荐#

3条免费线路,70条付费线路。

覆盖北美香港日本台湾。

可毫无障碍看Youtube,玩Facebook,玩暗黑破坏神3等外国服首选网络加速器!

注册为免费会员,可享受每月300M流量。

支持IPhone,Android,Win 7、XP;

支持PPTP和L2TP/IPSec;

数据加密,保护真实IP。

注册链接:点击注册

关注我的微信

很久以前申请的微信公众平台账号,近期打算用起来,大家有兴趣的可以关注一下哦。

进入“微信”–“朋友们”–“搜号码”–输入我的微信账号“ammrliblog”即可。

也可以直接扫描下面二维码: