解决WEIPHP图灵机器人KEY填写正确却始终报错的问题

因为社团的缘故,和师兄一起做微信开发,其中要用到WEIPHP这个开源框架,在使用图灵机器人的过程中发现填写的key明明是正确的却始终无法正常返回信息,当我直接在浏览器输入

http://www.tuling123.com/openapi/api?key=这里填写你的KEY=讲个笑话

返回信息:

{“code”:100000,”text”:”父亲:“我亲爱的孩子,如果你想找个称心如意的丈夫,那你就和隔壁邻居的儿子结婚吧,他真心地爱你。”<br>女儿:“爸爸,您怎么知道?”<br>父亲:“我借了他许多钱,已达六个月之久,但他没有来要。”<br>”}

这段代码的时候,返回的信息是正常的 再看返回的代码 100000 是十万,我就想到了可能不是图灵官方的问题,因为JSON数据是正常显示的,只能是weiphp框架自身对图灵机器人返回的代码错误的处理才导致无法正常使用的,然后我就想到检查图灵机器人的代码,果然,发现了一处逻辑错误还有一个switch-case的重复错误,我在图灵机器人中 找到如下这段代码

文件路径为:Addons/Chat/Model/WeixinAddonModel.class.php

下载文件往下拉,找到图灵机器人的功能代码

weiphp2.0中的原版代码如下

// 图灵机器人
private function _tuling($keyword) {
$api_url = $this->config [‘tuling_url’] . “?key=” . $this->config [‘tuling_key’] . “&info=” . $keyword;

$result = file_get_contents ( $api_url );
$result = json_decode ( $result, true );
if ($_GET ['format'] == 'test') {
    dump ( '图灵机器人结果:' );
    dump ( $result );
}
if ($result ['code'] &gt; 40000) {
    if ($result ['code'] &lt; 40008 &amp;&amp; ! empty ( $result ['text'] )) {
        $this-&gt;replyText ( '图灵机器人请你注意:' . $result ['text'] );
    } else {
        return false;
    }
}
switch ($result ['code']) {
    case '200000' :
        $text = $result ['text'] . ',&lt;a href="' . $result ['url'] . '"&gt;点击进入&lt;/a&gt;';
        $this-&gt;replyText ( $text );
        break;
    case '200000' :
        $text = $result ['text'] . ',&lt;a href="' . $result ['url'] . '"&gt;点击进入&lt;/a&gt;';
        $this-&gt;replyText ( $text );
        break;</pre>

观察代码可以发现,这里对返回码的处理是

如果返回码大于40000(4万) 则进入判断 是否小于40008 是则返回相应错误信息 到这里是没问题的 但是 这边不小于40008的时候 居然是返回错误,看到这里我都醉了

看看图灵官网的返回码列表,所有正确消息的返回码都是大于10万的 你这里一下就把大于10万的归类为错误了,这还怎么返回信息呢是吧,所以,我们要把这个else语句给去掉。

再看第二个错误,case 200000有两个,重复了,这个错误没啥好说的,删掉我截图框中下面两个中的任意一个即可,修改后的代码如下,可以直接复制粘贴到对应位置,不要弄错位置了!

        if ($result [‘code’] > 40000) {
if ($result [‘code’] < 40008 && ! empty ( $result [‘text’] )) {
$this->replyText ( ‘图灵机器人请你注意:’ . $result [‘text’] );
}
}
switch ($result [‘code’]) {
case ‘200000’ :
$text = $result [‘text’] . ‘,<a href=”‘ . $result [‘url’] . ‘“>点击进入</a>’;
$this->replyText ( $text );
break;

个人原因微信开发已转移阵地,并未再使用框架 而是自己根据官方接口开发,所以该公众号暂时无法提供测试。

 

坚持原创技术分享,您的支持将鼓励我继续创作!