前文
前段时间对接一个第三方公司的接口,其他部分或简单、或麻烦,总之没有花很多功夫都完成了。最后在着手交易接口时,犯了难。报文格式区别另外接口,需使用iso8583报文,咋一看文档,很让人懵逼,又是bcd,又是ascii,两个字节压缩成一个字节。
用了将近一周时间慢慢懂了报文规则,开始准备写代码时又有了麻烦事。可能查资料的姿势不对,没找到PHP的DEMO,基本上都是Java实现。PHP又没有字节操作概念,当时迫于无奈都准备申请这块用Java来做。最后感谢我的小伙伴,讨论帮我打开了思路,具体内容记不太清了。主要一个点是,数据传输是流的方式,和图片流又是不一样的。继而想到能不能试试对数据进行压缩,又想着数据传输无关语言,那么PHP没有理由实现不了。鼓捣到最后,虽然个别片段兼容性没那么好,终于是通了,记录下实现的代码。
我的语言真是太苍白了。
iso8583介绍
先来介绍下iso8583报文部分,网上介绍的很详细,此处仅针对项目做简单说明。
报文由三部分组成。
- 第一部分消息类型,长度为4,比如交易请求是0200,交易响应是0210,,签到请求是0800,签到响应是0810,直接拼接字符串作为首部。
- 第二部分位图定义,用于预设可能存在的数据。有两种不同的位图,若第一位值为1,说明使用扩展位图(128个域数据);若为0,则仅使用64个域的位图。64位位图组合内容如:01001100……&#x