微信应用开发教程
文件编辑
微信SDK
附:微信SDK包下载
目标驱动教程
本教程以目标为驱动,去除冗余细节,让机智云的朋友快速获取微信接入。好吧,让我们开始吧!
为什么要接入微信?
还有很多……
正是这些好处让我们能够利用微信的力量。因此,我们将使用微信的两大系统:
最终,我们希望用户可以像体验微信原生功能一样使用我们的智能设备。
你有微信公众号吗?
首先,我们需要申请一个微信公众号。
注意不能申请订阅号(不支持微信认证)。我们将申请一个服务号并完成认证操作,然后我们可以打开“设备功能”模块,最后添加一个产品。
最终,你会得到两件装备:
当然,你也可以在开发初期使用测试号进行调试。
你必须有一个设备,对吧?
在微信连接之前,需要确保设备可以与机智云正常通信。该装置的具体开发过程如下。
注意在WIFI模块中,写AirKiss的时候需要配置公众号的原ID。也就是说,除了将机智云product_key写入MCU外,还需要将公众号的原始ID写入WIFI固件。关于固件烧录,如果厂家或朋友有困难,可以向机智云客服MM寻求帮助。
设备二维码
微信客户端APP可以通过扫描二维码添加设备。为了使已成功连接机智云的设备能够被微信控制,请在微信公众平台创建产品时选择以下设置。设置如下:
其中:连接类型选择“Wi-Fi”设备;
产品添加方法选择“每个型号的唯一二维码”。添加产品成功后,微信会生成该产品唯一的二维码。通过扫描这个独特的二维码,您可以就近找到微信分发网络。如果您选择“每个产品的唯一二维码”,那么将为该产品的每个产品生成一个二维码。扫描二维码直接绑定设备,但无法通过Field found绑定;
产品配置方式选择“微信配网”和“不使用加密”。
设备授权
设备不仅要在WIFI固件中写入公众号的原始ID(注意不是APPID),还要将所有设备的Mac地址注册到微信服务器。一开始微信只给你100个配额,也就是你只能授权100台设备。
授权的方法是向微信接口发送请求。详情请参考微信文档-设备授权。
很多小伙伴回应,授权经常失败。这里我们给出一组基于WIFI通信的例子,大家可以参考:
注意:12位的xxxxxxxxxxxx代表设备的Mac地址,id是设备ID,是机智云的did。但是因为设备必须在线,机智云会分配一个do,所以我们无法预测这个do是什么。通常的做法是将 id 和 mac 都设置为设备的 Mac 值。
auth_key 可以留空并设置为空字符串,但不能缺少此字段。
op_type为0时,表示添加设备,后跟product_id字段(产品ID,在公众号的“设备功能”中,添加产品后会有这个id)。当 op_type 为 1 时,表示更新了一个设备,此时不需要 product_id 字段。
批量授权时,记得更新顶部:device_num。
这样,我们在硬件(设备)层面的准备工作就完成了。
分阶段结果
好了,到了这一步,你可以稍微犒赏一下自己,享受阶段性的成果!
打开你的微信(确保它已连接到wifi)并扫描你的产品的二维码。
下面有两个按钮,绿色按钮是启动微信的AirKiss,将WIFI账号密码发送到设备的WIFI模块。
部分设备需要开启匹配模式才能配置上网。一般是先启动设备的匹配模式,再使用微信的配置功能。配置完成后会自动跳转到设备搜索界面。
在搜索界面,如果前面的准备工作都做好了,就可以发现设备(无论是否绑定)。单击发现的设备,然后绑定。微信会自动跳转到公众号页面。然后,你可以在微信的设置页面中再找到一项:设备。
当然,上面的操作只是为了实现绑定操作。以下教程将向您展示如何监控设备的数据点。
简化操作的 SDK
为了简化开发者的操作,我们将一些必要的API封装成两个SDK:java-SDK和js-SDK。它们分别用于后端和前端页面,分别封装了机智云的OpenAPI和WebSocket。
这两个 SDK 将大大简化 API 的操作,帮助我们接管令牌和用户管理。我们只需要调用相关的方法来绑定和解绑设备。
SDK,可在本文附件中下载。
业务服务器搭建
设备没有问题,我们现在需要的是控制设备本身的功能。
既然设备已经和机智云正常通信了,那么设备的操作其实就是如何与机智云交互的。
机智云设备绑定
现在用户已经在微信中绑定了设备,他想查看设备的在线状态。该怎么办?
我们使用微信的 OpenId 作为唯一标识来生成匿名用户。何时注册匿名用户?微信绑定设备时,会向我们的业务服务器推送设备绑定事件消息。此时,我们将同时完成注册匿名用户和绑定用户/设备的操作。
微信绑定的时候,会发送这样一个事件消息:
我们需要的是里面有OpenID和Mac,然后我们调用机智云的Java-SDK:
1
2
3
4
5
6
7
8
DeviceInfo deviceInfo = OpenApi.bindDevice(
wechatOpenId,
gizwitsAppId,
gizwitsProductKey,
gizwitsProductSecret,
mac,
deviceAlias,
deviceRemark)
参数名称类型说明
微信OpenId
细绳
微信中的OpenId,即在机智云注册的匿名用户
机智云AppId
细绳
机智云产品绑定的APP的id
机智云产品密钥
细绳
机智云产品密钥
机智云产品秘籍
细绳
机智云产品秘籍
苹果电脑
细绳
设备的 Mac 地址
设备别名
细绳
设备别名
设备备注
细绳
设备说明
这种方法一次解决了两个问题:注册匿名用户和绑定用户/设备。相反微信改密码参数错误,需要设置很多参数。所有参数都是字符串类型。
deviceAlias(设备别名)和deviceRemark(设备备注)都可以填写空白字符串“”。gizwitsProductKey 是您在开发者中心创建的产品。
gizwitsProductSecret是产品对应的key,可以在产品详情中找到。
gizwitsAppId 是应用在机智云中的ID。由于一个产品可能由多个APP操作,例如IOS APP、Android APP、网站Web应用,甚至微信等轻应用,都可以视为一个APP。因此,在创建产品后,您还可以将一个或多个应用程序绑定到该产品。这里的gizwitsAppId就是我们绑定的APP的Id。请注意,APP必须与产品绑定后才能使用。
调用该方法时,可以注册一个匿名用户并绑定用户/设备。是不是很方便?当然,为了方便,你可以进一步封装这个SDK。这里就不展开了。
机智云设备解绑
解绑操作也是类似的逻辑。当微信推送解绑事件消息时,我们会进行解绑操作。同时调用 SDK:
1
Boolean isSuccess = OpenApi.unbindDevice(wechatOpenId, gizwitsAppId, gizwitsDid);
参数名称 属性说明
微信OpenId
细绳
微信中的OpenId,即在机智云注册的匿名用户
机智云AppId
细绳
机智云产品绑定的APP的id
了解设备在线状态
1
Boolean isOnline = OpenApi.getDeviceOnlineStatus(wechatOpenId, gizwitsAppId, gizwitsDid);
参数名称 属性说明
微信OpenId
细绳
微信中的OpenId,即在机智云注册的匿名用户
机智云AppId
细绳
机智云产品绑定的APP的id
机智云
细绳
机智云中的设备ID,设备重置时会重新注册
代码示例
请注意,有些开发者在部署服务器时可能会发现部署失败。在tomcat中catalina登录会报错:
1
javax.net.ssl.SSLException:java.security.ProviderException:java.security.KeyException
这是因为 SDK 使用 Https 来访问。
解决方法是:升级服务器环境中的库:nss。
微信页面操作装置
好了,我们现在已经绑定了设备,也可以知道设备的在线状态了。但是我们究竟如何操作我们的设备呢?好的体验,当然要有互动页面。
让我们一步步搭建一个交互式页面来监控我们的设备!
获取OpenId
当用户点击一个页面时,我们如何知道它是哪个用户?我们需要获取当前用户的 OpenId 来识别是哪个用户。如何得到它?详情请参考微信官方文档。
简单来说就是我们向微信服务器发送一个授权请求,微信会判断我们请求的URL是否是授权域名。如果验证通过,它会通过几个参数转发到我们的 URL。
最重要的参数是code,我们可以通过Code获取OpenId。然后,我们将 OpenId 返回到页面。
连接机智云WebSocket
为了访问机智云的WebSocket,我们将其封装成一个JS-SDK。您需要做的就是将其导入页面。
初始化机智云服务
首先,搭建机智云服务:
本机智云服务将负责以下所有操作,包括:连接设备、读取设备数据点、操作设备等。
参数名称 属性说明
ApiHost
细绳
websocket的目标API域名
通讯类型
细绳
协议格式:custom(自定义协议);attrs_v4(标准数据点协议)
微信OpenId
细绳
当前访问的微信用户OpenId
机智云AppId
细绳
机智云产品绑定的APP的id
当然,此时机智云服务并没有运行,我们仍然需要初始化运行。但是在运行之前,我们可以选择配置一个回调函数,初始化后会自动运行。
执行gizwits.init()时,初始化gizwits服务,将匿名用户OpenId绑定的所有设备放入回调函数的设备中。
而我们要做的操作应该写在回调函数gizwits.onInit中。
设备列表中的每个设备都会有六个属性,分别是product_key(产品密钥)、dev_alias(设备别名)、did(设备ID)、mac、is_online(在线状态)和remark(设备备注)。我们可以根据情况使用。
设备列表
在上面的操作中,我们得到了设备列表。一般来说,客户可能有多个设备,所以在这一步,我们可以做一个设备列表,用户可以决定操作哪个设备。
连接设备
如果我们要操作特定的设备,我们需要连接哪个设备:gizwits.connect(did)。当然,连接成功后,还有一个回调函数:gizwits.onConnected。这个回调函数没有传入任何值。
请注意,在连接设备之前,必须对其进行初始化。
初始化和连接设备不是同步操作,如果只是一个接一个地执行,可能会出现错误。所以建议连接设备的操作可以放在初始化的回调函数中,保证执行顺序。
连接成功后,我们就可以收到设备上报的数据了。上报数据通过回调函数:gizwits.onReceivedAttrs。回调函数会有一个回调值(参数),回调值的格式如下:
在上面的操作中,我们得到了设备列表。一般来说,客户可能有多个设备,所以在这一步,我们可以做一个设备列表,用户可以决定操作哪个设备。
连接设备
如果我们要操作特定的设备,我们需要连接哪个设备:gizwits.connect(did)。当然,连接成功后,还有一个回调函数:gizwits.onConnected。这个回调函数没有传入任何值。
请注意,在连接设备之前,必须对其进行初始化。
初始化和连接设备不是同步操作,如果只是一个接一个地执行,可能会出现错误。所以建议连接设备的操作可以放在初始化的回调函数中,保证执行顺序。
连接成功后,我们就可以收到设备上报的数据了。上报数据通过回调函数:gizwits.onReceivedAttrs。回调函数会有一个回调值(参数),回调值的格式如下:
手动读取:设备数据点
获取设备的数据点也很简单,调用gizwits.read()方法即可,需要传入did。调用这个方法,一次就可以搞定。同样,数据也是通过回调函数gizwits.onReceivedAttrs,或者gizwits.onReceivedRaw获取的。
连接错误
websocket连接错误时,会调用gizwits.onError函数微信改密码参数错误,必要时可以重写;回调值是错误消息:
1
2
3
gizwits.onError = function(value){
console.log("error!!!!:::::", value.toString());
}
设备离线
当设备上线或下线时,机智云服务会调用gizwits.onOnlineStatusChanged回调函数。
回调值有两个参数:did 和在线状态(is_online)。
1
2
3
4
gizwits.onOnlineStatusChanged = function(value) {
alert("设备上下线通知,did=", value.did);
alert("设备上下线通知,is_online=", value.is_online);
}
控制装置
最后是设备的遥控器。
远程控制的调用方法,如果commType=custom,使用gizwitsws.send(command)方法,如果commType=attrs_v4,使用gizwitsws.write(command)方法。
遥控器的值,如果commType=custom,请输入p0,例如[,,…];如果 commType=attrs_v4,请输入数据点,例如 {“power”:true}。
以下是远程控制 RBG 灯的代码示例:
1
2
var command = '{"LED_R": 0, "LED_G": 0, "LED_B": 0}';
gizwits.write(did, JSON.parse(command));
当然,使用控制设备的前提是我们已经连接了一个设备。
结语
至此,我们已经实现了微信接入的核心部分。在本教程中,Java-SDK 和 js-SDK 给我们带来了很多,我们几乎不需要关心如何调用机智云 API 和 websocket,而是直接调用 SDK 的方法。
最后,希望大家多提意见,为更便捷的开发贡献力量。
请登录后发表评论
注册
社交帐号登录