“ Yuema约吗?一起学技术,一起成长!学海无涯 高人带路系列”
程序的世界,就是有坑的地方!分享踩坑的心得与体验!每天分享一点点!
关注公众号,进入学海无涯,高人带路模式!!
当面付再难,加班也要搞定
上回有聊到支付宝扫码支付的几种实现方式,老接口实现的扫码,与现在支付宝当面付的实现方式,完全是两码事了,差太多了,我好难。接口不再返回QrCodeImageUrl,仅返回QrCode,同时也没有收银台提供了。当把当面付的功能写完之后,内外网联调,各种意想不到的问题都跑过来了。在这里记录一下这场战役的一些感受。
一、支付宝沙箱vs支付宝正式环境
原本沙箱是用来任性的支付宝,完成上正式前踩坑的绝佳环境,但是这次研发体验却发现支付宝沙箱埋了一堆坑,就连支付宝对接的“机器人”都不建议使用沙箱。
1.1 验签方式异常
沙箱里使用RSA畅通无阻,让人已经形成了基本的RSA1\RSA2的两种接口验签概念,RSA1咱们对应上公钥方式,RSA2咱们对应证书方式,结果沙箱里写死的RSA,在正式上通不过,得换成RSA2。
1.2 接口功能异常
在沙箱里设置交易超时时长为一分钟,刚扫完码就失效了。只好在沙箱(沙盒)里配置5分钟交易时长。测试QA们卡一分钟,简直就是坑得一波一波的。
二、环境配置稍微有点多
为了适应支付宝沙盒环境与正式环境的切换,特意弄成了可配置的,结果联调的时候,有时候会忘掉,就出现了神一样的提示语。
The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters
三、当面付收银台功能
老接口有一个功能是生成一个商品码,买家扫码后,会有一个简单的收银界面,买家可以调整商品数量,确认完后,支付宝又会通知我方接口生成订单,然后支付宝发生支付操作。新版的支付宝当面付,不提供这个收银界面。带来了新的问题,得自己实现收银界面,生成收银界面的二维码,要解决修改host后,正式的支付宝客户端无法访问到测试的内网站点。
3.1 二维码生成问题
收银台接收了比较多的参数,参数一多,二维生成失败,直接报超过数组标,将二维码的生成版本改成0,也就是让二维码随着内容自己适应大小,到是让二维码出来了,开始还能识别出来。当我对些敏感参数进行加密处理后,url变得稍微有些长,二维码生成出来的效果是密密麻麻的,手机识别好久都识别不出来。解决方案:参数仅传一个token,对应的参数放到后端的内存中(redis,memcache之类的东东里)。Token生成的话,类似于短链接生成,保持不重复,短小就好。这种规则,跟生成单号有些类似,要是琢磨最佳的生产算法的话,还得仔细分析分析,拿到最短的又能满足要求的。为了节省时间,可以直接使用Guid.
内容多,生成的码就密集。
比如如下链接:
http://yue.ma/?看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧看看这个码有多么密集吧
生成二维码效果:
识别起来会比较费劲,看起来也有点不舒服。
如果换成简短的链接,比如:
http://yue.ma/?qr=helloworld
生成出来的二维码就比较清爽了。
3.2 外网联调
修改hosts不行,那就直能提供一个真实的host,支付宝有防止host补“黑”的功能。试试微信,也有这样子的功能。对于研发人员来讲,这算一个坏消息。由是在一个专用的测试站点,带有真实的dns解析,完成。
3.3 惊天动地的QrCodeImageUrl
支付宝老接口返回QrCode以及对应的ImageUrl,当我劲了九牛二户之力,生成完二维码图片,按着老规则返回给客户端,吓坏了,一堆乱码。这不是一张图片,还是一个超小型的网页,里面放了一张图片。这下子,前端工程师上战场了,调整大小,位置,很是需要耐心。
四、密钥大坑
应用公钥2048、应用私钥2048、支付宝公钥,因为是非对称的密钥配置,应用的公钥要告诉支付宝,支付宝要把TA的公钥告诉咱们,这都好理解是吧。就是有行小字比较伤人。密钥也分java使用,非java使用。
正好前阵子玩java版当面付,结果把密钥都无脑的配置成了默认的java版本PKCS8,结果就在坑里爬了好久好久。
今天的当面付经验分享就告一段落了,主要的踩坑点都已经标记出来,每个人看问题的角度与处理速度不一样,也许也帮不上什么忙,就当自己记录一下自己的心得好了。关注公众号,且看下回分解。
让天地下没有难接的支付
作者:钟代麒
出处:http://www.jishudao.com/
版权归作者所有,转载请注明出处