博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次难忘的微信蓝牙硬件入坑过程
阅读量:6327 次
发布时间:2019-06-22

本文共 1852 字,大约阅读时间需要 6 分钟。

前几个月的时候,开发了一个微信硬件相关的项目,其业务相对比较简单,就是一个微信的蓝牙硬件设备,通过微信硬件 JSAPI 传输一些数据到我们这边的服务器。

有开发微信硬件的朋友,应该都会有了解,这个流程大致如下:

流程图

但是最近客户向我反馈,收不到硬件发送的信息了。

这怎么可能,代码、服务器都没有变过,怎么可能会出问题呢?但毕竟客户就是上帝,这个问题得检查一下啊,我怀着一颗忐忑的心,看了一下服务器的 Log 日志。

服务器日志

看到了这段日志,更觉得奇怪,easywechat 的扩展包从来没有升级过,此版本 3.1。怎么可能会出这个问题呢?我打开了Guard.php这个文件的代码:

/**      * Handle message.     *     * @param array $message     *     * @return mixed     */    protected function handleMessage(array $message)    {        $handler = $this->messageHandler;        if (!is_callable($handler)) {            Log::debug('No handler enabled.');            return null;        }        Log::debug('Message detail:', $message);        $message = new Collection($message);        $type = $this->messageTypeMapping[$message->get('MsgType')];        $response = null;        if ($this->messageFilter & $type) {            $response = call_user_func_array($handler, [$message]);        }        return $response;    }

第 393 行的代码是这一行:

$type = $this->messageTypeMapping[$message->get('MsgType')];

从日志来看,错误很明显,我打印了一下$message->get('MsgType') ,结果为 null。

各种 Google 无果,最终找来了超哥,easywechat 的作者,在超哥的帮助下,定位到了错误。

从 wechat 的 log 日志中看,有收到硬件发送来的数据,但是收到的数据是这样的:

{    "device_id": "gh_e6a24fdc82b6_69b49a3ee626ee55",    "device_type": "gh_e6a24fdc82b6",    "msg_id": "524313758",    "msg_type": "device_text",    "create_time": "1516171166",    "open_id": "o7iyW0sUwv4wH6PWhextVbtPkNVE",    "session_id": "380219",    "content": "AQAPAgATAwAWBAAA"}

而正常的文本消息数据包是这样的:

{    "ToUserName": "gh_e6a24fdc82b6",    "FromUserName": "o7iyW0sUwv4wH6PWhextVbtPkNVE",    "CreateTime": "1516171641",    "MsgType": "text",    "Content": "123",    "MsgId": "6511907613782547557"}

MsgType ??

msg_type ??

WTF?微信开发的程序员们?你们是在逗我吗?

这个数据结构……

这个命名规范……

无力吐槽……

问题已经确认,微信的协议发生了变更,我调整了一下 easywechat 的变量命名和一些细节程序,感兴趣的小伙伴点击这里:

修改的部分已经提交 PR 到原先的 wechat 扩展包中,希望有开发微信硬件的小伙伴,不要重复入坑。

最后,感谢超哥的帮助!

转载地址:http://hjwoa.baihongyu.com/

你可能感兴趣的文章
jmeter压力测试值之配置JDBC Connection Configuration(一)
查看>>
linux每日命令(10):touch命令
查看>>
给natp_server加缓存
查看>>
Index Generation
查看>>
多系统通讯-DotNetMQ
查看>>
java之网络编程
查看>>
iOS----应用的旋转---Orientations
查看>>
Apache Ignite高性能分布式网格框架-初探
查看>>
UITextField 光标的位置设置获取
查看>>
技术沙龙记录1
查看>>
月份获取
查看>>
局域网内电脑远程访问共享
查看>>
常用上传shell脚本
查看>>
命令行参数读取和解析
查看>>
禁止浏览器滚动条滚动,但滚动条可以显示
查看>>
nginx + tomcat 集群记录
查看>>
python使用post登陆电子科大信息门户并保存登陆后页面
查看>>
Jquery 常用笔记 (一)
查看>>
全面理解面向对象的 JavaScript
查看>>
读耗子叔的《从Equifax信息泄露看数据安全》
查看>>