蓝牙配网协议v1
<p>> 当前配网版本,是第一版。后续可能会更新。目前的流程是连接蓝牙后,清除配网记录、发送wifi配网开始状态、发送wifi账号、密码、mac和ip 二进制包。然后等待配网成功...</p>
<p>[协议文档(1).docx](<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=421a09d90cc2f20d65130af0bd542e5f">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=421a09d90cc2f20d65130af0bd542e5f</a> "[协议文档(1).docx")</p>
<h2>流程图</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d98ab665ea0e13b86d71cbd9066fe435&amp;file=file.png" alt="" /></p>
<pre><code class="language-php">//号码加密
public function encodePhone($phone)
{
// 将 Base64 编码的密钥转换为二进制
$keyBinary = base64_decode(&quot;67bzU3b9CQNWSZs7qbVHS1uwAbhvuRURkYx+o7e+V4c=&quot;);
// 确定密钥长度,根据长度选择合适的 AES 算法
$keyLength = strlen($keyBinary);
switch ($keyLength) {
case 16:
$cipher = &#039;aes-128-ecb&#039;;
break;
case 24:
$cipher = &#039;aes-192-ecb&#039;;
break;
case 32:
$cipher = &#039;aes-256-ecb&#039;;
break;
default:
throw new InvalidArgumentException(&#039;不支持的密钥长度&#039;);
}
// 执行加密操作,使用 PKCS7 填充(openssl 默认是 PKCS7 填充)
$encrypted = openssl_encrypt($phone, $cipher, $keyBinary, OPENSSL_RAW_DATA);
// 将加密结果进行 Base64 编码
return urlencode(base64_encode($encrypted));
}
//二进制包处理
public function encodeWifiName($wifi_name)
{
// 模拟 Uint8Array,将字符串转换为字节数组(在 PHP 中用字符串存储字节)
$length = strlen($wifi_name);
// 遍历字符串中的每个字符
for ($i = 0; $i &lt; $length; $i++) {
// 获取当前字符的 ASCII 码,并添加到数组中
$inputBytes[] = ord($wifi_name[$i]);
}
// $inputBytes = str_split($wifi_name);
// 初始化头部信息
$header = [
0x09, // 类型字段,0x09 表示 Wi-Fi 账号
0x00, // 功能码(re),默认为 0x00
0x01, // 序列号(aeg),0x01 表示第一个数据包
count($inputBytes) // 数据长度,表示 Wi-Fi 账号的长度
];
// 合并头部信息和 Wi-Fi 账号数据
$combinedBytes = array_merge($header, $inputBytes);
// 将字节数组转换为字符串形式(模拟 ArrayBuffer 的存储)
return $combinedBytes;
}</code></pre>