收藏
回答

微信小程序使用下面这个方法模拟出的nfc卡都支持什么协议?

wx.getHCEState({
  success(res) {
    console.log('getHCEState',res.errCode);
    if (res.errCode == 0) {
      console.log("HCE 能力正常");
      // 初始化NFC
      wx.startHCE({
        aid_list: ['F222222222'],
        success(res) {
          console.log('startHCE',res.errCode);
          if (res.errCode == 0) {
            // 监听事件
            wx.onHCEMessage(function(res) {
              console.log('onHCEMessage',res);
              if (res.messageType === 1) {
                console.log('res.messageType === 1');
                // 发送NFC消息
        	var str = JSON.stringify({
                  username: '张三',
                  phone: '15512365478'
                })
               var byteArrays = util.stringToByteArray(str)
               var retbuffer = new ArrayBuffer(byteArrays.length)
              var dataView = new DataView(retbuffer)
              for(let i = 0;i < dataView.byteLength;i++) {
                dataView.setInt8(i, byteArrays[i])
              }
              wx.sendHCEMessage({
                data: retbuffer,
                success: function(res) {
                  console.log('NfcHCECore-->sendHCEMessage:success',res);
                },
                fail: function(err) {
                  console.error('NfcHCECore-->sendHCEMessage:fail',err)
                }
            })
          }
            })
          }
        }
      })
    }
  }
})
function stringToByteArray(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
	}


回答关注问题邀请回答
收藏

2 个回答

登录 后发表内容