基于机智云平台的WIFI产品微信应用快速开发指南1、前言 1 2、微信开发入门 2 2.1、微信开发准备 2 2.2、微信基础开发详细说明 2 3、微信与机智云相结合的硬件开发 4 3.1、机智云硬件开发准备 4 3.2、微信硬件开发准备 4 3.3、硬件开发 5 附录一、微信开发及其机智云开发相关文档的集锦 6
1、前言第一次接触微信开发,做的第一个应用在本人阅读了差不多十多万字的微信开发文档和硬件开发文档以及机智云平台的开发文档,同时在公司同事和身边做微信开发的朋友的帮助下终于搞定。在此表示感谢。 本文基于机智云平台作为第三方硬件云平台,以带有WIFI通讯模块的产品设备的应用开发为例,介绍整个微信硬件实际开发过程中需要注意的细节以及在开发过程中所遇到的值得大家注意的问题。本文不会照搬微信开发文档和机智云开发文档,故读者还是需要仔细阅读这些文档。
2、微信开发入门
2.1、微信开发准备第一步、注册订阅类个人公众号,成为开发者。 第二步、成为开发者以后,进入开发者工具,申请一个公众平台测试账号,它拥有微信平台所有接口的权限。 第三步、进入测试号-接口配置信息对服务器进行配置。这里必须有一个可供外网访问的服务器资源。填写URL和自定义的token,点击“提交”按钮,如果服务器能正确响应验证,则配置成功。详细细节见3.2.1。
2.2、微信基础开发详细说明
2.2.1、微信消息入口与接口凭据
1、微信的消息入口就是开发准备的第三步需要填写的URL。而且这个URL还是能可供外网访问的。首先我们在开发阶段就没必要去申请服务器和域名。这里我推荐使用一个反向代理的工具ngrok。 附加说明一下:os x系统开发时启用ngrok命令时去掉“=”用空格代替即可成功执行。 同时吐槽一下,百度ngrok关键词,排名第一的Sunny-ngrok千万别用,已经被微信加入黑名单啦。 验证URL地址有效性,如果你是用Java开发的,请百度一下,就会有很多现成示例代码参详。 然后接收微信发送过来的消息入口都在此下面,除验证URL地址有效性,微信使用的GET请求,其他的所有均使用POST请求。 微信消息的接收与推送为xml格式,其中主要关注MsgType与Event即可。 2、接口凭据 access_token 微信基础参数,很多接口都会用到这个。注意access_token的刷新。还是引用一段微信文档中的原文吧。如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新access_token,那么就可能会产生冲突,导致服务不稳定。故刷新是可以专门用一个服务去刷新access_token。推荐参考一个用Python编写的自动刷新access_token的超轻量级服务TokenBoy。源码及其服务使用方法参见https://github.com/alexazhou/TokenBoy。
2.2.2、创建自定义菜单微信开发文档说得很详尽,但是本人开发的时候遇到一点点小挫折,我是拿网上的示例代码直接运行创建菜单,不过我是一直打开测试公众号的,不过却怎么也没有。后来请教同事后才知道,需要清除一下缓存,重新打开微信进入测试公众号就有啦。如果不清除缓存,你可以先取消关注,再重新关注一下测试公众号进入就能看到刚创建的菜单啦。
2.2.3、网页授权 首先在网页服务-网页账号-OAuth2.0网页授权中配置,取接口配置的域名部分即可,注意该域名不用加http。测试公众号可以使用ip地址,但正式的公众号就仅支持域名。 同样网页授权的步骤开发文档也讲得非常详尽,但是如何引导用户进入授权页面进行授权,微信开发文档并没有说得很清楚。下面是本人的两种处理方式。第一种,在创建菜单的时候,把view类型的每个菜单都定义成回调redirect_uri的微信规定的格式;第二种便是URL请求到达服务器,有服务器自行请求微信服务器执行网页授权的处理,这样可以免去创建那么长一大堆字符串URL地址的麻烦。 在这里本人遇到的坑是我在使用ngrok反向代理的时候,使用了sunny提供的服务,域名为ngrok.cc。一级页面都可以使用微信正常访问,从该页面跳转到另一个页面的时候却出现了“非微信官方网页 将由微信转换为手机预览模式”这样的提示。经过了几天的资料查询,朋友的询问,甚至把OAuth2.0的授权都了解得彻彻底底,还是无法解决。不过最后只是灵光一闪,我换了一个qydev.com的域名代理,一切问题都迎然而解。
2.2.4、微信开放的JS接口如果要使用微信开发的js接口,请先配置JS接口安全域名。根据开发文档说明通过config接口注入权限验证配置。这是需要用到jsapi_ticket与微信基础的access_token一样需要定时更新,实现方式与access_token完全一样,同样也可以使用TokenBoy服务。 这里需要特别说明的是因为是硬件开发,需要用到微信硬件开发的js api。微信硬件jsapi必须在config中配置beta:true这个选项, 这里需要注意,因为是微信开发文档中没有提及的。
3、微信与机智云相结合的硬件开发
3.1、机智云硬件开发准备第一步、创建机智云开发者账号 第二步、点击创建新产品按钮根据提示创建产品。 第三步、在设备列表中选择刚创建的产品,点击进入后选择数据点,按要求新建数据点。注:机智云中数据点即与该设备相关的数据属性。
3.2、微信硬件开发准备第一步、功能服务-设备功能-设置进入设备管理界面,点击添加产品。 第二步、添加产品相关信息并提交。其中需要注意在“选择接入方案”请选择第二个“平台基础接入方案”,因为本文我们是以对接机智云第三方硬件平台进行开发。注意后面的说明-设备不对接微信硬件云,设备消息将以xml格式发送到开发者在公众平台/基本配置填写的服务器地址。即在设备成功接入微信的那一刻会把设备的相关信息以xml的形式发送到服务器。本文以WIFI产品为例,那连接类型自然选择wifi,产品连接能力选择wifi和局域网发现。 第三步、产品添加成功后会自动生成一个相应的产品编号product_id,使用该编号对该产品进行授权即可。
3.3、硬件开发3.3.1、新的微信设备授权接口之所以为新的设备授权接口是因为以前微信授权是要针对每个设备的deviceid都进行授权,而新的授权接口同一类型设备有微信自动生成一个相同的微信的deviceid及其二维码,然后在进行设备的授权,注意授权用到的did是微信生成的deviceid。请注意op_type为0的时候,必须填写 product_id 字段,请开发者必须注意。
3.3.2、机智云开发
1.匿名注册,与设备绑定 使用微信的OpenId作为唯一标识,生成匿名用户提供uid与token,获取访问机智云的访问凭证。只有完成的第一步才能进行后面绑定设备的操作。机智云绑定设备的接口中的appid为机智云平台对于设备产品绑定的应用appid,而其中header参数的X-Gizwits-Signature 中签名算法所涉及的product_secret即云平台对应产品的产品密钥。 注意,设备绑定的时候请选择使用mac地址绑定方式,老的passcode绑定方式不适合wifi 产品,如果是虚拟设备的mac地址为“virtual:site”,不会经过机智云的mac校验的,也是可以绑定成功的。
2、与云端进行Web Socket交互 通过机智云开发的接口获取用户绑定的设备列表,然后点击在线的设备,即可直接通过web socket连接云端获取该设备的数据。 现在简单介绍一下获取设备数据的一个流程: Ø 确认设备在线,通过web socket方式与云端连接。 Ø 用户订阅了已绑定的设备,才可以获取机智云相关设备的数据。 Ø 使用"cmd": "c2s_read"(前提是在用户登录的时候 "p0_type"为"attrs_v4")指令就可以使客户端浏览器与云端进行交互,及时获取设备数据,设备数据有任何变化,客户端也会实时收到其设备变化的数据。 Ø 若需要修改设备的某些数据,或者控制设备,可以使用机智云的gizwits open api。 Ø 若业务中需要统计设备的某些数据,甚至根据数据做出一些提示的需求,有些需求可以直接使用gizwits open api,如果还不能满足需求的话可以使用gdms中的Enterprise Api。或者使用服务器在每日结束的时候记录设备相关数据。
附录一、微信开发及其机智云开发相关文档的集锦让开发者可以快速而准确地有目的性地阅读与开发相关的重要性的文档。 使用Java作为服务器开发微信应用的开发人员可以参考一下openapi-sdk-java与gizwits-wechat-js-sdk两个项目。
|