支付宝交通码解析

支付宝的交通码,比较特殊,用普通的微信扫一扫,和支付宝的扫一扫是无法扫描出来数据的

在这里插入图片描述
普通的二维码,则没有什么问题。
在这里插入图片描述
这次因为支付宝的交通二维码是一种特殊的编码格式的二维码。

二维码的实现原理,

简单说明一下,就是黑白块,黑白块代表的是 0 和 1, 0和1代表的是二进制数据,
机器识别到二进制数据后,默认转换为字节流byte。

普通的字符串二维码,就是直接将字符串转为byte 字节流,然后再转成二维码
交通码有一点区别,交通码原始数据是 hex 16进制的数据,将16进制数据转换为byte,再转为二维码。

识别二维码

这里主要说明微信识别交通码的功能,默认的微信扫一扫是无法识别交通码的,但是微信小程序提供了这个兼容的功能

这是微信小程序扫一扫的文档

https://developers.weixin.qq.com/miniprogram/dev/api/device/scan/wx.scanCode.html

在这里插入图片描述这里主要看 这2个返回参数: result, rawData

其中:result 是默认byte 转字符串的
rawData 是原始byte数据转了base64,
要实现获取交通码数据,就需要试用rawData, 通过 得到的 base64 转byte字节流,然后 byte再转HEX 16进制字符串得到 交通码数据。

Byte转 Hex String方法

public String ByteArrayToHexString(byte[] inarray) {
        int i, j, in;
        String[] hex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
                "B", "C", "D", "E", "F"};
        String out = "";

        for (j = 0; j < inarray.length; ++j) {
            in = (int) inarray[j] & 0xff;
            i = (in >> 4) & 0x0f;
            out += hex[i];
            i = in & 0x0f;
            out += hex[i];
        }
        return out;
    }

上文提到了试用微信小程序的扫一扫功能识别交通码。
其他设备扫码功能基本也是如此。

支付收银扫码设备识别交通码

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/896170576336494f8bb83d7af378b3c5.png这是商米 的一个收银盒子。默认也是只能支持 普通文本二维码,想要实现支持市民码也是可以/

这个盒子默认支持的数据输出模式是 USB-KW 模式,键盘输出模式,此模式下默认的二维码转化就是普通byte转字符串。
这个盒子还可以支持串口通讯模式,切换USB-KW 模式和 串口模式就是扫描下面的二维码:
官方文档:https://developer.sunmi.com/docs/zh-CN/ceghjk502/crieghjk579

在这里插入图片描述
此种模式下输入的是byte 字节流数据,
得到后,转16进制后,就可得到想要的交通码数据

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值