几个月前,支付宝在杭州率先实现公交扫码付。一石激起千层浪,我们终端设备的升级改造迫在眉睫。而实现银联小额免密免签,扫码付与ODA,时间紧迫,责任重大。

7月24号到**银联调试小额免密与 银联扫码支付,原因是之前的调试很不顺利。要么是网络不通,要么是商户号没权限,要么是主秘钥没提供对。

不得不去**银联一趟现场调试。

不过可喜可贺,来**的第一天,就把小额免密免签与银联扫码付都调通了。且找到之前一直不通的原因竟然是 商户号小额免密免签权限!!来这边分配了个,就通了。

但是有一个问题比较让人头疼!!就是银联后台不支持长连接。每次交易完之后,连接不能保持,过一段时间后台会断开与终端的连接。

当面问银联的技术人员,他们解释到有这么多的终端,如果都保持长连接,后台的压力太大。所以后台才不支持长连接。

可是,问题是我这边终端每次交易都去建立连接,交易,断开连接。耗时会很长,影响用户体验!作为一个负责任的技术人员,应该考虑这方面的事情,努力提高用户的体验,提升公司产品的竞争力。

银联技术人员说道,你们用的GPRS走的运营商的网络,他们网络建立连接,断开连接很快的呀,不会影响用户体验吧?我给他们解释道,我们是外购的第三方的GPRS模块。不光是我们,其他厂家的产品用到GPRS无限数传大多都是用的华为,中兴等第三方的模块 。

终端与银联后台通信,相当于又中转了一层,终端- >串口->GPRS模块->银联后台服务。

GPRS网络与银联后台之间连接网络与断开是很快,但是,终端是通过串口AT指令操纵的GPRS模块。串口波特率是115200,那么建立连接与断开连接,肯定就存在一个耗时的过程。

尤其是断开连接,AT指令是发送一连串的特殊字符间隔几秒时间,这样GPRS模块才知道终端是要断开连接,否则是认为终端在发送数据。试想,这断开连接的几秒种就已经严重影响了用户体验。公交上刷卡哪敢等待那么久。

那么,如何解决这头疼的问题呢?

我想到三种方案。

方案一,我终端自己实现长连接,我定时(比如30秒)发送8583回响测试报文,如果发送成功,则证明后台没有断开连接,如果断开了,自动重连。且我不必接收和验证后台应答报文,只需判断是否成功发送了报文就能知道连接是否还保持着。

方案二,我终端只建立连接,从不断开连接,不管他后台是否断开了连接。这样我终端可以保持短暂的长连接,只有第一次交易时,可能会失败,我提示用户请重刷卡,在提示的同时自动去建立连接,这样后续再有用户连着刷卡,速度很快,不受影响。

方案三,我终端同样是只建立连接,从不断开连接,让其保持短暂的长连接。是否断开连接后台说了算。但是我得知道这连接空闲多久后台会断开。这样我定时空闲一定时间,下次交易时让终端必须先建立连接再交易。

总结三种方案,

第一种,虽然可行,但是不知私下保持长连接,量大的话,银联后台是否受得了,他们是否允许这样做。

第二种,用户的体验会受影响,虽然提示了重刷,刷第二次就可以成功了,但是每次第一个用户的消费,都要受这般待遇吗?体验不好

第三种,我个人觉得最优方案。终端的空闲时间长了,下次交易必须先建立连接。这样,虽然有个建立连接的耗时,但是用户第一次刷卡就交易成功了,且后续用户再接着刷卡,则速度很快,体验好。第一个刷卡的用户吃点亏,速度慢些。相比常规的每笔交易都去建立连接,交易,再断开连接好得多。这样,既符合银联保持短连接的要求,我终端又保持了短暂的长连接,交易速度得到了保证。

可否有更好的方案?谁有更好的注意,还请不吝赐教,不胜感激。

说了这么多,都跑题了,

这里记录下之前与**银联的调试过程。这么热的三伏天,往**银联了三四趟。其中的一天,同王总一起上午下午各跑一趟,从高新区到**新区。

详细的过程记录,秘钥信息及报文验证过程

**银联商务提供的商户号终端号信息如下:

拿**银联商务提供的商户号终端号密文的第一个测试,

"898410148161370","84900503","101400","B1CA4EB3DFEB0952CFEEB7169881B8C8","B1CA4EB3DFEB0952CFEEB7169881B8C8"

经过母pos导出来后的密文,**银联张工验证确认明文的秘钥没问题。

秘钥如下:

终端号:84****03

商户号:***************

密文:**********FEEB71698******

明文:***********7F28091C3******

//=================================================

以下为8583银联通信报文:

签到:

Send date size:89

