文档编辑微信SDK(微信SDK包下载目标驱动)

微信应用开发教程

文件编辑

微信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

图片[1]-文档编辑微信SDK(微信SDK包下载目标驱动)-老王博客

细绳

微信中的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 的方法。

最后,希望大家多提意见,为更便捷的开发贡献力量。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论