企业微信自建应用开发

需求:公司项目这块主要是对接蓝牙,连接低功耗蓝牙设备
方案:H5调用企业微信sdk
问题总结:
1.企业微信应用管理后台
2.需要设置地方
  1. 工作台应用主页
    企业微信自建应用开发_第1张图片

  2. 网页授权及JS-SDK
    (1)应用OAuth2.0网页授权功能的回调域名
    (2)js-sdk 可信域名

其他:本地开发时并且前后端分离,需要服务端一个地址,前端自己也需要地址,并且俩端都需要把下载文件放到根目录。前端这块因为我这个项目和本地vue项目端口冲突了,我自己下了个nginx 本地服务器搞了下端口,后台给配置的,完后需要公司外网IP 映射到一个测试域名,最后填到企业微信的是这个测试域名,看图

企业微信自建应用开发_第2张图片

3.开发需要用到的参数(前后端都需要)
  1. 我的企业 -> 企业ID
  2. 应用管理 -> Secret 密钥
4.开发获取身份问题 (文档 服务端API 身份验证)
由可信域名支配,domain 就是可信域名地址,按钮(A页面)点击跳转后自动会在新页面(B页面)后面返回一个code,再进行一系列身份获取

登录页面

B页面
var code = getParamer("code")

/*   	     
 * @fun getParamer 获取url参数
 * @fun paramer 参数名
 * */
function getParamer(paramer) {
	if((window.location.href).indexOf("=") > 0) {
		var url = window.location.href.split("?")[1];
		if(url && url.indexOf("&") > 0) {
			urlParamArry = url.split("&");
			for(var i = 0; i < urlParamArry.length; i++) {
				var paramerName = urlParamArry[i].split("=");
				if(paramer == paramerName[0]) {
					return paramerName[1];
				}
			}
		} else {
			var paramerValue = url.split("=")[1];
			return paramerValue;
		}
	}
}
4.开发配置sdk问题
签名服务端生成 wx.config 会用到,只要页面需要调用sdk,每个页面都必须配置 wx.config,可以封装一个公共的方法通过传参方式配置对应的sdk
5.关于蓝牙
  • iOS基本调用没问题,api 都好使
  • Android 难啊,可能是因为我们的指令多,一个页面可能会发多条指令,总之 api 需要一一对应使用 打开蓝牙/关闭蓝牙 连接设备/断开设备 重复连接会发生api 回调成功了,设备蓝牙却没有断开的现象
  • Android 写入数据后立马开启notify 会发生10008错误,系统错误,建议写入数据延迟1秒或者2秒,然后写入失败重新写入,上限10次,10次以后还是写入失败就重新操作,目前就是这样解决的,这样解决之后几乎没有出现写入失败了
6.关于蓝牙操作用到的一些方法
/*arrayBuffer转字符串*/
function arrayBuffer2Str(arrayBuffer) {
	let unit8Arr = new Uint8Array(arrayBuffer);
	let encodedString = String.fromCharCode.apply(null, unit8Arr),
		decodedString = decodeURIComponent(escape((encodedString))); //没有这一步中文会乱码
	return decodedString
}

/*字符串转字节序列*/
function stringToByte(str) {
	var bytes = new Array();
	var len, c;
	len = str.length;
	for(var i = 0; i < len; i++) {
		c = str.charCodeAt(i);
		if(c >= 0x010000 && c <= 0x10FFFF) {
			bytes.push(((c >> 18) & 0x07) | 0xF0);
			bytes.push(((c >> 12) & 0x3F) | 0x80);
			bytes.push(((c >> 6) & 0x3F) | 0x80);
			bytes.push((c & 0x3F) | 0x80);
		} else if(c >= 0x000800 && c <= 0x00FFFF) {
			bytes.push(((c >> 12) & 0x0F) | 0xE0);
			bytes.push(((c >> 6) & 0x3F) | 0x80);
			bytes.push((c & 0x3F) | 0x80);
		} else if(c >= 0x000080 && c <= 0x0007FF) {
			bytes.push(((c >> 6) & 0x1F) | 0xC0);
			bytes.push((c & 0x3F) | 0x80);
		} else {
			bytes.push(c & 0xFF);
		}
	}
	return bytes;
}

/*十六进制字符串 转 十进制整数  例如:11 ——17*/
function hex2int(hex) {
	var len = hex.length,
		a = new Array(len),
		code;
	for(var i = 0; i < len; i++) {
		code = hex.charCodeAt(i);
		if(48 <= code && code < 58) {
			code -= 48;
		} else {
			code = (code & 0xdf) - 65 + 10;
		}
		a[i] = code;
	}
	return a.reduce(function(acc, c) {
		acc = 16 * acc + c;
		return acc;
	}, 0);
}

/*hex 转字符串*/
function hexCharCodeToStr(hexCharCodeStr) { 
	var trimedStr = hexCharCodeStr.trim(); 
	var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr; 
	var len = rawStr.length; 
	if(len % 2 !== 0) {  
		console.log("Illegal Format ASCII Code!");  
		return ""; 
	} 
	var curCharCode; 
	var resultStr = []; 
	for(var i = 0; i < len; i = i + 2) {  
		curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
		resultStr.push(String.fromCharCode(curCharCode)); 
	} 
	return resultStr.join("");
}

/*ArrayBuffer转16进制字符串示例*/
function ab2hex(buffer) {
	var hexArr = Array.prototype.map.call(
		new Uint8Array(buffer),
		function(bit) {
			return('00' + bit.toString(16)).slice(-2)
		}
	)
	return hexArr.join('');
}

/*浏览器判断机型*/
function getPhoneType() {
	var phoneType = "";
	var u = navigator.userAgent
	var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;
	var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
	if(isAndroid) {
		phoneType = "Android"
	}
	if(isIOS) {  
		phoneType = "IOS"
	}
	return phoneType
}

你可能感兴趣的:(微信,企业微信自建应用,jssdk,jssdk,蓝牙)