00 57 ******************00 31 11 08 0800 00 20 00 00 00 C0 00 16 50 02 05 ******* 34 31 3031 34 38 31 36 31 33 37 30 00 11 00 00 05 19 00 30 00 25 53 65 71 75 65 6E 6365 20 4E 6F 31 32 33 30 36 30 38 34 39 30 30 35 30 33 00 03 30 30 31

应答:

<Receive datesize:123

<00 79 60 00 00 00 30 61 31 00 31 11 0808 10 00 38 00 01 0A C0 00 14 50***************0 38 34 39 30 30 35 30 33 38 39 38 34 31 30 3134 38 31 36 31 33 37 30 00 11 00 00 00 01 00 30 00 40 B9 C4 10 6E EB C5 24 6E25 20 AA 49 39 BD 13 73 7F 69 9C 5E EE B4 E7 AD 4A 33 98 86 00 00 00 00 00 0000 00 A7 14 A4 C9

<-Er PIK错误

<-签到失败

应答报文的解析:

MSG TYPE:0810

BITMAP:003800010AC00014

11域:500205

12域:210241

13域:0720

32域:0848024910

37域:303030323135383534353337

39域:3030

41域:**********

42域:*************

60域:0011000000010030

62域:0040B9C4106EEBC5246E2520AA4939BD13737F699C5EEEB4E7AD4A3398860000000000000000A714A4C9

62域说明,0040表示长度,后面格式为 16字节pinKey密文秘钥+4字节校验码+16字节MAC秘钥密文+4字节校验码

接下来看下秘钥的解密过程,规范中的解释:

以下为秘钥的计算过程:

接下来用解密出的明文,计算下校验码,看是否同 7F699C5E 一致:

结果发现,计算出的校验码前四字节是059E11A3,而后台返回的校验码是7F699C5E,

那么,要么是银联主秘钥从母pos解密出来的不对。要么是跟后台的不对应,银联给提供的商户秘钥不对。

要么。。。,难道是 解密算法错了?后续分析 湖南银联的签到报文。

关于签到报文和秘钥解析,销售点终端POS应用规范中介绍:

接下来试试**银联的签到报文,同样的程序,只改通信地址。

//=================================================湖南秘钥:

<OK

<-连接成功

>>connect succ!

->签到中...

>Send date size:89

>************3111 08 08 00 00 20 00 00 00 C0 00 16 50 02 11 *********************** 00 11 00 00 05 19 00 30 00 25 53 65 71 7565 6E 63 65 20 4E 6F 31 32 33 30 36 30 39 39 39 39 39 39 30 36 00 03 30 30 31

<Receive datesize:123

<******************* 0A C0 00 14 50 02 11 22 13 01 07 20 08 00 08 55 00 **********************39 30 36 30 30 31 34 33 30 3137 30 31 31 39 39 39 39 00 11 00 00 05 19 00 30 00 40 46 F1 61 A7 43 49 7B 32EA C7 60 DF 5E A5 7D F5 90 0E CC E3 97 77 31 A7 EA 40 2D DF 00 00 00 00 00 0000 00 CF F1 59 2A

<-签到成功!

应答报文解析:

MSG TYPE:0810

BITMAP:003800010AC00014

11域:500211

12域:221301

13域:0720

32域:0800085500

37域:323231333031343931333239

39域:3030

41域:******************

42域:******************

60域:0011000005190030

62域:004046F161A743497B32EAC760DF5EA57DF5900ECCE3977731A7EA402DDF0000000000000000CFF1592A

62域说明,0040表示长度,后面格式为 16字节pinKey密文秘钥+4字节校验码+16字节MAC秘钥密文+4字节校验码

秘钥解密计算过程:(采用 3DES 双倍长秘钥计算算法)

结果中的 D931648F3DE313A4A22C15DCA4F4299E即为采用3DES(双倍长)秘钥解密出的Pin Key明文秘钥。

接下来用Pin Key明文秘钥对8字节的00加密,算出来校验码和900ECCE3比较,看是否相等。若相等,则说明后台和终端秘钥一致,终端秘钥无误。

计算结果,900ECCE3C957C7A4,取前四字节,900ECCE3,和收到报文中的秘钥校验码900ECCE3一致,结果表明后台和终端秘钥一致,终端秘钥无误。

接下来解密MAC秘钥,并校验是否同后台的一致:

注,MAC计算的校验码,采用的单倍长DES算法,这个已同银联确认过,无异议。

经过上述测试,银联的签到报文,秘钥解密准确无误。

结论: 三种可能 : 1,母pos导出来明文不对。2,银联商务提供的秘钥密文不对。3,解密算法不对。

第一种可能,银联张工主管秘钥母pos KEK分量管理,验证密文明文对应。暂可排除。

第三种可能,其他地方银联正常签到没问题。

总结,最大的可能是银联商务提供的密文不对 。

最后续。。。,银联商务重新给提供了个商户号,终端号,主秘钥。测试签到成功,证明是第二种可能,提供的秘钥密文不对。

到银联的调试过程,总结,记录相关推荐

  1. F7飞控项目调试过程的记录 系列文章第一部分

    主控STM32F777NIHx BL电调(J-H-20A) SBUS接收机.福特8遥控器 STM32HAL库 设计/调试记录文档 捕捉下APM飞控输出的PWM波形,可以看出PWM方波的频率为489.2 ...

  2. 腾讯在线教育互动课堂——Demo调试过程记录

    官方文档地址:https://cloud.tencent.com/document/product/680/17888 "Demo调试"不像集成使用,不需要完全按照文档一步步处理, ...

  3. Proteus仿真stm32和51单片机,串口通信调试过程记录

    前言 本文所用Proteus版本为8.10,主要内容为在Proteus中仿真stm32和51单片机进行串口通信,记录了仿真过程中遇到的问题和解决办法.        这里要注意的是,在Proteus中 ...

  4. ros2_object_analytics安装过程全记录

    ros2_object_analytics安装过程全记录 ros2_object_analytics安装过程全记录 问题总结 (1)OpenCV3.3依赖问题 (2)devel版本中librealse ...

  5. 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录

    最新公司搞一个新项目,需要在Linux下进行UI界面设计.选来选去,最后选择采用Qt平台来做,于是要开始研究一下Qt. Qt作为业内最著名的UI开发工具之一,是一套完整的跨平台C++图形用户界面应用程 ...

  6. stm32--FatFs调试过程(SPIFlash)

    移植方法参见我的另一篇博客:<stm32--FatFs移植(SPIFlash)>. 本文仅记录在初次移植完成后,遇到的问题,和解决的过程. 调试记录: 问题1:f_open返回3,即磁盘没 ...

  7. PIXHAWK上安装PX4Flow光流传感器及调试过程

    摘自:https://blog.csdn.net/wlrh253250/article/details/90146561 PIXHAWK上安装PX4Flow光流传感器及调试过程 置顶 wang-rh ...

  8. Android studio3.6.1+ opencv3.4.1进行摄像头颜色识别的调试过程

    Android studio3.6.1+ opencv3.4.1进行摄像头颜色识别的调试过程 本文过程建立在成功导入opencv3.4.1library并且成功运行打开摄像头的基础上的.在完成了验证并 ...

  9. 电源设计调试过程中的异常现象介绍

    调试过程中所看到的一些异常现象,以及后来的解决办法.其实很多工程师认为设计电源是非常重经验的一门技术,要见多识广.这种经验,不但体现在设计中,更体现在调试的过程. 当你一看到波形,就能把问题定位,那就 ...

最新文章

  1. 双声道录制的混动波形信号
  2. php中int()强制转换,php下intval()和int强制转换使用的区别是什么
  3. OSPF中 hello报文的 内容
  4. MySQL for Mac 安装和基本操作
  5. 【Redis】新浪微博与微信Redis架构实战 - 笔记
  6. .NET Core 工具中的新内容
  7. 寒武纪找到了引领中国AI芯片走向世界的路
  8. java多线程并发测试工具_【漫画】JAVA并发编程之并发模拟工具
  9. 把音频中的某个人声去掉_如何把音乐文件里的人声去掉只保留伴奏
  10. Screenie for Mac(Mac截图工具)
  11. java dao 单元测试,你应该如何单元测试DAO层
  12. 在 python 中使用 Selenium 报错self.capabilities = response['value'] KeyError: 'value'的解决办法
  13. android 网络编程 笔记,【Android 应用开发】Android 网络编程 API笔记
  14. TAC配置错误导致无法切换
  15. Unity3D 实现本地排行榜功能
  16. 白巧脆皮奶香雪糕,一次成功
  17. 创建基于vue的H5
  18. ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1'
  19. 力扣 347. 前 K 个高频元素
  20. 验证与github是否连接成功.

热门文章

  1. pygame只能编写游戏_使用pygame开发的游戏发布+小总结
  2. 2023年高新技术企业申报要点,建议收藏
  3. 【动态规划】磁带问题
  4. 智慧校园综合解决方案
  5. Linux关机各种关机命令总结
  6. 计算机专业学习模拟电子技术,什么是模拟电子技术?怎样才能学好模拟电子技术?...
  7. 二进制加法器的VHDL程序
  8. 20年来最大单笔收购,百度豪娶YY直播能实现1+1>2?
  9. xhprof 源码分析
  10. 温州市大学生创业园举行优秀成果展暨投融资对接会